gwhere-0.2.3/0000755000175000017500000000000010532300157011433 5ustar bartbartgwhere-0.2.3/ABOUT-NLS0000444000175000017500000002660310023202521012656 0ustar bartbartNotes on the Free Translation Project ************************************* Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do *not* need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work at translations should contact the appropriate team. When reporting bugs in the `intl/' directory or bugs which may be related to internationalization, you should tell about the version of `gettext' which is used. The information can be found in the `intl/VERSION' file, in internationalized packages. One advise in advance ===================== If you want to exploit the full power of internationalization, you should configure it using ./configure --with-included-gettext to force usage of internationalizing routines provided within this package, despite the existence of internationalizing capabilities in the operating system where this package is being installed. So far, only the `gettext' implementation in the GNU C library version 2 provides as many features (such as locale alias or message inheritance) as the implementation here. It is also not possible to offer this additional functionality on top of a `catgets' implementation. Future versions of GNU `gettext' will very likely convey even more functionality. So it might be a good idea to change to GNU `gettext' as soon as possible. So you need not provide this option if you are using GNU libc 2 or you have installed a recent copy of the GNU gettext package with the included `libintl'. INSTALL Matters =============== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system provides usable `catgets' (if using this is selected by the installer) or `gettext' functions. If neither is available, the GNU `gettext' own library will be used. This library is wholly contained within this package, usually in the `intl/' subdirectory, so prior installation of the GNU `gettext' package is *not* required. Installers may use special options at configuration time for changing the default behaviour. The commands: ./configure --with-included-gettext ./configure --with-catgets ./configure --disable-nls will respectively bypass any pre-existing `catgets' or `gettext' to use the internationalizing routines provided within this package, enable the use of the `catgets' functions (if found on the locale system), or else, *totally* disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl.a' file and will decide to use this. This might be not what is desirable. You should use the more recent version of the GNU `gettext' library. I.e. if the file `intl/VERSION' shows that the library which comes with this package is more recent, you should use ./configure --with-included-gettext to prevent auto-detection. By default the configuration process will not test for the `catgets' function and therefore they will not be used. The reasons are already given above: the emulation on top of `catgets' cannot provide all the extensions provided by the GNU `gettext' library. If you nevertheless want to use the `catgets' functions use ./configure --with-catgets to enable the test for `catgets' (this causes no harm if `catgets' is not available on your system). If you really select this option we would like to hear about the reasons because we cannot think of any good one ourself. Internationalized packages have usually many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. Using This Package ================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate ISO 639 `LL' two-letter code prior to using the programs in the package. For example, let's suppose that you speak German. At the shell prompt, merely execute `setenv LANG de' (in `csh'), `export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. An operating system might already offer message localization for many of its programs, while other programs have been installed locally with the full capabilities of GNU `gettext'. Just using `gettext' extended syntax for `LANG' would break proper localization of already available operating system programs. In this case, users should set both `LANGUAGE' and `LANG' variables in their environment, as programs using GNU `gettext' give preference to `LANGUAGE'. For example, some Swedish users would rather read translations in German than English for when Swedish is not available. This is easily accomplished by setting `LANGUAGE' to `sv:de' while leaving `LANG' to `sv'. Translating Teams ================= For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list, courtesy of Linux International. You may reach your translation team at the address `LL@li.org', replacing LL by the two-letter ISO 639 code for your language. Language codes are *not* the same as the country codes given in ISO 3166. The following translation teams exist, as of December 1997: Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en', Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian `hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja', Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish `pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es', Swedish `sv', and Turkish `tr'. For example, you may reach the Chinese translation team by writing to `zh@li.org'. If you'd like to volunteer to *work* at translating messages, you should become a member of the translating team for your own language. The subscribing address is *not* the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate *actively* in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `translation@iro.umontreal.ca' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skill are praised more than programming skill, here. Available Packages ================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of December 1997. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination. Ready PO files cs da de en es fi fr it ja ko nl no pl pt ru sl sv .----------------------------------------------------. bash | [] [] [] | 3 bison | [] [] [] | 3 clisp | [] [] [] [] | 4 cpio | [] [] [] [] [] [] | 6 diffutils | [] [] [] [] [] | 5 enscript | [] [] [] [] [] [] | 6 fileutils | [] [] [] [] [] [] [] [] [] [] | 10 findutils | [] [] [] [] [] [] [] [] [] | 9 flex | [] [] [] [] | 4 gcal | [] [] [] [] [] | 5 gettext | [] [] [] [] [] [] [] [] [] [] [] | 12 grep | [] [] [] [] [] [] [] [] [] [] | 10 hello | [] [] [] [] [] [] [] [] [] [] [] | 11 id-utils | [] [] [] | 3 indent | [] [] [] [] [] | 5 libc | [] [] [] [] [] [] [] | 7 m4 | [] [] [] [] [] [] | 6 make | [] [] [] [] [] [] | 6 music | [] [] | 2 ptx | [] [] [] [] [] [] [] [] | 8 recode | [] [] [] [] [] [] [] [] [] | 9 sh-utils | [] [] [] [] [] [] [] [] | 8 sharutils | [] [] [] [] [] [] | 6 tar | [] [] [] [] [] [] [] [] [] [] [] | 11 texinfo | [] [] [] | 3 textutils | [] [] [] [] [] [] [] [] [] | 9 wdiff | [] [] [] [] [] [] [] [] | 8 `----------------------------------------------------' 17 languages cs da de en es fi fr it ja ko nl no pl pt ru sl sv 27 packages 6 4 25 1 18 1 26 2 1 12 20 9 19 7 4 7 17 179 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If December 1997 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. gwhere-0.2.3/acconfig.h0000444000175000017500000000110310023202521013335 0ustar bartbart#undef PROJECT_NAME #undef ENABLE_NLS #undef HAVE_CATGETS #undef HAVE_GETTEXT #undef HAVE_LC_MESSAGES #undef HAVE_STPCPY #undef HAVE_LIBSM #undef PACKAGE_LOCALE_DIR #undef PACKAGE_DATA_DIR #undef PACKAGE_PLUGINS_DIR #undef PACKAGE_PLUGINS_CATALOG_DIR #undef PACKAGE_PLUGINS_DESCRIPTION_DIR #undef PACKAGE_SOURCE_DIR #undef GW_PROG_PATH_MOUNT #undef GW_PROG_PATH_UMOUNT #undef GW_DEBUG_MODE #undef GW_DEBUG_TIME #undef GW_DEBUG_TOOLS_COMPONENT #undef GW_DEBUG_DATA_COMPONENT #undef GW_DEBUG_GUI_COMPONENT #undef GW_DEBUG_GUI_CALLBACK_COMPONENT #undef HAVE_GTK12 #undef HAVE_GTK20 gwhere-0.2.3/aclocal.m40000644000175000017500000120773410506327522013317 0ustar bartbartdnl aclocal.m4 generated automatically by aclocal 1.4-p4 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. # lib-prefix.m4 serial 4 (gettext-0.14.2) dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) # lib-link.m4 serial 6 (gettext-0.14.3) dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ(2.50) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes undefine([Name]) undefine([NAME]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. If found, it dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $LIB[]NAME" AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) undefine([Name]) undefine([NAME]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, dnl hardcode_direct, hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE(rpath, [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib$1-prefix], [ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib$1-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) # lib-ld.m4 serial 3 (gettext-0.13) dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) # Do all the work for Automake. This macro actually does too much -- # some checks are only needed if your package does certain things. # But this isn't really a big deal. # serial 1 dnl Usage: dnl AM_INIT_AUTOMAKE(package,version, [no-define]) AC_DEFUN(AM_INIT_AUTOMAKE, [AC_REQUIRE([AC_PROG_INSTALL]) PACKAGE=[$1] AC_SUBST(PACKAGE) VERSION=[$2] AC_SUBST(VERSION) dnl test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi ifelse([$3],, AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) AC_REQUIRE([AM_SANITY_CHECK]) AC_REQUIRE([AC_ARG_PROGRAM]) dnl FIXME This is truly gross. missing_dir=`cd $ac_aux_dir && pwd` AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) AC_REQUIRE([AC_PROG_MAKE_SET])]) # # Check to make sure that the build environment is sane. # AC_DEFUN(AM_SANITY_CHECK, [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "[$]*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "[$]*" != "X $srcdir/configure conftestfile" \ && test "[$]*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "[$]2" = conftestfile ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi rm -f conftest* AC_MSG_RESULT(yes)]) dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) dnl The program must properly implement --version. AC_DEFUN(AM_MISSING_PROG, [AC_MSG_CHECKING(for working $2) # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if ($2 --version) < /dev/null > /dev/null 2>&1; then $1=$2 AC_MSG_RESULT(found) else $1="$3/missing $2" AC_MSG_RESULT(missing) fi AC_SUBST($1)]) # Like AC_CONFIG_HEADER, but automatically create stamp file. AC_DEFUN(AM_CONFIG_HEADER, [AC_PREREQ([2.12]) AC_CONFIG_HEADER([$1]) dnl When config.status generates a header, we must update the stamp-h file. dnl This file resides in the same directory as the config header dnl that is generated. We must strip everything past the first ":", dnl and everything past the last "/". AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, <>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, <>; do case " <<$>>CONFIG_HEADERS " in *" <<$>>am_file "*<<)>> echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx ;; esac am_indx=`expr "<<$>>am_indx" + 1` done<<>>dnl>>) changequote([,]))]) # isc-posix.m4 serial 2 (gettext-0.11.2) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # This file is not needed with autoconf-2.53 and newer. Remove it in 2005. # This test replaces the one in autoconf. # Currently this macro should have the same name as the autoconf macro # because gettext's gettext.m4 (distributed in the automake package) # still uses it. Otherwise, the use in gettext.m4 makes autoheader # give these diagnostics: # configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX # configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX undefine([AC_ISC_POSIX]) AC_DEFUN([AC_ISC_POSIX], [ dnl This test replaces the obsolescent AC_ISC_POSIX kludge. AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) ] ) # serial 1 # @defmac AC_PROG_CC_STDC # @maindex PROG_CC_STDC # @ovindex CC # If the C compiler in not in ANSI C mode by default, try to add an option # to output variable @code{CC} to make it so. This macro tries various # options that select ANSI C on some system or another. It considers the # compiler to be in ANSI C mode if it handles function prototypes correctly. # # If you use this macro, you should check after calling it whether the C # compiler has been set to accept ANSI C; if not, the shell variable # @code{am_cv_prog_cc_stdc} is set to @samp{no}. If you wrote your source # code in ANSI C, you can make an un-ANSIfied copy of it by using the # program @code{ansi2knr}, which comes with Ghostscript. # @end defmac AC_DEFUN(AM_PROG_CC_STDC, [AC_REQUIRE([AC_PROG_CC]) AC_BEFORE([$0], [AC_C_INLINE]) AC_BEFORE([$0], [AC_C_CONST]) dnl Force this before AC_PROG_CPP. Some cpp's, eg on HPUX, require dnl a magic option to avoid problems with ANSI preprocessor commands dnl like #elif. dnl FIXME: can't do this because then AC_AIX won't work due to a dnl circular dependency. dnl AC_BEFORE([$0], [AC_PROG_CPP]) AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C) AC_CACHE_VAL(am_cv_prog_cc_stdc, [am_cv_prog_cc_stdc=no ac_save_CC="$CC" # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" AC_TRY_COMPILE( [#include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; ], [ return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ], [am_cv_prog_cc_stdc="$ac_arg"; break]) done CC="$ac_save_CC" ]) if test -z "$am_cv_prog_cc_stdc"; then AC_MSG_RESULT([none needed]) else AC_MSG_RESULT($am_cv_prog_cc_stdc) fi case "x$am_cv_prog_cc_stdc" in x|xno) ;; *) CC="$CC $am_cv_prog_cc_stdc" ;; esac ]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # serial 47 AC_PROG_LIBTOOL # Debian $Rev: 214 $ # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) # ----------------------------------------------------------- # If this macro is not defined by Autoconf, define it here. m4_ifdef([AC_PROVIDE_IFELSE], [], [m4_define([AC_PROVIDE_IFELSE], [m4_ifdef([AC_PROVIDE_$1], [$2], [$3])])]) # AC_PROG_LIBTOOL # --------------- AC_DEFUN([AC_PROG_LIBTOOL], [AC_REQUIRE([_AC_PROG_LIBTOOL])dnl dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. AC_PROVIDE_IFELSE([AC_PROG_CXX], [AC_LIBTOOL_CXX], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX ])]) dnl And a similar setup for Fortran 77 support AC_PROVIDE_IFELSE([AC_PROG_F77], [AC_LIBTOOL_F77], [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 ])]) dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [AC_LIBTOOL_GCJ], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [AC_LIBTOOL_GCJ], [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], [AC_LIBTOOL_GCJ], [ifdef([AC_PROG_GCJ], [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) ifdef([A][M_PROG_GCJ], [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) ifdef([LT_AC_PROG_GCJ], [define([LT_AC_PROG_GCJ], defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) ])])# AC_PROG_LIBTOOL # _AC_PROG_LIBTOOL # ---------------- AC_DEFUN([_AC_PROG_LIBTOOL], [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl # Prevent multiple expansion define([AC_PROG_LIBTOOL], []) ])# _AC_PROG_LIBTOOL # AC_LIBTOOL_SETUP # ---------------- AC_DEFUN([AC_LIBTOOL_SETUP], [AC_PREREQ(2.50)dnl AC_REQUIRE([AC_ENABLE_SHARED])dnl AC_REQUIRE([AC_ENABLE_STATIC])dnl AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_LD])dnl AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl AC_REQUIRE([AC_PROG_NM])dnl AC_REQUIRE([AC_PROG_LN_S])dnl AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! AC_REQUIRE([AC_OBJEXT])dnl AC_REQUIRE([AC_EXEEXT])dnl dnl AC_LIBTOOL_SYS_MAX_CMD_LEN AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE AC_LIBTOOL_OBJDIR AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl _LT_AC_PROG_ECHO_BACKSLASH case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' [sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] # Same as above, but do not quote variable references. [double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" AC_CHECK_TOOL(AR, ar, false) AC_CHECK_TOOL(RANLIB, ranlib, :) AC_CHECK_TOOL(STRIP, strip, :) old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then AC_PATH_MAGIC fi ;; esac AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], enable_win32_dll=yes, enable_win32_dll=no) AC_ARG_ENABLE([libtool-lock], [AC_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes AC_ARG_WITH([pic], [AC_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= AC_LIBTOOL_LANG_C_CONFIG _LT_AC_TAGCONFIG ])# AC_LIBTOOL_SETUP # _LT_AC_SYS_COMPILER # ------------------- AC_DEFUN([_LT_AC_SYS_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_AC_SYS_COMPILER # _LT_AC_SYS_LIBPATH_AIX # ---------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], [AC_LINK_IFELSE(AC_LANG_PROGRAM,[ aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_AC_SYS_LIBPATH_AIX # _LT_AC_SHELL_INIT(ARG) # ---------------------- AC_DEFUN([_LT_AC_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) $1 AC_DIVERT_POP ])# _LT_AC_SHELL_INIT # _LT_AC_PROG_ECHO_BACKSLASH # -------------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], [_LT_AC_SHELL_INIT([ # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac echo=${ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(ECHO) ])])# _LT_AC_PROG_ECHO_BACKSLASH # _LT_AC_LOCK # ----------- AC_DEFUN([_LT_AC_LOCK], [AC_ARG_ENABLE([libtool-lock], [AC_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case "`/usr/bin/file conftest.o`" in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], [*-*-cygwin* | *-*-mingw* | *-*-pw32*) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; ]) esac need_locks="$enable_libtool_lock" ])# _LT_AC_LOCK # AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_REQUIRE([LT_AC_PROG_SED]) AC_CACHE_CHECK([$1], [$2], [$2=no ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then $2=yes fi fi $rm conftest* ]) if test x"[$]$2" = xyes; then ifelse([$5], , :, [$5]) else ifelse([$6], , :, [$6]) fi ])# AC_LIBTOOL_COMPILER_OPTION # AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ------------------------------------------------------------ # Check whether the given compiler option works AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD else $2=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then ifelse([$4], , :, [$4]) else ifelse([$5], , :, [$5]) fi ])# AC_LIBTOOL_LINKER_OPTION # AC_LIBTOOL_SYS_MAX_CMD_LEN # -------------------------- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [# find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi ])# AC_LIBTOOL_SYS_MAX_CMD_LEN # _LT_AC_CHECK_DLFCN # -------------------- AC_DEFUN([_LT_AC_CHECK_DLFCN], [AC_CHECK_HEADERS(dlfcn.h)dnl ])# _LT_AC_CHECK_DLFCN # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ------------------------------------------------------------------ AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); }] EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_unknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_AC_TRY_DLOPEN_SELF # AC_LIBTOOL_DLOPEN_SELF # ------------------- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi ])# AC_LIBTOOL_DLOPEN_SELF # AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) # --------------------------------- # Check to see if options -c and -o are simultaneously supported by compiler AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* ]) ])# AC_LIBTOOL_PROG_CC_C_O # AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) # ----------------------------------------- # Check to see if we can do hard links to lock some files if needed AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_REQUIRE([_LT_AC_LOCK])dnl hard_links="nottested" if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi ])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS # AC_LIBTOOL_OBJDIR # ----------------- AC_DEFUN([AC_LIBTOOL_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir ])# AC_LIBTOOL_OBJDIR # AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) # ---------------------------------------------- # Check hardcoding attributes. AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_AC_TAGVAR(hardcode_action, $1)= if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then # We can hardcode non-existant directories. if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_AC_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_AC_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_AC_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi ])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH # AC_LIBTOOL_SYS_LIB_STRIP # ------------------------ AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], [striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi ])# AC_LIBTOOL_SYS_LIB_STRIP # AC_LIBTOOL_SYS_DYNAMIC_LINKER # ----------------------------- # PORTME Fill in your ld.so characteristics AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_MSG_CHECKING([dynamic linker characteristics]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=yes library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no ])# AC_LIBTOOL_SYS_DYNAMIC_LINKER # _LT_AC_TAGCONFIG # ---------------- AC_DEFUN([_LT_AC_TAGCONFIG], [AC_ARG_WITH([tags], [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], [include additional configurations @<:@automatic@:>@])], [tagnames="$withval"]) if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then AC_MSG_WARN([output file `$ofile' does not exist]) fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) else AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) fi fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in "") ;; *) AC_MSG_ERROR([invalid tag name: $tagname]) ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then AC_MSG_ERROR([tag name \"$tagname\" already exists]) fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && test "X$CXX" != "Xno"; then AC_LIBTOOL_LANG_CXX_CONFIG else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then AC_LIBTOOL_LANG_F77_CONFIG else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then AC_LIBTOOL_LANG_GCJ_CONFIG else tagname="" fi ;; RC) AC_LIBTOOL_LANG_RC_CONFIG ;; *) AC_MSG_ERROR([Unsupported tag name: $tagname]) ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" AC_MSG_ERROR([unable to update list of available tagged configurations.]) fi fi ])# _LT_AC_TAGCONFIG # AC_LIBTOOL_DLOPEN # ----------------- # enable checks for dlopen support AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) ])# AC_LIBTOOL_DLOPEN # AC_LIBTOOL_WIN32_DLL # -------------------- # declare package support for building win32 dll's AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) ])# AC_LIBTOOL_WIN32_DLL # AC_ENABLE_SHARED([DEFAULT]) # --------------------------- # implement the --enable-shared flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_SHARED], [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([shared], [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]AC_ENABLE_SHARED_DEFAULT) ])# AC_ENABLE_SHARED # AC_DISABLE_SHARED # ----------------- #- set the default shared flag to --disable-shared AC_DEFUN([AC_DISABLE_SHARED], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_SHARED(no) ])# AC_DISABLE_SHARED # AC_ENABLE_STATIC([DEFAULT]) # --------------------------- # implement the --enable-static flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_STATIC], [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([static], [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]AC_ENABLE_STATIC_DEFAULT) ])# AC_ENABLE_STATIC # AC_DISABLE_STATIC # ----------------- # set the default static flag to --disable-static AC_DEFUN([AC_DISABLE_STATIC], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_STATIC(no) ])# AC_DISABLE_STATIC # AC_ENABLE_FAST_INSTALL([DEFAULT]) # --------------------------------- # implement the --enable-fast-install flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_FAST_INSTALL], [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([fast-install], [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) ])# AC_ENABLE_FAST_INSTALL # AC_DISABLE_FAST_INSTALL # ----------------------- # set the default to --disable-fast-install AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_FAST_INSTALL(no) ])# AC_DISABLE_FAST_INSTALL # AC_LIBTOOL_PICMODE([MODE]) # -------------------------- # implement the --with-pic flag # MODE is either `yes' or `no'. If omitted, it defaults to `both'. AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl pic_mode=ifelse($#,1,$1,default) ])# AC_LIBTOOL_PICMODE # AC_PROG_EGREP # ------------- # This is predefined starting with Autoconf 2.54, so this conditional # definition can be removed once we require Autoconf 2.54 or later. m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], [AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi]) EGREP=$ac_cv_prog_egrep AC_SUBST([EGREP]) ])]) # AC_PATH_TOOL_PREFIX # ------------------- # find a file program which can recognise shared library AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="ifelse([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi ])# AC_PATH_TOOL_PREFIX # AC_PATH_MAGIC # ------------- # find a file program which can recognise a shared library AC_DEFUN([AC_PATH_MAGIC], [AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# AC_PATH_MAGIC # AC_PROG_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([AC_PROG_LD], [AC_ARG_WITH([gnu-ld], [AC_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no]) AC_REQUIRE([LT_AC_PROG_SED])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case "$host_cpu" in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' else lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown ])# AC_DEPLIBS_CHECK_METHOD # AC_PROG_NM # ---------- # find the pathname to a BSD-compatible name lister AC_DEFUN([AC_PROG_NM], [AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/${ac_tool_prefix}nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac esac fi done IFS="$lt_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi]) NM="$lt_cv_path_NM" ])# AC_PROG_NM # AC_CHECK_LIBM # ------------- # check for math library AC_DEFUN([AC_CHECK_LIBM], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac ])# AC_CHECK_LIBM # AC_LIBLTDL_CONVENIENCE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl convenience library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If # DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will # be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with # '${top_srcdir}/' (note the single quotes!). If your package is not # flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl case $enable_ltdl_convenience in no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; "") enable_ltdl_convenience=yes ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; esac LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) # For backwards non-gettext consistent compatibility... INCLTDL="$LTDLINCL" ])# AC_LIBLTDL_CONVENIENCE # AC_LIBLTDL_INSTALLABLE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl installable library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-install to the configure arguments. Note that LIBLTDL # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If # DIRECTORY is not provided and an installed libltdl is not found, it is # assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' # and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single # quotes!). If your package is not flat and you're not using automake, # define top_builddir and top_srcdir appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_CHECK_LIB(ltdl, lt_dlinit, [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], [if test x"$enable_ltdl_install" = xno; then AC_MSG_WARN([libltdl not installed, but installation disabled]) else enable_ltdl_install=yes fi ]) if test x"$enable_ltdl_install" = x"yes"; then ac_configure_args="$ac_configure_args --enable-ltdl-install" LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) else ac_configure_args="$ac_configure_args --enable-ltdl-install=no" LIBLTDL="-lltdl" LTDLINCL= fi # For backwards non-gettext consistent compatibility... INCLTDL="$LTDLINCL" ])# AC_LIBLTDL_INSTALLABLE # AC_LIBTOOL_CXX # -------------- # enable support for C++ libraries AC_DEFUN([AC_LIBTOOL_CXX], [AC_REQUIRE([_LT_AC_LANG_CXX]) ])# AC_LIBTOOL_CXX # _LT_AC_LANG_CXX # --------------- AC_DEFUN([_LT_AC_LANG_CXX], [AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([AC_PROG_CXXCPP]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) ])# _LT_AC_LANG_CXX # AC_LIBTOOL_F77 # -------------- # enable support for Fortran 77 libraries AC_DEFUN([AC_LIBTOOL_F77], [AC_REQUIRE([_LT_AC_LANG_F77]) ])# AC_LIBTOOL_F77 # _LT_AC_LANG_F77 # --------------- AC_DEFUN([_LT_AC_LANG_F77], [AC_REQUIRE([AC_PROG_F77]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) ])# _LT_AC_LANG_F77 # AC_LIBTOOL_GCJ # -------------- # enable support for GCJ libraries AC_DEFUN([AC_LIBTOOL_GCJ], [AC_REQUIRE([_LT_AC_LANG_GCJ]) ])# AC_LIBTOOL_GCJ # _LT_AC_LANG_GCJ # --------------- AC_DEFUN([_LT_AC_LANG_GCJ], [AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) ])# _LT_AC_LANG_GCJ # AC_LIBTOOL_RC # -------------- # enable support for Windows resource files AC_DEFUN([AC_LIBTOOL_RC], [AC_REQUIRE([LT_AC_PROG_RC]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) ])# AC_LIBTOOL_RC # AC_LIBTOOL_LANG_C_CONFIG # ------------------------ # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) AC_DEFUN([_LT_AC_LANG_C_CONFIG], [lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' _LT_AC_SYS_COMPILER # # Check for any special shared library compilation flags. # _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= if test "$GCC" = no; then case $host_os in sco3.2v5*) _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' ;; esac fi if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ ]]" >/dev/null; then : else AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no fi fi # # Check to make sure the static flag actually works. # AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), [], [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_SYS_LIB_STRIP AC_LIBTOOL_DLOPEN_SELF($1) # Report which librarie types wil actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; darwin* | rhapsody*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' ;; 10.*) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' ;; esac fi ;; esac output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) AC_LIBTOOL_CONFIG($1) AC_LANG_POP CC="$lt_save_CC" ])# AC_LIBTOOL_LANG_C_CONFIG # AC_LIBTOOL_LANG_CXX_CONFIG # -------------------------- # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], [AC_LANG_PUSH(C++) AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([AC_PROG_CXXCPP]) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=no _LT_AC_TAGVAR(module_cmds, $1)= _LT_AC_TAGVAR(module_expsym_cmds, $1)= _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown _LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_AC_TAGVAR(no_undefined_flag, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Dependencies to place before and after the object being linked: _LT_AC_TAGVAR(predep_objects, $1)= _LT_AC_TAGVAR(postdep_objects, $1)= _LT_AC_TAGVAR(predeps, $1)= _LT_AC_TAGVAR(postdeps, $1)= _LT_AC_TAGVAR(compiler_lib_search_path, $1)= # Source file extension for C++ test sources. ac_ext=cc # Object file extension for compiled C++ test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC _LT_AC_TAGVAR(compiler, $1)=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration AC_PROG_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_AC_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_AC_TAGVAR(archive_cmds, $1)='' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=yes else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_AC_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) _LT_AC_TAGVAR(always_export_symbols, $1)=yes # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds it's shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; darwin* | rhapsody*) if test "$GXX" = yes; then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' ;; 10.*) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; dgux*) case $cc_basename in ec++) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; ghcx) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before switch to ELF _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | kfreebsd*-gnu) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_AC_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; hpux9*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aCC) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; ia64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; *) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; ia64*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; *) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aCC) case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case "$host_cpu" in ia64*|hppa*64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; irix5* | irix6*) case $cc_basename in CC) # SGI C++ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; linux*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc) # Intel C++ with_gnu_ld=yes _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; cxx) # Compaq C++ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; osf3*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; cxx) _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; cxx) _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ $rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; sco*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; lcc) # Lucid # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' fi ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_AC_TAGVAR(GCC, $1)="$GXX" _LT_AC_TAGVAR(LD, $1)="$LD" AC_LIBTOOL_POSTDEP_PREDEP($1) AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_SYS_LIB_STRIP AC_LIBTOOL_DLOPEN_SELF($1) AC_LIBTOOL_CONFIG($1) AC_LANG_POP CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld ])# AC_LIBTOOL_LANG_CXX_CONFIG # AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) # ------------------------ # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" ifelse([$1], [], [#! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG], [# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) # Is the compiler the GNU C compiler? with_gcc=$_LT_AC_TAGVAR(GCC, $1) # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_[]_LT_AC_TAGVAR(LD, $1) # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) # Commands used to build and install a shared archive. archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) # Flag that forces no undefined symbols. no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" # Set to yes if exported symbols are required. always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) # The commands to list exported symbols. export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) # Symbols that must always be exported. include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) ifelse([$1],[], [# ### END LIBTOOL CONFIG], [# ### END LIBTOOL TAG CONFIG: $tagname]) __EOF__ ifelse([$1],[], [ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ]) else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ])# AC_LIBTOOL_CONFIG # AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------------------- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi ])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # --------------------------------- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_NM]) AC_REQUIRE([AC_OBJEXT]) # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32*) symcode='[[ABCDGISTW]]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris* | sysv5*) symcode='[[BDRT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[[]] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) # --------------------------------------- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], [_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)= AC_MSG_CHECKING([for $compiler option to produce PIC]) ifelse([$1],[CXX],[ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | kfreebsd*-gnu) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" if test "$host_cpu" != ia64; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux*) case $cc_basename in KCC) # KAI C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; icpc) # Intel C++ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; cxx) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC) # Rational C++ 2.4.1 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx) # Digital/Compaq C++ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; sco*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; *) ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc) # Lucid _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; unixware*) ;; vxworks*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; newsos6) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; linux*) case $CC in icc* | ecc*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; ccc*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; sco3.2v5*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' ;; solaris*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sunos4*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; uts4*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" ;; esac ]) # AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) # ------------------------------------ # See if the linker supports building shared libraries. AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) ifelse([$1],[CXX],[ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' else _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw*) _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' ;; linux*) _LT_AC_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ],[ runpath_var= _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_AC_TAGVAR(archive_cmds, $1)= _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown _LT_AC_TAGVAR(hardcode_automatic, $1)=no _LT_AC_TAGVAR(module_cmds, $1)= _LT_AC_TAGVAR(module_expsym_cmds, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_AC_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac _LT_AC_TAGVAR(ld_shlibs, $1)=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; sunos4*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds" fi _LT_AC_TAGVAR(link_all_deplibs, $1)=no else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then runpath_var=LD_RUN_PATH _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=yes _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' else _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_AC_TAGVAR(archive_cmds, $1)='' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=yes else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_AC_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) _LT_AC_TAGVAR(always_export_symbols, $1)=yes # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds it's shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # see comment about different semantics on the GNU ld section _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; bsdi4*) _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; darwin* | rhapsody*) if test "$GXX" = yes ; then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' ;; 10.*) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; dgux*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; freebsd1*) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; ia64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes ;; *) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; openbsd*) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi ;; os2*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; sco3.2v5*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_AC_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_AC_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4.2uw2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv5*) _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' ;; uts4*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac fi ]) AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_AC_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_MSG_CHECKING([whether -lc should be explicitly linked in]) $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) _LT_AC_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no else _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) ;; esac fi ;; esac ])# AC_LIBTOOL_PROG_LD_SHLIBS # _LT_AC_FILE_LTDLL_C # ------------------- # Be careful that the start marker always follows a newline. AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ # /* ltdll.c starts here */ # #define WIN32_LEAN_AND_MEAN # #include # #undef WIN32_LEAN_AND_MEAN # #include # # #ifndef __CYGWIN__ # # ifdef __CYGWIN32__ # # define __CYGWIN__ __CYGWIN32__ # # endif # #endif # # #ifdef __cplusplus # extern "C" { # #endif # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); # #ifdef __cplusplus # } # #endif # # #ifdef __CYGWIN__ # #include # DECLARE_CYGWIN_DLL( DllMain ); # #endif # HINSTANCE __hDllInstance_base; # # BOOL APIENTRY # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) # { # __hDllInstance_base = hInst; # return TRUE; # } # /* ltdll.c ends here */ ])# _LT_AC_FILE_LTDLL_C # _LT_AC_TAGVAR(VARNAME, [TAGNAME]) # --------------------------------- AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) # old names AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) # This is just to silence aclocal about the macro not being used ifelse([AC_DISABLE_FAST_INSTALL]) AC_DEFUN([LT_AC_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj, no) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS) ]) AC_DEFUN([LT_AC_PROG_RC], [AC_CHECK_TOOL(RC, windres, no) ]) # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # # LT_AC_PROG_SED # -------------- # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. AC_DEFUN([LT_AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && break cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done SED=$lt_cv_path_SED ]) AC_MSG_RESULT([$SED]) ]) # Configure paths for GTK+ # Owen Taylor 1997-2001 dnl AM_PATH_GTK_2_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) dnl Test for GTK+, and define GTK_CFLAGS and GTK_LIBS, if gthread is specified in MODULES, dnl pass to pkg-config dnl AC_DEFUN([AM_PATH_GTK_2_0], [dnl dnl Get the cflags and libraries from pkg-config dnl AC_ARG_ENABLE(gtktest, [ --disable-gtktest do not try to compile and run a test GTK+ program], , enable_gtktest=yes) pkg_config_args=gtk+-2.0 for module in . $4 do case "$module" in gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; esac done no_gtk="" AC_PATH_PROG(PKG_CONFIG, pkg-config, no) if test x$PKG_CONFIG != xno ; then if pkg-config --atleast-pkgconfig-version 0.7 ; then : else echo "*** pkg-config too old; version 0.7 or better required." no_gtk=yes PKG_CONFIG=no fi else no_gtk=yes fi min_gtk_version=ifelse([$1], ,2.0.0,$1) AC_MSG_CHECKING(for GTK+ - version >= $min_gtk_version) if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH" enable_gtktest=no fi if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then : else no_gtk=yes fi fi if test x"$no_gtk" = x ; then GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags` GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs` gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" dnl dnl Now check if the installed GTK+ is sufficiently new. (Also sanity dnl checks the results of pkg-config to some extent) dnl rm -f conf.gtktest AC_TRY_RUN([ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then AC_MSG_RESULT(yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://pkgconfig.sourceforge.net" else if test -f conf.gtktest ; then : else echo "*** Could not run GTK+ test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" AC_TRY_LINK([ #include #include ], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK+ or finding the wrong" echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK+ is incorrectly installed."]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) rm -f conf.gtktest ]) # Configure paths for GTK+ # Owen Taylor 97-11-3 dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS dnl AC_DEFUN(AM_PATH_GTK, [dnl dnl Get the cflags and libraries from the gtk-config script dnl AC_ARG_WITH(gtk-prefix,[ --with-gtk-prefix=PFX Prefix where GTK is installed (optional)], gtk_config_prefix="$withval", gtk_config_prefix="") AC_ARG_WITH(gtk-exec-prefix,[ --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)], gtk_config_exec_prefix="$withval", gtk_config_exec_prefix="") AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program], , enable_gtktest=yes) for module in . $4 do case "$module" in gthread) gtk_config_args="$gtk_config_args gthread" ;; esac done if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config fi fi if test x$gtk_config_prefix != x ; then gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_prefix/bin/gtk-config fi fi AC_PATH_PROG(GTK_CONFIG, gtk-config, no) min_gtk_version=ifelse([$1], ,0.99.7,$1) AC_MSG_CHECKING(for GTK - version >= $min_gtk_version) no_gtk="" if test "$GTK_CONFIG" = "no" ; then no_gtk=yes else GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" dnl dnl Now check if the installed GTK is sufficiently new. (Also sanity dnl checks the results of gtk-config to some extent dnl rm -f conf.gtktest AC_TRY_RUN([ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If gtk-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } #if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } #endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); printf("*** correct copy of gtk-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } ],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$GTK_CONFIG" = "no" ; then echo "*** The gtk-config script installed by GTK could not be found" echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GTK_CONFIG environment variable to the" echo "*** full path to gtk-config." else if test -f conf.gtktest ; then : else echo "*** Could not run GTK test program, checking why..." CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" AC_TRY_LINK([ #include #include ], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK or finding the wrong" echo "*** version of GTK. If it is not finding GTK, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" echo "*** came with the system with the command" echo "***" echo "*** rpm --erase --nodeps gtk gtk-devel" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK was incorrectly installed" echo "*** or that you have moved GTK since it was installed. In the latter case, you" echo "*** may want to edit the gtk-config script: $GTK_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) rm -f conf.gtktest ]) # gettext.m4 serial 37 (gettext-0.14.4) dnl Copyright (C) 1995-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], [no], [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AM_NLS ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH(included-gettext, [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. dnl Add a version number to the cache macros. define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1))) define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc]) define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl]) AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, [AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings], gt_cv_func_gnugettext_libc=yes, gt_cv_func_gnugettext_libc=no)]) if test "$gt_cv_func_gnugettext_libc" != "yes"; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], gt_cv_func_gnugettext_libintl, [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")], gt_cv_func_gnugettext_libintl=yes, gt_cv_func_gnugettext_libintl=no) dnl Now see whether libintl exists and depends on libiconv. if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" gt_cv_func_gnugettext_libintl=yes ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if test "$gt_cv_func_gnugettext_libc" = "yes" \ || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext_libintl" = "yes"; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext_libintl" = "yes"; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE(HAVE_GETTEXT, 1, [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE(HAVE_DCGETTEXT, 1, [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATOBJEXT) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST(DATADIRNAME) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST(INSTOBJEXT) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST(GENCAT) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST(INTLOBJS) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST(INTLLIBS) dnl Make all documented variables known to autoconf. AC_SUBST(LIBINTL) AC_SUBST(LTLIBINTL) AC_SUBST(POSUB) ]) dnl Checks for all prerequisites of the intl subdirectory, dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. AC_DEFUN([AM_INTL_SUBDIR], [ AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([gt_GLIBC2])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_ISC_POSIX])dnl AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([AC_C_CONST])dnl AC_REQUIRE([bh_C_SIGNED])dnl AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_OFF_T])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([gl_AC_TYPE_LONG_LONG])dnl AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl AC_REQUIRE([gt_TYPE_WCHAR_T])dnl AC_REQUIRE([gt_TYPE_WINT_T])dnl AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_REQUIRE([gt_TYPE_INTMAX_T]) AC_REQUIRE([gt_PRINTF_POSIX]) AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([gl_GLIBC21])dnl AC_REQUIRE([gt_INTDIV0])dnl AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl AC_REQUIRE([gt_INTTYPES_PRI])dnl AC_REQUIRE([gl_XSIZE])dnl AC_REQUIRE([gt_INTL_MACOSX])dnl AC_CHECK_TYPE([ptrdiff_t], , [AC_DEFINE([ptrdiff_t], [long], [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) ]) AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h]) AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \ mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \ strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \ __fsetlocking]) dnl Use the _snprintf function only if it is declared (because on NetBSD it dnl is defined as a weak alias of snprintf; we prefer to use the latter). gt_CHECK_DECL(_snprintf, [#include ]) gt_CHECK_DECL(_snwprintf, [#include ]) dnl Use the *_unlocked functions only if they are declared. dnl (because some of them were defined without being declared in Solaris dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built dnl on Solaris 2.5.1 to run on Solaris 2.6). dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. gt_CHECK_DECL(feof_unlocked, [#include ]) gt_CHECK_DECL(fgets_unlocked, [#include ]) gt_CHECK_DECL(getc_unlocked, [#include ]) case $gt_cv_func_printf_posix in *yes) HAVE_POSIX_PRINTF=1 ;; *) HAVE_POSIX_PRINTF=0 ;; esac AC_SUBST([HAVE_POSIX_PRINTF]) if test "$ac_cv_func_asprintf" = yes; then HAVE_ASPRINTF=1 else HAVE_ASPRINTF=0 fi AC_SUBST([HAVE_ASPRINTF]) if test "$ac_cv_func_snprintf" = yes; then HAVE_SNPRINTF=1 else HAVE_SNPRINTF=0 fi AC_SUBST([HAVE_SNPRINTF]) if test "$ac_cv_func_wprintf" = yes; then HAVE_WPRINTF=1 else HAVE_WPRINTF=0 fi AC_SUBST([HAVE_WPRINTF]) AM_ICONV AM_LANGINFO_CODESET if test $ac_cv_header_locale_h = yes; then gt_LC_MESSAGES fi if test -n "$INTL_MACOSX_LIBS"; then CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" fi dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least dnl bison-1.26 because earlier versions generate a plural.c that doesn't dnl compile. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. AC_CHECK_PROGS([INTLBISON], [bison]) if test -z "$INTLBISON"; then ac_verc_fail=yes else dnl Found it, now check the version. AC_MSG_CHECKING([version of bison]) changequote(<<,>>)dnl ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) changequote([,])dnl ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then INTLBISON=: fi ]) dnl Checks for special options needed on MacOS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in MacOS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], gt_cv_func_CFPreferencesCopyAppValue, [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" gt_save_LIBS="$LIBS" LIBS="$LIBS -framework CoreFoundation" AC_TRY_LINK([#include ], [CFPreferencesCopyAppValue(NULL, NULL)], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1, [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in MacOS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent, [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" gt_save_LIBS="$LIBS" LIBS="$LIBS -framework CoreFoundation" AC_TRY_LINK([#include ], [CFLocaleCopyCurrent();], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1, [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) dnl gt_CHECK_DECL(FUNC, INCLUDES) dnl Check whether a function is declared. AC_DEFUN([gt_CHECK_DECL], [ AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1, [AC_TRY_COMPILE([$2], [ #ifndef $1 char *p = (char *) $1; #endif ], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)]) if test $ac_cv_have_decl_$1 = yes; then gt_value=1 else gt_value=0 fi AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value], [Define to 1 if you have the declaration of `$1', and to 0 if you don't.]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) # po.m4 serial 7 (gettext-0.14.3) dnl Copyright (C) 1995-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ(2.50) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl AC_REQUIRE([AM_NLS])dnl dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU msgfmt. if test "$GMSGFMT" != ":"; then dnl If it is no GNU msgfmt we define it as : so that the dnl Makefiles still can work. if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` AC_MSG_RESULT( [found $GMSGFMT program is not GNU msgfmt; ignore it]) GMSGFMT=":" fi fi dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is no GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po fi AC_OUTPUT_COMMANDS([ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" <, 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ(2.50) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE(nls, [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) ]) AC_DEFUN([AM_MKINSTALLDIRS], [ dnl Tell automake >= 1.10 to complain if mkinstalldirs is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([mkinstalldirs])]) dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but $(top_srcdir). dnl Try to locate it. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then case "$ac_aux_dir" in /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; esac fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) ]) # progtest.m4 serial 4 (gettext-0.14.2) dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. AC_PREREQ(2.50) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # iconv.m4 serial AM4 (gettext-0.11.3) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) # glibc2.m4 serial 1 dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Test for the GNU C Library, version 2.0 or newer. # From Bruno Haible. AC_DEFUN([gt_GLIBC2], [ AC_CACHE_CHECK(whether we are using the GNU C Library 2 or newer, ac_cv_gnu_library_2, [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) Lucky GNU user #endif #endif ], ac_cv_gnu_library_2=yes, ac_cv_gnu_library_2=no) ] ) AC_SUBST(GLIBC2) GLIBC2="$ac_cv_gnu_library_2" ] ) # signed.m4 serial 1 (gettext-0.10.40) dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([bh_C_SIGNED], [ AC_CACHE_CHECK([for signed], bh_cv_c_signed, [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)]) if test $bh_cv_c_signed = no; then AC_DEFINE(signed, , [Define to empty if the C compiler doesn't support this keyword.]) fi ]) # longlong.m4 serial 5 dnl Copyright (C) 1999-2004 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_LONG_LONG if 'long long' works. AC_DEFUN([gl_AC_TYPE_LONG_LONG], [ AC_CACHE_CHECK([for long long], ac_cv_type_long_long, [AC_TRY_LINK([long long ll = 1LL; int i = 63;], [long long llmax = (long long) -1; return ll << i | ll >> i | llmax / ll | llmax % ll;], ac_cv_type_long_long=yes, ac_cv_type_long_long=no)]) if test $ac_cv_type_long_long = yes; then AC_DEFINE(HAVE_LONG_LONG, 1, [Define if you have the 'long long' type.]) fi ]) # longdouble.m4 serial 1 (gettext-0.12) dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether the compiler supports the 'long double' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_LONGDOUBLE], [ AC_CACHE_CHECK([for long double], gt_cv_c_long_double, [if test "$GCC" = yes; then gt_cv_c_long_double=yes else AC_TRY_COMPILE([ /* The Stardent Vistra knows sizeof(long double), but does not support it. */ long double foo = 0.0; /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ int array [2*(sizeof(long double) >= sizeof(double)) - 1]; ], , gt_cv_c_long_double=yes, gt_cv_c_long_double=no) fi]) if test $gt_cv_c_long_double = yes; then AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.]) fi ]) # wchar_t.m4 serial 1 (gettext-0.12) dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether has the 'wchar_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WCHAR_T], [ AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t, [AC_TRY_COMPILE([#include wchar_t foo = (wchar_t)'\0';], , gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)]) if test $gt_cv_c_wchar_t = yes; then AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.]) fi ]) # wint_t.m4 serial 1 (gettext-0.12) dnl Copyright (C) 2003 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether has the 'wint_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WINT_T], [ AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t, [AC_TRY_COMPILE([#include wint_t foo = (wchar_t)'\0';], , gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)]) if test $gt_cv_c_wint_t = yes; then AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.]) fi ]) # inttypes_h.m4 serial 6 dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h, [AC_TRY_COMPILE( [#include #include ], [uintmax_t i = (uintmax_t) -1;], gl_cv_header_inttypes_h=yes, gl_cv_header_inttypes_h=no)]) if test $gl_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) # stdint_h.m4 serial 5 dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_STDINT_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_STDINT_H], [ AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h, [AC_TRY_COMPILE( [#include #include ], [uintmax_t i = (uintmax_t) -1;], gl_cv_header_stdint_h=yes, gl_cv_header_stdint_h=no)]) if test $gl_cv_header_stdint_h = yes; then AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) # intmax.m4 serial 2 (gettext-0.14.2) dnl Copyright (C) 2002-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether the system has the 'intmax_t' type, but don't attempt to dnl find a replacement if it is lacking. AC_DEFUN([gt_TYPE_INTMAX_T], [ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t, [AC_TRY_COMPILE([ #include #include #if HAVE_STDINT_H_WITH_UINTMAX #include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include #endif ], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)]) if test $gt_cv_c_intmax_t = yes; then AC_DEFINE(HAVE_INTMAX_T, 1, [Define if you have the 'intmax_t' type in or .]) fi ]) # printf-posix.m4 serial 2 (gettext-0.13.1) dnl Copyright (C) 2003 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether the printf() function supports POSIX/XSI format strings with dnl positions. AC_DEFUN([gt_PRINTF_POSIX], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings], gt_cv_func_printf_posix, [ AC_TRY_RUN([ #include #include /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); }], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no, [ AC_EGREP_CPP(notposix, [ #if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ notposix #endif ], gt_cv_func_printf_posix="guessing no", gt_cv_func_printf_posix="guessing yes") ]) ]) case $gt_cv_func_printf_posix in *yes) AC_DEFINE(HAVE_POSIX_PRINTF, 1, [Define if your printf() function supports format strings with positions.]) ;; esac ]) # glibc21.m4 serial 3 dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Test for the GNU C Library, version 2.1 or newer. # From Bruno Haible. AC_DEFUN([gl_GLIBC21], [ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, ac_cv_gnu_library_2_1, [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif ], ac_cv_gnu_library_2_1=yes, ac_cv_gnu_library_2_1=no) ] ) AC_SUBST(GLIBC21) GLIBC21="$ac_cv_gnu_library_2_1" ] ) # intdiv0.m4 serial 1 (gettext-0.11.3) dnl Copyright (C) 2002 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gt_INTDIV0], [ AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], gt_cv_int_divbyzero_sigfpe, [ AC_TRY_RUN([ #include #include static void #ifdef __cplusplus sigfpe_handler (int sig) #else sigfpe_handler (sig) int sig; #endif { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ exit (sig != SIGFPE); } int x = 1; int y = 0; int z; int nan; int main () { signal (SIGFPE, sigfpe_handler); /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) signal (SIGTRAP, sigfpe_handler); #endif /* Linux/SPARC yields signal SIGILL. */ #if defined (__sparc__) && defined (__linux__) signal (SIGILL, sigfpe_handler); #endif z = x / y; nan = y / y; exit (1); } ], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, [ # Guess based on the CPU. case "$host_cpu" in alpha* | i[34567]86 | m68k | s390*) gt_cv_int_divbyzero_sigfpe="guessing yes";; *) gt_cv_int_divbyzero_sigfpe="guessing no";; esac ]) ]) case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, [Define if integer division by zero raises signal SIGFPE.]) ]) # uintmax_t.m4 serial 9 dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_PREREQ(2.13) # Define uintmax_t to 'unsigned long' or 'unsigned long long' # if it is not already defined in or . AC_DEFUN([gl_AC_TYPE_UINTMAX_T], [ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then AC_REQUIRE([gl_AC_TYPE_UNSIGNED_LONG_LONG]) test $ac_cv_type_unsigned_long_long = yes \ && ac_type='unsigned long long' \ || ac_type='unsigned long' AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, [Define to unsigned long or unsigned long long if and don't define.]) else AC_DEFINE(HAVE_UINTMAX_T, 1, [Define if you have the 'uintmax_t' type in or .]) fi ]) # ulonglong.m4 serial 4 dnl Copyright (C) 1999-2004 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works. AC_DEFUN([gl_AC_TYPE_UNSIGNED_LONG_LONG], [ AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long, [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;], [unsigned long long ullmax = (unsigned long long) -1; return ull << i | ull >> i | ullmax / ull | ullmax % ull;], ac_cv_type_unsigned_long_long=yes, ac_cv_type_unsigned_long_long=no)]) if test $ac_cv_type_unsigned_long_long = yes; then AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, [Define if you have the 'unsigned long long' type.]) fi ]) # inttypes.m4 serial 1 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_INTTYPES_H if exists and doesn't clash with # . AC_DEFUN([gt_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, [ AC_TRY_COMPILE( [#include #include ], [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) ]) if test $gt_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, [Define if exists and doesn't clash with .]) fi ]) # inttypes-pri.m4 serial 1 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. # Define PRI_MACROS_BROKEN if exists and defines the PRI* # macros to non-string values. This is the case on AIX 4.3.3. AC_DEFUN([gt_INTTYPES_PRI], [ AC_REQUIRE([gt_HEADER_INTTYPES_H]) if test $gt_cv_header_inttypes_h = yes; then AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], gt_cv_inttypes_pri_broken, [ AC_TRY_COMPILE([#include #ifdef PRId32 char *p = PRId32; #endif ], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) ]) fi if test "$gt_cv_inttypes_pri_broken" = yes; then AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1, [Define if exists and defines unusable PRI* macros.]) fi ]) # xsize.m4 serial 3 dnl Copyright (C) 2003-2004 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XSIZE], [ dnl Prerequisites of lib/xsize.h. AC_REQUIRE([gl_SIZE_MAX]) AC_REQUIRE([AC_C_INLINE]) AC_CHECK_HEADERS(stdint.h) ]) # size_max.m4 serial 2 dnl Copyright (C) 2003 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gl_SIZE_MAX], [ AC_CHECK_HEADERS(stdint.h) dnl First test whether the system already has SIZE_MAX. AC_MSG_CHECKING([for SIZE_MAX]) result= AC_EGREP_CPP([Found it], [ #include #if HAVE_STDINT_H #include #endif #ifdef SIZE_MAX Found it #endif ], result=yes) if test -z "$result"; then dnl Define it ourselves. Here we assume that the type 'size_t' is not wider dnl than the type 'unsigned long'. dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr', dnl which is guaranteed to work from LONG_MIN to LONG_MAX. _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi, [#include ], result=?) _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo, [#include ], result=?) _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint, [#include ], result=?) if test "$fits_in_uint" = 1; then dnl Even though SIZE_MAX fits in an unsigned int, it must be of type dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. AC_TRY_COMPILE([#include extern size_t foo; extern unsigned long foo; ], [], fits_in_uint=0) fi if test -z "$result"; then if test "$fits_in_uint" = 1; then result="$res_hi$res_lo"U else result="$res_hi$res_lo"UL fi else dnl Shouldn't happen, but who knows... result='~(size_t)0' fi fi AC_MSG_RESULT([$result]) if test "$result" != yes; then AC_DEFINE_UNQUOTED([SIZE_MAX], [$result], [Define as the maximum value of type 'size_t', if the system doesn't define it.]) fi ]) # codeset.m4 serial AM1 (gettext-0.10.40) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, [AC_TRY_LINK([#include ], [char* cs = nl_langinfo(CODESET);], am_cv_langinfo_codeset=yes, am_cv_langinfo_codeset=no) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET, 1, [Define if you have and nl_langinfo(CODESET).]) fi ]) # lcmessage.m4 serial 4 (gettext-0.14.2) dnl Copyright (C) 1995-2002, 2004-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995. # Check whether LC_MESSAGES is available in . AC_DEFUN([gt_LC_MESSAGES], [ AC_CACHE_CHECK([for LC_MESSAGES], gt_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], gt_cv_val_LC_MESSAGES=yes, gt_cv_val_LC_MESSAGES=no)]) if test $gt_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi ]) gwhere-0.2.3/AUTHORS0000644000175000017500000000315510473373041012515 0ustar bartbartSébastien LECACHEUR : main author and developer of GWhere, french translation. Hermann-Josef BECKERS : german translation. Grégory BLOQUEL : developer (debugging, new functionalities) and tester. Luis PARRAVICINI : argentinian translation, developer (catalogs compression), Debian package. Brice LEROY : polish translation. Paulo ANDRE' : portuguese translation. Victor G. MARIMON : Gentoo port, spanish translation. Thomas NAVARA : czech translation. Joe LAZARO : developer (file rights patch). Mike HOKENSON : IHM improvement patch. Dimitris GARANATSIOS : greek translation. Urbán Zoltán : hungarian translation. Guillermo GRIATZKY : mirror hosting, tester, site translation, spanish translation. LAJOSHÁZI László Gergely : hungarian translation. Mykhaylo Sorochan : FreeBSD port. Raphaël MARINIER : developer (MPC description plugin). Michele PETRECCA : italian translation. Arpad LUKACS : developer. Venelin GEORGIEV : Slackware package. Herman VIAENE : dutch translation. LESNEVSKY Gennady : russian translation. Nemanja AVRAMOVIC : serbian translation. gwhere-0.2.3/autogen.sh0000544000175000017500000001062310023202521013421 0ustar bartbart#!/bin/sh # Run this to generate all the initial makefiles, etc. srcdir=`dirname $0` PKG_NAME="the package." DIE=0 (autoconf --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`autoconf' installed to." echo "Download the appropriate package for your distribution," echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" DIE=1 } (grep "^AM_PROG_LIBTOOL" $srcdir/configure.in >/dev/null) && { (libtool --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`libtool' installed." echo "Get ftp://ftp.gnu.org/pub/gnu/libtool-1.2d.tar.gz" echo "(or a newer version if it is available)" DIE=1 } } grep "^AM_GNU_GETTEXT" $srcdir/configure.in >/dev/null && { grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \ (gettext --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`gettext' installed." echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz" echo "(or a newer version if it is available)" DIE=1 } } grep "^AM_GNOME_GETTEXT" $srcdir/configure.in >/dev/null && { grep "sed.*POTFILES" $srcdir/configure.in >/dev/null || \ (gettext --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`gettext' installed." echo "Get ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz" echo "(or a newer version if it is available)" DIE=1 } } (automake --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: You must have \`automake' installed." echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" echo "(or a newer version if it is available)" DIE=1 NO_AUTOMAKE=yes } # if no automake, don't bother testing for aclocal test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { echo echo "**Error**: Missing \`aclocal'. The version of \`automake'" echo "installed doesn't appear recent enough." echo "Get ftp://ftp.gnu.org/pub/gnu/automake-1.3.tar.gz" echo "(or a newer version if it is available)" DIE=1 } if test "$DIE" -eq 1; then exit 1 fi if test -z "$*"; then echo "**Warning**: I am going to run \`configure' with no arguments." echo "If you wish to pass any to it, please specify them on the" echo \`$0\'" command line." echo fi case $CC in xlc ) am_opt=--include-deps;; esac for coin in `find $srcdir -name configure.in -print` do dr=`dirname $coin` if test -f $dr/NO-AUTO-GEN; then echo skipping $dr -- flagged as no auto-gen else echo processing $dr macrodirs=`sed -n -e 's,AM_ACLOCAL_INCLUDE(\(.*\)),\1,gp' < $coin` ( cd $dr aclocalinclude="$ACLOCAL_FLAGS" for k in $macrodirs; do if test -d $k; then aclocalinclude="$aclocalinclude -I $k" ##else ## echo "**Warning**: No such directory \`$k'. Ignored." fi done if grep "^AM_GNU_GETTEXT" configure.in >/dev/null; then if grep "sed.*POTFILES" configure.in >/dev/null; then : do nothing -- we still have an old unmodified configure.in else echo "Creating $dr/aclocal.m4 ..." test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 echo "Running gettextize... Ignore non-fatal messages." echo "no" | gettextize --force --copy echo "Making $dr/aclocal.m4 writable ..." test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 fi fi if grep "^AM_GNOME_GETTEXT" configure.in >/dev/null; then echo "Creating $dr/aclocal.m4 ..." test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 echo "Running gettextize... Ignore non-fatal messages." echo "no" | gettextize --force --copy echo "Making $dr/aclocal.m4 writable ..." test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 fi if grep "^AM_PROG_LIBTOOL" configure.in >/dev/null; then echo "Running libtoolize..." libtoolize --force --copy fi echo "Running aclocal $aclocalinclude ..." aclocal $aclocalinclude if grep "^AM_CONFIG_HEADER" configure.in >/dev/null; then echo "Running autoheader..." autoheader fi echo "Running automake --gnu $am_opt ..." automake --add-missing --gnu $am_opt echo "Running autoconf ..." autoconf ) fi done #conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c if test x$NOCONFIGURE = x; then echo Running $srcdir/configure $conf_flags "$@" ... $srcdir/configure $conf_flags "$@" \ && echo Now type \`make\' to compile $PKG_NAME else echo Skipping configure process. fi gwhere-0.2.3/BUGS0000644000175000017500000002201610506562500012122 0ustar bartbart[ ] - Known bug [X] - Fixed bug GWhere 0.2.3 [X] - Freezes on pipe files when add disk with "auto description" option is activated. [X] - Crashes with "seg fault" when close dialog box after search with empty result. [ ] - Crashes with "seg fault" when import CSV catalog under Slackware. GWhere 0.2.2 [] - Debug mode crash. GWhere 0.2.1 [X] - Missing intl.dll under win32. [ ] - GWhere doesn't find import/export plugins when it is started from win32 installer. GWhere 0.2.0 [X] - GWhere shorcut and icon are not valid for the windows manager. [ ] - When "Name" column is hidden, displaying trouble may occures. [ ] - CD labels burnt under win32 system are displayed as "METAL_20" instead of "Metal 20" under Linux. GWhere 0.1.6 [X] - Plugin description are not loaded under win32. [X] - Selected files are not well displayed (with bleu background) with GTK+ 2.x under Linux. [X] - Cannot delete description with the feature "Edit description". GWhere 0.1.5 [X] - Bag status bar when do "new catalog->add disk->cancel->add disk". [X] - Scans internal mount points when scan a mount point (for exemple all /mnt/* when scan /). [X] - The recents opened catalogs list is not always refreshed. [X] - Locked folders are not displayed with the good icon. [X] - Crashes when launch GWhere with catalog file parameter which is the current directory. [X] - Crashes if the disk name and disk label are empty and the "use disk label as disk name" option is checked. [X] - When rename a catalog and save it, the displayed name is the catalog file name. GWhere 0.1.4 [X] - Normal users may not have translated GWhere when it was installed by administrator under Win32. [X] - Selected items are not well displayed (with bleu background) with GTK+ 2.x under Linux. GWhere 0.1.3 [X] - Bug with the reading of /etc/fstab and /etc/mtab files. [X] - Segmentation fault when try to automount some devices. [X] - The GWhere configuration folder is not accessible. [X] - Empty lines in descript.ion files cause a segmentation fault. [X] - Files and folders bigger than 2,1 Go are not supported. GWhere 0.1.2 [X] - Category in properties box is not selected. [X] - Autoload catalog file option are not correctly loaded. [ ] - Can't scan folders or files with specials characters if the OS hasn't the good locale. [ ] - In case of multi-session disk, the size is the one of the last session disk under win32. [X] - Don't save a unmodified catalog when choose "Save as" functionality. [X] - Temporaries files aren't removed under win32. [X] - If scan is canceled because there is no opened catalog or disk name all fields are cleaned. [X] - There is no catalog statistics with catalogs built under win32. [ ] - Scan the first label of a multi-session disk instead of the last under Linux. [X] - Opening a catalog with space caracters in path name from the explorer under win32 fails. [X] - Opening a catalog from the recents list when an unsaved catalog is opened causes a "seg fault". [X] - Default properties aren't used at the fisrt start og GWhere in the "disk managment" tabbed pane. [X] - GWhere loading is too long under Win 95/98/ME. [X] - UTF-8 string aren't always displayed well. [X] - Don't load all FS informations. [X] - ISO 9660 FS aren't always detected. GWhere 0.1.1 [X] - More than one item matching at root disk in search causes a "seg fault". [X] - Double encoding to UTF-8 when asks catalog saving. [X] - GWhere's home folder are not always created. [X] - Some disk has "Not yet implemented" for file system type. [X] - Plugins are unavailable with RPM version. [X] - Unable to display popup menu for fisrt listed file (at disk root). GWhere 0.1.0 [X] - Doesn't load plugins when open a catalog from an explorer under win32. [X] - Localisation fails when open a catalog from an explorer under win32. [X] - Reading of compressed files fails under win32 (must use a temporary file). [X] - StatusBar message is bad when create a new catalog in the Managment pane. [ ] - Don't check if the catalog file already exists when save a catalog (the file is erazed). [ ] - Since using LIBTOOL generated src/Makefile.in is bad. Must remove manually "../libtool --mode=link". [X] - Bug when progress bar box max value is bigger than 4 294 967 296 bytes. [X] - There is no home dir on Win9x. [X] - All dates aren't translated. [X] - Reopen the last opened catalog add two references in the list of recents opened catalogs. [X] - Click on cross node doesn't expand/collapse node. [ ] - When click on button of combo, the first item of list is selected. [ ] - Start the program with full-screen window but not maximized. [X] - Change disk volume name function changes the disk name in the exploring tree. [ ] - Bug with disks bigger than 18 446 744 073 709 551 616 bytes!! [X] - Bug with disk bigger than 4 294 967 296 bytes. [X] - Rename catalog function changes file name instead of catalog name. [X] - Remove first file in a folder cause a segm fault. [X] - Disk file system name and path aren't encoded when save catalog. [X] - The GWhere folder is created with no execution right. [X] - Bugs with configuration file parser. [X] - Circular scanning with circular symbolic links. GWhere 0.0.26 [X] - Number archive of disks are not succesfully loaded. [ ] - Devices list is not updated after modification of fstab or mtab. [ ] - Base 64 encoding crash on Cygwin. [X] - The gw_file_mkdirs() failes if the pathname end with "/". [X] - Unabble to save properties file when .GWhere folder doesn't exist in user home. [X] - The "Add disk" function in popup menu doesn't do nothing. [X] - Bug on the catalog renaming with the menu popup. [X] - the shifts characters doesn't go to the end of string in shifts characters. GWhere 0.0.25 [X] - Memory leak in SearchEngine. [X] - All ".." files are counted in the status bar. [X] - The About Box title is in french and couldn't be translated. GWhere 0.0.24 [X] - Description modification don't run. [X] - Search result isn't clear when regular expression is activated. [X] - Search crash program when no catalog loaded. [X] - Free function don't free all memory. GWhere 0.0.23 [ ] - Used space disk is upper than the sum of all files size. [X] - Don't return to the current folder when add disk failed. [ ] - Unable to put shortcut on OK button in the progress bar box. [ ] - When open a second dialog window, the first close himself. GWhere 0.0.22 [X] - Don't add new category. [X] - Bug with directories beginning by "." or ".." [X] - Bug with unkowned owner or group files. [X] - Bug with detection of disque presence. GWhere 0.0.21 [X] - Display bug on disks capacity/free space. [X] - Loading between folders/files size and inode is inverted. [X] - The application crash when a disk is added and there is no open catalog. GWhere 0.0.20 [X] - Bug when category disk/folder/file is changed. [ ] - Select first item when quit edit category window. [ ] - Bug with combo_box_categories_set_selected_category_name. [X] - Right buton click don't select item. [X] - Problem with saving of categories disk/folder/file. [X] - Search category by name doesn't match. [X] - File is corrupt if user put ":" in names of catalogs/disks/folders/files. [X] - Displaying date is in french. [ ] - Displaying device information is troncated. [X] - Cannot edit/delete the default category. GWhere 0.0.19 [X] - Don't load all mount point. [X] - When delete category must change all indexes. GWhere 0.0.18 [X] - When user's doing "Save As" and after "Close" => CoreDumped [X] - Had to do interface for data (because lot of problems with (null) when "" expected). GWhere 0.0.17 [X] - Type disk statistics for catalog are false. [X] - The info window for scan disk doesn't refresh. [X] - Problem when read label on FAT16. [ ] - Put a dialog box when load catalog, add disk, search. [X] - Status must updated switch case of notebook. [ ] - Auto type wasn't supported. [X] - Try to make image even if disk doesn't mounted. [X] - CD-Rom drive close himself when application laoded or when his device was clicked. [X] - When disk hasn't mounted, don't display information. [X] - When disk has no label, return (null) instead of "No label". [X] - Many problems with GNU supermount. [ ] - Partition type isn't good. CD-Rom isn't always "/dev/cdrom" or "/dev/scd" as file (ex: "/dev/hdd"). GWhere 0.0.16 [X] - Catalog name is (null) in the statusbar when new catalog was created. [X] - Statusbar wasn't update when catalog was closed. [X] - When user's clicking in the file info zone and there's no opened catalog => CoreDumped. [X] - When user's quitting (or closing) without to save a new catalog => CoreDumped [X] - CoreDumped with "RemoveFolder from Disk"!! [X] - The "Move To", when user's in the explorer doesn't match. [ ] - When user's clicking in the empty in file info zone, it's the first item of list that is printed in statusbar?? [X] - Pb with the saving, (maybe the "Save As" with catalog_file_info). [X] - It's may have a pb when description's containing '\n'. [X] - CoreDumped with rename_disk(). [X] - When disk added, the program doesn't control if disk name existes!! [X] - Pb with sizes when item was deleted!! GWhere 0.0.0 [X] - Translation doesn't match (NLS I18N). It's going my guy!! gwhere-0.2.3/BUGS.fr0000644000175000017500000002657510506562305012551 0ustar bartbart[ ] - Bug connu [X] - Bug corrigé GWhere 0.2.3 [X] - Blocage sur les fichiers de tube lorsque l'option "description automatique" est activée. [X] - La fermeture de la boite de dialogue de résultat vide d'une recherche provoque un "seg fault". [ ] - L'importation d'un catalogue CSV provoque un "seg fault" sous Slackware. GWhere 0.2.2 [] - Le mode debug plante. GWhere 0.2.1 [X] - Il manque intl.dll sous win32. [ ] - Quand GWhere est lancé à partir de l'installeur win32, il ne trouve pas les plugins d'import/export. GWhere 0.2.0 [X] - Le raccourci et l'icone de GWhere ne sont pas corrects pour le gestionnaire de fenêtres. [ ] - Lorsque que la colonne "Nom" est cachée, il y a des problèmes d'affichage. [ ] - Les labels des CDs gravés sous Windows sont de la forme "METAL_20" au lieu de "Metal 20". GWhere 0.1.6 [X] - Les plugins de description ne sont pas chargés sous win32. [X] - Les fichiers sélectionnés ne sont pas affichés correctement (avec le fond bleu) avec GTK+ 2.x sous Linux. [X] - Impossible de supprimer une description avec la fonctionnalité "Editer la description". GWhere 0.1.5 [X] - Mauvais barre de status qd on fait "nouveau catalogue->ajouter disque->annuler->ajouter disque". [X] - Scanne tous les points de montage internes qd un point de montage est scanné (par exemple tous les /mnt/* qd / est scanné). [X] - La liste des catalogues récemment ouverts n'est pas toujours raffraichie. [X] - Les répertoires protégés ne sont pas affichés avec le bon icone. [X] - Plantage quand GWhere est lancé avec le paramètre d'un fichier de catalogue qui se trouve dans le répertoire courant. [X] - Plantage quand le nom de disque et le libellé sont vides alors que l'option "utiliser le libellé de disque comme nom de disque" est cochée. [X] - Quand un catalogue est renommé et enregistré, le nom affiché est le nom de fichier du catalogue. GWhere 0.1.4 [X] - Les utilisateurs normaux n'ont pas toujours GWhere traduit quand il a été installé par l'administrateur sous Win32. [X] - Les éléments sélectionnés ne sont pas affichés correctement (avec le fond bleu) avec GTK+ 2.x sous Linux. GWhere 0.1.3 [X] - Bug avec la lecture des fichiers /etc/fstab et /etc/mtab files. [X] - Segmentation fault quand on essaie de mounter automatiquement un périphérique. [X] - Le répertoire de configuration de GWhere n'est pas accessible. [X] - Les lignes vides dans les fichiers descript.ion provoque une segmentation de mémoire. [X] - Les fichiers et réportoires de plus de 2,1 Go ne sont pas supportés. GWhere 0.1.2 [X] - La catégorie n'est pas sélectionnée dans la boîte de propriétés. [X] - Les options de chargement automatique de fichier de catalogues ne sont pas correctement chargées. [ ] - Ne peut pas scanner des répertoires ou fichiers avec des caractères spéciaux si le SE n'a pas la bonne locale. [ ] - Dans le cas de disques multi-session, la taille est celle de la dernière session sous win32. [X] - N'enregistre pas un catalogue non modifié quand on utilise la fonction "Enregistrer sous". [X] - Les fichiers temporaires ne sont pas effacés sous win32. [X] - Si le scanne est annulé car il n'y a pas de catalogue d'ouvert ou pas de nom de disque tous les champs sont effacés. [X] - Il n'y a pas de statistiques de catalogue avec un catalogue construit sous win32. [ ] - Scanne le premier label du disque multi-session au lieu du dernier sous Linux. [X] - L'ouverture d'un catalogue avec des espaces dans le chemin à partir de l'explorateur win32 échoue. [X] - Ouvrir un catalogue dans la liste des récents quand un catalogue non enregistré est ouvert cause un "seg fault". [X] - Les propriétés par défaut ne sont pas utilisées lors du premier chargement de GWhere dans l'onglet "Gestion des disques". [X] - Le chargement de GWhere est trop long sous Win 95/98/ME. [X] - Les chaines UTF-8 ne sont pas toujours bien affichées. [X] - Toutes les informations sur les FS ne sont pas chargées. [X] - Les FS ISO 9660 ne sont pas toujours détectés. GWhere 0.1.1 [X] - Plus d'un élément de résultat à la racine d'un disque dans la recherche cause un "seg fault". [X] - Double encodage en UTF-8 lors de la demande d'enregistrement d'un catalogue. [X] - Le répertoire d'acceuil de GWhere n'est pas toujours créé. [X] - Certains disques ont "Not yet implemented" comme type de système de fichiers. [X] - Les plugins ne sont pas accessible avec la version RPM. [X] - Impossible d'afficher le menu popup du premier ficheir listé (à la racine du disque). GWhere 0.1.0 [X] - Ne charge pas les plugins lorsque l'on ouvre un catalogue à partir d'un explorateur sous win32. [X] - La localisation (traduction) ne fonctionne pas quand on ouvre un catalogue à partir d'un explorateur sous win32. [X] - La lecture de fichiers compressés échoue sous win32 (obligation de passer par un fichier temporaire). [X] - La barre des statuts est erronée dans on crée un nouveau catalogue dans l'onglet Gestion. [ ] - Ne vérifie pas si le fichier du catalgoue existe déjà quand on enregistre un nouveau fichier (le fichier est donc écrasé). [ ] - Depuis l'utilisation de LIBTOOL le fichier src/Makefile.in généré est incorrect. On doit supprimer manuellement "../libtool --mode=link". [X] - Bug quand la valeur maximale d'une barre de progression est supérieure à 4 294 967 296 bytes. [X] - Il n'y a pas de répertoire utilisateur sur les systèmes win9x. [X] - Toutes les dates ne sont pas traduites. [X] - Réouvrir le dernier catalogue ouvert provoque la double référence du catalogue dans la liste des fichiers récemments ouverts. [X] - Un clique sur les croix de l'arbre d'exploration n'ouvre/ferme pas le noeud. [ ] - Quand on clique sur le bouton d'une liste déroulante, le premier élément est séléectionné. [ ] - L'application démarre en plein écran, mais la fenêtre n'est pas maximisée. [X] - Le renommage du nom de volume d'un disque change the nom du disque dans l'arbre d'exploration. [ ] - Bug avec les disques plus grand que 18 446 744 073 709 551 616 octets!! [X] - Bug avec les disques plus grand que 4 294 967 296 octets. [X] - Le renommage d'un catalogue change le nom du fichier au lieu du nom du catalogue. [X] - L'effacement du premier fichier dans un répertoire cause une segmentation de mémoire. [X] - Le nom du système de fichiers et le chemin d'accès du fichier n'est pas encodé quand le catalogue est enregistré.. [X] - Le répertoire de configurationde GWhere est créé sans les droits d'exécution. [X] - Bugs dans le parseur du fichier de configuration. [X] - Scannage circulaire avec les liens symboliques circulaires. GWhere 0.0.26 [X] - Le numéro d'archive des disques n'est pas chargé correctement. [ ] - La liste des périphériques n'est pas raffraichie après mise à jour de fstab ou mtab. [ ] - L'encodage en base 64 plante sous Cygwin. [X] - La fonction gw_file_mkdirs() ne fonctionne pas si le nom du chemin se termine par un "/". [X] - Impossible de sauvegarder le fichier de propriétés quand le répertoire .GWhere n'existe pas dans le home de l'utilisateur. [X] - La fonction "ajout d'un disque" dans le menu contextuel ne fait rien. [X] - Bug pour le renommage d'un catalogue avec le menu contextuel. [X] - Le décalage des caractères ne va pas jusqu'à la fin de la chaine dans gw_str_delete_char. GWhere 0.0.25 [X] - Fuites de mémoires dans le moteur de recherche. [X] - Tous les fichiers ".." sont comptés dans la barre des status. [X] - Le titre de la boîte A propos est en français et ne peut pas être traduit. GWhere 0.0.24 [X] - La modification des descriptions ne fonctionne pas. [X] - Le résultat de la recherche n'est pas vidé quand option expression regulière est activée. [X] - La recherche plante quand aucun catalogue n'est pas chargé. [X] - Les fonctions de désallocation ne désallouent pas toujours toute la mémoire. GWhere 0.0.23 [ ] - L'espace utilisé par un disque est supérieur à la somme de la taille de ses fichiers. [X] - Ne retourne pas dans le répertoire courant qd l'ajout d'un disque échoue. [ ] - Impossible de mettre le raccourci clavier sur le bouton OK de la barre de progression. [ ] - Qd on ouvre une seconde fenêtre de dialogue, la première se ferme. GWhere 0.0.22 [X] - N'ajoute pas une nouvelle catégorie. [X] - Bug avec les répertoires commencant par "." ou ".." [X] - Bug avec les propriétaires ou groupes inconnus de fichiers. [X] - Détection de la présence d'un disque GWhere 0.0.21 [X] - Bug d'affichage de la capicité/espace libre des disques. [X] - Chargement inversé entre la taille et l'inoeud des répertoires/fichiers. [X] - L'application boucle quand on ajout un disque et qu'il n'y a pas de catalogue d'ouvert. GWhere 0.0.20 [X] - Bug qd on change de catégorie un disque/répertoire/fichier. [ ] - Quand on quitte les propriétés la sélection retourne au premier élément de la liste. [ ] - combo_box_categories_set_selected_category_name est buggée. [X] - Le clique droit ne sélectionne pas. [X] - Problème sur l'enregistrement des catégories des disques/répertoires/fichiers. [X] - La recherche d'une catégorie par nom ne fonctionne pas. [X] - Le fichier est corrumpu si l'utilisateur met des ":" dans les noms des catalogues/disque/répertoires/fichiers. [X] - L'affichage de la date dans l'explorateur est en français. [ ] - L'affichage des informations sur le périphérique sélectionné est tronqué. [X] - Possibilité d'éditer/supprimer la catégorie par défaut. GWhere 0.0.19 [X] - Ne charge pas tous les points de montage. [X] - Qd on supprime une catégorie il faut modifier tous les indexes. GWhere 0.0.18 [X] - Qd on fait "Save As" puis "Close" => CoreDumped [X] - Il faut mettre des interfaces pour les données (car bcp de problème avec (null) au lieu de ""). GWhere 0.0.17 [X] - Les statistiques sur les types de disk dans le catalogue sont erronées. [X] - La fenêtre d'info pour scanner le disk ne se rafraichie pas. [X] - Problème lors de la lecture du label sur une FAT16. [ ] - Mettre une boîte de dialogue lors du chargement d'un catalogue, l'ajout d'un disk, ou la recherche. [X] - La barre de status doit être mise à jour selon l'onglet où l'on se trouve. [ ] - Le type auto n'est plus supporté. [X] - Essaie de faire une image même si le disk n'est pas monté. [X] - Le lecteur de CD-Rom se ferme qd on lance l'application ou bien lorsque l'on clique sur ce périphérique. [X] - Qd un disk n'est pas monté, ne pas afficher les informations. [X] - Qd un disk n'a pas de label, retourner (null) au lieu de "No label". [X] - Problèmes avec le supermount GNU. [ ] - Le type de partition est mal défini. Un CD-Rom n'a pas toujours "/dev/cdrom" ou "/dev/scd" comme fichier (ex: "/dev/hdd"). GWhere 0.0.16 [X] - Le nom du catalogue est (null) dans la barre des status qd on en crée un nouveau. [X] - La barre des status n'est pas mise à jour qd on ferme un catalogue. [X] - Qd on clique dans la zone d'info des fichiers alors qu'il n'y a pas de catalogue ouvert => CoreDumped. [X] - Qd on quitte (ou ferme) sans enregistrer un nouveau catalogue => CoreDumped [X] - CoreDumped avec "RemoveFolder from Disk"!! [X] - Le "Move To", qd on est dans l'arbre d'exploration ne fonctionne pas. [ ] - Lorsque l'on clique dans le vide dans la liste des infos des fichiers, il affiche dans la status barre les infos du premier élément?? [X] - Pb lors de l'enregistrement (surement le "Save As" avec catalog_file_info). [X] - Il y a surement un problème lorsqu'une description contient des retours à la ligne. [X] - CoreDumped avec rename_disk(). [X] - Qd on ajoute un disk vérifer que le nom de disk n'existe pas déjà!! [X] - Problème des tailles lorsqu'un élément est supprimé!! GWhere 0.0.0 [X] - La traduction ne fonctionne pas (NLS I18N). Ca avance mon gars!! gwhere-0.2.3/ChangeLog0000644000175000017500000005447110506563216013230 0ustar bartbartGWhere 0.2.3 0.2.3: - Fix some "strict-aliasing" warnings. [Sébastien LECACHEUR] - Fix some "implicite declaration" warnings. [Sébastien LECACHEUR] - Optimize disk scan with "auto description" option. [Sébastien LECACHEUR] - Fix freeze on pipe files during disk scan. [Sébastien LECACHEUR] - Fix "segmentation fault" at closing gwmsgbox with GTK+ 2.x. [Sébastien LECACHEUR] - Fix possible "segmentation fault" at catalog importing. [Sébastien LECACHEUR] - Fix compilation warning of some plugins. [Sébastien LECACHEUR] 0.2.2: - Add submount support. [Sébastien LECACHEUR] - Fix debug mode. [Sébastien LECACHEUR] - Application initialization secured. [Sébastien LECACHEUR] - Fix possible "segmentation fault" at loading. [Sébastien LECACHEUR] - Fix translation. [Sébastien LECACHEUR] - Russian translation. [LESNEVSKY Gennady] - Serbian translation. [Nemanja AVRAMOVIC] 0.2.1: - Fix dll dependency under win32. [Sébastien LECACHEUR] - Search engine optimized. [Sébastien LECACHEUR] 0.2.0: - Rename gwcatalogstats to gwhelper. [Sébastien LECACHEUR] - Add category deleting. [Sébastien LECACHEUR] - Optimize win32 binary with the -O2 gcc option. [Sébastien LECACHEUR] - Fix many warning at the compiling under win32. [Sébastien LECACHEUR] - Fix plugin folder access under win32. [Sébastien LECACHEUR] - Add import/export of catalogs from/to other storage format. [Sébastien LECACHEUR] - Add plugin to store catalogs in CSV file. [Sébastien LECACHEUR] - Add storage catalogs managment with plugins. [Sébastien LECACHEUR] - Fix gwhere.desktop file. [Matthias BRAUN] - Integrate slackware folder in source files. [Venelin GEORGIEV] - Fix memory leak in categories managment. [Sébastien LECACHEUR] - Start the automaticly generated documentation port with Doxygen. [Sébastien LECACHEUR] - Dutch translation. [Herman VIAENE] 0.1.6: - Disks storage are called "media" and disks in catalog are called "disk" to remove any confusion. [Sébastien LECACHEUR] - Fix spelling error and sentences. [Luis PARRAVICINI, Sébastien LECACHEUR] - Remove any reference to /etc/fstab in win32 port. [Sébastien LECACHEUR] - Interrupt any crash during all plugin calls. [Sébastien LECACHEUR] - Fix bug with plugins description build under win32. [Sébastien LECACHEUR] - Fix bug with "Edit description" feature. [Sébastien LECACHEUR] - Fix bug to display selected files with GTK+ 2.x. [Sébastien LECACHEUR] - Fix bug and improvment of the HTML plugins. [Sébastien LECACHEUR] 0.1.5: - Fix bug with gw_dialog_box_create() under GTK+ 2.x. [Sébastien LECACHEUR] - Port win32 version to GTK+ 2.4. [Sébastien LECACHEUR] - Start the MAC OS X port. [Sébastien LECACHEUR] - Fix memory leak with the use of the gtk_editable_get_chars() function. [Sébastien LECACHEUR] - Fix UTF-8 encoding for message box. [Sébastien LECACHEUR] - Search engine optimized. [Sébastien LECACHEUR] - Set the catalog file name or the catalog name in the file selection box entry. [Sébastien LECACHEUR] - Fix bad status bar displaying. [Sébastien LECACHEUR] - Fix the scan by forbiding the scan of internal mount points. [Sébastien LECACHEUR] - Fix recents opened catalogs list refreshing. [Sébastien LECACHEUR] - Fix locked folder displaying. [Sébastien LECACHEUR] - Fix crash bug with gw_file_get_name() function. [Sébastien LECACHEUR] - Fix crash bug with empty disk name and label with "use disk label as name" option is checked. [Sébastien LECACHEUR] - Fix bug with renaming catalog and saving it. [Sébastien LECACHEUR] 0.1.4: - Fix bug with Set-Gid and "sticky" bits file rights detection. [Sébastien LECACHEUR] - Use less memory to store files informations. [Sébastien LECACHEUR] - Fix bug of GWhere translation for normal users when it was installed by administrator under win32. [Sébastien LECACHEUR] - Fix bug to display selected items with GTK+ 2.x under Linux. [Sébastien LECACHEUR] - Add a function in popup menu to rename folders and files. [Sébastien LECACHEUR] - Fix compilation error with Cygwin and/or GCC 3.x. [Luis PARRAVICINI] - Fix compilation error with GTK 2.0. [Sébastien LECACHEUR] - Auto-generation of config.h file for win32. [Sébastien LECACHEUR] 0.1.3: - Use a RC file to customize the GUI aspect. [Sébastien LECACHEUR] - Catalog loading optimization. [Sébastien LECACHEUR] - Save the horizontal pane position of the explorer view. [Sébastien LECACHEUR] - Fix crash in the reading of /ect/fstab and /etc/mtab files. [Sébastien LECACHEUR] - Fix crash in the loading of device properties. [LUKACS Arpad] - Remove the execution right on the configuration file. [Sébastien LECACHEUR] - Fix memory leak in gw_properties_file_save_all function. [Sébastien LECACHEUR] - Use tempory file for saving to prevent catalog lost if a crash occures. [Sébastien LECACHEUR] - Catalog saving optimization. [Sébastien LECACHEUR] - Add MPC plugin. [Raphaël MARINIER] - Fix spelling error. [Luis PARRAVICINI] - Solve some compilation warning. [Sébastien LECACHEUR] - Fix missing rights when make a folder. [Sébastien LECACHEUR] - Add an option to activate or desactivate beeps. [Sébastien LECACHEUR] - Add expand all/expand only disks/collapse all functions in menu action. [Sébastien LECACHEUR] - Add a button to clear all search results. [Sébastien LECACHEUR] - Fix bug in DESCRIPT.ION plugin and improves the generated description. [Sébastien LECACHEUR] - Fix lines sorting in the search. [Sébastien LECACHEUR] - Add configuration of column which must displayed in search. [Sébastien LECACHEUR] - Support files and folders bigger than 2,1 Go. [Sébastien LECACHEUR] - Add an option to use an advanced pattern to generate disk name from disk information. [Sébastien LECACHEUR] - Save the explorer columns width. [Sébastien LECACHEUR] - Add an option to set case sentitive the sort items in explorer. [Sébastien LECACHEUR] - Add an option to sort items in explorer by folders and files. [Sébastien LECACHEUR] - Add an option to activate the column autoresizing. [Sébastien LECACHEUR, LUKACS Arpad] - Add an option to not explore the disk tree structure when it is added. [Sébastien LECACHEUR] - Save all search settings. [Sébastien LECACHEUR] - Add a new search mode by key words. [Sébastien LECACHEUR, LUKACS Arpad] - Fix spelling errors. [Guillermo GRIATZKY] - Italian translation. [Michele PETRECCA] 0.1.2: - Better title tree explorer displaying. [Sébastien LECACHEUR] - Fix win32 installer end status. [Sébastien LECACHEUR] - Fix spelling errors. [Guillermo GRIATZKY] - Resize window about box for better displaying. [Sébastien LECACHEUR] - Fix bug in gw_combo_box_categories_set_selected_category() function. [Sébastien LECACHEUR] - Fix missing UTF-8 encoding under GTK+ 2.0. [Sébastien LECACHEUR] - Fix bug with the loading of catalog file settings. [Sébastien LECACHEUR] - Launch uninstaller during installation if GWhere is already installed under win32. [Sébastien LECACHEUR] - Fix the not saving of unmodified catalog with "Save as" functionality. [Sébastien LECACHEUR] - Add FreeBSD port. [Mykhaylo SOROCHAN] - Fix lines sorting in explorer. [Sébastien LECACHEUR] - Fix compressed files loading under win32. [Sébastien LECACHEUR] - Temporaries files are corectly removed under win32. [Sébastien LECACHEUR] - Fix line size limitation of configuration file. [Sébastien LECACHEUR] - Fix memory leak during catalogs loading. [Sébastien LECACHEUR] - Add WAV MPEG 1 Layer 3 support with MP3 plugin. [Sébastien LECACHEUR] - Fix bug in gintlen() function. [Sébastien LECACHEUR] - Fix bug in the gw_str_replace_str() function. [Sébastien LECACHEUR] - Fix bug with cleanning fields after an adding disk failed. [Sébastien LECACHEUR] - Don't still load default media information at application launching. [Sébastien LECACHEUR] - Explorer view changes are applied at once. [Sébastien LECACHEUR] - Add libtool requirement in gwhere.spec.in. [Sébastien LECACHEUR] - Improvement of severals buttons positions. [Sébastien LECACHEUR] - Fix bug with catalog statistics of catalogs built under win32. [Sébastien LECACHEUR] - Improvement of properties box displaying. [Sébastien LECACHEUR] - Fix mount status under Linux. [Sébastien LECACHEUR] - Fix memories leaks with *mntent() functions. [Sébastien LECACHEUR] - Remove depedencies with ws2_32. [Sébastien LECACHEUR] - Fix disk in drive detection under Win 95/98/ME. [Sébastien LECACHEUR] - Hide message box displayed by win32 system when a disk unavailable. [Sébastien LECACHEUR] - Fix spelling error. [Luis PARRAVICINI] - Fix opening catalog from win32 explorer with space caracters in path name. [Sébastien LECACHEUR] - Fix crash with opening a recent opened file. [Sébastien LECACHEUR] - Add use disk volume name as disk name option. [Sébastien LECACHEUR] - Fix unused default properties at first launch in "Disk Managment". [Sébastien LECACHEUR] - Fix information disk access under Win 95/98/ME. [Sébastien LECACHEUR] - Fix bug on UTF-8 string with GtkText. [Sébastien LECACHEUR] - Hide mount status on Win32 systems. [Sébastien LECACHEUR] - Fix bug on loading FS informations under Linux. [Sébastien LECACHEUR] - Fix ISO 9660 files system detection. [Sébastien LECACHEUR] - Fix uncase sensitive detection of description plugins. [Sébastien LECACHEUR] - Add DESCRIPT.ION plugin. [Sébastien LECACHEUR] - Add FILE_ID.DIZ plugin. [Sébastien LECACHEUR] - Fix plugin type detection. [Sébastien LECACHEUR] - Hungarian translation. [LAJOSHÁZI László Gergely] 0.1.1: - Fix bug in gw_folder_get_disk_name(). [Sébastien LECACHEUR] - Fix bug of double encoding to UTF-8. [Sébastien LECACHEUR] - Delete test on automount option on systems which not support mount. [Sébastien LECACHEUR] - Fix bug to show popup menu for first listed file (at disk root). [Sébastien LECACHEUR] - Fix MS Windows 95 OSR2 detection. [Sébastien LECACHEUR] - Fix GWhere's home folder creation. [Sébastien LECACHEUR] - Add AVI (included DivX) plugin. [Sébastien LECACHEUR] - Add OS information in the about window. [Sébastien LECACHEUR] - Fix unspecified files system type. [Sébastien LECACHEUR] - Fix bug in gwhere.spec.in to integrate plugins links in RPMs. [Sébastien LECACHEUR] - Cleanning Makefile for win32; [Sébastien LECACHEUR] - Fix mkinstalldirs file. [Luis PARRAVICINI] - Fix spelling errors in AUTHORS file. [Luis PARRAVICINI] - Integrate debian folder in source files. [Luis PARRAVICINI] 0.1.0: - To lower case all sources file name. [Sébastien LECACHEUR] - Avoids the loading of useless device information at the starting of the application. [Sébastien LECACHEUR] - Add gw_package_get_plugins_dir() function to fix plugins dir bug under win32. [Sébastien LECACHEUR] - Add gw_package_get_locale_dir() function to fix locale dir bug under win32. [Sébastien LECACHEUR] - Fix spelling error. [Bogdan MODZELEWSKI, Luis PARRAVICINI] - All columns in explorer and search are autoresizable. [Sébastien LECACHEUR] - Selected the default value in capture box. [Sébastien LECACHEUR] - Improvment of categories edit box. [Sébastien LECACHEUR] - Fix bug of the status bar message when create new catalog in the managment pane. [Sébastien LECACHEUR] - All catalog file must have the ".ctg" extension. [Sébastien LECACHEUR] - By default explorer set view for disks exploring. [Sébastien LECACHEUR] - Fix memory leak in catalog_file_info_free(). [Sébastien LECACHEUR] - Add autoload last opened catalog file option. [Sébastien LECACHEUR] - Fix bug when disk size is bigger than 4 294 967 296 bytes in ProgressBarBox. [Sébastien LECACHEUR] - Add the focus for ProgressBarBox button. [Sébastien LECACHEUR] - Fix home dir under Win9x. [Sébastien LECACHEUR] - Fix untranslated date under win32. [Sébastien LECACHEUR] - Fix double references in the list of recents opened catalog files. [Sébastien LECACHEUR] - Add configuration of column which must displayed. [Sébastien LECACHEUR] - Fix memory leak in Settings object. [Sébastien LECACHEUR] - Single left click on cross node in tree expand or collapse node. [Sébastien LECACHEUR] - Remember last window position and size. [Sébastien LECACHEUR] - Can choose to save or not GUI properties in settings. [Sébastien LECACHEUR] - Fix bug on gw_file_mkdirs() with pathname ending with file separator constant. [Sébastien LECACHEUR] - Change the order of available drives to prevent floppy drive auto-selection. [Sébastien LECACHEUR] - Add the focus for MsgBox. [Sébastien LECACHEUR] - Add an activate signal on CaptureBox and Search entry. [Mike Hokenson] - Start with full-screen window. [Sébastien LECACHEUR] - Fix bug on changing disk volume name. [Sébastien LECACHEUR] - Fix severals memory leaks in PropertiesBox. [Sébastien LECACHEUR] - Fix severals memory leaks in StatusBar. [Sébastien LECACHEUR] - Fix status bar messages for disks. [Sébastien LECACHEUR] - Fix bug with disk bigger than 4 294 967 296 bytes on systems which support guint64. [Sébastien LECACHEUR] - Fix severals memory leaks in NoteBookManagment. [Sébastien LECACHEUR] - Fix bug on rename catalog. [Sébastien LECACHEUR] - Fix bug on remove file from catalog. [Sébastien LECACHEUR] - Fix bug on save disk data. [Sébastien LECACHEUR] - Fix bug with missing files in the root disk file list. [Sébastien LECACHEUR] - Add HTML plugin. [Sébastien LECACHEUR] - Show a message box when no item matched in search. [Sébastien LECACHEUR] - Display in the status bar the search result. [Sébastien LECACHEUR] - Add MP3 plugin. [Sébastien LECACHEUR] - Add plugins manager for auto extracting file information. [Sébastien LECACHEUR] - Fix bug in the file2gchar function. [Sébastien LECACHEUR] - Add autoload catalog option. [Sébastien LECACHEUR] - Adding log function. [Sébastien LECACHEUR] - Fix configuration folder execution right. [Sébastien LECACHEUR, Joe LAZARO] - Remember last selected options in the managment pane. [Sébastien LECACHEUR] - Fix bugs on NotebookManagment component. [Sébastien LECACHEUR] - Fix some bugs on VFSStats access functions. [Sébastien LECACHEUR] - Add a man page. [Luis PARRAVICINI] - Add local file support in gwhere.spec. [Sébastien LECACHEUR] - Improve the configure script. [Sébastien LECACHEUR] - Add an icon and a .desktop file for window manager. [Sébastien LECACHEUR] - Rename the binary name to "gwhere". [Sébastien LECACHEUR] - Adding the recents opened files in the menu file. [Sébastien LECACHEUR] - Fix bug on configuration file parser. [Sébastien LECACHEUR] - Fix bug on circular scanning with links to folder : replace stat by lstat. [Sébastien LECACHEUR, Peter HANSACK] - Port to GTK 2.0 (only for compatibility). [Sébastien LECACHEUR] - Replace all atoi to strtol or strtoul. [Sébastien LECACHEUR] - Fix bug on file2gchar function. [Sébastien LECACHEUR] - Eject CD-ROM on Win32. [Sébastien LECACHEUR] - Start the port to Win32. [Sébastien LECACHEUR] - Czech translation. [Thomas NAVARA] - Greek translation. [Dimitris GARANATSIOS] - Spanish translation. [Victor G. MARIMON] 0.0.26: - Improvment of install scripts. [Sébastien LECACHEUR] - Can give the catalog file name to load in command line. [Sébastien LECACHEUR] - Fix bug on disk data saving. [Sébastien LECACHEUR] - Safe copy of properties file when user quit the application. [Sébastien LECACHEUR] - Possibility to choose the compression ratio of the catalogs. [Sébastien LECACHEUR] - Adding the catalog send by mail. [Sébastien LECACHEUR] - Adding a mail sender component. [Grégory BLOQUEL] - Modification of DialogBox interface. [Sébastien LECACHEUR] - Adding application manager and GUI manager. [Sébastien LECACHEUR] - Adding the control panel. [Sébastien LECACHEUR] - Adding the configuration file. [Sébastien LECACHEUR] - Right click selects in the explorer. [Sébastien LECACHEUR] - Fix bug on catalog renaming via menu popup. [Sébastien LECACHEUR] - Replacement of Calcul.h to GWString.h. [Sébastien LECACHEUR] - Fix bug in gw_str_delete_char. [Sébastien LECACHEUR] - Adding a composant to read properties files. [Sébastien LECACHEUR] 0.0.25: - Display waiting message during the catalog loading and closing. [Sébastien LECACHEUR] - Hide the selection file box during the catalog loading. [Sébastien LECACHEUR] - Fix memories leaks in the search engine. [Sébastien LECACHEUR] - Fix memory leak in gw_strcmp_strregex. [Sébastien LECACHEUR] - Fix spelling errors. [Luis PARRAVICINI] - Adding the debug mode of tools library. [Sébastien LECACHEUR] - Progress bar is not displayed when there are not max value. [Sébastien LECACHEUR] - Experimental port on Cygwin. [Sébastien LECACHEUR] - Reading of the FAT12, FAT16 volume name. [Sébastien LECACHEUR] - Detect FAT12, FAT16, FAT32 and ISO 9660 file system type. [Sébastien LECACHEUR] - Detect the presence of mount and umount programs in configure.sh. [Sébastien LECACHEUR] - Adding of encode/decode base 64. [Sébastien LECACHEUR] - Logs adding in GUI. [Sébastien LECACHEUR] - Remove AUTHORS-fr and TODO-fr : it's too hard to maintain all files translations. [Sébastien LECACHEUR] - Rename GWhere-x.y.z.spec to GWhere.spec. [Sébastien LECACHEUR] - Use of the constant __PRETTY_FUNCTION__ for functions names in logs. [Sébastien LECACHEUR] - Replace the constant DEBUG_MODE by the constants GW_DEBUG_*_COMPONENT. [Sébastien LECACHEUR] - Replace the string "GWhere" by the constant PACKAGE. [Sébastien LECACHEUR] - Replace the constant GWHERE_VERSION by VERSION. [Sébastien LECACHEUR] - Fix bug of the function gw_str_blob_to_regex to support the character "?". [Sébastien LECACHEUR] - New functions to read lines : gw_file_readline, gw_zfile_readline. [Sébastien LECACHEUR, Luis PARRAVICINI] - Catalogs compression with the zlib. [Luis PARRAVICINI] 0.0.24: - New quick search engine. [Sébastien LECACHEUR] - Fix result of reloading search when regular expression is activated. [Sébastien LECACHEUR] - Dialog box button aren't auto resized. [Sébastien LECACHEUR] - Checks if a catalog is loaded before launch search. [Sébastien LECACHEUR] - Fix bug on several free() functions. [Sébastien LECACHEUR] - Add of debug mode on compilation (--enable-debug option). [Sébastien LECACHEUR] - Fix spelling errors. [Luis PARRAVICINI] - Cut sources in static libraries. [Sébastien LECACHEUR] 0.0.23: - Fix spelling errors. [Luis PARRAVICINI] - Fix bug on returning to current folder when adding disk failed. [Sébastien LECACHEUR] - Remaking GUI managment. [Sébastien LECACHEUR] - Search can be with regular expression. [Sébastien LECACHEUR] - Can cancel adding disk during adding process. [Sébastien LECACHEUR] - Progress bar for adding disk. [Sébastien LECACHEUR] - Fix several memory leaks on VFSStats. [Sébastien LECACHEUR] - Argentinian translation. [Luis PARRAVICINI] 0.0.22: - Fix bug on adding category. [Sébastien LECACHEUR] - Fix bug on directories beginning by "." or ".." support. [Sébastien LECACHEUR] - Fix bug on unkowned owner and group files. [Sébastien LECACHEUR] - Fix bug on testing mount for non root users. [Sébastien LECACHEUR] - News message boxes to report adding disk status. [Sébastien LECACHEUR] - Fix bug on reading of device label. [Sébastien LECACHEUR] - Fix bug on Makefile for internationalization. [Grégory BLOQUEL] - Fix bug on reading of device label. [Grégory BLOQUEL] - Fix bug on mounting of CD for non root users. [Grégory BLOQUEL] - Fix bug on calculation of device size with Mandrake 8.0. [Grégory BLOQUEL] 0.0.21: - Search can be case or uncase sensitive. - Fix bug on calcul of disks capacity/free space/used space. - Fix bug on loading folders/files size/inode. - Fix bug on informations generation when create catalog. - Fix bug when user add a disk and there is no open catalog. - Fix bug on catalogs/disks/categories name saving. 0.0.20: - Close catalog buton in toolbar. - News functions in menu barre. - Can change category of a disk/folder/file. - Fix bug on datas managment. - Fix bug on saving category of a disk/folder/file. - Can apply recursively a category to all the new disk. - Fix bug on category search. - Fix bug on displaying dates. - Can't edit/delete the default category. - Locked folders don't stop disk adding now and own their icon. - Load/save catalog functions cleanning. - Message box to display errors. 0.0.19: - Load and save the disk/folders/files categories. - Add the displaying informations of selected device option. - Add categories edition window. - Fix loading file nug with categories list. - French translation. 0.0.18: - Improvement of notebook managment. - Correct bug with total capacity disk. - Correct memory leak in VFSStats. - Correct bug with "Save As". - Improvement of categories. - Improvement of catalog/disk/folder/file's properties. - Correct displaying bug when opens a file which aren't a GWhere file format. - Catalog may have a name different to file name. - German translation. [Hermann-Josef BECKERS] 0.0.17: - Add quick search. - Support OS supermount. - Correct control of disk adding. - Correct disk infos displaying. - Correct disk infos. - Add capacity disk and capacity catalog in properties. - Add total used and free space disk. - Add volume name disk. - Update of catalog properties. - Window properties minor bug fixed. - Add new catalog information (file version, generator program, categories). - Managment of catalog versions. - Main window may shrinked. 0.0.16: - Managment of links in the creation of disk. - Icons change with the type of disk (CD-Rom, HD, Floppy and Zip). - Popup menu allow to change disk's volume name. - Edition window of catalog/disk/folder/file's description. - Add catalog description. - Allow to rename catalog or disk. - Correct deleting of item (update size of items that contain it). - Correct adding of disk (control disk name). - Change description integration. - Catalog/disk/folder/file properties. - Popup menu added. - Explorer was better. 0.0.15: - Suppression of item by popup menu. - Update of size calcul (support until iotaoctet!!). - Optimize memory managment during the catalog loading. - Modify disks loading and saving. - Correct the disk explorer. - Correct the disk adding. - Add disk informations. - Correct the automount (the test of is mounted). 0.0.14: - Correct the calcul of disk and catalog size. - Automount is done (support the type "auto" for file system). - CD-Rom eject. 0.0.13: - Correct directory size and add disk size. - Add the statusbar. - Correct scrollbars. - Optimize explores fonctions. - Optimize the use of memory. 0.0.12: - Program rewritting for an organization with module. 0.0.11: - Catalog is loaded in memory (before it use a tempory file). - Some bugs fixed. 0.0.6: - All was be done since 0.0.1 - Graphical interface with GTK+. 0.0.1: - Create and read an image in command ligne. gwhere-0.2.3/ChangeLog.fr0000644000175000017500000007065710506330244013633 0ustar bartbartGWhere 0.2.3 0.2.3: - Correction de différents warning sur des "strict-aliasing" lors de la compilation. [Sébastien LECACHEUR] - Correction de différents warning de type "implicite declaration" lors de la compilation. [Sébastien LECACHEUR] - Optimisation de l'ajout d'un disque avec l'option "description automatique". [Sébastien LECACHEUR] - Correction d'un blocage sur le tube lors de l'ajout d'un disque. [Sébastien LECACHEUR] - Correction d'un "segmentation fault" sur la fermeture des gwmsgbox GTK+ 2.x. [Sébastien LECACHEUR] - Correction d'un potentiel "segmentation fault" lors de l'importation d'un catalogue. [Sébastien LECACHEUR] - Correction de warning de compilation pour certains plugins. [Sébastien LECACHEUR] 0.2.2: - Ajout du support de submount. [Sébastien LECACHEUR] - Correction du mode debug. [Sébastien LECACHEUR] - Sécurisation de l'initialisation de l'application. [Sébastien LECACHEUR] - Correction d'un potentiel "segmentation fault" au chargement. [Sébastien LECACHEUR] - Correction de traduction. [Sébastien LECACHEUR] - Traduction russe. [LESNEVSKY Gennady] - Traduction serbe. [Nemanja AVRAMOVIC] 0.2.1: - Correction de dépendance de dll sous win32. [Sébastien LECACHEUR] - Optimisation du moteur de recherche. [Sébastien LECACHEUR] 0.2.0: - Renommage de gwcatalogstats en gwhelper. [Sébastien LECACHEUR] - Ajout de la suppression des catégories. [Sébastien LECACHEUR] - Optimisation du binaire win32 avec l'option -O2 de gcc. [Sébastien LECACHEUR] - Correction de différent warning à la compilation sous win32. [Sébastien LECACHEUR] - Correction de l'accès aux répertoires de plugins sous win32. [Sébastien LECACHEUR] - Ajout d'importation/exportation de catalogues à partir/vers d'autres format de stockages. [Sébastien LECACHEUR] - Ajout du plugin pour stocker les catalogues au format CSV. [Sébastien LECACHEUR] - Ajout de la gestion du stockage des catalogues via des plugins. [Sébastien LECACHEUR] - Correction du fichier gwhere.desktop. [Matthias BRAUN] - Intégration du répertoire slackware dans les fichiers sources. [Venelin GEORGIEV] - Correction d'une fuite de mémoire dans la gestion des catégories. [Sébastien LECACHEUR] - Démarrage du portage de la documentation générée automatiquement avec Doxygen. [Sébastien LECACHEUR] - Traduction néerlandaise. [Herman VIAENE] 0.1.6: - Les disques de stockage sont appelés "media" and les disque du catalogue sont appelés "disque" pour enlever toute confusion. [Sébastien LECACHEUR] - Correction d'orthographe et de phrases. [Luis PARRAVICINI, Sébastien LECACHEUR] - Enlève toute réfénrece à /etc/fstab dans le portage win32. [Sébastien LECACHEUR] - Intercepte n'importe quel plantage pendant l'appel aux plugins. [Sébastien LECACHEUR] - Corrige la construction des plugins de description sous win32. [Sébastien LECACHEUR] - Corrige un bug avec la fonctionnalité "Editer la description". [Sébastien LECACHEUR] - Corrige un bug d'affichage des fichiers sélectionnés avec GTK+ 2.x sous Linux. [Sébastien LECACHEUR] - Corrige un bug et améliore le plugin HTML. [Sébastien LECACHEUR] 0.1.5: - Corrige un bug avec gw_dialog_box_create() sous GTK+ 2.x. [Sébastien LECACHEUR] - Portage de la version win32 en GTK+ 2.4. [Sébastien LECACHEUR] - Démarrage du port MAC OS X. [Sébastien LECACHEUR] - Correction de fuites de mémoire avec l'utilisation de la fonction gtk_editable_get_chars(). [Sébastien LECACHEUR] - Correction de l'encodage en UTF-8 dans la boite de message. [Sébastien LECACHEUR] - Optimisation de la recherche. [Sébastien LECACHEUR] - Ajout du nom du fichier du catalogue ou le nom du catalogue dans la zone de saisie de la boite de sélection de fichier. [Sébastien LECACHEUR] - Corrige un mauvais affichage de la barre de status. [Sébastien LECACHEUR] - Corrige le scan d'un média en interdisant le scan des points de montage interne. [Sébastien LECACHEUR] - Corrige le raffraichissement de la liste des catalogues récemment ouverts. [Sébastien LECACHEUR] - Corrige l'affichage des répertoire protégés. [Sébastien LECACHEUR] - Corrige un bug de plantage avec la fonction gw_file_get_name(). [Sébastien LECACHEUR] - Corrige un bug de plantage quand le nom et le libellé du disque sont vides et que l'option "utilisé le libellé comme nom de disque" est cochée. [Sébastien LECACHEUR] - Corrige un bug avec le renommage d'un catalogue et enregistrement. [Sébastien LECACHEUR] 0.1.4: - Corrige un bug sur la détection des droits des fichiers avec les bits Set-Gid et "sticky". [Sébastien LECACHEUR] - Utilise moins de mémoire pour stocker les informations sur les fichiers. [Sébastien LECACHEUR] - Corrige la traduction de GWhere pour les utilisateurs normaux quand il a été installé par un administrateur sous win32. [Sébastien LECACHEUR] - Corrige un bug d'affichage des éléments sélectionnés avec GTK+ 2.x sous Linux. [Sébastien LECACHEUR] - Ajout du renommage des répertoires et des fichiers via le menu popup dans l'explorateur de fichiers. [Sébastien LECACHEUR] - Corrige une erreur de compilation sous Cygwin et/ou avec GCC 3.x. [Luis PARRAVICINI] - Corrige une erreur de compilation avec GTK 2.0. [Sébastien LECACHEUR] - Génération automatique du fichier config.h pour les systèmes win32. [Sébastien LECACHEUR] 0.1.3: - Utilisation d'un fichier RC pour personnaliser l'aspect de l'IHM. [Sébastien LECACHEUR] - Optimisation du chargement du catalogue. [Sébastien LECACHEUR] - Enregistre la position du panneau horizontal de la vue de l'explorateur. [Sébastien LECACHEUR] - Correction d'un plantage lors de la lecture des fichiers /etc/fstab et /etc/mtab. [Sébastien LECACHEUR] - Correction d'un plantage lors du chargement des propriétés d'un périphérique. [LUKACS Arpad] - Suppression des droits d'exécution sur le fichier de configuration. [Sébastien LECACHEUR] - Corrige une fuite de mémoire dans la fonction gw_properties_file_save_all. [Sébastien LECACHEUR] - Utilise un fichier temporaire pour l'enregistrement pour éviter la perte d'un catalogue si un plantage se produit. [Sébastien LECACHEUR] - Optimisation de l'enregistrement du catalogue. [Sébastien LECACHEUR] - Ajout du plugin MPC. [Raphaël MARINIER] - Correction de fautes d'orthographe. [Luis PARRAVICINI] - Résoud des warning à la compilation. [Sébastien LECACHEUR] - Corrige des droits manquants quand un répertoire est créé. [Sébastien LECACHEUR] - Ajout d'une option pour activer ou désactiver les beeps. [Sébastien LECACHEUR] - Ajout des fonctions étendre tout/étendre seulement les disques/replier tout dans le menu action. [Sébastien LECACHEUR] - Ajout d'un bouton pour effacer tous les résultats de la recherche. [Sébastien LECACHEUR] - Corrige un bug dans le plugin DESCRIPT.ION et améliore la description générée. [Sébastien LECACHEUR] - Corrige le tri des lignes dans la recherche. [Sébastien LECACHEUR] - Ajout de la configuration des colonnes à afficher dans la recherche. [Sébastien LECACHEUR] - Support des fichiers et répertoire de plus de 2,1 Go. [Sébastien LECACHEUR] - Ajout d'une option pour utiliser un modèle avancé pour générer le nom du disque à partir des informations du disque. [Sébastien LECACHEUR] - Enregistre la taille des colonnes dans l'explorateur. [Sébastien LECACHEUR] - Ajout d'une option pour rendre le tri dans l'explorateur sensible à la casse. [Sébastien LECACHEUR] - Ajout d'une option pour grouper le tri dans l'explorateur par répertoires ou fichiers. [Sébastien LECACHEUR] - Ajout d'une option pour activer le redimensionnement automatique des colonnes. [Sébastien LECACHEUR, LUKACS Arpad] - Ajout d'une option pour ne pas explorer l'arborescence d'un disque quand on l'ajoute. [Sébastien LECACHEUR] - Enregistre les paramètre de recherche. [Sébastien LECACHEUR] - Ajout d'un nouveau mode de recherche par mots clé. [Sébastien LECACHEUR, LUKACS Arpad] - Correction d'orthographe. [Guillermo GRIATZKY] - Italian translation. [Michele PETRECCA] 0.1.2: - Meilleur affichage du titre de l'arbre d'exploration. [Sébastien LECACHEUR] - Corrige le status de fin de l'installer win32. [Sébastien LECACHEUR] - Correction d'orthographe. [Guillermo GRIATZKY] - Redimensionne la fenêtre à propos pour un meilleur affichage. [Sébastien LECACHEUR] - Corrige un bug dans la fonction gw_combo_box_categories_set_selected_category(). [Sébastien LECACHEUR] - Corrige l'encodage UTF-8 manquant sous GTK+ 2.0. [Sébastien LECACHEUR] - Corrige un bug sur le chargement des paramètres des fichiers de catalogue. [Sébastien LECACHEUR] - Lance le désinstalleur pendant l'installation si GWhere est déjà installé sous win32. [Sébastien LECACHEUR] - Corrige la non sauvegarde des catalogues non modifiés avec la fonctionalité "Enregistrer sous". [Sébastien LECACHEUR] - Ajout du portage FreeBSD. [Mykhaylo SOROCHAN] - Corrige le tri des lignes dans l'explorateur. [Sébastien LECACHEUR] - Corrige le chargement des fichiers compressés sous win32. [Sébastien LECACHEUR] - Les fichiers temporaires sont correctement effacés sous win32. [Sébastien LECACHEUR] - Corrige la limitation de la taille des lignes du fichier de configuration. [Sébastien LECACHEUR] - Corrige une fuite de mémoire lors du chargement des catalogues. [Sébastien LECACHEUR] - Ajout du support du WAV MPEG 1 Layer 3 avec le plugin MP3. [Sébastien LECACHEUR] - Corrige du bug dans la fonction gintlen(). [Sébastien LECACHEUR] - Corrige un bug dans la fonction gw_str_replace_str(). [Sébastien LECACHEUR] - Corrige un bug sur l'effacement des champs après un ajout de disque en échec. [Sébastien LECACHEUR] - Ne charge plus les informations du media par défaut au chargement de l'application. [Sébastien LECACHEUR] - Les modifications des vues dans l'explorateur sont appliquées aussitôt. [Sébastien LECACHEUR] - Ajout de la nécessité de libtool dans gwhere.spec.in. [Sébastien LECACHEUR] - Amélioration du positionnement de quelques boutons. [Sébastien LECACHEUR] - Correction d'un bug sur les statistiques des catalogues construits sous win32. [Sébastien LECACHEUR] - Amélioration de l'affichage des boites de propriétés. [Sébastien LECACHEUR] - Correction du status de mountage sous Linux. [Sébastien LECACHEUR] - Correction de fuites de mémoires avec les fonctions *mnent(). [Sébastien LECACHEUR] - Suppression des dépendances avec ws2_32. [Sébastien LECACHEUR] - Correction de la détection de la présence d'un disque dans un lecteur sous Win 95/98/ME. [Sébastien LECACHEUR] - Cache les boîtes de messages affichées par le système win32 quand un disque est disponible. [Sébastien LECACHEUR] - Correction de fautes d'orthographe. [Luis PARRAVICINI] - Correction de l'ouverture d'un catalogue avec un chemin contenant des espaces à partir de l'explorateur win32. [Sébastien LECACHEUR] - Correction d'un plantage quand on ouvre un fichier récent. [Sébastien LECACHEUR] - Ajout de l'option utiliser le nom de volume du disque comme nom de disque. [Sébastien LECACHEUR] - Correction des propriétés par défaut non utilisées au premier chargement de GWhere dans la "Gestion des disques". [Sébastien LECACHEUR] - Correction de l'accès aux informations des disques sous Win 95/98/ME. [Sébastien LECACHEUR] - Correction d'un bug sur les chaines UTF-8 avec les GtkText. [Sébastien LECACHEUR] - Cache le status de montage sur les systèmes Win32. [Sébastien LECACHEUR] - Correction du chargement des informations des FS sous Linux. [Sébastien LECACHEUR] - Correction de la détection des systèmes de fichiers ISO 9660. [Sébastien LECACHEUR] - Corrige la casse non sensible pour la détection des plugins de description. [Sébastien LECACHEUR] - Ajout du plugin DESCRIPT.ION. [Sébastien LECACHEUR] - Ajout du plugin FILE_ID.DIZ. [Sébastien LECACHEUR] - Correction de la détection du type des plugins. [Sébastien LECACHEUR] - Traduction hongroise. [LAJOSHÁZI László Gergely] 0.1.1: - Correction d'un bug dans la fonction gw_folder_get_disk_name(). [Sébastien LECACHEUR] - Correction d'un bug de double encodage en UTF-8. [Sébastien LECACHEUR] - Suppression du test sur l'option automount sur un système qui ne supporte pas le mount. [Sébastien LECACHEUR] - Correction du bug pour afficher le menu popup du premier fichier listé (à la racine du disque). [Sébastien LECACHEUR] - Correction de la détection de MS Windows 95 OSR2. [Sébastien LECACHEUR] - Correction de la création du répertoire d'acceuil de GWhere. [Sébastien LECACHEUR] - Ajout du plugin AVI (DivX inclus). [Sébastien LECACHEUR] - Ajout des informations du SE dans la fenêtre d'à propos. [Sébastien LECACHEUR] - Correction du type de système de fichiers indéterminé. [Sébastien LECACHEUR] - Correction d'un bug dans gwhere.spec.in pour intégrer les liens des plugins dans les RPMs. [Sébastien LECACHEUR] - Nettoyage des Makefile pour win32. [Sébastien LECACHEUR] - Correction du fichier mkinstalldirs. [Luis PARRAVICINI] - Correction d'orthographe dans le fichier AUTHORS. [Luis PARRAVICINI] - Intégration du répertoire debian dans les fichiers source. [Luis PARRAVICINI] 0.1.0: - Passage de tous les noms de fichiers de sources en minuscule. [Sébastien LECACHEUR] - Evite le chargement d'informations inutiles sur les périphériques au démarrage de l'application. [Sébastien LECACHEUR] - Ajout de la fonction gw_package_get_plugins_dir() pour résoudre le problème du répertoire des plugins sous win32. [Sébastien LECACHEUR] - Ajout de la fonction gw_package_get_locale_dir() pour résoudre le problème du répertoire des locales sous win32. [Sébastien LECACHEUR] - Correction de fautes d'orthographe. [Bogdan MODZELEWSKI, Luis PARRAVICINI] - Toutes les colonnes dans l'explorateur sont auto redimensionnables. [Sébastien LECACHEUR] - Sélection de la valeur par défaut dans la boite de saisie. [Sébastien LECACHEUR] - Amélioration de la boite d'édition des catégories. [Sébastien LECACHEUR] - Correction d'un bug dans la barre de statu quand on crée un nouveau catalogue dans l'onglet de gestion. [Sébastien LECACHEUR] - Tous les catalogues doivent avoir comme extension ".ctg". [Sébastien LECACHEUR] - La vue par défaut dans l'explorer est celle de l'exploration des disques. [Sébastien LECACHEUR] - Correction d'une fuite de mémoire dans la fonction catalog_file_info_free(). [Sébastien LECACHEUR] - Ajout de l'option du chargement automatique du dernier catalogue ouvert. [Sébastien LECACHEUR] - Correction d'un bug avec les disques d'une taille supérieure à 4 294 967 296 octets dans ProgressBarBox. [Sébastien LECACHEUR] - Ajout du focus sur le bouton pour le composant ProgressBarBox. [Sébastien LECACHEUR] - Correction du bug sur le répertoire utilisateur sous win9x. [Sébastien LECACHEUR] - Correction des dates non traduites sous win32. [Sébastien LECACHEUR] - Correction de la double référence dans la liste des fichiers récemments ouverts. [Sébastien LECACHEUR] - Ajout de la configuration des colonnes à afficher. [Sébastien LECACHEUR] - Correction de fuites de mémoire dans l'objet Settings. [Sébastien LECACHEUR] - Un simple clique ouvre ou ferme un noeud dans l'arbre d'exploration. [Sébastien LECACHEUR] - Mémorisation de la dernière position et taille de la fenêtre. [Sébastien LECACHEUR] - Possibilité de choisir d'enregistrer ou non les propriétés de l'IHM dans les paramètres. [Sébastien LECACHEUR] - Correction d'un bug dans la fonction gw_file_mkdirs() quand le chemin se termine par le séparateur de fichier. [Sébastien LECACHEUR] - Changement de l'ordre des périphériques présents pour éviter l'auto-sélection du lecteur de disquette. [Sébastien LECACHEUR] - Ajout du focus pour le composant MsgBox. [Sébastien LECACHEUR] - Ajout du signal d'activation dans les zones de saisie de CaptureBox et de Search. [Mike Hokenson] - Démarrage en plein écran. [Sébastien LECACHEUR] - Correction d'un bug sur le renommage du nom de volume d'un disque. [Sébastien LECACHEUR] - Correction de fuites de mémoire dans PropertiesBox. [Sébastien LECACHEUR] - Correction de fuites de mémoire dans StatusBar. [Sébastien LECACHEUR] - Correction de la barre de statut pour les messages à propos des diques. [Sébastien LECACHEUR] - Correction d'un bug avec les disques supérieurs à 4 294 967 296 octets sur les systèmes qui supportent le type guint64. [Sébastien LECACHEUR] - Correction de fuites de mémoire dans NoteBookManagment. [Sébastien LECACHEUR] - Correction d'un bug lors du renommage d'un catalogue. [Sébastien LECACHEUR] - Correction d'un bug lors de la suppression d'un fichier du catalogue. [Sébastien LECACHEUR] - Correction d'un bug sur l'enristrement des données des disques. [Sébastien LECACHEUR] - Correction d'un bug de fichier manquant dans la liste des fichiers à la racine du disque. [Sébastien LECACHEUR] - Ajout du plugin HTML. [Sébastien LECACHEUR] - Affichage une boite de message quand aucun élément n'a été trouvé lors de la recherche. [Sébastien LECACHEUR] - Affichage le résultat de la recherche dans la barre de statut. [Sébastien LECACHEUR] - Ajout du plugin MP3. [Sébastien LECACHEUR] - Ajout du manageur de plugins pour l'extraction automatique des informations sur les fichiers. [Sébastien LECACHEUR] - Correction de bug dans la fonction file2gchar. [Sébastien LECACHEUR] - Ajout d'une option de chargement automatique de catalogue. [Sébastien LECACHEUR] - Ajout de fonctions de trace. [Sébastien LECACHEUR] - Correction des droits d'exécution du répertoire de configuration. [Sébastien LECACHEUR, Joe LAZARO] - Mémorisation des dernières options sélectionnées de l'onglet Gestion. [Sébastien LECACHEUR] - Corrections de bugs dans le composant NotebookManagment. [Sébastien LECACHEUR] - Correction de plusieurs bugs dans les fonctions d'accès de VFSStats. [Sébastien LECACHEUR] - Ajout d'une page de manuel. [Luis PARRAVICINI] - Ajout du support des fichiers de localisation dans gwhere.spec. [Sébastien LECACHEUR] - Amélioration du script configure. [Sébastien LECACHEUR] - Ajout d'un icone et du fichier .desktop pour les gestionnaires de fenêtres. [Sébastien LECACHEUR] - Renommage du nom de l'executable en "gwhere". [Sébastien LECACHEUR] - Ajout des fichiers récemments ouverts dans le menu fichier. [Sébastien LECACHEUR] - Correction d'un bug dans le parseur du fichier de configuration. [Sébastien LECACHEUR] - correction d'un bug de scannage circulaire avec les liens symboliques circulaires sur des répertoires : replace stat par lstat. [Sébastien LECACHEUR, Peter HANSACK] - Portage GTK 2.0 (seulement pour la compatibilité). [Sébastien LECACHEUR] - Replacement de tous les atoi en strtol ou strtoul. [Sébastien LECACHEUR] - Correction d'un bug dans la fonction file2gchar. [Sébastien LECACHEUR] - Ejection du CD-ROM sur Win32. [Sébastien LECACHEUR] - Démarrage du portage sur Win32. [Sébastien LECACHEUR] - Traduction tchèque. [Thomas NAVARA] - Traduction grecque. [Dimitris GARANATSIOS] - Traduction espagnole. [Victor G. MARIMON] 0.0.26: - Amélioration des scripts d'installation. [Sébastien LECACHEUR] - Possibilité en passer en argument le nom de fichier du catalogue à charger dans la ligne de commande. [Sébastien LECACHEUR] - Correction sur la sauvegarde des données des disques. [Sébastien LECACHEUR] - Copie de sauvegarde du fichier de propriétés quand l'utilisateur quitte l'application. [Sébastien LECACHEUR] - Possibilité de choisir le taux de compression des catalogues. [Sébastien LECACHEUR] - Ajout de l'envoi de catalogue par mail. [Sébastien LECACHEUR] - Ajout d'un composant d'envoi de mails. [Grégory BLOQUEL] - Modification de l'interface des DialogBox. [Sébastien LECACHEUR] - Ajout du gestionnaire d'application et du gestionnaire d'IHM. [Sébastien LECACHEUR] - Ajout du panneau de configuration. [Sébastien LECACHEUR] - Ajout du fichier de configuration. [Sébastien LECACHEUR] - Le clique droit sélectionne dans l'explorateur. [Sébastien LECACHEUR] - Correction d'un bug sur le renommage d'un catalogue via le menu contextuel. [Sébastien LECACHEUR] - Remplacement de Calcul.h en GWString.h. [Sébastien LECACHEUR] - Correction d'un bug dans gw_str_delete_char. [Sébastien LECACHEUR] - Ajout d'un composant pour lire les fichiers de propriétés. [Sébastien LECACHEUR] 0.0.25: - Affiche un message d'attente dans la barre de status pendant le chargement et la fermeture d'un catalogue. [Sébastien LECACHEUR] - Cache la fenêtre de sélection de fichiers pendant le chargement d'un catalogue. [Sébastien LECACHEUR] - Correction de fuites de mémoires dans le moteur de recherche. [Sébastien LECACHEUR] - Correction d'une fuite de mémoire dans gw_strcmp_strregex. [Sébastien LECACHEUR] - Corrections d'orthographe. [Luis PARRAVICINI] - Ajout du débugage de la librairie tools. [Sébastien LECACHEUR] - La barre de progression de n'affiche pas quand il n'y a de valeur maximum. [Sébastien LECACHEUR] - Portage expérimental sur Cygwin. [Sébastien LECACHEUR] - Lecture du nom de volume de la FAT12 et FAT16. [Sébastien LECACHEUR] - Détection du type de système de fichiers FAT12, FAT16, FAT32 et ISO 9960. [Sébastien LECACHEUR] - Détection des programmes mount et umount dans le configure.sh. [Sébastien LECACHEUR] - Ajout de l'encode/décodage en base 64. [Sébastien LECACHEUR] - Ajout de traces dans l'IHM. [Sébastien LECACHEUR] - Suppression de AUTHORS-fr et TODO-fr : c'est trop dur de maintenir tous les fichiers de traductions. [Sébastien LECACHEUR] - Renomme GWhere-x.y.z.spec en GWhere.spec. [Sébastien LECACHEUR] - Utilisation de la constante __PRETTY_FUNCTION__ pour les noms de fonctions dans les traces. [Sébastien LECACHEUR] - Remplacement de la constante DEBUG_MODE par les constantes GW_DEBUG_*_COMPONENT. [Sébastien LECACHEUR] - Remplacement de la chaine "GWhere" par la constante PACKAGE. [Sébastien LECACHEUR] - Remplacement de la constante GWHERE_VERSION par VERSION. [Sébastien LECACHEUR] - Correction de la fonction gw_str_blob_to_regex pour supporter le caractère "?". [Sébastien LECACHEUR] - Nouvelles functions pour lire les lignes : gw_file_readline, gw_zfile_readline. [Sébastien LECACHEUR, Luis PARRAVICINI] - Compression des catalogues avec la zlib. [Luis PARRAVICINI] 0.0.24: - Nouveau moteur de recherche rapide. [Sébastien LECACHEUR] - Correction du résultat d'une reprise de recherche quand option expression regulière est activée. [Sébastien LECACHEUR] - Le bouton des boîtes de dialogue ne s'adapte plus à la taille de celles-ci. [Sébastien LECACHEUR] - Vérifie si un catalogue est chargé avant de lancer une recherche. [Sébastien LECACHEUR] - Corrections d'un bug sur plusieurs fonction free(). [Sébastien LECACHEUR] - Ajout d'un mode de débugage à la compilation (option --enable-debug). [Sébastien LECACHEUR] - Corrections d'orthographe. [Luis PARRAVICINI] - Découpage des sources en librairies statiques. [Sébastien LECACHEUR] 0.0.23: - Corrections d'orthographe. [Luis PARRAVICINI] - Correction du retour au répertoire courant après l'échec de l'ajout d'un disque. [Sébastien LECACHEUR] - Refonte de la gestion de l'IHM. [Sébastien LECACHEUR] - Recheche avec ou sans les expressions régulières. [Sébastien LECACHEUR] - Possibilité d'annuler l'ajout d'un disque pendant son ajout. [Sébastien LECACHEUR] - Barre de progression pour l'ajout d'un disque. [Sébastien LECACHEUR] - Correction de fuites de mémoires dans VFSSTATS. [Sébastien LECACHEUR] - Traduction argentine. [Luis PARRAVICINI] 0.0.22: - Correction de l'ajout d'une catégorie. [Sébastien LECACHEUR] - Correction pour le support des répertoires qui commencent par "." ou "..". [Sébastien LECACHEUR] - Correction d'un bug sur les propiétaires et groupes de fichiers inconnus. [Sébastien LECACHEUR] - Correction du test de montage pour les utilisateurs non root. [Sébastien LECACHEUR] - Ajout de boîtes de messages pour dire si l'ajout d'un disque échoue ou non. [Sébastien LECACHEUR] - Correction de la lecture du nom de volume. [Sébastien LECACHEUR] - Correction du Makefile pour l'internationalisation. [Grégory BLOQUEL] - Correction de la lecture du nom de volume. [Grégory BLOQUEL] - Correction du montage des CD pour les utilisateurs non root. [Grégory BLOQUEL] - Correction d'un bug sur le calcul des tailles avec la Mandrake 8.0. [Grégory BLOQUEL] 0.0.21: - Recherche avec ou sans casse sensible. - Correction d'un bug sur le calcul de la capacité/espace libre/espace utilisé des disques. - Correction d'un bug sur le chargement de la taille/inoeud des répertoires/fichiers. - Correction d'un bug sur génération des informations lors de la création d'un catalogue. - Correction d'un bug qd l'utilsateur ajoute un disque et qu'il n'y a pas de catalogue d'ouvert. - Correction d'un bug sur l'enregistrement des noms de catalogues/disques/catégories. 0.0.20: - Bouton fermer catalogue dans la barre d'outils. - Nouvelles fonctions dans la barre de menu. - Possibilité de changer la catégorie d'un disque/répertoire/fichier. - Corrections de bugs sur la gestion des données. - Correction d'un bug sur l'enregistrement des catégories d'un disque/répertoire/fichier. - Possibilité d'appliquer recursivement une catégorie à tout le nouveau disque. - Correction d'un bug sur la recherche de catégories. - Correction d'un bug d'affichage des dates. - Impossible d'éditer/supprimer la catégorie par défaut. - Les répertoires interdits ne stoppent plus l'ajout du disque et possèdent leur icones. - Nettoyage des fonctions pour charger/enregistrer un catalogue. - Boîte de message pour indiquer les erreurs. 0.0.19: - Charge et enregistre les catégories des disques/répertoires/fichiers. - Ajout de l'option afficher les informations du périphérique sélectionné. - Ajout de la fenêtre d'édition des catégories. - Correction d'un bug sur la liste des catégories lors du chargement d'un fichier. - Traduction française. 0.0.18: - Amélioration de l'onglet de gestion des catalogues. - Correction d'un bug sur la capacité totale d'un disque. - Correction d'une fuite de mémoire au niveau du VFSStats. - Correction d'un bug sur "Enregistrer Sous". - Amélioration des catégories. - Amélioration des propriétés des catalogues/disques/répertoires/fichiers. - Correction d'un bug d'affichage qd on ouvre un fichier qui n'est pas au format GWhere. - Le catalogue peut avoir un nom différent du nom du fichier. - Traduction allemande. [Hermann-Josef BECKERS] 0.0.17: - Ajout de la recherche rapide. - Support du supermount de l'OS. - Correction du control de l'ajout d'un disque. - Correction de l'affichage des infos du disque. - Correction des infos du disque. - Ajout de la capacité totale du disque et du catalogue dans les propriétés. - Ajout de l'espace utilisé et de l'espace libre du disque et du catalogue. - Ajout du nom de volume du disque. - Mise à jour des propriétés du catalogue. - Correction d'un bug mineur sur les fenêtres des propiétés. - Intégration de nouvelles informations sur le catalogue (version du fichier, programme générateur, catégories). - Gestion des versions de format des catalogues. - La fenetre principale peut etre réduite. 0.0.16: - Gestion des liens, lors de la création d'un disk. - Les icones changent selon le type de disk (CD-Rom, HD, Floppy et Zip). - Possibilité de changer le nom de volume d'un disk grace au menu popup. - Fenetre d'édition de la description des catalogues/disks/répertoires/fichiers. - Ajout d'une description pour les infos du catalogue. - Possibilité de renommer un catalogue ou un disk. - Correction de la suppression d'un élément (mise à jour de la taille des éléments qui le contiennent). - Correction de l'ajout d'un disk (vérification du nom du disk). - Modification de l'intégration des descriptions. - Propriétés des catalogues/disques/répertoires/fichiers. - Intégration du menu popup dans l'explorateur. - Optimisation de l'exploration. 0.0.15: - Suppression d'un élément grace à un menu popup. - Amélioration du calcul des tailles (gére jusqu'au iotaoctet!!). - Optimisation de la gestion de mémoire lors du chargement d'un catalogue. - Modification du chargement et de la sauvegarde des disks. - Correction de l'exploration des disks. - Correction de l'ajout d'un disk. - Implémentation des informations des disks. - Correction de l'automount (notamment au niveau du test pour savoir si un disk est monté). 0.0.14: - Correction du calcul de la taille du catalogue et des disks. - L'automount est opérationnel (avec gestion du type "auto" pour les sytèmes de fichier). - Ejection de CD-Rom. 0.0.13: - Correction de la taille des répertoires et implémentation de la taille des disques. - Mise en place de la barre de status. - Correction des scrollbars. - Optimisation des fonctions d'exploration. - Optimisation de l'utilisation de la mémoire, par la suppression des doublons de données. 0.0.12: - Réécriture du programme pour une organisation plus modulaire. 0.0.11: - Le catalogue est chargé en mémoire (contrairement à avant où on utilisait un fichier temporaire). - Beaucoup de bugs ont été corrigés. 0.0.6: - Tout a été fait depuis la 0.0.1 - Interface graphique en GTK 0.0.1: - Création et lecture d'une image en ligne de commande. gwhere-0.2.3/config.guess0000755000175000017500000012546610472407554014005 0ustar bartbart#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. timestamp='2005-04-22' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; amd64:OpenBSD:*:*) echo x86_64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; cats:OpenBSD:*:*) echo arm-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; luna88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mips64-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit 0 ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit 0 ;; *:OS400:*:*) echo powerpc-ibm-os400 exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; amd64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit 0 ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in *86) UNAME_PROCESSOR=i686 ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit 0 ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms && exit 0 ;; I*) echo ia64-dec-vms && exit 0 ;; V*) echo vax-dec-vms && exit 0 ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gwhere-0.2.3/config.h.in0000644000175000017500000002572610471156023013475 0ustar bartbart/* config.h.in. Generated from configure.in by autoheader. */ #undef PROJECT_NAME #undef ENABLE_NLS #undef HAVE_CATGETS #undef HAVE_GETTEXT #undef HAVE_LC_MESSAGES #undef HAVE_STPCPY #undef HAVE_LIBSM #undef PACKAGE_LOCALE_DIR #undef PACKAGE_DATA_DIR #undef PACKAGE_PLUGINS_DIR #undef PACKAGE_PLUGINS_CATALOG_DIR #undef PACKAGE_PLUGINS_DESCRIPTION_DIR #undef PACKAGE_SOURCE_DIR #undef GW_PROG_PATH_MOUNT #undef GW_PROG_PATH_UMOUNT #undef GW_DEBUG_MODE #undef GW_DEBUG_TIME #undef GW_DEBUG_TOOLS_COMPONENT #undef GW_DEBUG_DATA_COMPONENT #undef GW_DEBUG_GUI_COMPONENT #undef GW_DEBUG_GUI_CALLBACK_COMPONENT #undef HAVE_GTK12 #undef HAVE_GTK20 /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file. */ #undef HAVE_ARGZ_H /* Define to 1 if you have the `asprintf' function. */ #undef HAVE_ASPRINTF /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FEOF_UNLOCKED /* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FGETS_UNLOCKED /* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_GETC_UNLOCKED /* Define to 1 if you have the declaration of `_snprintf', and to 0 if you don't. */ #undef HAVE_DECL__SNPRINTF /* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you don't. */ #undef HAVE_DECL__SNWPRINTF /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `dup2' function. */ #undef HAVE_DUP2 /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if your system has a working POSIX `fnmatch' function. */ #undef HAVE_FNMATCH /* Define to 1 if you have the `fwprintf' function. */ #undef HAVE_FWPRINTF /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if you have the `getegid' function. */ #undef HAVE_GETEGID /* Define to 1 if you have the `geteuid' function. */ #undef HAVE_GETEUID /* Define to 1 if you have the `getfsent' function. */ #undef HAVE_GETFSENT /* Define to 1 if you have the `getgid' function. */ #undef HAVE_GETGID /* Define to 1 if you have the `getmntent' function. */ #undef HAVE_GETMNTENT /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the `getuid' function. */ #undef HAVE_GETUID /* Define to 1 if you have the `getwd' function. */ #undef HAVE_GETWD /* Define to 1 if you have the `hasmntopt' function. */ #undef HAVE_HASMNTOPT /* Define if you have the iconv() function. */ #undef HAVE_ICONV /* Define if you have the 'intmax_t' type in or . */ #undef HAVE_INTMAX_T /* Define if exists and doesn't clash with . */ #undef HAVE_INTTYPES_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_INTTYPES_H_WITH_UINTMAX /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the header file. */ #undef HAVE_LIBINTL_H /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define if you have the 'long double' type. */ #undef HAVE_LONG_DOUBLE /* Define if you have the 'long long' type. */ #undef HAVE_LONG_LONG /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mempcpy' function. */ #undef HAVE_MEMPCPY /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the `mkdir' function. */ #undef HAVE_MKDIR /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the header file. */ #undef HAVE_MNTENT_H /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_NL_TYPES_H /* Define if your printf() function supports format strings with positions. */ #undef HAVE_POSIX_PRINTF /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define to 1 if you have the `regcomp' function. */ #undef HAVE_REGCOMP /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_STDINT_H_WITH_UINTMAX /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the `strftime' function. */ #undef HAVE_STRFTIME /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strptime' function. */ #undef HAVE_STRPTIME /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MOUNT_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_VFS_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the `tsearch' function. */ #undef HAVE_TSEARCH /* Define if you have the 'uintmax_t' type in or . */ #undef HAVE_UINTMAX_T /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have the 'unsigned long long' type. */ #undef HAVE_UNSIGNED_LONG_LONG /* Define if you have the 'wchar_t' type. */ #undef HAVE_WCHAR_T /* Define to 1 if you have the `wcslen' function. */ #undef HAVE_WCSLEN /* Define if you have the 'wint_t' type. */ #undef HAVE_WINT_T /* Define to 1 if you have the `__argz_count' function. */ #undef HAVE___ARGZ_COUNT /* Define to 1 if you have the `__argz_next' function. */ #undef HAVE___ARGZ_NEXT /* Define to 1 if you have the `__argz_stringify' function. */ #undef HAVE___ARGZ_STRINGIFY /* Define to 1 if you have the `__fsetlocking' function. */ #undef HAVE___FSETLOCKING /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Define if integer division by zero raises signal SIGFPE. */ #undef INTDIV0_RAISES_SIGFPE /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define if exists and defines unusable PRI* macros. */ #undef PRI_MACROS_BROKEN /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #undef SIZE_MAX /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Version number of package */ #undef VERSION /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `int' if doesn't define. */ #undef gid_t /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to `long' if does not define. */ #undef off_t /* Define as the type of the result of subtracting two pointers, if the system doesn't define it. */ #undef ptrdiff_t /* Define to empty if the C compiler doesn't support this keyword. */ #undef signed /* Define to `unsigned' if does not define. */ #undef size_t /* Define to `int' if doesn't define. */ #undef uid_t /* Define to unsigned long or unsigned long long if and don't define. */ #undef uintmax_t gwhere-0.2.3/config.sub0000755000175000017500000007547010472407554013447 0ustar bartbart#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. timestamp='2005-04-22' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | msp430-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gwhere-0.2.3/configure0000755000175000017500000346505610506327325013374 0ustar bartbart#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59. # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=${tagnames+${tagnames},}CXX tagnames=${tagnames+${tagnames},}F77 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="configure.in" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO SET_MAKE PROJECT_NAME CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX CPP EGREP LN_S AWK build build_cpu build_vendor build_os host host_cpu host_vendor host_os ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL PKG_CONFIG GTK_CFLAGS GTK_LIBS GTK_CONFIG MKINSTALLDIRS USE_NLS MSGFMT GMSGFMT XGETTEXT MSGMERGE GLIBC2 ALLOCA GLIBC21 INTL_MACOSX_LIBS HAVE_POSIX_PRINTF HAVE_ASPRINTF HAVE_SNPRINTF HAVE_WPRINTF LIBICONV LTLIBICONV INTLBISON BUILD_INCLUDED_LIBINTL USE_INCLUDED_LIBINTL CATOBJEXT DATADIRNAME INSTOBJEXT GENCAT INTLOBJS INTL_LIBTOOL_SUFFIX_PREFIX INTLLIBS LIBINTL LTLIBINTL POSUB HOST_OS GW_PROG_PATH_MOUNT GW_PROG_PATH_UMOUNT LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP ac_env_F77_set=${F77+set} ac_env_F77_value=$F77 ac_cv_env_F77_set=${F77+set} ac_cv_env_F77_value=$F77 ac_env_FFLAGS_set=${FFLAGS+set} ac_env_FFLAGS_value=$FFLAGS ac_cv_env_FFLAGS_set=${FFLAGS+set} ac_cv_env_FFLAGS_value=$FFLAGS # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-gtk20 compile for GTK+ 2.0 instead of GTK+ 1.2. default=auto --disable-gtktest do not try to compile and run a test GTK+ program --enable-gtk12 compile for GTK+ 1.2. default=auto --disable-gtktest Do not try to compile and run a test GTK program --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --enable-debug use GWhere in debugging mode. default=no --enable-debug-time use GWhere in debugging time. default=no --enable-debug-data-component use GWhere in debugging data component. default=no --enable-debug-tools-component use GWhere in debugging tools component. default=no --enable-debug-gui-component use GWhere in debugging GUI component. default=no --enable-debug-gui-callback-component use GWhere in debugging GUI callback component. default=no --enable-debug-all use GWhere in debugging mode with debug. default=no Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] --with-gtk-prefix=PFX Prefix where GTK is installed (optional) --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional) --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-included-gettext use the GNU gettext library included here --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor CXXCPP C++ preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd "$ac_popdir" done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "$*" != "X $srcdir/configure conftestfile" \ && test "$*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftestfile ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi rm -f conftest* echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi PACKAGE=gwhere VERSION=0.2.3 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF missing_dir=`cd $ac_aux_dir && pwd` echo "$as_me:$LINENO: checking for working aclocal" >&5 echo $ECHO_N "checking for working aclocal... $ECHO_C" >&6 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (aclocal --version) < /dev/null > /dev/null 2>&1; then ACLOCAL=aclocal echo "$as_me:$LINENO: result: found" >&5 echo "${ECHO_T}found" >&6 else ACLOCAL="$missing_dir/missing aclocal" echo "$as_me:$LINENO: result: missing" >&5 echo "${ECHO_T}missing" >&6 fi echo "$as_me:$LINENO: checking for working autoconf" >&5 echo $ECHO_N "checking for working autoconf... $ECHO_C" >&6 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoconf --version) < /dev/null > /dev/null 2>&1; then AUTOCONF=autoconf echo "$as_me:$LINENO: result: found" >&5 echo "${ECHO_T}found" >&6 else AUTOCONF="$missing_dir/missing autoconf" echo "$as_me:$LINENO: result: missing" >&5 echo "${ECHO_T}missing" >&6 fi echo "$as_me:$LINENO: checking for working automake" >&5 echo $ECHO_N "checking for working automake... $ECHO_C" >&6 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (automake --version) < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake echo "$as_me:$LINENO: result: found" >&5 echo "${ECHO_T}found" >&6 else AUTOMAKE="$missing_dir/missing automake" echo "$as_me:$LINENO: result: missing" >&5 echo "${ECHO_T}missing" >&6 fi echo "$as_me:$LINENO: checking for working autoheader" >&5 echo $ECHO_N "checking for working autoheader... $ECHO_C" >&6 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoheader --version) < /dev/null > /dev/null 2>&1; then AUTOHEADER=autoheader echo "$as_me:$LINENO: result: found" >&5 echo "${ECHO_T}found" >&6 else AUTOHEADER="$missing_dir/missing autoheader" echo "$as_me:$LINENO: result: missing" >&5 echo "${ECHO_T}missing" >&6 fi echo "$as_me:$LINENO: checking for working makeinfo" >&5 echo $ECHO_N "checking for working makeinfo... $ECHO_C" >&6 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (makeinfo --version) < /dev/null > /dev/null 2>&1; then MAKEINFO=makeinfo echo "$as_me:$LINENO: result: found" >&5 echo "${ECHO_T}found" >&6 else MAKEINFO="$missing_dir/missing makeinfo" echo "$as_me:$LINENO: result: missing" >&5 echo "${ECHO_T}missing" >&6 fi cat >>confdefs.h <<\_ACEOF #define PROJECT_NAME "GWhere" _ACEOF ac_config_headers="$ac_config_headers config.h" ac_config_commands="$ac_config_commands default-1" PROJECT_NAME="GWhere" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5 echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6 if test "${ac_cv_lib_cposix_strerror+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcposix $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char strerror (); int main () { strerror (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_cposix_strerror=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_cposix_strerror=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5 echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6 if test $ac_cv_lib_cposix_strerror = yes; then LIBS="$LIBS -lcposix" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep if test $ac_cv_c_compiler_gnu = yes; then echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5 echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6 if test "${ac_cv_prog_gcc_traditional+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_pattern="Autoconf.*'x'" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5 echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6 if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking for ${CC-cc} option to accept ANSI C" >&5 echo $ECHO_N "checking for ${CC-cc} option to accept ANSI C... $ECHO_C" >&6 if test "${am_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else am_cv_prog_cc_stdc=no ac_save_CC="$CC" # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then am_cv_prog_cc_stdc="$ac_arg"; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done CC="$ac_save_CC" fi if test -z "$am_cv_prog_cc_stdc"; then echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 else echo "$as_me:$LINENO: result: $am_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$am_cv_prog_cc_stdc" >&6 fi case "x$am_cv_prog_cc_stdc" in x|xno) ;; *) CC="$CC $am_cv_prog_cc_stdc" ;; esac echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi; # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi; # Check whether --enable-fast-install or --disable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval="$enable_fast_install" p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi; # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && break cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done SED=$lt_cv_path_SED fi echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/${ac_tool_prefix}nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac esac fi done IFS="$lt_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6 NM="$lt_cv_path_NM" echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix4* | aix5*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi4*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump'. lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | kfreebsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case "$host_cpu" in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' else lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 5118 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case "`/usr/bin/file conftest.o`" in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; esac need_locks="$enable_libtool_lock" # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:5822:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while (test "X"`$CONFIG_SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris* | sysv5*) symcode='[BDRT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # # Check for any special shared library compilation flags. # lt_prog_cc_shlib= if test "$GCC" = no; then case $host_os in sco3.2v5*) lt_prog_cc_shlib='-belf' ;; esac fi if test -n "$lt_prog_cc_shlib"; then { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : else { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} lt_cv_prog_cc_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_prog_compiler_static" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:6854: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:6858: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux*) case $CC in icc* | ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic='-Kpic' lt_prog_compiler_static='-dn' ;; solaris*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:7087: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:7091: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 if test x"$lt_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:7147: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:7151: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_cmds="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else archive_expsym_cmds="$tmp_archive_cmds" fi link_all_deplibs=no else ld_shlibs=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec=' ' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi4*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) if test "$GXX" = yes ; then archive_cmds_need_lc=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='-flat_namespace -undefined suppress' ;; 10.*) allow_undefined_flag='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='-all_load $convenience' link_all_deplibs=yes else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=no hardcode_shlibpath_var=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no hardcode_shlibpath_var=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4.2uw2*) archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=no hardcode_shlibpath_var=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv5*) no_undefined_flag=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec= hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=yes library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var " || \ test "X$hardcode_automatic"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # Report which librarie types wil actually be built echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; darwin* | rhapsody*) if test "$GCC" = yes; then archive_cmds_need_lc=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='-flat_namespace -undefined suppress' ;; 10.*) allow_undefined_flag='-undefined dynamic_lookup' ;; esac fi ;; esac output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='-all_load $convenience' link_all_deplibs=yes else ld_shlibs=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" # Check whether --with-tags or --without-tags was given. if test "${with_tags+set}" = set; then withval="$with_tags" tagnames="$withval" fi; if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && test "X$CXX" != "Xno"; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= # Source file extension for C++ test sources. ac_ext=cc # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes if test "$GXX" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_CXX=yes else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_CXX=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX=' ' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) if test "$GXX" = yes; then archive_cmds_need_lc_CXX=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_CXX='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_CXX='-flat_namespace -undefined suppress' ;; 10.*) allow_undefined_flag_CXX='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_CXX='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='-all_load $convenience' link_all_deplibs_CXX=yes else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd12*) # C++ shared libraries reported to be fairly broken before switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | kfreebsd*-gnu) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC) archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_CXX='+b $libdir' hardcode_libdir_separator_CXX=: ;; ia64*) hardcode_libdir_flag_spec_CXX='-L$libdir' ;; *) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case "$host_cpu" in hppa*64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; *) hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC) case "$host_cpu" in hppa*64*|ia64*) archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case "$host_cpu" in ia64*|hppa*64*) archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; irix5* | irix6*) case $cc_basename in CC) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: ;; linux*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc) # Intel C++ with_gnu_ld=yes archive_cmds_need_lc_CXX=no archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; cxx) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; osf3*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ $rm $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sco*) archive_cmds_need_lc_CXX=no case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.0-5 | solaris2.0-5.*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac link_all_deplibs_CXX=yes # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' fi ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) archive_cmds_need_lc_CXX=no ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`" for p in `eval $output_verbose_link_cmd`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" \ || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $rm -f confest.$objext case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | kfreebsd*-gnu) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux*) case $cc_basename in KCC) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; cxx) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; sco*) case $cc_basename in CC) lt_prog_compiler_pic_CXX='-fPIC' ;; *) ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; unixware*) ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:11610: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:11614: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:11670: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:11674: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' ;; linux*) link_all_deplibs_CXX=no ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=yes library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || \ test -n "$runpath_var CXX" || \ test "X$hardcode_automatic_CXX"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6 if test "$hardcode_action_CXX" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_CXX # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_CXX" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code=" subroutine t\n return\n end\n" # Code to be used in simple link tests lt_simple_link_test_code=" program t\n end\n" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) test "$enable_shared" = yes && enable_static=no ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux*) case $CC in icc* | ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic_F77='-Kpic' lt_prog_compiler_static_F77='-dn' ;; solaris*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13964: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:13968: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 if test x"$lt_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14024: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:14028: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_F77=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_cmds_F77="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else archive_expsym_cmds_F77="$tmp_archive_cmds" fi link_all_deplibs_F77=no else ld_shlibs_F77=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_F77=yes else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_F77=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77=' ' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi4*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) if test "$GXX" = yes ; then archive_cmds_need_lc_F77=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_F77='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_F77='-flat_namespace -undefined suppress' ;; 10.*) allow_undefined_flag_F77='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_F77='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='-all_load $convenience' link_all_deplibs_F77=yes else ld_shlibs_F77=no fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; ia64*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; *) hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; sco3.2v5*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4.2uw2*) archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag_F77='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv5*) no_undefined_flag_F77=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec_F77= hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=yes library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var F77" || \ test "X$hardcode_automatic_F77"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6 if test "$hardcode_action_F77" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_F77" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}\n" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$CC # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16069: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16073: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux*) case $CC in icc* | ecc*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; ccc*) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic_GCJ='-Kpic' lt_prog_compiler_static_GCJ='-dn' ;; solaris*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16302: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16306: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16362: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:16366: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_GCJ=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_GCJ=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_GCJ=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_cmds_GCJ="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else archive_expsym_cmds_GCJ="$tmp_archive_cmds" fi link_all_deplibs_GCJ=no else ld_shlibs_GCJ=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_GCJ=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_GCJ=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_GCJ=yes else # We have old collect2 hardcode_direct_GCJ=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_GCJ=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_GCJ=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ=' ' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi4*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) if test "$GXX" = yes ; then archive_cmds_need_lc_GCJ=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' ;; 10.*) allow_undefined_flag_GCJ='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_GCJ='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='-all_load $convenience' link_all_deplibs_GCJ=yes else ld_shlibs_GCJ=no fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; ia64*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; *) hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd* | netbsdelf*-gnu | knetbsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; sco3.2v5*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_GCJ=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4.2uw2*) archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag_GCJ='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv5*) no_undefined_flag_GCJ=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec_GCJ= hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6 test "$ld_shlibs_GCJ" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=yes library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var GCJ" || \ test "X$hardcode_automatic_GCJ"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6 if test "$hardcode_action_GCJ" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_GCJ" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$CC lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_RC" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi; CFLAGS="$CFLAGS -fno-strict-aliasing" # Check whether --enable-gtk20 or --disable-gtk20 was given. if test "${enable_gtk20+set}" = set; then enableval="$enable_gtk20" USE_GTK=20 else USE_GTK=auto fi; if test "x$USE_GTK" = "x20" ; then # Check whether --enable-gtktest or --disable-gtktest was given. if test "${enable_gtktest+set}" = set; then enableval="$enable_gtktest" else enable_gtktest=yes fi; pkg_config_args=gtk+-2.0 for module in . do case "$module" in gthread) pkg_config_args="$pkg_config_args gthread-2.0" ;; esac done no_gtk="" # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_PKG_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5 echo "${ECHO_T}$PKG_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test x$PKG_CONFIG != xno ; then if pkg-config --atleast-pkgconfig-version 0.7 ; then : else echo "*** pkg-config too old; version 0.7 or better required." no_gtk=yes PKG_CONFIG=no fi else no_gtk=yes fi min_gtk_version=1.3.0 echo "$as_me:$LINENO: checking for GTK+ - version >= $min_gtk_version" >&5 echo $ECHO_N "checking for GTK+ - version >= $min_gtk_version... $ECHO_C" >&6 if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_args; then echo "Will use uninstalled version of GTK+ found in PKG_CONFIG_PATH" enable_gtktest=no fi if $PKG_CONFIG --atleast-version $min_gtk_version $pkg_config_args; then : else no_gtk=yes fi fi if test x"$no_gtk" = x ; then GTK_CFLAGS=`$PKG_CONFIG $pkg_config_args --cflags` GTK_LIBS=`$PKG_CONFIG $pkg_config_args --libs` gtk_config_major_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` gtk_config_minor_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` gtk_config_micro_version=`$PKG_CONFIG --modversion gtk+-2.0 | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" rm -f conf.gtktest if test "$cross_compiling" = yes; then echo $ac_n "cross compiling; assumed OK... $ac_c" else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'pkg-config --modversion gtk+-2.0' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If pkg-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf("*** to point to the correct configuration files\n"); } else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the PKG_CONFIG environment to point to the\n"); printf("*** correct copy of pkg-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) no_gtk=yes fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then echo "$as_me:$LINENO: result: yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&5 echo "${ECHO_T}yes (version $gtk_config_major_version.$gtk_config_minor_version.$gtk_config_micro_version)" >&6 GTK_VERSION="1.3.0 or 2.0.0" else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://pkgconfig.sourceforge.net" else if test -f conf.gtktest ; then : else echo "*** Could not run GTK+ test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK+ or finding the wrong" echo "*** version of GTK+. If it is not finding GTK+, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK+ is incorrectly installed." fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" { { echo "$as_me:$LINENO: error: Cannot find GTK: Is gtk-config in path?" >&5 echo "$as_me: error: Cannot find GTK: Is gtk-config in path?" >&2;} { (exit 1); exit 1; }; } fi rm -f conf.gtktest CFLAGS="$CFLAGS -DGTK_ENABLE_BROKEN" cat >>confdefs.h <<\_ACEOF #define HAVE_GTK20 1 _ACEOF else # Check whether --enable-gtk12 or --disable-gtk12 was given. if test "${enable_gtk12+set}" = set; then enableval="$enable_gtk12" USE_GTK=12 else USE_GTK=auto fi; case $USE_GTK in 12) # Check whether --with-gtk-prefix or --without-gtk-prefix was given. if test "${with_gtk_prefix+set}" = set; then withval="$with_gtk_prefix" gtk_config_prefix="$withval" else gtk_config_prefix="" fi; # Check whether --with-gtk-exec-prefix or --without-gtk-exec-prefix was given. if test "${with_gtk_exec_prefix+set}" = set; then withval="$with_gtk_exec_prefix" gtk_config_exec_prefix="$withval" else gtk_config_exec_prefix="" fi; # Check whether --enable-gtktest or --disable-gtktest was given. if test "${enable_gtktest+set}" = set; then enableval="$enable_gtktest" else enable_gtktest=yes fi; for module in . do case "$module" in gthread) gtk_config_args="$gtk_config_args gthread" ;; esac done if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config fi fi if test x$gtk_config_prefix != x ; then gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_prefix/bin/gtk-config fi fi # Extract the first word of "gtk-config", so it can be a program name with args. set dummy gtk-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_GTK_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $GTK_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTK_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_GTK_CONFIG" && ac_cv_path_GTK_CONFIG="no" ;; esac fi GTK_CONFIG=$ac_cv_path_GTK_CONFIG if test -n "$GTK_CONFIG"; then echo "$as_me:$LINENO: result: $GTK_CONFIG" >&5 echo "${ECHO_T}$GTK_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi min_gtk_version=1.2.0 echo "$as_me:$LINENO: checking for GTK - version >= $min_gtk_version" >&5 echo $ECHO_N "checking for GTK - version >= $min_gtk_version... $ECHO_C" >&6 no_gtk="" if test "$GTK_CONFIG" = "no" ; then no_gtk=yes else GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" rm -f conf.gtktest if test "$cross_compiling" = yes; then echo $ac_n "cross compiling; assumed OK... $ac_c" else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If gtk-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } #if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } #endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); printf("*** correct copy of gtk-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) no_gtk=yes fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 GTK_VERSION="1.2.0" else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 if test "$GTK_CONFIG" = "no" ; then echo "*** The gtk-config script installed by GTK could not be found" echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GTK_CONFIG environment variable to the" echo "*** full path to gtk-config." else if test -f conf.gtktest ; then : else echo "*** Could not run GTK test program, checking why..." CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK or finding the wrong" echo "*** version of GTK. If it is not finding GTK, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" echo "*** came with the system with the command" echo "***" echo "*** rpm --erase --nodeps gtk gtk-devel" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK was incorrectly installed" echo "*** or that you have moved GTK since it was installed. In the latter case, you" echo "*** may want to edit the gtk-config script: $GTK_CONFIG" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" { { echo "$as_me:$LINENO: error: Cannot find GTK: Is gtk-config in path?" >&5 echo "$as_me: error: Cannot find GTK: Is gtk-config in path?" >&2;} { (exit 1); exit 1; }; } fi rm -f conf.gtktest cat >>confdefs.h <<\_ACEOF #define HAVE_GTK12 1 _ACEOF ;; auto) # Check whether --with-gtk-prefix or --without-gtk-prefix was given. if test "${with_gtk_prefix+set}" = set; then withval="$with_gtk_prefix" gtk_config_prefix="$withval" else gtk_config_prefix="" fi; # Check whether --with-gtk-exec-prefix or --without-gtk-exec-prefix was given. if test "${with_gtk_exec_prefix+set}" = set; then withval="$with_gtk_exec_prefix" gtk_config_exec_prefix="$withval" else gtk_config_exec_prefix="" fi; # Check whether --enable-gtktest or --disable-gtktest was given. if test "${enable_gtktest+set}" = set; then enableval="$enable_gtktest" else enable_gtktest=yes fi; for module in . do case "$module" in gthread) gtk_config_args="$gtk_config_args gthread" ;; esac done if test x$gtk_config_exec_prefix != x ; then gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config fi fi if test x$gtk_config_prefix != x ; then gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" if test x${GTK_CONFIG+set} != xset ; then GTK_CONFIG=$gtk_config_prefix/bin/gtk-config fi fi # Extract the first word of "gtk-config", so it can be a program name with args. set dummy gtk-config; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_GTK_CONFIG+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $GTK_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GTK_CONFIG="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_GTK_CONFIG" && ac_cv_path_GTK_CONFIG="no" ;; esac fi GTK_CONFIG=$ac_cv_path_GTK_CONFIG if test -n "$GTK_CONFIG"; then echo "$as_me:$LINENO: result: $GTK_CONFIG" >&5 echo "${ECHO_T}$GTK_CONFIG" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi min_gtk_version=1.2.0 echo "$as_me:$LINENO: checking for GTK - version >= $min_gtk_version" >&5 echo $ECHO_N "checking for GTK - version >= $min_gtk_version... $ECHO_C" >&6 no_gtk="" if test "$GTK_CONFIG" = "no" ; then no_gtk=yes else GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_gtktest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$GTK_LIBS $LIBS" rm -f conf.gtktest if test "$cross_compiling" = yes; then echo $ac_n "cross compiling; assumed OK... $ac_c" else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtktest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup("$min_gtk_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_gtk_version"); exit(1); } if ((gtk_major_version != $gtk_config_major_version) || (gtk_minor_version != $gtk_config_minor_version) || (gtk_micro_version != $gtk_config_micro_version)) { printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, gtk_major_version, gtk_minor_version, gtk_micro_version); printf ("*** was found! If gtk-config was correct, then it is best\n"); printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); printf("*** required on your system.\n"); printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); printf("*** before re-running configure\n"); } #if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) else if ((gtk_major_version != GTK_MAJOR_VERSION) || (gtk_minor_version != GTK_MINOR_VERSION) || (gtk_micro_version != GTK_MICRO_VERSION)) { printf("*** GTK+ header files (version %d.%d.%d) do not match\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf("*** library (version %d.%d.%d)\n", gtk_major_version, gtk_minor_version, gtk_micro_version); } #endif /* defined (GTK_MAJOR_VERSION) ... */ else { if ((gtk_major_version > major) || ((gtk_major_version == major) && (gtk_minor_version > minor)) || ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) { return 0; } else { printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", gtk_major_version, gtk_minor_version, gtk_micro_version); printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); printf("***\n"); printf("*** If you have already installed a sufficiently new version, this error\n"); printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); printf("*** being found. The easiest way to fix this is to remove the old version\n"); printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); printf("*** correct copy of gtk-config. (In this case, you will have to\n"); printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf("*** so that the correct libraries are found at run-time))\n"); } } return 1; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) no_gtk=yes fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtk" = x ; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 GTK_VERSION="1.2.0" else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 if test "$GTK_CONFIG" = "no" ; then echo "*** The gtk-config script installed by GTK could not be found" echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the GTK_CONFIG environment variable to the" echo "*** full path to gtk-config." else if test -f conf.gtktest ; then : else echo "*** Could not run GTK test program, checking why..." CFLAGS="$CFLAGS $GTK_CFLAGS" LIBS="$LIBS $GTK_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GTK or finding the wrong" echo "*** version of GTK. If it is not finding GTK, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" echo "***" echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" echo "*** came with the system with the command" echo "***" echo "*** rpm --erase --nodeps gtk gtk-devel" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GTK was incorrectly installed" echo "*** or that you have moved GTK since it was installed. In the latter case, you" echo "*** may want to edit the gtk-config script: $GTK_CONFIG" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTK_CFLAGS="" GTK_LIBS="" { { echo "$as_me:$LINENO: error: Cannot find GTK: Is gtk-config in path?" >&5 echo "$as_me: error: Cannot find GTK: Is gtk-config in path?" >&2;} { (exit 1); exit 1; }; } fi rm -f conf.gtktest cat >>confdefs.h <<\_ACEOF #define HAVE_GTK12 1 _ACEOF esac fi echo "$as_me:$LINENO: checking for zlibVersion in -lz" >&5 echo $ECHO_N "checking for zlibVersion in -lz... $ECHO_C" >&6 if test "${ac_cv_lib_z_zlibVersion+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char zlibVersion (); int main () { zlibVersion (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_z_zlibVersion=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_z_zlibVersion=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_z_zlibVersion" >&5 echo "${ECHO_T}$ac_cv_lib_z_zlibVersion" >&6 if test $ac_cv_lib_z_zlibVersion = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" else { { echo "$as_me:$LINENO: error: Cannot find zlib" >&5 echo "$as_me: error: Cannot find zlib" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: checking for working POSIX fnmatch" >&5 echo $ECHO_N "checking for working POSIX fnmatch... $ECHO_C" >&6 if test "${ac_cv_func_fnmatch_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Some versions of Solaris, SCO, and the GNU C Library # have a broken or incompatible fnmatch. # So we run a test program. If we are cross-compiling, take no chance. # Thanks to John Oleynick, Franc,ois Pinard, and Paul Eggert for this test. if test "$cross_compiling" = yes; then ac_cv_func_fnmatch_works=cross else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include # define y(a, b, c) (fnmatch (a, b, c) == 0) # define n(a, b, c) (fnmatch (a, b, c) == FNM_NOMATCH) int main () { exit (!(y ("a*", "abc", 0) && n ("d*/*1", "d/s/1", FNM_PATHNAME) && y ("a\\\\bc", "abc", 0) && n ("a\\\\bc", "abc", FNM_NOESCAPE) && y ("*x", ".x", 0) && n ("*x", ".x", FNM_PERIOD) && 1)); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_fnmatch_works=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_fnmatch_works=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_func_fnmatch_works" >&5 echo "${ECHO_T}$ac_cv_func_fnmatch_works" >&6 if test $ac_cv_func_fnmatch_works = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_FNMATCH 1 _ACEOF fi if test $ac_cv_c_compiler_gnu = yes; then echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5 echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6 if test "${ac_cv_prog_gcc_traditional+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_pattern="Autoconf.*'x'" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5 echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6 if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi echo "$as_me:$LINENO: checking return type of signal handlers" >&5 echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 if test "${ac_cv_type_signal+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #ifdef signal # undef signal #endif #ifdef __cplusplus extern "C" void (*signal (int, void (*)(int)))(int); #else void (*signal ()) (); #endif int main () { int i; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_signal=void else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_signal=int fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 echo "${ECHO_T}$ac_cv_type_signal" >&6 cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF for ac_func in dup2 getmntent getwd hasmntopt memset regcomp strerror strstr mempcpy mkdir getfsent strftime strptime do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in fcntl.h libintl.h mntent.h sys/ioctl.h sys/mount.h sys/vfs.h stddef.h string.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo "$as_me:$LINENO: checking for library containing opendir" >&5 echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 if test "${ac_cv_search_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_opendir=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_opendir="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_opendir" = no; then for ac_lib in dir; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_opendir="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 echo "${ECHO_T}$ac_cv_search_opendir" >&6 if test "$ac_cv_search_opendir" != no; then test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" fi else echo "$as_me:$LINENO: checking for library containing opendir" >&5 echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 if test "${ac_cv_search_opendir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_opendir=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_opendir="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_opendir" = no; then for ac_lib in x; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char opendir (); int main () { opendir (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_opendir="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 echo "${ECHO_T}$ac_cv_search_opendir" >&6 if test "$ac_cv_search_opendir" != no; then test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" fi fi echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6 if test "${ac_cv_header_sys_wait_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_sys_wait_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_sys_wait_h=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6 if test $ac_cv_header_sys_wait_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_SYS_WAIT_H 1 _ACEOF fi echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6 if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6 if test "${ac_cv_struct_tm+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { struct tm *tp; tp->tm_sec; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_struct_tm=time.h else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_struct_tm=sys/time.h fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 echo "${ECHO_T}$ac_cv_struct_tm" >&6 if test $ac_cv_struct_tm = sys/time.h; then cat >>confdefs.h <<\_ACEOF #define TM_IN_SYS_TIME 1 _ACEOF fi echo "$as_me:$LINENO: checking for uid_t in sys/types.h" >&5 echo $ECHO_N "checking for uid_t in sys/types.h... $ECHO_C" >&6 if test "${ac_cv_type_uid_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "uid_t" >/dev/null 2>&1; then ac_cv_type_uid_t=yes else ac_cv_type_uid_t=no fi rm -f conftest* fi echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5 echo "${ECHO_T}$ac_cv_type_uid_t" >&6 if test $ac_cv_type_uid_t = no; then cat >>confdefs.h <<\_ACEOF #define uid_t int _ACEOF cat >>confdefs.h <<\_ACEOF #define gid_t int _ACEOF fi ALL_LINGUAS="ar cs cs-windows-1250 de fr el es hu it nl pl pt ru sr" MKINSTALLDIRS= if test -n "$ac_aux_dir"; then case "$ac_aux_dir" in /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; esac fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi echo "$as_me:$LINENO: checking whether NLS is requested" >&5 echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 # Check whether --enable-nls or --disable-nls was given. if test "${enable_nls+set}" = set; then enableval="$enable_nls" USE_NLS=$enableval else USE_NLS=yes fi; echo "$as_me:$LINENO: result: $USE_NLS" >&5 echo "${ECHO_T}$USE_NLS" >&6 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_MSGFMT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then echo "$as_me:$LINENO: result: $MSGFMT" >&5 echo "${ECHO_T}$MSGFMT" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_GMSGFMT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then echo "$as_me:$LINENO: result: $GMSGFMT" >&5 echo "${ECHO_T}$GMSGFMT" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_XGETTEXT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then echo "$as_me:$LINENO: result: $XGETTEXT" >&5 echo "${ECHO_T}$XGETTEXT" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f messages.po # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_MSGMERGE+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then echo "$as_me:$LINENO: result: $MSGMERGE" >&5 echo "${ECHO_T}$MSGMERGE" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "$GMSGFMT" != ":"; then if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5 echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6 GMSGFMT=":" fi fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5 echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6 XGETTEXT=":" fi rm -f messages.po fi ac_config_commands="$ac_config_commands default-2" echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2 or newer" >&5 echo $ECHO_N "checking whether we are using the GNU C Library 2 or newer... $ECHO_C" >&6 if test "${ac_cv_gnu_library_2+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1; then ac_cv_gnu_library_2=yes else ac_cv_gnu_library_2=no fi rm -f conftest* fi echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2" >&5 echo "${ECHO_T}$ac_cv_gnu_library_2" >&6 GLIBC2="$ac_cv_gnu_library_2" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi echo "$as_me:$LINENO: checking for signed" >&5 echo $ECHO_N "checking for signed... $ECHO_C" >&6 if test "${bh_cv_c_signed+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { signed char x; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then bh_cv_c_signed=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 bh_cv_c_signed=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $bh_cv_c_signed" >&5 echo "${ECHO_T}$bh_cv_c_signed" >&6 if test $bh_cv_c_signed = no; then cat >>confdefs.h <<\_ACEOF #define signed _ACEOF fi echo "$as_me:$LINENO: checking for inline" >&5 echo $ECHO_N "checking for inline... $ECHO_C" >&6 if test "${ac_cv_c_inline+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_inline=$ac_kw; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done fi echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 echo "${ECHO_T}$ac_cv_c_inline" >&6 case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac echo "$as_me:$LINENO: checking for off_t" >&5 echo $ECHO_N "checking for off_t... $ECHO_C" >&6 if test "${ac_cv_type_off_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((off_t *) 0) return 0; if (sizeof (off_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_off_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_off_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 echo "${ECHO_T}$ac_cv_type_off_t" >&6 if test $ac_cv_type_off_t = yes; then : else cat >>confdefs.h <<_ACEOF #define off_t long _ACEOF fi echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6 if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((size_t *) 0) return 0; if (sizeof (size_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6 if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned _ACEOF fi echo "$as_me:$LINENO: checking for long long" >&5 echo $ECHO_N "checking for long long... $ECHO_C" >&6 if test "${ac_cv_type_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ long long ll = 1LL; int i = 63; int main () { long long llmax = (long long) -1; return ll << i | ll >> i | llmax / ll | llmax % ll; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_long_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_long_long=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 echo "${ECHO_T}$ac_cv_type_long_long" >&6 if test $ac_cv_type_long_long = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_LONG_LONG 1 _ACEOF fi echo "$as_me:$LINENO: checking for long double" >&5 echo $ECHO_N "checking for long double... $ECHO_C" >&6 if test "${gt_cv_c_long_double+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$GCC" = yes; then gt_cv_c_long_double=yes else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* The Stardent Vistra knows sizeof(long double), but does not support it. */ long double foo = 0.0; /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ int array [2*(sizeof(long double) >= sizeof(double)) - 1]; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_c_long_double=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_c_long_double=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $gt_cv_c_long_double" >&5 echo "${ECHO_T}$gt_cv_c_long_double" >&6 if test $gt_cv_c_long_double = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_LONG_DOUBLE 1 _ACEOF fi echo "$as_me:$LINENO: checking for wchar_t" >&5 echo $ECHO_N "checking for wchar_t... $ECHO_C" >&6 if test "${gt_cv_c_wchar_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include wchar_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_c_wchar_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_c_wchar_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $gt_cv_c_wchar_t" >&5 echo "${ECHO_T}$gt_cv_c_wchar_t" >&6 if test $gt_cv_c_wchar_t = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WCHAR_T 1 _ACEOF fi echo "$as_me:$LINENO: checking for wint_t" >&5 echo $ECHO_N "checking for wint_t... $ECHO_C" >&6 if test "${gt_cv_c_wint_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include wint_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_c_wint_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_c_wint_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $gt_cv_c_wint_t" >&5 echo "${ECHO_T}$gt_cv_c_wint_t" >&6 if test $gt_cv_c_wint_t = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_WINT_T 1 _ACEOF fi echo "$as_me:$LINENO: checking for inttypes.h" >&5 echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6 if test "${gl_cv_header_inttypes_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gl_cv_header_inttypes_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gl_cv_header_inttypes_h=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $gl_cv_header_inttypes_h" >&5 echo "${ECHO_T}$gl_cv_header_inttypes_h" >&6 if test $gl_cv_header_inttypes_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H_WITH_UINTMAX 1 _ACEOF fi echo "$as_me:$LINENO: checking for stdint.h" >&5 echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6 if test "${gl_cv_header_stdint_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gl_cv_header_stdint_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gl_cv_header_stdint_h=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $gl_cv_header_stdint_h" >&5 echo "${ECHO_T}$gl_cv_header_stdint_h" >&6 if test $gl_cv_header_stdint_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H_WITH_UINTMAX 1 _ACEOF fi echo "$as_me:$LINENO: checking for intmax_t" >&5 echo $ECHO_N "checking for intmax_t... $ECHO_C" >&6 if test "${gt_cv_c_intmax_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if HAVE_STDINT_H_WITH_UINTMAX #include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include #endif int main () { intmax_t x = -1; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_c_intmax_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_c_intmax_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $gt_cv_c_intmax_t" >&5 echo "${ECHO_T}$gt_cv_c_intmax_t" >&6 if test $gt_cv_c_intmax_t = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_INTMAX_T 1 _ACEOF fi echo "$as_me:$LINENO: checking whether printf() supports POSIX/XSI format strings" >&5 echo $ECHO_N "checking whether printf() supports POSIX/XSI format strings... $ECHO_C" >&6 if test "${gt_cv_func_printf_posix+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ notposix #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "notposix" >/dev/null 2>&1; then gt_cv_func_printf_posix="guessing no" else gt_cv_func_printf_posix="guessing yes" fi rm -f conftest* else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_func_printf_posix=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) gt_cv_func_printf_posix=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $gt_cv_func_printf_posix" >&5 echo "${ECHO_T}$gt_cv_func_printf_posix" >&6 case $gt_cv_func_printf_posix in *yes) cat >>confdefs.h <<\_ACEOF #define HAVE_POSIX_PRINTF 1 _ACEOF ;; esac # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo "$as_me:$LINENO: checking for working alloca.h" >&5 echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 if test "${ac_cv_working_alloca_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_working_alloca_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_working_alloca_h=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 if test $ac_cv_working_alloca_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ALLOCA_H 1 _ACEOF fi echo "$as_me:$LINENO: checking for alloca" >&5 echo $ECHO_N "checking for alloca... $ECHO_C" >&6 if test "${ac_cv_func_alloca_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # if HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_alloca_works=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_alloca_works=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 if test $ac_cv_func_alloca_works = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ALLOCA 1 _ACEOF else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=alloca.$ac_objext cat >>confdefs.h <<\_ACEOF #define C_ALLOCA 1 _ACEOF echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 if test "${ac_cv_os_cray+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #if defined(CRAY) && ! defined(CRAY2) webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 echo "${ECHO_T}$ac_cv_os_cray" >&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 if test "${ac_cv_c_stack_direction+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_c_stack_direction=0 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int find_stack_direction () { static char *addr = 0; auto char dummy; if (addr == 0) { addr = &dummy; return find_stack_direction (); } else return (&dummy > addr) ? 1 : -1; } int main () { exit (find_stack_direction () < 0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_stack_direction=1 else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_c_stack_direction=-1 fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi for ac_header in stdlib.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for working mmap" >&5 echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_mmap_fixed_mapped=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !STDC_HEADERS && !HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #if !HAVE_GETPAGESIZE /* Assume that all systems that can run configure have sys/param.h. */ # if !HAVE_SYS_PARAM_H # define HAVE_SYS_PARAM_H 1 # endif # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # if HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; int i, pagesize; int fd; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) exit (1); for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) exit (1); if (write (fd, data, pagesize) != pagesize) exit (1); close (fd); /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) exit (1); data2 = (char *) malloc (2 * pagesize); if (!data2) exit (1); data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1); if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) exit (1); for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) exit (1); /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) exit (1); if (read (fd, data3, pagesize) != pagesize) exit (1); for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) exit (1); close (fd); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_mmap_fixed_mapped=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 if test $ac_cv_func_mmap_fixed_mapped = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_MMAP 1 _ACEOF fi rm -f conftest.mmap echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2.1 or newer" >&5 echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6 if test "${ac_cv_gnu_library_2_1+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1; then ac_cv_gnu_library_2_1=yes else ac_cv_gnu_library_2_1=no fi rm -f conftest* fi echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2_1" >&5 echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6 GLIBC21="$ac_cv_gnu_library_2_1" echo "$as_me:$LINENO: checking whether integer division by zero raises SIGFPE" >&5 echo $ECHO_N "checking whether integer division by zero raises SIGFPE... $ECHO_C" >&6 if test "${gt_cv_int_divbyzero_sigfpe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then # Guess based on the CPU. case "$host_cpu" in alpha* | i3456786 | m68k | s390*) gt_cv_int_divbyzero_sigfpe="guessing yes";; *) gt_cv_int_divbyzero_sigfpe="guessing no";; esac else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include static void #ifdef __cplusplus sigfpe_handler (int sig) #else sigfpe_handler (sig) int sig; #endif { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ exit (sig != SIGFPE); } int x = 1; int y = 0; int z; int nan; int main () { signal (SIGFPE, sigfpe_handler); /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) signal (SIGTRAP, sigfpe_handler); #endif /* Linux/SPARC yields signal SIGILL. */ #if defined (__sparc__) && defined (__linux__) signal (SIGILL, sigfpe_handler); #endif z = x / y; nan = y / y; exit (1); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_int_divbyzero_sigfpe=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) gt_cv_int_divbyzero_sigfpe=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi echo "$as_me:$LINENO: result: $gt_cv_int_divbyzero_sigfpe" >&5 echo "${ECHO_T}$gt_cv_int_divbyzero_sigfpe" >&6 case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac cat >>confdefs.h <<_ACEOF #define INTDIV0_RAISES_SIGFPE $value _ACEOF echo "$as_me:$LINENO: checking for unsigned long long" >&5 echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6 if test "${ac_cv_type_unsigned_long_long+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ unsigned long long ull = 1ULL; int i = 63; int main () { unsigned long long ullmax = (unsigned long long) -1; return ull << i | ull >> i | ullmax / ull | ullmax % ull; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_unsigned_long_long=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_unsigned_long_long=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long" >&5 echo "${ECHO_T}$ac_cv_type_unsigned_long_long" >&6 if test $ac_cv_type_unsigned_long_long = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_UNSIGNED_LONG_LONG 1 _ACEOF fi if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then test $ac_cv_type_unsigned_long_long = yes \ && ac_type='unsigned long long' \ || ac_type='unsigned long' cat >>confdefs.h <<_ACEOF #define uintmax_t $ac_type _ACEOF else cat >>confdefs.h <<\_ACEOF #define HAVE_UINTMAX_T 1 _ACEOF fi echo "$as_me:$LINENO: checking for inttypes.h" >&5 echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6 if test "${gt_cv_header_inttypes_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_header_inttypes_h=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_header_inttypes_h=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $gt_cv_header_inttypes_h" >&5 echo "${ECHO_T}$gt_cv_header_inttypes_h" >&6 if test $gt_cv_header_inttypes_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H 1 _ACEOF fi if test $gt_cv_header_inttypes_h = yes; then echo "$as_me:$LINENO: checking whether the inttypes.h PRIxNN macros are broken" >&5 echo $ECHO_N "checking whether the inttypes.h PRIxNN macros are broken... $ECHO_C" >&6 if test "${gt_cv_inttypes_pri_broken+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #ifdef PRId32 char *p = PRId32; #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_inttypes_pri_broken=no else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_inttypes_pri_broken=yes fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $gt_cv_inttypes_pri_broken" >&5 echo "${ECHO_T}$gt_cv_inttypes_pri_broken" >&6 fi if test "$gt_cv_inttypes_pri_broken" = yes; then cat >>confdefs.h <<_ACEOF #define PRI_MACROS_BROKEN 1 _ACEOF fi for ac_header in stdint.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for SIZE_MAX" >&5 echo $ECHO_N "checking for SIZE_MAX... $ECHO_C" >&6 result= cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if HAVE_STDINT_H #include #endif #ifdef SIZE_MAX Found it #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Found it" >/dev/null 2>&1; then result=yes fi rm -f conftest* if test -z "$result"; then if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((~(size_t)0 / 10) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((~(size_t)0 / 10) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((~(size_t)0 / 10) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((~(size_t)0 / 10) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((~(size_t)0 / 10) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) res_hi=$ac_lo;; '') result=? ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 echo "$as_me: error: internal error: not reached in cross-compile" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include long longval () { return ~(size_t)0 / 10; } unsigned long ulongval () { return ~(size_t)0 / 10; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if ((~(size_t)0 / 10) < 0) { long i = longval (); if (i != (~(size_t)0 / 10)) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != (~(size_t)0 / 10)) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then res_hi=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) result=? fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((~(size_t)0 % 10) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((~(size_t)0 % 10) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((~(size_t)0 % 10) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((~(size_t)0 % 10) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((~(size_t)0 % 10) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) res_lo=$ac_lo;; '') result=? ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 echo "$as_me: error: internal error: not reached in cross-compile" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include long longval () { return ~(size_t)0 % 10; } unsigned long ulongval () { return ~(size_t)0 % 10; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if ((~(size_t)0 % 10) < 0) { long i = longval (); if (i != (~(size_t)0 % 10)) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != (~(size_t)0 % 10)) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then res_lo=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) result=? fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=0 ac_mid=0 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr $ac_mid + 1` if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=-1 ac_mid=-1 while :; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_lo=$ac_mid; break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_hi=`expr '(' $ac_mid ')' - 1` if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi ac_mid=`expr 2 '*' $ac_mid` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo= ac_hi= fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_hi=$ac_mid else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_lo=`expr '(' $ac_mid ')' + 1` fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in ?*) fits_in_uint=$ac_lo;; '') result=? ;; esac else if test "$cross_compiling" = yes; then { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5 echo "$as_me: error: internal error: not reached in cross-compile" >&2;} { (exit 1); exit 1; }; } else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include long longval () { return sizeof (size_t) <= sizeof (unsigned int); } unsigned long ulongval () { return sizeof (size_t) <= sizeof (unsigned int); } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) exit (1); if ((sizeof (size_t) <= sizeof (unsigned int)) < 0) { long i = longval (); if (i != (sizeof (size_t) <= sizeof (unsigned int))) exit (1); fprintf (f, "%ld\n", i); } else { unsigned long i = ulongval (); if (i != (sizeof (size_t) <= sizeof (unsigned int))) exit (1); fprintf (f, "%lu\n", i); } exit (ferror (f) || fclose (f) != 0); ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then fits_in_uint=`cat conftest.val` else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) result=? fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi rm -f conftest.val if test "$fits_in_uint" = 1; then cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include extern size_t foo; extern unsigned long foo; int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then fits_in_uint=0 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi if test -z "$result"; then if test "$fits_in_uint" = 1; then result="$res_hi$res_lo"U else result="$res_hi$res_lo"UL fi else result='~(size_t)0' fi fi echo "$as_me:$LINENO: result: $result" >&5 echo "${ECHO_T}$result" >&6 if test "$result" != yes; then cat >>confdefs.h <<_ACEOF #define SIZE_MAX $result _ACEOF fi for ac_header in stdint.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5 echo $ECHO_N "checking for CFPreferencesCopyAppValue... $ECHO_C" >&6 if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" gt_save_LIBS="$LIBS" LIBS="$LIBS -framework CoreFoundation" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_func_CFPreferencesCopyAppValue=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 echo "${ECHO_T}$gt_cv_func_CFPreferencesCopyAppValue" >&6 if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_CFPREFERENCESCOPYAPPVALUE 1 _ACEOF fi echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5 echo $ECHO_N "checking for CFLocaleCopyCurrent... $ECHO_C" >&6 if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" gt_save_LIBS="$LIBS" LIBS="$LIBS -framework CoreFoundation" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_func_CFLocaleCopyCurrent=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_func_CFLocaleCopyCurrent=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 echo "${ECHO_T}$gt_cv_func_CFLocaleCopyCurrent" >&6 if test $gt_cv_func_CFLocaleCopyCurrent = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_CFLOCALECOPYCURRENT 1 _ACEOF fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by GCC" >&5 echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${acl_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then echo "$as_me:$LINENO: result: $LD" >&5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${acl_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6 with_gnu_ld=$acl_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for shared library run path origin" >&5 echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6 if test "${acl_cv_rpath+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5 echo "${ECHO_T}$acl_cv_rpath" >&6 wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath or --disable-rpath was given. if test "${enable_rpath+set}" = set; then enableval="$enable_rpath" : else enable_rpath=yes fi; use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix or --without-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then withval="$with_libiconv_prefix" if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi fi; LIBICONV= LTLIBICONV= INCICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi echo "$as_me:$LINENO: checking for ptrdiff_t" >&5 echo $ECHO_N "checking for ptrdiff_t... $ECHO_C" >&6 if test "${ac_cv_type_ptrdiff_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((ptrdiff_t *) 0) return 0; if (sizeof (ptrdiff_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_ptrdiff_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_ptrdiff_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5 echo "${ECHO_T}$ac_cv_type_ptrdiff_t" >&6 if test $ac_cv_type_ptrdiff_t = yes; then : else cat >>confdefs.h <<\_ACEOF #define ptrdiff_t long _ACEOF fi for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------ ## ## Report this to the AC_PACKAGE_NAME lists. ## ## ------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in asprintf fwprintf getcwd getegid geteuid getgid getuid \ mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \ strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \ __fsetlocking do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking whether _snprintf is declared" >&5 echo $ECHO_N "checking whether _snprintf is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl__snprintf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { #ifndef _snprintf char *p = (char *) _snprintf; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl__snprintf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl__snprintf=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl__snprintf" >&5 echo "${ECHO_T}$ac_cv_have_decl__snprintf" >&6 if test $ac_cv_have_decl__snprintf = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL__SNPRINTF $gt_value _ACEOF echo "$as_me:$LINENO: checking whether _snwprintf is declared" >&5 echo $ECHO_N "checking whether _snwprintf is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl__snwprintf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { #ifndef _snwprintf char *p = (char *) _snwprintf; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl__snwprintf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl__snwprintf=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl__snwprintf" >&5 echo "${ECHO_T}$ac_cv_have_decl__snwprintf" >&6 if test $ac_cv_have_decl__snwprintf = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL__SNWPRINTF $gt_value _ACEOF echo "$as_me:$LINENO: checking whether feof_unlocked is declared" >&5 echo $ECHO_N "checking whether feof_unlocked is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_feof_unlocked+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { #ifndef feof_unlocked char *p = (char *) feof_unlocked; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_feof_unlocked=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_feof_unlocked=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_feof_unlocked" >&5 echo "${ECHO_T}$ac_cv_have_decl_feof_unlocked" >&6 if test $ac_cv_have_decl_feof_unlocked = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FEOF_UNLOCKED $gt_value _ACEOF echo "$as_me:$LINENO: checking whether fgets_unlocked is declared" >&5 echo $ECHO_N "checking whether fgets_unlocked is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_fgets_unlocked+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { #ifndef fgets_unlocked char *p = (char *) fgets_unlocked; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_fgets_unlocked=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_fgets_unlocked=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_fgets_unlocked" >&5 echo "${ECHO_T}$ac_cv_have_decl_fgets_unlocked" >&6 if test $ac_cv_have_decl_fgets_unlocked = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FGETS_UNLOCKED $gt_value _ACEOF echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5 echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6 if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { #ifndef getc_unlocked char *p = (char *) getc_unlocked; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_have_decl_getc_unlocked=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_have_decl_getc_unlocked=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5 echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6 if test $ac_cv_have_decl_getc_unlocked = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETC_UNLOCKED $gt_value _ACEOF case $gt_cv_func_printf_posix in *yes) HAVE_POSIX_PRINTF=1 ;; *) HAVE_POSIX_PRINTF=0 ;; esac if test "$ac_cv_func_asprintf" = yes; then HAVE_ASPRINTF=1 else HAVE_ASPRINTF=0 fi if test "$ac_cv_func_snprintf" = yes; then HAVE_SNPRINTF=1 else HAVE_SNPRINTF=0 fi if test "$ac_cv_func_wprintf" = yes; then HAVE_WPRINTF=1 else HAVE_WPRINTF=0 fi am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done echo "$as_me:$LINENO: checking for iconv" >&5 echo $ECHO_N "checking for iconv... $ECHO_C" >&6 if test "${am_cv_func_iconv+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then am_cv_func_iconv=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then am_cv_lib_iconv=yes am_cv_func_iconv=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5 echo "${ECHO_T}$am_cv_func_iconv" >&6 if test "$am_cv_func_iconv" = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ICONV 1 _ACEOF fi if test "$am_cv_lib_iconv" = yes; then echo "$as_me:$LINENO: checking how to link with libiconv" >&5 echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $LIBICONV" >&5 echo "${ECHO_T}$LIBICONV" >&6 else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then echo "$as_me:$LINENO: checking for iconv declaration" >&5 echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6 if test "${am_cv_proto_iconv+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then am_cv_proto_iconv_arg1="" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 am_cv_proto_iconv_arg1="const" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` echo "$as_me:$LINENO: result: ${ac_t:- }$am_cv_proto_iconv" >&5 echo "${ECHO_T}${ac_t:- }$am_cv_proto_iconv" >&6 cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5 echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6 if test "${am_cv_langinfo_codeset+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { char* cs = nl_langinfo(CODESET); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then am_cv_langinfo_codeset=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 am_cv_langinfo_codeset=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5 echo "${ECHO_T}$am_cv_langinfo_codeset" >&6 if test $am_cv_langinfo_codeset = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_LANGINFO_CODESET 1 _ACEOF fi if test $ac_cv_header_locale_h = yes; then echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 if test "${gt_cv_val_LC_MESSAGES+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_val_LC_MESSAGES=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_val_LC_MESSAGES=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $gt_cv_val_LC_MESSAGES" >&5 echo "${ECHO_T}$gt_cv_val_LC_MESSAGES" >&6 if test $gt_cv_val_LC_MESSAGES = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_LC_MESSAGES 1 _ACEOF fi fi if test -n "$INTL_MACOSX_LIBS"; then CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" fi for ac_prog in bison do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_INTLBISON+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$INTLBISON"; then ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_INTLBISON="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi INTLBISON=$ac_cv_prog_INTLBISON if test -n "$INTLBISON"; then echo "$as_me:$LINENO: result: $INTLBISON" >&5 echo "${ECHO_T}$INTLBISON" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$INTLBISON" && break done if test -z "$INTLBISON"; then ac_verc_fail=yes else echo "$as_me:$LINENO: checking version of bison" >&5 echo $ECHO_N "checking version of bison... $ECHO_C" >&6 ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac echo "$as_me:$LINENO: result: $ac_prog_version" >&5 echo "${ECHO_T}$ac_prog_version" >&6 fi if test $ac_verc_fail = yes; then INTLBISON=: fi echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5 echo $ECHO_N "checking for CFPreferencesCopyAppValue... $ECHO_C" >&6 if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" gt_save_LIBS="$LIBS" LIBS="$LIBS -framework CoreFoundation" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_func_CFPreferencesCopyAppValue=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 echo "${ECHO_T}$gt_cv_func_CFPreferencesCopyAppValue" >&6 if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_CFPREFERENCESCOPYAPPVALUE 1 _ACEOF fi echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5 echo $ECHO_N "checking for CFLocaleCopyCurrent... $ECHO_C" >&6 if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" gt_save_LIBS="$LIBS" LIBS="$LIBS -framework CoreFoundation" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_func_CFLocaleCopyCurrent=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_func_CFLocaleCopyCurrent=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 echo "${ECHO_T}$gt_cv_func_CFLocaleCopyCurrent" >&6 if test $gt_cv_func_CFLocaleCopyCurrent = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_CFLOCALECOPYCURRENT 1 _ACEOF fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi echo "$as_me:$LINENO: checking whether NLS is requested" >&5 echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 # Check whether --enable-nls or --disable-nls was given. if test "${enable_nls+set}" = set; then enableval="$enable_nls" USE_NLS=$enableval else USE_NLS=yes fi; echo "$as_me:$LINENO: result: $USE_NLS" >&5 echo "${ECHO_T}$USE_NLS" >&6 BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no LIBINTL= LTLIBINTL= POSUB= if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6 # Check whether --with-included-gettext or --without-included-gettext was given. if test "${with_included_gettext+set}" = set; then withval="$with_included_gettext" nls_cv_force_use_gnu_gettext=$withval else nls_cv_force_use_gnu_gettext=no fi; echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6 nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5 echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6 if test "${gt_cv_func_gnugettext1_libc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return * gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_func_gnugettext1_libc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_func_gnugettext1_libc=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libc" >&5 echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6 if test "$gt_cv_func_gnugettext1_libc" != "yes"; then use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix or --without-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then withval="$with_libintl_prefix" if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi fi; LIBINTL= LTLIBINTL= INCINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5 echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6 if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then gt_cv_func_gnugettext1_libintl=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_func_gnugettext1_libintl=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" gt_cv_func_gnugettext1_libintl=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libintl" >&5 echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&6 fi if test "$gt_cv_func_gnugettext1_libc" = "yes" \ || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test "$gt_use_preinstalled_gnugettext" != "yes"; then nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="\${top_builddir}/intl/libintl.a $LIBICONV" LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then CATOBJEXT=.gmo fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then cat >>confdefs.h <<\_ACEOF #define ENABLE_NLS 1 _ACEOF else USE_NLS=no fi fi echo "$as_me:$LINENO: checking whether to use NLS" >&5 echo $ECHO_N "checking whether to use NLS... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $USE_NLS" >&5 echo "${ECHO_T}$USE_NLS" >&6 if test "$USE_NLS" = "yes"; then echo "$as_me:$LINENO: checking where the gettext function comes from" >&5 echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6 if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi echo "$as_me:$LINENO: result: $gt_source" >&5 echo "${ECHO_T}$gt_source" >&6 fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then echo "$as_me:$LINENO: checking how to link with libintl" >&5 echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $LIBINTL" >&5 echo "${ECHO_T}$LIBINTL" >&6 for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi cat >>confdefs.h <<\_ACEOF #define HAVE_GETTEXT 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi POSUB=po fi if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi nls_cv_header_intl= nls_cv_header_libgt= DATADIRNAME=share INSTOBJEXT=.mo GENCAT=gencat INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi INTL_LIBTOOL_SUFFIX_PREFIX= INTLLIBS="$LIBINTL" HOST_OS="" HOST_OS_FULLNAME="" case "$host" in *-*-windows*) HOST_OS="OS_WINDOWS" HOST_OS_FULLNAME="MS Windows" ;; *-*-cygwin*) HOST_OS="OS_CYGWIN" HOST_OS_FULLNAME="GNU/Cygwin" ;; *-*-linux*) HOST_OS="OS_LINUX" HOST_OS_FULLNAME="GNU/Linux" ;; *-*-freebsd*) HOST_OS="OS_FREEBSD" HOST_OS_FULLNAME="FreeBSD" ;; *-*-openbsd*) HOST_OS="OS_OPENBSD" HOST_OS_FULLNAME="OpenBSD" ;; *-*-netbsd*) HOST_OS="OS_NETBSD" HOST_OS_FULLNAME="NetBSD" ;; *-*-macosx*) HOST_OS="OS_MACOSX" HOST_OS_FULLNAME="MacOS X" ;; *-*-macos*) HOST_OS="OS_MACOS" HOST_OS_FULLNAME="MacOS" ;; *-*-darwin*) HOST_OS="OS_DARWIN" HOST_OS_FULLNAME="Darwin" ;; *) HOST_OS="OS_UNKNOWN" HOST_OS_FULLNAME="Unknown" esac echo "checking for host... $HOST_OS_FULLNAME" if test "x${prefix}" = "xNONE"; then cat >>confdefs.h <<_ACEOF #define PACKAGE_LOCALE_DIR "${ac_default_prefix}/${DATADIRNAME}/locale" _ACEOF else cat >>confdefs.h <<_ACEOF #define PACKAGE_LOCALE_DIR "${prefix}/${DATADIRNAME}/locale" _ACEOF fi if test "x${datadir}" = 'x${prefix}/share'; then if test "x${prefix}" = "xNONE"; then cat >>confdefs.h <<_ACEOF #define PACKAGE_DATA_DIR "${ac_default_prefix}/share/${PACKAGE}" _ACEOF else cat >>confdefs.h <<_ACEOF #define PACKAGE_DATA_DIR "${prefix}/share/${PACKAGE}" _ACEOF fi else cat >>confdefs.h <<_ACEOF #define PACKAGE_DATA_DIR "${datadir}/${PACKAGE}" _ACEOF fi if test "x${prefix}" = "xNONE"; then cat >>confdefs.h <<_ACEOF #define PACKAGE_PLUGINS_DIR "${ac_default_prefix}/share/${PACKAGE}/plugins" _ACEOF else cat >>confdefs.h <<_ACEOF #define PACKAGE_PLUGINS_DIR "${prefix}/share/${PACKAGE}/plugins" _ACEOF fi if test "x${prefix}" = "xNONE"; then cat >>confdefs.h <<_ACEOF #define PACKAGE_PLUGINS_CATALOG_DIR "${ac_default_prefix}/share/${PACKAGE}/plugins/catalog" _ACEOF else cat >>confdefs.h <<_ACEOF #define PACKAGE_PLUGINS_CATALOG_DIR "${prefix}/share/${PACKAGE}/plugins/catalog" _ACEOF fi if test "x${prefix}" = "xNONE"; then cat >>confdefs.h <<_ACEOF #define PACKAGE_PLUGINS_DESCRIPTION_DIR "${ac_default_prefix}/share/${PACKAGE}/plugins/descr" _ACEOF else cat >>confdefs.h <<_ACEOF #define PACKAGE_PLUGINS_DESCRIPTION_DIR "${prefix}/share/${PACKAGE}/plugins/descr" _ACEOF fi packagesrcdir=`cd $srcdir && pwd` cat >>confdefs.h <<_ACEOF #define PACKAGE_SOURCE_DIR "${packagesrcdir}" _ACEOF if test "x$GCC" = "xyes"; then case " $CFLAGS " in *[\ \ ]-Wall[\ \ ]*) ;; *) CFLAGS="$CFLAGS -Wall" ;; esac fi # Check whether --enable-debug or --disable-debug was given. if test "${enable_debug+set}" = set; then enableval="$enable_debug" GW_DEBUG_MODE=yes else GW_DEBUG_MODE=no fi; GMLLIB= if test "x$GW_DEBUG_MODE" = "xyes" ; then cat >>confdefs.h <<\_ACEOF #define GW_DEBUG_MODE 1 _ACEOF echo checking for debug mode... yes else echo checking for debug mode... no fi # Check whether --enable-debug-time or --disable-debug-time was given. if test "${enable_debug_time+set}" = set; then enableval="$enable_debug_time" GW_DEBUG_TIME=yes else GW_DEBUG_TIME=no fi; GMLLIB= if test "x$GW_DEBUG_TIME" = "xyes" ; then if test "x$GW_DEBUG_MODE" = "xyes" ; then cat >>confdefs.h <<\_ACEOF #define GW_DEBUG_TIME 1 _ACEOF echo checking for debug time... yes else echo checking for debug time... no fi fi # Check whether --enable-debug-data-component or --disable-debug-data-component was given. if test "${enable_debug_data_component+set}" = set; then enableval="$enable_debug_data_component" GW_DEBUG_DATA_COMPONENT=yes else GW_DEBUG_DATA_COMPONENT=no fi; GMLLIB= if test "x$GW_DEBUG_DATA_COMPONENT" = "xyes" ; then if test "x$GW_DEBUG_MODE" = "xyes" ; then cat >>confdefs.h <<\_ACEOF #define GW_DEBUG_DATA_COMPONENT 1 _ACEOF echo checking for debug data component... yes else echo checking for debug data component... no fi fi # Check whether --enable-debug-tools-component or --disable-debug-tools-component was given. if test "${enable_debug_tools_component+set}" = set; then enableval="$enable_debug_tools_component" GW_DEBUG_TOOLS_COMPONENT=yes else GW_DEBUG_TOOLS_COMPONENT=no fi; GMLLIB= if test "x$GW_DEBUG_TOOLS_COMPONENT" = "xyes" ; then if test "x$GW_DEBUG_MODE" = "xyes" ; then cat >>confdefs.h <<\_ACEOF #define GW_DEBUG_TOOLS_COMPONENT 1 _ACEOF echo checking for debug tools component... yes else echo checking for debug tools component... no fi fi # Check whether --enable-debug-gui-component or --disable-debug-gui-component was given. if test "${enable_debug_gui_component+set}" = set; then enableval="$enable_debug_gui_component" GW_DEBUG_GUI_COMPONENT=yes else GW_DEBUG_GUI_COMPONENT=no fi; GMLLIB= if test "x$GW_DEBUG_GUI_COMPONENT" = "xyes" ; then if test "x$GW_DEBUG_MODE" = "xyes" ; then cat >>confdefs.h <<\_ACEOF #define GW_DEBUG_GUI_COMPONENT 1 _ACEOF echo checking for debug gui component... yes else echo checking for debug gui component... no fi fi # Check whether --enable-debug-gui-callback-component or --disable-debug-gui-callback-component was given. if test "${enable_debug_gui_callback_component+set}" = set; then enableval="$enable_debug_gui_callback_component" GW_DEBUG_GUI_CALLBACK_COMPONENT=yes else GW_DEBUG_GUI_CALLBACK_COMPONENT=no fi; GMLLIB= if test "x$GW_DEBUG_GUI_CALLBACK_COMPONENT" = "xyes" ; then if test "x$GW_DEBUG_MODE" = "xyes" ; then cat >>confdefs.h <<\_ACEOF #define GW_DEBUG_GUI_CALLBACK_COMPONENT 1 _ACEOF echo checking for debug gui callback component... yes else echo checking for debug gui callback component... no fi fi # Check whether --enable-debug-all or --disable-debug-all was given. if test "${enable_debug_all+set}" = set; then enableval="$enable_debug_all" GW_DEBUG_ALL=yes else GW_DEBUG_ALL=no fi; GMLLIB= if test "x$GW_DEBUG_ALL" = "xyes" ; then echo checking for debug all... yes cat >>confdefs.h <<\_ACEOF #define GW_DEBUG_MODE 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define GW_DEBUG_TIME 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define GW_DEBUG_DATA_COMPONENT 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define GW_DEBUG_TOOLS_COMPONENT 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define GW_DEBUG_GUI_COMPONENT 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define GW_DEBUG_GUI_CALLBACK_COMPONENT 1 _ACEOF GW_DEBUG_MODE=yes GW_DEBUG_TIME=yes GW_DEBUG_DATA_COMPONENT=yes GW_DEBUG_TOOLS_COMPONENT=yes GW_DEBUG_GUI_COMPONENT=yes GW_DEBUG_GUI_CALLBACK_COMPONENT=yes else echo checking for debug all... no fi # Extract the first word of "mount", so it can be a program name with args. set dummy mount; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_GW_PROG_PATH_MOUNT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $GW_PROG_PATH_MOUNT in [\\/]* | ?:[\\/]*) ac_cv_path_GW_PROG_PATH_MOUNT="$GW_PROG_PATH_MOUNT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GW_PROG_PATH_MOUNT="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi GW_PROG_PATH_MOUNT=$ac_cv_path_GW_PROG_PATH_MOUNT if test -n "$GW_PROG_PATH_MOUNT"; then echo "$as_me:$LINENO: result: $GW_PROG_PATH_MOUNT" >&5 echo "${ECHO_T}$GW_PROG_PATH_MOUNT" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "x$GW_PROG_PATH_MOUNT" != "x" ; then cat >>confdefs.h <<_ACEOF #define GW_PROG_PATH_MOUNT "$GW_PROG_PATH_MOUNT" _ACEOF fi # Extract the first word of "umount", so it can be a program name with args. set dummy umount; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_path_GW_PROG_PATH_UMOUNT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $GW_PROG_PATH_UMOUNT in [\\/]* | ?:[\\/]*) ac_cv_path_GW_PROG_PATH_UMOUNT="$GW_PROG_PATH_UMOUNT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GW_PROG_PATH_UMOUNT="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done ;; esac fi GW_PROG_PATH_UMOUNT=$ac_cv_path_GW_PROG_PATH_UMOUNT if test -n "$GW_PROG_PATH_UMOUNT"; then echo "$as_me:$LINENO: result: $GW_PROG_PATH_UMOUNT" >&5 echo "${ECHO_T}$GW_PROG_PATH_UMOUNT" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test "x$GW_PROG_PATH_UMOUNT" != "x" ; then cat >>confdefs.h <<_ACEOF #define GW_PROG_PATH_UMOUNT "$GW_PROG_PATH_UMOUNT" _ACEOF fi ac_config_files="$ac_config_files Makefile gwhere.spec src/db/Makefile src/data/Makefile src/tools/Makefile src/gui/Makefile src/res/Makefile src/plugins/Makefile src/plugins/descr/Makefile src/plugins/catalog/Makefile src/plugins/catalog/gwcatalog/Makefile src/plugins/catalog/csv/Makefile src/Makefile debian/Makefile slackware/Makefile doc/Doxyfile doc/Makefile doc/license/Makefile doc/man/Makefile intl/Makefile po/Makefile.in win32/Makefile win32/config.h win32/gwhere.nsi" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "gwhere.spec" ) CONFIG_FILES="$CONFIG_FILES gwhere.spec" ;; "src/db/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/db/Makefile" ;; "src/data/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/data/Makefile" ;; "src/tools/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/tools/Makefile" ;; "src/gui/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/gui/Makefile" ;; "src/res/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/res/Makefile" ;; "src/plugins/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/plugins/Makefile" ;; "src/plugins/descr/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/plugins/descr/Makefile" ;; "src/plugins/catalog/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/plugins/catalog/Makefile" ;; "src/plugins/catalog/gwcatalog/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/plugins/catalog/gwcatalog/Makefile" ;; "src/plugins/catalog/csv/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/plugins/catalog/csv/Makefile" ;; "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "debian/Makefile" ) CONFIG_FILES="$CONFIG_FILES debian/Makefile" ;; "slackware/Makefile" ) CONFIG_FILES="$CONFIG_FILES slackware/Makefile" ;; "doc/Doxyfile" ) CONFIG_FILES="$CONFIG_FILES doc/Doxyfile" ;; "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/license/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/license/Makefile" ;; "doc/man/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/man/Makefile" ;; "intl/Makefile" ) CONFIG_FILES="$CONFIG_FILES intl/Makefile" ;; "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "win32/Makefile" ) CONFIG_FILES="$CONFIG_FILES win32/Makefile" ;; "win32/config.h" ) CONFIG_FILES="$CONFIG_FILES win32/config.h" ;; "win32/gwhere.nsi" ) CONFIG_FILES="$CONFIG_FILES win32/gwhere.nsi" ;; "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "default-2" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-2" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@PROJECT_NAME@,$PROJECT_NAME,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@AWK@,$AWK,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@CXXCPP@,$CXXCPP,;t t s,@F77@,$F77,;t t s,@FFLAGS@,$FFLAGS,;t t s,@ac_ct_F77@,$ac_ct_F77,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@PKG_CONFIG@,$PKG_CONFIG,;t t s,@GTK_CFLAGS@,$GTK_CFLAGS,;t t s,@GTK_LIBS@,$GTK_LIBS,;t t s,@GTK_CONFIG@,$GTK_CONFIG,;t t s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t s,@USE_NLS@,$USE_NLS,;t t s,@MSGFMT@,$MSGFMT,;t t s,@GMSGFMT@,$GMSGFMT,;t t s,@XGETTEXT@,$XGETTEXT,;t t s,@MSGMERGE@,$MSGMERGE,;t t s,@GLIBC2@,$GLIBC2,;t t s,@ALLOCA@,$ALLOCA,;t t s,@GLIBC21@,$GLIBC21,;t t s,@INTL_MACOSX_LIBS@,$INTL_MACOSX_LIBS,;t t s,@HAVE_POSIX_PRINTF@,$HAVE_POSIX_PRINTF,;t t s,@HAVE_ASPRINTF@,$HAVE_ASPRINTF,;t t s,@HAVE_SNPRINTF@,$HAVE_SNPRINTF,;t t s,@HAVE_WPRINTF@,$HAVE_WPRINTF,;t t s,@LIBICONV@,$LIBICONV,;t t s,@LTLIBICONV@,$LTLIBICONV,;t t s,@INTLBISON@,$INTLBISON,;t t s,@BUILD_INCLUDED_LIBINTL@,$BUILD_INCLUDED_LIBINTL,;t t s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t s,@CATOBJEXT@,$CATOBJEXT,;t t s,@DATADIRNAME@,$DATADIRNAME,;t t s,@INSTOBJEXT@,$INSTOBJEXT,;t t s,@GENCAT@,$GENCAT,;t t s,@INTLOBJS@,$INTLOBJS,;t t s,@INTL_LIBTOOL_SUFFIX_PREFIX@,$INTL_LIBTOOL_SUFFIX_PREFIX,;t t s,@INTLLIBS@,$INTLLIBS,;t t s,@LIBINTL@,$LIBINTL,;t t s,@LTLIBINTL@,$LTLIBINTL,;t t s,@POSUB@,$POSUB,;t t s,@HOST_OS@,$HOST_OS,;t t s,@GW_PROG_PATH_MOUNT@,$GW_PROG_PATH_MOUNT,;t t s,@GW_PROG_PATH_UMOUNT@,$GW_PROG_PATH_UMOUNT,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in default-1 ) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h ;; default-2 ) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi echo "" echo "" echo "***************************************************" echo "* Configuring GWhere-$VERSION *" echo "***************************************************" echo "*" echo "* Host OS : $HOST_OS_FULLNAME" echo "*" echo "* GTK+ : $GTK_VERSION" echo "*" echo "* Options :" if test "x$GW_DEBUG_MODE" = "xyes" ; then echo "* - Debug mode enabled" fi if test "x$GW_DEBUG_TIME" = "xyes" ; then echo "* - Debug time enabled" fi if test "x$GW_DEBUG_DATA_COMPONENT" = "xyes" ; then echo "* - Debug data components enabled" fi if test "x$GW_DEBUG_TOOLS_COMPONENT" = "xyes" ; then echo "* - Debug tools components enabled" fi if test "x$GW_DEBUG_GUI_COMPONENT" = "xyes" ; then echo "* - Debug GUI components enabled" fi if test "x$GW_DEBUG_GUI_CALLBACK_COMPONENT" = "xyes" ; then echo "* - Debug GUI callback components enabled" fi echo "*" echo "***************************************************" echo "" echo configure complete, type \'make\' to compile GWhere echo "" gwhere-0.2.3/configure.in0000644000175000017500000002764110506327071013763 0ustar bartbartdnl Process this file with autoconf to produce a configure script. dnl ================================================ AC_INIT(configure.in) AM_INIT_AUTOMAKE(gwhere, 0.2.3) AC_DEFINE(PROJECT_NAME, "GWhere") AM_CONFIG_HEADER(config.h) dnl It is used for the NSIS file autogeneration dnl =========================================== PROJECT_NAME="GWhere" AC_SUBST(PROJECT_NAME) AC_ISC_POSIX AC_PROG_CC AC_PROG_CXX AC_PROG_MAKE_SET AC_PROG_GCC_TRADITIONAL AC_PROG_LN_S AC_PROG_AWK AM_PROG_CC_STDC AC_HEADER_STDC dnl For future use with libgwcatalog dnl ================================ dnl AC_PROG_RANLIB AC_PROG_LIBTOOL AC_ENABLE_SHARED(yes) CFLAGS="$CFLAGS -fno-strict-aliasing" dnl Checks GTK+ version dnl =================== AC_ARG_ENABLE(gtk20, [ --enable-gtk20 compile for GTK+ 2.0 instead of GTK+ 1.2. [default=auto]], USE_GTK=20, USE_GTK=auto) if test "x$USE_GTK" = "x20" ; then AM_PATH_GTK_2_0(1.3.0, GTK_VERSION="1.3.0 or 2.0.0",AC_MSG_ERROR(Cannot find GTK: Is gtk-config in path?)) CFLAGS="$CFLAGS -DGTK_ENABLE_BROKEN" AC_DEFINE(HAVE_GTK20) else AC_ARG_ENABLE(gtk12, [ --enable-gtk12 compile for GTK+ 1.2. [default=auto]], USE_GTK=12, USE_GTK=auto) case $USE_GTK in 12) AM_PATH_GTK(1.2.0, GTK_VERSION="1.2.0",AC_MSG_ERROR(Cannot find GTK: Is gtk-config in path?)) AC_DEFINE(HAVE_GTK12) ;; auto) AM_PATH_GTK(1.2.0, GTK_VERSION="1.2.0",AC_MSG_ERROR(Cannot find GTK: Is gtk-config in path?)) AC_DEFINE(HAVE_GTK12) esac fi dnl Checks for libraries. dnl ===================== dnl AC_CHECK_LIB([z], [zlibVersion], CFLAGS="$CFLAGS -lz", AC_MSG_ERROR(Cannot find zlib)) AC_CHECK_LIB([z], [zlibVersion], , AC_MSG_ERROR(Cannot find zlib)) dnl Checks functions dnl ============== AC_FUNC_FNMATCH AC_PROG_GCC_TRADITIONAL AC_TYPE_SIGNAL AC_CHECK_FUNCS(dup2 getmntent getwd hasmntopt memset regcomp strerror strstr mempcpy mkdir getfsent strftime strptime) dnl Checks headers dnl ============= AC_CHECK_HEADERS(fcntl.h libintl.h mntent.h sys/ioctl.h sys/mount.h sys/vfs.h stddef.h string.h unistd.h) AC_HEADER_DIRENT AC_HEADER_SYS_WAIT AC_HEADER_STDC dnl Checks for typedefs, structures, and compiler characteristics dnl ============================================================= AC_C_CONST AC_STRUCT_TM AC_TYPE_UID_T dnl Add the languages which your application supports here dnl ====================================================== ALL_LINGUAS="ar cs cs-windows-1250 de fr el es hu it nl pl pt ru sr" AM_GNU_GETTEXT dnl Check for host OS dnl ================= HOST_OS="" HOST_OS_FULLNAME="" case "$host" in *-*-windows*) HOST_OS="OS_WINDOWS" HOST_OS_FULLNAME="MS Windows" ;; *-*-cygwin*) HOST_OS="OS_CYGWIN" HOST_OS_FULLNAME="GNU/Cygwin" ;; *-*-linux*) HOST_OS="OS_LINUX" HOST_OS_FULLNAME="GNU/Linux" ;; *-*-freebsd*) HOST_OS="OS_FREEBSD" HOST_OS_FULLNAME="FreeBSD" ;; *-*-openbsd*) HOST_OS="OS_OPENBSD" HOST_OS_FULLNAME="OpenBSD" ;; *-*-netbsd*) HOST_OS="OS_NETBSD" HOST_OS_FULLNAME="NetBSD" ;; *-*-macosx*) HOST_OS="OS_MACOSX" HOST_OS_FULLNAME="MacOS X" ;; *-*-macos*) HOST_OS="OS_MACOS" HOST_OS_FULLNAME="MacOS" ;; *-*-darwin*) HOST_OS="OS_DARWIN" HOST_OS_FULLNAME="Darwin" ;; *) HOST_OS="OS_UNKNOWN" HOST_OS_FULLNAME="Unknown" esac AC_SUBST(HOST_OS) echo "checking for host... $HOST_OS_FULLNAME" dnl Set PACKAGE_LOCALE_DIR in config.h dnl ================================== if test "x${prefix}" = "xNONE"; then AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${ac_default_prefix}/${DATADIRNAME}/locale") else AC_DEFINE_UNQUOTED(PACKAGE_LOCALE_DIR, "${prefix}/${DATADIRNAME}/locale") fi dnl Set PACKAGE_DATA_DIR in config.h dnl ================================ if test "x${datadir}" = 'x${prefix}/share'; then if test "x${prefix}" = "xNONE"; then AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${ac_default_prefix}/share/${PACKAGE}") else AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${prefix}/share/${PACKAGE}") fi else AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${datadir}/${PACKAGE}") fi dnl Set PACKAGE_PLUGINS_DIR in config.h dnl ================================ if test "x${prefix}" = "xNONE"; then AC_DEFINE_UNQUOTED(PACKAGE_PLUGINS_DIR, "${ac_default_prefix}/share/${PACKAGE}/plugins") else AC_DEFINE_UNQUOTED(PACKAGE_PLUGINS_DIR, "${prefix}/share/${PACKAGE}/plugins") fi dnl Set PACKAGE_PLUGINS_CATALOG_DIR in config.h dnl ================================ if test "x${prefix}" = "xNONE"; then AC_DEFINE_UNQUOTED(PACKAGE_PLUGINS_CATALOG_DIR, "${ac_default_prefix}/share/${PACKAGE}/plugins/catalog") else AC_DEFINE_UNQUOTED(PACKAGE_PLUGINS_CATALOG_DIR, "${prefix}/share/${PACKAGE}/plugins/catalog") fi dnl Set PACKAGE_PLUGINS_DESCRIPTION_DIR in config.h dnl ================================ if test "x${prefix}" = "xNONE"; then AC_DEFINE_UNQUOTED(PACKAGE_PLUGINS_DESCRIPTION_DIR, "${ac_default_prefix}/share/${PACKAGE}/plugins/descr") else AC_DEFINE_UNQUOTED(PACKAGE_PLUGINS_DESCRIPTION_DIR, "${prefix}/share/${PACKAGE}/plugins/descr") fi dnl Set PACKAGE_SOURCE_DIR in config.h dnl ================================== packagesrcdir=`cd $srcdir && pwd` AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}") dnl Use -Wall if we have gcc dnl ======================== changequote(,)dnl if test "x$GCC" = "xyes"; then case " $CFLAGS " in *[\ \ ]-Wall[\ \ ]*) ;; *) CFLAGS="$CFLAGS -Wall" ;; esac fi changequote([,])dnl dnl Use -pedantic if we have gcc (not use this option due GTK+ is not C ANSI) dnl ========================================================================= dnl changequote(,)dnl dnl if test "x$GCC" = "xyes"; then dnl case " $CFLAGS " in dnl *[\ \ ]-pedantic[\ \ ]*) ;; dnl *) CFLAGS="$CFLAGS -pedantic" ;; dnl esac dnl fi dnl changequote([,])dnl dnl Use --enable-debug for debug mode dnl ================================= AC_ARG_ENABLE(debug, [ --enable-debug use GWhere in debugging mode. [default=no]], GW_DEBUG_MODE=yes, GW_DEBUG_MODE=no) GMLLIB= if test "x$GW_DEBUG_MODE" = "xyes" ; then AC_DEFINE(GW_DEBUG_MODE) echo checking for debug mode... yes else echo checking for debug mode... no fi dnl Use --enable-debug-time for debug time dnl ====================================== AC_ARG_ENABLE(debug-time, [ --enable-debug-time use GWhere in debugging time. [default=no]], GW_DEBUG_TIME=yes, GW_DEBUG_TIME=no) GMLLIB= if test "x$GW_DEBUG_TIME" = "xyes" ; then if test "x$GW_DEBUG_MODE" = "xyes" ; then AC_DEFINE(GW_DEBUG_TIME) echo checking for debug time... yes else echo checking for debug time... no fi fi dnl Use --enable-debug-data-component for debug data component dnl ========================================================== AC_ARG_ENABLE(debug-data-component, [ --enable-debug-data-component use GWhere in debugging data component. [default=no]], GW_DEBUG_DATA_COMPONENT=yes, GW_DEBUG_DATA_COMPONENT=no) GMLLIB= if test "x$GW_DEBUG_DATA_COMPONENT" = "xyes" ; then if test "x$GW_DEBUG_MODE" = "xyes" ; then AC_DEFINE(GW_DEBUG_DATA_COMPONENT) echo checking for debug data component... yes else echo checking for debug data component... no fi fi dnl Use --enable-debug-tools-component for debug data component dnl ========================================================== AC_ARG_ENABLE(debug-tools-component, [ --enable-debug-tools-component use GWhere in debugging tools component. [default=no]], GW_DEBUG_TOOLS_COMPONENT=yes, GW_DEBUG_TOOLS_COMPONENT=no) GMLLIB= if test "x$GW_DEBUG_TOOLS_COMPONENT" = "xyes" ; then if test "x$GW_DEBUG_MODE" = "xyes" ; then AC_DEFINE(GW_DEBUG_TOOLS_COMPONENT) echo checking for debug tools component... yes else echo checking for debug tools component... no fi fi dnl Use --enable-debug-gui-component for debug GUI component dnl ======================================================== AC_ARG_ENABLE(debug-gui-component, [ --enable-debug-gui-component use GWhere in debugging GUI component. [default=no]], GW_DEBUG_GUI_COMPONENT=yes, GW_DEBUG_GUI_COMPONENT=no) GMLLIB= if test "x$GW_DEBUG_GUI_COMPONENT" = "xyes" ; then if test "x$GW_DEBUG_MODE" = "xyes" ; then AC_DEFINE(GW_DEBUG_GUI_COMPONENT) echo checking for debug gui component... yes else echo checking for debug gui component... no fi fi dnl Use --enable-debug-gui-callback-component for debug GUI callback component dnl ========================================================================== AC_ARG_ENABLE(debug-gui-callback-component, [ --enable-debug-gui-callback-component use GWhere in debugging GUI callback component. [default=no]], GW_DEBUG_GUI_CALLBACK_COMPONENT=yes, GW_DEBUG_GUI_CALLBACK_COMPONENT=no) GMLLIB= if test "x$GW_DEBUG_GUI_CALLBACK_COMPONENT" = "xyes" ; then if test "x$GW_DEBUG_MODE" = "xyes" ; then AC_DEFINE(GW_DEBUG_GUI_CALLBACK_COMPONENT) echo checking for debug gui callback component... yes else echo checking for debug gui callback component... no fi fi dnl Use --enable-debug-all for debug mode dnl ================================= AC_ARG_ENABLE(debug-all, [ --enable-debug-all use GWhere in debugging mode with debug. [default=no]], GW_DEBUG_ALL=yes, GW_DEBUG_ALL=no) GMLLIB= if test "x$GW_DEBUG_ALL" = "xyes" ; then echo checking for debug all... yes AC_DEFINE(GW_DEBUG_MODE) AC_DEFINE(GW_DEBUG_TIME) AC_DEFINE(GW_DEBUG_DATA_COMPONENT) AC_DEFINE(GW_DEBUG_TOOLS_COMPONENT) AC_DEFINE(GW_DEBUG_GUI_COMPONENT) AC_DEFINE(GW_DEBUG_GUI_CALLBACK_COMPONENT) GW_DEBUG_MODE=yes GW_DEBUG_TIME=yes GW_DEBUG_DATA_COMPONENT=yes GW_DEBUG_TOOLS_COMPONENT=yes GW_DEBUG_GUI_COMPONENT=yes GW_DEBUG_GUI_CALLBACK_COMPONENT=yes dnl if test "x$USE_GTK" = "x12" ; then dnl echo checking for mem profile... yes dnl GTK_CFLAGS="$GTK_CFLAGS --enable-mem-profile=yes" dnl else if test "x$USE_GTK" = "xauto" ; then dnl echo checking for mem profile... yes dnl GTK_CFLAGS="$GTK_CFLAGS --enable-mem-profile=yes" dnl fi fi else echo checking for debug all... no fi dnl Set GW_PROG_PATH_MOUNT (mount program path) in config.h dnl ======================================================= AC_PATH_PROG(GW_PROG_PATH_MOUNT, mount) AC_SUBST(GW_PROG_PATH_MOUNT) if test "x$GW_PROG_PATH_MOUNT" != "x" ; then AC_DEFINE_UNQUOTED(GW_PROG_PATH_MOUNT, "$GW_PROG_PATH_MOUNT") fi dnl Set GW_PROG_PATH_UMOUNT (umount program path) in config.h dnl ======================================================= AC_PATH_PROG(GW_PROG_PATH_UMOUNT, umount) AC_SUBST(GW_PROG_PATH_UMOUNT) if test "x$GW_PROG_PATH_UMOUNT" != "x" ; then AC_DEFINE_UNQUOTED(GW_PROG_PATH_UMOUNT, "$GW_PROG_PATH_UMOUNT") fi AC_OUTPUT([ Makefile gwhere.spec src/db/Makefile src/data/Makefile src/tools/Makefile src/gui/Makefile src/res/Makefile src/plugins/Makefile src/plugins/descr/Makefile src/plugins/catalog/Makefile src/plugins/catalog/gwcatalog/Makefile src/plugins/catalog/csv/Makefile src/Makefile debian/Makefile slackware/Makefile doc/Doxyfile doc/Makefile doc/license/Makefile doc/man/Makefile intl/Makefile po/Makefile.in win32/Makefile win32/config.h win32/gwhere.nsi ]) echo "" echo "" echo "***************************************************" echo "* Configuring GWhere-$VERSION *" echo "***************************************************" echo "*" echo "* Host OS : $HOST_OS_FULLNAME" echo "*" echo "* GTK+ : $GTK_VERSION" echo "*" echo "* Options :" if test "x$GW_DEBUG_MODE" = "xyes" ; then echo "* - Debug mode enabled" fi if test "x$GW_DEBUG_TIME" = "xyes" ; then echo "* - Debug time enabled" fi if test "x$GW_DEBUG_DATA_COMPONENT" = "xyes" ; then echo "* - Debug data components enabled" fi if test "x$GW_DEBUG_TOOLS_COMPONENT" = "xyes" ; then echo "* - Debug tools components enabled" fi if test "x$GW_DEBUG_GUI_COMPONENT" = "xyes" ; then echo "* - Debug GUI components enabled" fi if test "x$GW_DEBUG_GUI_CALLBACK_COMPONENT" = "xyes" ; then echo "* - Debug GUI callback components enabled" fi echo "*" echo "***************************************************" echo "" echo configure complete, type \'make\' to compile GWhere echo "" gwhere-0.2.3/configure.scan0000444000175000017500000000275410023202521014257 0ustar bartbart# Process this file with autoconf to produce a configure script. AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) AC_CONFIG_SRCDIR([acconfig.h]) AC_CONFIG_HEADER([config.h]) # Checks for programs. AC_PROG_CXX AC_PROG_AWK AC_PROG_CC AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET AC_PROG_RANLIB # Checks for libraries. # Checks for header files. AC_FUNC_ALLOCA AC_HEADER_DIRENT AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS([argz.h arpa/inet.h fcntl.h libintl.h limits.h locale.h malloc.h mntent.h netdb.h netinet/in.h nl_types.h stddef.h stdlib.h string.h strings.h sys/ioctl.h sys/mount.h sys/param.h sys/socket.h sys/vfs.h unistd.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_TYPE_SIZE_T AC_STRUCT_TM # Checks for library functions. AC_FUNC_FORK AC_PROG_GCC_TRADITIONAL AC_FUNC_LSTAT AC_FUNC_MALLOC AC_FUNC_MMAP AC_FUNC_STAT AC_FUNC_STRFTIME AC_FUNC_STRTOD AC_CHECK_FUNCS([__argz_count __argz_next __argz_stringify dcgettext dup2 getcwd gethostbyname getmntent getwd hasmntopt memmove mempcpy memset mkdir munmap putenv regcomp setenv setlocale socket stpcpy strcasecmp strchr strdup strerror strrchr strstr strtol strtoul]) AC_CONFIG_FILES([Makefile doc/Makefile doc/man/Makefile src/data/Makefile src/gui/Makefile src/plugins/Makefile src/plugins/descr/Makefile src/res/Makefile src/tools/Makefile]) AC_OUTPUT gwhere-0.2.3/COPYING0000444000175000017500000004311010023202521012452 0ustar bartbart GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. gwhere-0.2.3/doc/0000755000175000017500000000000010506575526012217 5ustar bartbartgwhere-0.2.3/doc/license/0000755000175000017500000000000010506575526013641 5ustar bartbartgwhere-0.2.3/doc/license/license.de0000444000175000017500000006267510023202521015563 0ustar bartbartDeutsche Übersetzung der GNU General Public License Erstellt im Auftrag der S.u.S.E. GmbH http://www.suse.de von Katja Lachmann Übersetzungen, überarbeitet von Peter Gerwinski, G-N-U GmbH http://www.g-n-u.de (31. Oktober 1996, 4. Juni 2000) Diese Übersetzung wird mit der Absicht angeboten, das Verständnis der GNU General Public License (GNU-GPL) zu erleichtern. Es handelt sich jedoch nicht um eine offizielle oder im rechtlichen Sinne anerkannte Übersetzung. Die Free Software Foundation (FSF) ist nicht der Herausgeber dieser Übersetzung, und sie hat diese Übersetzung auch nicht als rechtskräftigen Ersatz für die Original- GNU-GPL anerkannt. Da die Übersetzung nicht sorgfältig von Anwälten überprüft wurde, können die Übersetzer nicht garantieren, daß die Übersetzung die rechtlichen Aussagen der GNU-GPL exakt wiedergibt. Wenn Sie sichergehen wollen, daß von Ihnen geplante Aktivitäten im Sinne der GNU-GPL gestattet sind, halten Sie sich bitte an die englischsprachige Originalversion. Die Free Software Foundation möchte Sie darum bitten, diese Übersetzung nicht als offizielle Lizenzbedingungen für von Ihnen geschriebene Programme zu verwenden. Bitte benutzen Sie hierfür stattdessen die von der Free Software Foundation herausgegebene englischsprachige Originalversion. This is a translation of the GNU General Public License into German. This translation is distributed in the hope that it will facilitate understanding, but it is not an official or legally approved translation. The Free Software Foundation is not the publisher of this translation and has not approved it as a legal substitute for the authentic GNU General Public License. The translation has not been reviewed carefully by lawyers, and therefore the translator cannot be sure that it exactly represents the legal meaning of the GNU General Public License. If you wish to be sure whether your planned activities are permitted by the GNU General Public License, please refer to the authentic English version. The Free Software Foundation strongly urges you not to use this translation as the official distribution terms for your programs; instead, please use the authentic English version published by the Free Software Foundation. Source is http://www.gnu.de/gpl-ger.html GNU General Public License Deutsche Übersetzung der Version 2, Juni 1991 Copyright © 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA peter@gerwinski.de Es ist jedermann gestattet, diese Lizenzurkunde zu vervielfältigen und unveränderte Kopien zu verbreiten; Änderungen sind jedoch nicht erlaubt. Diese Übersetzung ist kein rechtskräftiger Ersatz für die englischsprachige Originalversion! Vorwort Die meisten Softwarelizenzen sind daraufhin entworfen worden, Ihnen die Freiheit zu nehmen, die Software weiterzugeben und zu verändern. Im Gegensatz dazu soll Ihnen die GNU General Public License, die Allgemeine Öffentliche GNU-Lizenz, ebendiese Freiheit garantieren. Sie soll sicherstellen, daß die Software für alle Benutzer frei ist. Diese Lizenz gilt für den Großteil der von der Free Software Foundation herausgegebenen Software und für alle anderen Programme, deren Autoren ihr Datenwerk dieser Lizenz unterstellt haben. Auch Sie können diese Möglichkeit der Lizenzierung für Ihre Programme anwenden. (Ein anderer Teil der Software der Free Software Foundation unterliegt stattdessen der GNU Library General Public License , der Allgemeinen Öffentlichen GNU-Lizenz für Bibliotheken.) [Mittlerweile wurde die GNU Library Public License von der GNU Lesser Public License abgelöst - Anmerkung des Übersetzers.] Die Bezeichnung ,,freie`` Software bezieht sich auf Freiheit, nicht auf den Preis. Unsere Lizenzen sollen Ihnen die Freiheit garantieren, Kopien freier Software zu verbreiten (und etwas für diesen Service zu berechnen, wenn Sie möchten), die Möglichkeit, die Software im Quelltext zu erhalten oder den Quelltext auf Wunsch zu bekommen. Die Lizenzen sollen garantieren, daß Sie die Software ändern oder Teile davon in neuen freien Programmen verwenden dürfen - und daß Sie wissen, daß Sie dies alles tun dürfen. Um Ihre Rechte zu schützen, müssen wir Einschränkungen machen, die es jedem verbieten, Ihnen diese Rechte zu verweigern oder Sie aufzufordern, auf diese Rechte zu verzichten. Aus diesen Einschränkungen folgen bestimmte Verantwortlichkeiten für Sie, wenn Sie Kopien der Software verbreiten oder sie verändern. Beispielsweise müssen Sie den Empfängern alle Rechte gewähren, die Sie selbst haben, wenn Sie - kostenlos oder gegen Bezahlung - Kopien eines solchen Programms verbreiten. Sie müssen sicherstellen, daß auch die Empfänger den Quelltext erhalten bzw. erhalten können. Und Sie müssen ihnen diese Bedingungen zeigen, damit sie ihre Rechte kennen. Wir schützen Ihre Rechte in zwei Schritten: (1) Wir stellen die Software unter ein Urheberrecht (Copyright), und (2) wir bieten Ihnen diese Lizenz an, die Ihnen das Recht gibt, die Software zu vervielfältigen, zu verbreiten und/oder zu verändern. Um die Autoren und uns zu schützen, wollen wir darüberhinaus sicherstellen, daß jeder erfährt, daß für diese freie Software keinerlei Garantie besteht. Wenn die Software von jemand anderem modifiziert und weitergegeben wird, möchten wir, daß die Empfänger wissen, daß sie nicht das Original erhalten haben, damit irgendwelche von anderen verursachte Probleme nicht den Ruf des ursprünglichen Autors schädigen. Schließlich und endlich ist jedes freie Programm permanent durch Software-Patente bedroht. Wir möchten die Gefahr ausschließen, daß Distributoren eines freien Programms individuell Patente lizensieren - mit dem Ergebnis, daß das Programm proprietär würde. Um dies zu verhindern, haben wir klargestellt, daß jedes Patent entweder für freie Benutzung durch jedermann lizenziert werden muß oder überhaupt nicht lizenziert werden darf. Es folgen die genauen Bedingungen für die Vervielfältigung, Verbreitung und Bearbeitung: Allgemeine Öffentliche GNU-Lizenz Bedingungen für die Vervielfältigung, Verbreitung und Bearbeitung 0. Diese Lizenz gilt für jedes Programm und jedes andere Datenwerk, in dem ein entsprechender Vermerk des Copyright-Inhabers darauf hinweist, daß das Datenwerk unter den Bestimmungen dieser General Public License verbreitet werden darf. Im folgenden wird jedes derartige Programm oder Datenwerk als ,,das Programm`` bezeichnet; die Formulierung ,,auf dem Programm basierendes Datenwerk`` bezeichnet das Programm sowie jegliche Bearbeitung des Programms im urheberrechtlichen Sinne, also ein Datenwerk, welches das Programm, auch auszugsweise, sei es unverändert oder verändert und/oder in eine andere Sprache übersetzt, enthält. (Im folgenden wird die Übersetzung ohne Einschränkung als ,,Bearbeitung`` eingestuft.) Jeder Lizenznehmer wird im folgenden als ,,Sie`` angesprochen. Andere Handlungen als Vervielfältigung, Verbreitung und Bearbeitung werden von dieser Lizenz nicht berührt; sie fallen nicht in ihren Anwendungsbereich. Der Vorgang der Ausführung des Programms wird nicht eingeschränkt, und die Ausgaben des Programms unterliegen dieser Lizenz nur, wenn der Inhalt ein auf dem Programm basierendes Datenwerk darstellt (unabhängig davon, daß die Ausgabe durch die Ausführung des Programmes erfolgte). Ob dies zutrifft, hängt von den Funktionen des Programms ab. 1. Sie dürfen auf beliebigen Medien unveränderte Kopien des Quelltextes des Programms, wie sie ihn erhalten haben, anfertigen und verbreiten. Voraussetzung hierfür ist, daß Sie mit jeder Kopie einen entsprechenden Copyright-Vermerk sowie einen Haftungsausschluß veröffentlichen, alle Vermerke, die sich auf diese Lizenz und das Fehlen einer Garantie beziehen, unverändert lassen und desweiteren allen anderen Empfängern des Programms zusammen mit dem Programm eine Kopie dieser Lizenz zukommen lassen. Sie dürfen für den eigentlichen Kopiervorgang eine Gebühr verlangen. Wenn Sie es wünschen, dürfen Sie auch gegen Entgeld eine Garantie für das Programm anbieten. 2. Sie dürfen Ihre Kopie(n) des Programms oder eines Teils davon verändern, wodurch ein auf dem Programm basierendes Datenwerk entsteht; Sie dürfen derartige Bearbeitungen unter den Bestimmungen von Paragraph 1 vervielfältigen und verbreiten, vorausgesetzt, daß zusätzlich alle im folgenden genannten Bedingungen erfüllt werden: a) Sie müssen die veränderten Dateien mit einem auffälligen Vermerk versehen, der auf die von Ihnen vorgenommene Modifizierung und das Datum jeder Änderung hinweist. b) Sie müssen dafür sorgen, daß jede von Ihnen verbreitete oder veröffentlichte Arbeit, die ganz oder teilweise von dem Programm oder Teilen davon abgeleitet ist, Dritten gegenüber als Ganzes unter den Bedingungen dieser Lizenz ohne Lizenzgebühren zur Verfügung gestellt wird. c) Wenn das veränderte Programm normalerweise bei der Ausführung interaktiv Kommandos einliest, müssen Sie dafür sorgen, daß es, wenn es auf dem üblichsten Wege für solche interaktive Nutzung gestartet wird, eine Meldung ausgibt oder ausdruckt, die einen geeigneten Copyright-Vermerk enthält sowie einen Hinweis, daß es keine Gewährleistung gibt (oder anderenfalls, daß Sie Garantie leisten), und daß die Benutzer das Programm unter diesen Bedingungen weiter verbreiten dürfen. Auch muß der Benutzer darauf hingewiesen werden, wie er eine Kopie dieser Lizenz ansehen kann. (Ausnahme: Wenn das Programm selbst interaktiv arbeitet, aber normalerweise keine derartige Meldung ausgibt, muß Ihr auf dem Programm basierendes Datenwerk auch keine solche Meldung ausgeben). Diese Anforderungen gelten für das bearbeitete Datenwerk als Ganzes. Wenn identifizierbare Teile des Datenwerkes nicht von dem Programm abgeleitet sind und vernünftigerweise als unabhängige und eigenständige Datenwerke für sich selbst zu betrachten sind, dann gelten diese Lizenz und ihre Bedingungen nicht für die betroffenen Teile, wenn Sie diese als eigenständige Datenwerke weitergeben. Wenn Sie jedoch dieselben Abschnitte als Teil eines Ganzen weitergeben, das ein auf dem Programm basierendes Datenwerk darstellt, dann muß die Weitergabe des Ganzen nach den Bedingungen dieser Lizenz erfolgen, deren Bedingungen für weitere Lizenznehmer somit auf das gesamte Ganze ausgedehnt werden - und somit auf jeden einzelnen Teil, unabhängig vom jeweiligen Autor. Somit ist es nicht die Absicht dieses Abschnittes, Rechte für Datenwerke in Anspruch zu nehmen oder Ihnen die Rechte für Datenwerke streitig zu machen, die komplett von Ihnen geschrieben wurden; vielmehr ist es die Absicht, die Rechte zur Kontrolle der Verbreitung von Datenwerken, die auf dem Programm basieren oder unter seiner auszugsweisen Verwendung zusammengestellt worden sind, auszuüben. Ferner bringt auch das einfache Zusammenlegen eines anderen Datenwerkes, das nicht auf dem Programm basiert, mit dem Programm oder einem auf dem Programm basierenden Datenwerk auf ein- und demselben Speicher- oder Vertriebsmedium dieses andere Datenwerk nicht in den Anwendungsbereich dieser Lizenz. 3. Sie dürfen das Programm (oder ein darauf basierendes Datenwerk gemäß Paragraph 2) als Objectcode oder in ausführbarer Form unter den Bedingungen der Paragraphen 1 und 2 kopieren und weitergeben - vorausgesetzt, daß Sie außerdem eine der folgenden Leistungen erbringen: a) Liefern Sie das Programm zusammen mit dem vollständigen zugehörigen maschinenlesbaren Quelltext auf einem für den Datenaustausch üblichen Medium aus, wobei die Verteilung unter den Bedingungen der Paragraphen 1 und 2 erfolgen muß. Oder: b) Liefern Sie das Programm zusammen mit einem mindestens drei Jahre lang gültigen schriftlichen Angebot aus, jedem Dritten eine vollständige maschinenlesbare Kopie des Quelltextes zur Verfügung zu stellen - zu nicht höheren Kosten als denen, die durch den physikalischen Kopiervorgang anfallen -, wobei der Quelltext unter den Bedingungen der Paragraphen 1 und 2 auf einem für den Datenaustausch üblichen Medium weitergegeben wird. Oder: c) Liefern Sie das Programm zusammen mit dem schriftlichen Angebot der Zurverfügungstellung des Quelltextes aus, das Sie selbst erhalten haben. (Diese Alternative ist nur für nicht-kommerzielle Verbreitung zulässig und nur, wenn Sie das Programm als Objectcode oder in ausführbarer Form mit einem entsprechenden Angebot gemäß Absatz b erhalten haben.) Unter dem Quelltext eines Datenwerkes wird diejenige Form des Datenwerkes verstanden, die für Bearbeitungen vorzugsweise verwendet wird. Für ein ausführbares Programm bedeutet ,,der komplette Quelltext``: Der Quelltext aller im Programm enthaltenen Module einschließlich aller zugehörigen Modulschnittstellen- Definitionsdateien sowie der zur Compilation und Installation verwendeten Skripte. Als besondere Ausnahme jedoch braucht der verteilte Quelltext nichts von dem zu enthalten, was üblicherweise (entweder als Quelltext oder in binärer Form) zusammen mit den Hauptkomponenten des Betriebssystems (Kernel, Compiler usw.) geliefert wird, unter dem das Programm läuft - es sei denn, diese Komponente selbst gehört zum ausführbaren Programm. Wenn die Verbreitung eines ausführbaren Programms oder von Objectcode dadurch erfolgt, daß der Kopierzugriff auf eine dafür vorgesehene Stelle gewährt wird, so gilt die Gewährung eines gleichwertigen Zugriffs auf den Quelltext als Verbreitung des Quelltextes, auch wenn Dritte nicht dazu gezwungen sind, den Quelltext zusammen mit dem Objectcode zu kopieren. 4. Sie dürfen das Programm nicht vervielfältigen, verändern, weiter lizenzieren oder verbreiten, sofern es nicht durch diese Lizenz ausdrücklich gestattet ist. Jeder anderweitige Versuch der Vervielfältigung, Modifizierung, Weiterlizenzierung und Verbreitung ist nichtig und beendet automatisch Ihre Rechte unter dieser Lizenz. Jedoch werden die Lizenzen Dritter, die von Ihnen Kopien oder Rechte unter dieser Lizenz erhalten haben, nicht beendet, solange diese die Lizenz voll anerkennen und befolgen. 5. Sie sind nicht verpflichtet, diese Lizenz anzunehmen, da Sie sie nicht unterzeichnet haben. Jedoch gibt Ihnen nichts anderes die Erlaubnis, das Programm oder von ihm abgeleitete Datenwerke zu verändern oder zu verbreiten. Diese Handlungen sind gesetzlich verboten, wenn Sie diese Lizenz nicht anerkennen. Indem Sie das Programm (oder ein darauf basierendes Datenwerk) verändern oder verbreiten, erklären Sie Ihr Einverständnis mit dieser Lizenz und mit allen ihren Bedingungen bezüglich der Vervielfältigung, Verbreitung und Veränderung des Programms oder eines darauf basierenden Datenwerks. 6. Jedesmal, wenn Sie das Programm (oder ein auf dem Programm basierendes Datenwerk) weitergeben, erhält der Empfänger automatisch vom ursprünglichen Lizenzgeber die Lizenz, das Programm entsprechend den hier festgelegten Bestimmungen zu vervielfältigen, zu verbreiten und zu verändern. Sie dürfen keine weiteren Einschränkungen der Durchsetzung der hierin zugestandenen Rechte des Empfängers vornehmen. Sie sind nicht dafür verantwortlich, die Einhaltung dieser Lizenz durch Dritte durchzusetzen. 7. Sollten Ihnen infolge eines Gerichtsurteils, des Vorwurfs einer Patentverletzung oder aus einem anderen Grunde (nicht auf Patentfragen begrenzt) Bedingungen (durch Gerichtsbeschluß, Vergleich oder anderweitig) auferlegt werden, die den Bedingungen dieser Lizenz widersprechen, so befreien Sie diese Umstände nicht von den Bestimmungen dieser Lizenz. Wenn es Ihnen nicht möglich ist, das Programm unter gleichzeitiger Beachtung der Bedingungen in dieser Lizenz und Ihrer anderweitigen Verpflichtungen zu verbreiten, dann dürfen Sie als Folge das Programm überhaupt nicht verbreiten. Wenn zum Beispiel ein Patent nicht die gebührenfreie Weiterverbreitung des Programms durch diejenigen erlaubt, die das Programm direkt oder indirekt von Ihnen erhalten haben, dann besteht der einzige Weg, sowohl das Patentrecht als auch diese Lizenz zu befolgen, darin, ganz auf die Verbreitung des Programms zu verzichten. Sollte sich ein Teil dieses Paragraphen als ungültig oder unter bestimmten Umständen nicht durchsetzbar erweisen, so soll dieser Paragraph seinem Sinne nach angewandt werden; im übrigen soll dieser Paragraph als Ganzes gelten. Zweck dieses Paragraphen ist nicht, Sie dazu zu bringen, irgendwelche Patente oder andere Eigentumsansprüche zu verletzen oder die Gültigkeit solcher Ansprüche zu bestreiten; dieser Paragraph hat einzig den Zweck, die Integrität des Verbreitungssystems der freien Software zu schützen, das durch die Praxis öffentlicher Lizenzen verwirklicht wird. Viele Leute haben großzügige Beiträge zu dem großen Angebot der mit diesem System verbreiteten Software im Vertrauen auf die konsistente Anwendung dieses Systems geleistet; es liegt am Autor/Geber, zu entscheiden, ob er die Software mittels irgendeines anderen Systems verbreiten will; ein Lizenznehmer hat auf diese Entscheidung keinen Einfluß. Dieser Paragraph ist dazu gedacht, deutlich klarzustellen, was als Konsequenz aus dem Rest dieser Lizenz betrachtet wird. 8. Wenn die Verbreitung und/oder die Benutzung des Programms in bestimmten Staaten entweder durch Patente oder durch urheberrechtlich geschützte Schnittstellen eingeschränkt ist, kann der Urheberrechtsinhaber, der das Programm unter diese Lizenz gestellt hat, eine explizite geographische Begrenzung der Verbreitung angeben, in der diese Staaten ausgeschlossen werden, so daß die Verbreitung nur innerhalb und zwischen den Staaten erlaubt ist, die nicht ausgeschlossen sind. In einem solchen Fall beinhaltet diese Lizenz die Beschränkung, als wäre sie in diesem Text niedergeschrieben. 9. Die Free Software Foundation kann von Zeit zu Zeit überarbeitete und/oder neue Versionen der General Public License veröffentlichen. Solche neuen Versionen werden vom Grundprinzip her der gegenwärtigen entsprechen, können aber im Detail abweichen, um neuen Problemen und Anforderungen gerecht zu werden. Jede Version dieser Lizenz hat eine eindeutige Versionsnummer. Wenn in einem Programm angegeben wird, daß es dieser Lizenz in einer bestimmten Versionsnummer oder ,,jeder späteren Version`` (``any later version'') unterliegt, so haben Sie die Wahl, entweder den Bestimmungen der genannten Version zu folgen oder denen jeder beliebigen späteren Version, die von der Free Software Foundation veröffentlicht wurde. Wenn das Programm keine Versionsnummer angibt, können Sie eine beliebige Version wählen, die je von der Free Software Foundation veröffentlicht wurde. 10. Wenn Sie den Wunsch haben, Teile des Programms in anderen freien Programmen zu verwenden, deren Bedingungen für die Verbreitung anders sind, schreiben Sie an den Autor, um ihn um die Erlaubnis zu bitten. Für Software, die unter dem Copyright der Free Software Foundation steht, schreiben Sie an die Free Software Foundation ; wir machen zu diesem Zweck gelegentlich Ausnahmen. Unsere Entscheidung wird von den beiden Zielen geleitet werden, zum einen den freien Status aller von unserer freien Software abgeleiteten Datenwerke zu erhalten und zum anderen das gemeinschaftliche Nutzen und Wiederverwenden von Software im allgemeinen zu fördern. Keine Gewährleistung 11. Da das Programm ohne jegliche Kosten lizenziert wird, besteht keinerlei Gewährleistung für das Programm, soweit dies gesetzlich zulässig ist. Sofern nicht anderweitig schriftlich bestätigt, stellen die Copyright-Inhaber und/oder Dritte das Programm so zur Verfügung, ,,wie es ist``, ohne irgendeine Gewährleistung, weder ausdrücklich noch implizit, einschließlich - aber nicht begrenzt auf - Marktreife oder Verwendbarkeit für einen bestimmten Zweck. Das volle Risiko bezüglich Qualität und Leistungsfähigkeit des Programms liegt bei Ihnen. Sollte sich das Programm als fehlerhaft herausstellen, liegen die Kosten für notwendigen Service, Reparatur oder Korrektur bei Ihnen. 12. In keinem Fall, außer wenn durch geltendes Recht gefordert oder schriftlich zugesichert, ist irgendein Copyright-Inhaber oder irgendein Dritter, der das Programm wie oben erlaubt modifiziert oder verbreitet hat, Ihnen gegenüber für irgendwelche Schäden haftbar, einschließlich jeglicher allgemeiner oder spezieller Schäden, Schäden durch Seiteneffekte (Nebenwirkungen) oder Folgeschäden, die aus der Benutzung des Programms oder der Unbenutzbarkeit des Programms folgen (einschließlich - aber nicht beschränkt auf - Datenverluste, fehlerhafte Verarbeitung von Daten, Verluste, die von Ihnen oder anderen getragen werden müssen, oder dem Unvermögen des Programms, mit irgendeinem anderen Programm zusammenzuarbeiten), selbst wenn ein Copyright-Inhaber oder Dritter über die Möglichkeit solcher Schäden unterrichtet worden war. Ende der Bedingungen Anhang: Wie Sie diese Bedingungen auf Ihre eigenen, neuen Programme anwenden können Wenn Sie ein neues Programm entwickeln und wollen, daß es vom größtmöglichen Nutzen für die Allgemeinheit ist, dann erreichen Sie das am besten, indem Sie es zu freier Software machen, die jeder unter diesen Bestimmungen weiterverbreiten und verändern kann. Um dies zu erreichen, fügen Sie die folgenden Vermerke zu Ihrem Programm hinzu. Am sichersten ist es, sie an den Anfang einer jeden Quelldatei zu stellen, um den Gewährleistungsausschluß möglichst deutlich darzustellen; zumindest aber sollte jede Datei eine Copyright-Zeile besitzen sowie einen kurzen Hinweis darauf, wo die vollständigen Vermerke zu finden sind. [eine Zeile mit dem Programmnamen und einer kurzen Beschreibung] Copyright (C) [Jahr] [Name des Autors] This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. Auf Deutsch: [eine Zeile mit dem Programmnamen und einer kurzen Beschreibung] Copyright (C) [Jahr] [Name des Autors] Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2 der Lizenz oder (nach Ihrer Option) jeder späteren Version. Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License. Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, schreiben Sie an die Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. Fügen Sie auch einen kurzen Hinweis hinzu, wie Sie elektronisch und per Brief erreichbar sind. Wenn Ihr Programm interaktiv ist, sorgen Sie dafür, daß es nach dem Start einen kurzen Vermerk ausgibt: version 69, Copyright (C) [Jahr] [Name des Autors] Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. Auf Deutsch: Version 69, Copyright (C) [Jahr] [Name des Autors] Für Gnomovision besteht KEINERLEI GARANTIE; geben Sie `show w' für Details ein. Gnonovision ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen; geben Sie `show c' für Details ein. Die hypothetischen Kommandos `show w' und `show c' sollten die entsprechenden Teile der GNU-GPL anzeigen. Natürlich können die von Ihnen verwendeten Kommandos anders heißen als `show w' und `show c'; es könnten auch Mausklicks oder Menüpunkte sein - was immer am besten in Ihr Programm paßt. Soweit vorhanden, sollten Sie auch Ihren Arbeitgeber (wenn Sie als Programmierer arbeiten) oder Ihre Schule einen Copyright-Verzicht für das Programm unterschreiben lassen. Hier ein Beispiel. Die Namen müssen Sie natürlich ändern. Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. [Unterschrift von Ty Coon], 1 April 1989 Ty Coon, President of Vice Auf Deutsch: Die Yoyodyne GmbH erhebt keinen urheberrechtlichen Anspruch auf das von James Hacker geschriebene Programm ,Gnomovision` (einem Schrittmacher für Compiler). [Unterschrift von Ty Coon], 1. April 1989 Ty Coon, Vizepräsident Diese General Public License gestattet nicht die Einbindung des Programms in proprietäre Programme. Ist Ihr Programm eine Funktionsbibliothek, so kann es sinnvoller sein, das Binden proprietärer Programme mit dieser Bibliothek zu gestatten. Wenn Sie dies tun wollen, sollten Sie die GNU Library General Public License anstelle dieser Lizenz verwenden. gwhere-0.2.3/doc/license/license.en0000444000175000017500000004361010023202521015561 0ustar bartbart GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. gwhere-0.2.3/doc/license/license.es0000444000175000017500000005056010023202521015570 0ustar bartbartLicencia Pública GNU Esta es la conocida GNU Public License (GPL), versión 2 (de junio de 1.991), que cubre la mayor parte del software de la Free Software Foundation, y muchos más programas. Los autores de esta traducción son: Jesús González Barahona Pedro de las Heras Quirós -------------------------------------------------------------------------------- NOTA IMPORTANTE: Esta es una traducción no oficial al español de la GNU General Public License. No ha sido publicada por la Free Software Foundation, y no establece legalmente las condiciones de distribución para el software que usa la GNU GPL. Estas condiciones se establecen solamente por el texto original, en inglés, de la GNU GPL. Sin embargo, esperamos que esta traducción ayude a los hispanohablantes a entender mejor la GNU GPL. IMPORTANT NOTICE: This is an unofficial translation of the GNU General Public License into Spanish. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GNU GPL--only the original English text of the GNU GPL does that. However, we hope that this translation will help Spanish speakers understand the GNU GPL better. -------------------------------------------------------------------------------- Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, EEUU Se permite la copia y distribución de copias literales de este documento, pero no se permite su modificación. Preámbulo Las licencias que cubren la mayor parte del software están diseñadas para quitarle a usted la libertad de compartirlo y modificarlo. Por el contrario, la Licencia Pública General de GNU pretende garantizarle la libertad de compartir y modificar software libre, para asegurar que el software es libre para todos sus usuarios. Esta Licencia Pública General se aplica a la mayor parte del software del la Free Software Foundation y a cualquier otro programa si sus autores se comprometen a utilizarla. (Existe otro software de la Free Software Foundation que está cubierto por la Licencia Pública General de GNU para Bibliotecas). Si quiere, también puede aplicarla a sus propios programas. Cuando hablamos de software libre, estamos refiriéndonos a libertad, no a precio. Nuestras Licencias Públicas Generales están diseñadas para asegurarnos de que tenga la libertad de distribuir copias de software libre (y cobrar por ese servicio si quiere), de que reciba el código fuente o que pueda conseguirlo si lo quiere, de que pueda modificar el software o usar fragmentos de él en nuevos programas libres, y de que sepa que puede hacer todas estas cosas. Para proteger sus derechos necesitamos algunas restricciones que prohiban a cualquiera negarle a usted estos derechos o pedirle que renuncie a ellos. Estas restricciones se traducen en ciertas obligaciones que le afectan si distribuye copias del software, o si lo modifica. Por ejemplo, si distribuye copias de uno de estos programas, sea gratuitamente, o a cambio de una contraprestación, debe dar a los receptores todos los derechos que tiene. Debe asegurarse de que ellos también reciben, o pueden conseguir, el código fuente. Y debe mostrarles estas condiciones de forma que conozcan sus derechos. Protegemos sus derechos con la combinación de dos medidas: Ponemos el software bajo copyright y le ofrecemos esta licencia, que le da permiso legal para copiar, distribuir y/o modificar el software. También, para la protección de cada autor y la nuestra propia, queremos asegurarnos de que todo el mundo comprende que no se proporciona ninguna garantía para este software libre. Si el software se modifica por cualquiera y éste a su vez lo distribuye, queremos que sus receptores sepan que lo que tienen no es el original, de forma que cualquier problema introducido por otros no afecte a la reputación de los autores originales. Por último, cualquier programa libre está constantemente amenazado por patentes sobre el software. Queremos evitar el peligro de que los redistribuidores de un programa libre obtengan patentes por su cuenta, convirtiendo de facto el programa en propietario. Para evitar esto, hemos dejado claro que cualquier patente debe ser pedida para el uso libre de cualquiera, o no ser pedida. Los términos exactos y las condiciones para la copia, distribución y modificación se exponen a continuación. Términos y condiciones para la copia, distribución y modificación Esta Licencia se aplica a cualquier programa u otro tipo de trabajo que contenga una nota colocada por el tenedor del copyright diciendo que puede ser distribuido bajo los términos de esta Licencia Pública General. En adelante, «Programa» se referirá a cualquier programa o trabajo que cumpla esa condición y «trabajo basado en el Programa» se referirá bien al Programa o a cualquier trabajo derivado de él según la ley de copyright. Esto es, un trabajo que contenga el programa o una proción de él, bien en forma literal o con modificaciones y/o traducido en otro lenguaje. Por lo tanto, la traducción está incluida sin limitaciones en el término «modificación». Cada concesionario (licenciatario) será denominado «usted». Cualquier otra actividad que no sea la copia, distribución o modificación no está cubierta por esta Licencia, está fuera de su ámbito. El acto de ejecutar el Programa no está restringido, y los resultados del Programa están cubiertos únicamente si sus contenidos constituyen un trabajo basado en el Programa, independientemente de haberlo producido mediante la ejecución del programa. El que esto se cumpla, depende de lo que haga el programa. Usted puede copiar y distribuir copias literales del código fuente del Programa, según lo has recibido, en cualquier medio, supuesto que de forma adecuada y bien visible publique en cada copia un anuncio de copyright adecuado y un repudio de garantía, mantenga intactos todos los anuncios que se refieran a esta Licencia y a la ausencia de garantía, y proporcione a cualquier otro receptor del programa una copia de esta Licencia junto con el Programa. Puede cobrar un precio por el acto físico de transferir una copia, y puede, según su libre albedrío, ofrecer garantía a cambio de unos honorarios. Puede modificar su copia o copias del Programa o de cualquier porción de él, formando de esta manera un trabajo basado en el Programa, y copiar y distribuir esa modificación o trabajo bajo los términos del apartado 1, antedicho, supuesto que además cumpla las siguientes condiciones: Debe hacer que los ficheros modificados lleven anuncios prominentes indicando que los ha cambiado y la fecha de cualquier cambio. Debe hacer que cualquier trabajo que distribuya o publique y que en todo o en parte contenga o sea derivado del Programa o de cualquier parte de él sea licenciada como un todo, sin carga alguna, a todas las terceras partes y bajo los términos de esta Licencia. Si el programa modificado lee normalmente órdenes interactivamente cuando es ejecutado, debe hacer que, cuando comience su ejecución para ese uso interactivo de la forma más habitual, muestre o escriba un mensaje que incluya un anuncio de copyright y un anuncio de que no se ofrece ninguna garantía (o por el contrario que sí se ofrece garantía) y que los usuarios pueden redistribuir el programa bajo estas condiciones, e indicando al usuario cómo ver una copia de esta licencia. (Excepción: si el propio programa es interactivo pero normalmente no muestra ese anuncio, no se requiere que su trabajo basado en el Programa muestre ningún anuncio). Estos requisitos se aplican al trabajo modificado como un todo. Si partes identificables de ese trabajo no son derivadas del Programa, y pueden, razonablemente, ser consideradas trabajos independientes y separados por ellos mismos, entonces esta Licencia y sus términos no se aplican a esas partes cuando sean distribuidas como trabajos separados. Pero cuando distribuya esas mismas secciones como partes de un todo que es un trabajo basado en el Programa, la distribución del todo debe ser según los términos de esta licencia, cuyos permisos para otros licenciatarios se extienden al todo completo, y por lo tanto a todas y cada una de sus partes, con independencia de quién la escribió. Por lo tanto, no es la intención de este apartado reclamar derechos o desafiar sus derechos sobre trabajos escritos totalmente por usted mismo. El intento es ejercer el derecho a controlar la distribución de trabajos derivados o colectivos basados en el Programa. Además, el simple hecho de reunir un trabajo no basado en el Programa con el Programa (o con un trabajo basado en el Programa) en un volumen de almacenamiento o en un medio de distribución no hace que dicho trabajo entre dentro del ámbito cubierto por esta Licencia. Puede copiar y distribuir el Programa (o un trabajo basado en él, según se especifica en el apartado 2, como código objeto o en formato ejecutable según los términos de los apartados 1 y 2, supuesto que además cumpla una de las siguientes condiciones: Acompañarlo con el código fuente completo correspondiente, en formato electrónico, que debe ser distribuido según se especifica en los apartados 1 y 2 de esta Licencia en un medio habitualmente utilizado para el intercambio de programas, o Acompañarlo con una oferta por escrito, válida durante al menos tres años, de proporcionar a cualquier tercera parte una copia completa en formato electrónico del código fuente correspondiente, a un coste no mayor que el de realizar físicamente la distribución del fuente, que será distribuido bajo las condiciones descritas en los apartados 1 y 2 anteriores, en un medio habitualmente utilizado para el intercambio de programas, o Acompañarlo con la información que recibiste ofreciendo distribuir el código fuente correspondiente. (Esta opción se permite sólo para distribución no comercial y sólo si usted recibió el programa como código objeto o en formato ejecutable con tal oferta, de acuerdo con el apartado b anterior). Por código fuente de un trabajo se entiende la forma preferida del trabajo cuando se le hacen modificaciones. Para un trabajo ejecutable, se entiende por código fuente completo todo el código fuente para todos los módulos que contiene, más cualquier fichero asociado de definición de interfaces, más los guiones utilizados para controlar la compilación e instalación del ejecutable. Como excepción especial el código fuente distribuido no necesita incluir nada que sea distribuido normalmente (bien como fuente, bien en forma binaria) con los componentes principales (compilador, kernel y similares) del sistema operativo en el cual funciona el ejecutable, a no ser que el propio componente acompañe al ejecutable. Si la distribución del ejecutable o del código objeto se hace mediante la oferta acceso para copiarlo de un cierto lugar, entonces se considera la oferta de acceso para copiar el código fuente del mismo lugar como distribución del código fuente, incluso aunque terceras partes no estén forzadas a copiar el fuente junto con el código objeto. No puede copiar, modificar, sublicenciar o distribuir el Programa excepto como prevé expresamente esta Licencia. Cualquier intento de copiar, modificar sublicenciar o distribuir el Programa de otra forma es inválida, y hará que cesen automáticamente los derechos que te proporciona esta Licencia. En cualquier caso, las partes que hayan recibido copias o derechos de usted bajo esta Licencia no cesarán en sus derechos mientras esas partes continúen cumpliéndola. No está obligado a aceptar esta licencia, ya que no la ha firmado. Sin embargo, no hay hada más que le proporcione permiso para modificar o distribuir el Programa o sus trabajos derivados. Estas acciones están prohibidas por la ley si no acepta esta Licencia. Por lo tanto, si modifica o distribuye el Programa (o cualquier trabajo basado en el Programa), está indicando que acepta esta Licencia para poder hacerlo, y todos sus términos y condiciones para copiar, distribuir o modificar el Programa o trabajos basados en él. Cada vez que redistribuya el Programa (o cualquier trabajo basado en el Programa), el receptor recibe automáticamente una licencia del licenciatario original para copiar, distribuir o modificar el Programa, de forma sujeta a estos términos y condiciones. No puede imponer al receptor ninguna restricción más sobre el ejercicio de los derechos aquí garantizados. No es usted responsable de hacer cumplir esta licencia por terceras partes. Si como consecuencia de una resolución judicial o de una alegación de infracción de patente o por cualquier otra razón (no limitada a asuntos relacionados con patentes) se le imponen condiciones (ya sea por mandato judicial, por acuerdo o por cualquier otra causa) que contradigan las condiciones de esta Licencia, ello no le exime de cumplir las condiciones de esta Licencia. Si no puede realizar distribuciones de forma que se satisfagan simultáneamente sus obligaciones bajo esta licencia y cualquier otra obligación pertinente entonces, como consecuencia, no puede distribuir el Programa de ninguna forma. Por ejemplo, si una patente no permite la redistribución libre de derechos de autor del Programa por parte de todos aquellos que reciban copias directa o indirectamente a través de usted, entonces la única forma en que podría satisfacer tanto esa condición como esta Licencia sería evitar completamente la distribución del Programa. Si cualquier porción de este apartado se considera inválida o imposible de cumplir bajo cualquier circunstancia particular ha de cumplirse el resto y la sección por entero ha de cumplirse en cualquier otra circunstancia. No es el propósito de este apartado inducirle a infringir ninguna reivindicación de patente ni de ningún otro derecho de propiedad o impugnar la validez de ninguna de dichas reivindicaciones. Este apartado tiene el único propósito de proteger la integridad del sistema de distribución de software libre, que se realiza mediante prácticas de licencia pública. Mucha gente ha hecho contribuciones generosas a la gran variedad de software distribuido mediante ese sistema con la confianza de que el sistema se aplicará consistentemente. Será el autor/donante quien decida si quiere distribuir software mediante cualquier otro sistema y una licencia no puede imponer esa elección. Este apartado pretende dejar completamente claro lo que se cree que es una consecuencia del resto de esta Licencia. Si la distribución y/o uso de el Programa está restringida en ciertos países, bien por patentes o por interfaces bajo copyright, el tenedor del copyright que coloca este Programa bajo esta Licencia puede añadir una limitación explícita de distribución geográfica excluyendo esos países, de forma que la distribución se permita sólo en o entre los países no excluidos de esta manera. En ese caso, esta Licencia incorporará la limitación como si estuviese escrita en el cuerpo de esta Licencia. La Free Software Foundation puede publicar versiones revisadas y/o nuevas de la Licencia Pública General de tiempo en tiempo. Dichas nuevas versiones serán similares en espíritu a la presente versión, pero pueden ser diferentes en detalles para considerar nuevos problemas o situaciones. Cada versión recibe un número de versión que la distingue de otras. Si el Programa especifica un número de versión de esta Licencia que se refiere a ella y a «cualquier versión posterior», tienes la opción de seguir los términos y condiciones, bien de esa versión, bien de cualquier versión posterior publicada por la Free Software Foundation. Si el Programa no especifica un número de versión de esta Licencia, puedes escoger cualquier versión publicada por la Free Software Foundation. Si quiere incorporar partes del Programa en otros programas libres cuyas condiciones de distribución son diferentes, escribe al autor para pedirle permiso. Si el software tiene copyright de la Free Software Foundation, escribe a la Free Software Foundation: algunas veces hacemos excepciones en estos casos. Nuestra decisión estará guiada por el doble objetivo de de preservar la libertad de todos los derivados de nuestro software libre y promover el que se comparta y reutilice el software en general. AUSENCIA DE GARANTÍA Como el programa se licencia libre de cargas, no se ofrece ninguna garantía sobre el programa, en todas la extensión permitida por la legislación aplicable. Excepto cuando se indique de otra forma por escrito, los tenedores del copyright y/u otras partes proporcionan el programa «tal cual», sin garantía de ninguna clase, bien expresa o implícita, con inclusión, pero sin limitación a las garantías mercantiles implícitas o a la conveniencia para un propósito particular. Cualquier riesgo referente a la calidad y prestaciones del programa es asumido por usted. Si se probase que el Programa es defectuoso, asume el coste de cualquier servicio, reparación o corrección. En ningún caso, salvo que lo requiera la legislación aplicable o haya sido acordado por escrito, ningún tenedor del copyright ni ninguna otra parte que modifique y/o redistribuya el Programa según se permite en esta Licencia será responsable ante usted por daños, incluyendo cualquier daño general, especial, incidental o resultante producido por el uso o la imposibilidad de uso del Programa (con inclusión, pero sin limitación a la pérdida de datos o a la generación incorrecta de datos o a pérdidas sufridas por usted o por terceras partes o a un fallo del Programa al funcionar en combinación con cualquier otro programa), incluso si dicho tenedor u otra parte ha sido advertido de la posibilidad de dichos daños. FIN DE TÉRMINOS Y CONDICIONES Apéndice: Cómo aplicar estos términos a sus nuevos programas. Si usted desarrolla un nuevo Programa, y quiere que sea del mayor uso posible para el público en general, la mejor forma de conseguirlo es convirtiéndolo en software libre que cualquiera pueda redistribuir y cambiar bajo estos términos. Para hacerlo, añada los siguientes anuncios al programa. Lo más seguro es añadirlos al principio de cada fichero fuente para transmitir lo más efectivamente posible la ausencia de garantía. Además cada fichero debería tener al menos la línea de «copyright» y un indicador a dónde puede encontrarse el anuncio completo. Copyright (C) 19aa Este programa es software libre. Puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU según es publicada por la Free Software Foundation, bien de la versión 2 de dicha Licencia o bien (según su elección) de cualquier versión posterior. Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN PROPÓSITO PARTICULAR. Véase la Licencia Pública General de GNU para más detalles. Debería haber recibido una copia de la Licencia Pública General junto con este programa. Si no ha sido así, escriba a la Free Software Foundation, Inc., en 675 Mass Ave, Cambridge, MA 02139, EEUU. Añada también información sobre cómo contactar con usted mediante correo electrónico y postal. Si el programa es interactivo, haga que muestre un pequeño anuncio como el siguiente, cuando comienza a funcionar en modo interactivo: Gnomovision versión 69, Copyright (C) 19aa nombre del autor Gnomovision no ofrece ABSOLUTAMENTE NINGUNA GARANTÍA. Para más detalles escriba «show w». Los comandos hipotéticos «show w» y «show c» deberían mostrar las partes adecuadas de la Licencia Pública General. Por supuesto, los comandos que use pueden llamarse de cualquier otra manera. Podrían incluso ser pulsaciones del ratón o elementos de un menú (lo que sea apropiado para su programa). También deberías conseguir que su empleador (si trabaja como programador) o tu Universidad (si es el caso) firme un «renuncia de copyright» para el programa, si es necesario. A continuación se ofrece un ejemplo, altere los nombres según sea conveniente: Yoyodyne, Inc. mediante este documento renuncia a cualquier interés de derechos de copyright con respecto al programa Gnomovision (que hace pasadas a compiladores) escrito por Pepe Programador. , 20 de diciembre de 1996 Pepito Grillo, Presidente de Asuntillos Varios. Esta Licencia Pública General no permite que incluya sus programas en programas propietarios. Si su programa es una biblioteca de subrutinas, puede considerar más útil el permitir el enlazado de aplicaciones propietarias con la biblioteca. Si este es el caso, use la Licencia Pública General de GNU para Bibliotecas en lugar de esta Licencia. gwhere-0.2.3/doc/license/license.fr0000444000175000017500000004505310023202521015571 0ustar bartbartGPL Introduction This is an unofficial translation of the GNU General Public License into French. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GNU GPL--only the original English text of the GNU GPL does that. However, we hope that this translation will help French speakers understand the GNU GPL better. Voici (http://www.linux-france.org/article/these/gpl.html) une adaptation non officielle de la Licence Publique Générale du projet GNU. Elle n'a pas été publiée par la Free Software Foundation et son contenu n'a aucune portée légale car seule la version anglaise de ce document détaille le mode de distribution des logiciels sous GNU GPL. Nous espérons cependant qu'elle permettra aux francophones de mieux comprendre la GPL. Licence Publique Générale GNU Version 2, Juin 1991 Copyright © Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 États-Unis, 1989, 1991. La copie et la distribution de copies exactes de ce document sont autorisées, mais aucune modification n'est permise. Préambule Les licences d'utilisation de la plupart des programmes sont définies pour limiter ou supprimer toute liberté à l'utilisateur. À l'inverse, la Licence Publique Générale (General Public License) est destinée à vous garantir la liberté de partager et de modifier les logiciels libres, et de s'assurer que ces logiciels sont effectivement accessibles à tout utilisateur. Cette Licence Publique Générale s'applique à la plupart des programmes de la Free Software Foundation, comme à tout autre programme dont l'auteur l'aura décidé (d'autres logiciels de la FSF sont couverts pour leur part par la Licence Publique Générale pour Bibliothèques GNU (LGPL)). Vous pouvez aussi appliquer les termes de cette Licence à vos propres programmes, si vous le désirez. Liberté des logiciels ne signifie pas nécessairement gratuité. Notre Licence est conçue pour vous assurer la liberté de distribuer des copies des programmes, gratuitement ou non, de recevoir le code source ou de pouvoir l'obtenir, de modifier les programmes ou d'en utiliser des éléments dans de nouveaux programmes libres, en sachant que vous y êtes autorisé. Afin de garantir ces droits, nous avons dû introduire des restrictions interdisant à quiconque de vous les refuser ou de vous demander d'y renoncer. Ces restrictions vous imposent en retour certaines obligations si vous distribuez ou modifiez des copies de programmes protégés par la Licence. En d'autre termes, il vous incombera en ce cas de : transmettre aux destinataires tous les droits que vous possédez, expédier aux destinataires le code source ou bien tenir celui-ci à leur disposition, leur remettre cette Licence afin qu'ils prennent connaissance de leurs droits. Nous protégeons vos droits de deux façons : (1) d'abord par le copyright du logiciel, (2) ensuite par la remise de cette Licence qui vousc autorise légalement à copier, distribuer et/ou modifier le logiciel. En outre, pour protéger chaque auteur ainsi que la FSF, nous affirmons solennellement que le programme concerné ne fait l'objet d'aucune garantie. Si un tiers le modifie puis le redistribue, tous ceux qui en recevront une copie doivent savoir qu'il ne s'agit pas de l'original afin qu'une copie défectueuse n'entache pas la réputation de l'auteur du logiciel. Enfin, tout programme libre est sans cesse menacé par des dépôts de brevets. Nous souhaitons à tout prix éviter que des distributeurs puissent déposer des brevets sur les Logiciels Libres pour leur propre compte. Pour éviter cela, nous stipulons bien que tout dépôt éventuel de brevet doit accorder expressément à tout un chacun le libre usage du produit. Les dispositions précises et les conditions de copie, de distribution et de modification de nos logiciels sont les suivantes : LICENCE PUBLIQUE GENERALE GNU STIPULATIONS ET CONDITIONS RELATIVES A LA COPIE, LA DISTRIBUTION ET LA MODIFICATION 0. La présente Licence s'applique à tout Programme (ou autre travail) où figure une note, placée par le détenteur des droits, stipulant que ledit Programme ou travail peut être distribué selon les termes de la présente Licence. Le terme Programme désigne aussi bien le Programme lui-même que tout travail qui en est dérivé selon la loi, c'est-à-dire tout ouvrage reproduisant le Programme ou une partie de celui-ci, à l'identique ou bien modifié, et/ou traduit dans une autre langue (la traduction est considérée comme une modification). Chaque personne concernée par la Licence Publique Générale sera désignée par le terme Vous. Les activités autres que copie, distribution et modification ne sont pas couvertes par la présente Licence et sortent de son cadre. Rien ne restreint l'utilisation du Programme et les données issues de celui-ci ne sont couvertes que si leur contenu constitue un travail basé sur le logiciel (indépendemment du fait d'avoir été réalisé en lançant le Programme). Tout dépend de ce que le Programme est censé produire. 1. Vous pouvez copier et distribuer des copies conformes du code source du Programme, tel que Vous l'avez reçu, sur n'importe quel support, à condition de placer sur chaque copie un copyright approprié et une restriction de garantie, de ne pas modifier ou omettre toutes les stipulations se référant à la présente Licence et à la limitation de garantie, et de fournir avec toute copie du Programme un exemplaire de la Licence. Vous pouvez demander une rétribution financière pour la réalisation de la copie et demeurez libre de proposer une garantie assurée par vos soins, moyennant finances. 2. Vous pouvez modifier votre copie ou vos copies du Programme ou partie de celui-ci, ou d'un travail basé sur ce Programme, et copier et distribuer ces modifications selon les termes de l'article 1, à condition de Vous conformer également aux conditions suivantes : a) Ajouter aux fichiers modifiés l'indication très claire des modifications effectuées, ainsi que la date de chaque changement. b) Distribuer sous les termes de la Licence Publique Générale l'ensemble de toute réalisation contenant tout ou partie du Programme, avec ou sans modifications. c) Si le Programme modifié lit des commandes de manière interactive lors de son exécution, faire en sorte qu'il affiche, lors d'une invocation ordinaire, le copyright approprié en indiquant clairement la limitation de garantie (ou la garantie que Vous Vous engagez à fournir Vous-même), qu'il stipule que tout utilisateur peut librement redistribuer le Programme selon les conditions de la Licence Publique Générale GNU, et qu'il montre à tout utilisateur comment lire une copie de celle-ci (exception : si le Programme original est interactif mais n'affiche pas un tel message en temps normal, tout travail dérivé de ce Programme ne sera pas non plus contraint de l'afficher). Toutes ces conditions s'appliquent à l'ensemble des modifications. Si des éléments identifiables de ce travail ne sont pas dérivés du Programme et peuvent être raisonnablement considérés comme indépendants, la présente Licence ne s'applique pas à ces éléments lorsque Vous les distribuez seuls. Mais, si Vous distribuez ces mêmes éléments comme partie d'un ensemble cohérent dont le reste est basé sur un Programme soumis à la Licence, ils lui sont également soumis, et la Licence s'étend ainsi à l'ensemble du produit, quel qu'en soit l'auteur. Cet article n'a pas pour but de s'approprier ou de contester vos droits sur un travail entièrement réalisé par Vous, mais plutôt d'ouvrir droit à un contrôle de la libre distribution de tout travail dérivé ou collectif basé sur le Programme. En outre, toute fusion d'un autre travail, non basé sur le Programme, avec le Programme (ou avec un travail dérivé de ce dernier), effectuée sur un support de stockage ou de distribution, ne fait pas tomber cet autre travail sous le contrôle de la Licence. 3. Vous pouvez copier et distribuer le Programme (ou tout travail dérivé selon les conditions énoncées dans l'article 1) sous forme de code objet ou exécutable, selon les termes des articles 0 et 1, à condition de respecter les clauses suivantes : a) Fournir le code source complet du Programme, sous une forme lisible par un ordinateur et selon les termes des articles 0 et 1, sur un support habituellement utilisé pour l'échange de données ; ou, b) Faire une offre écrite, valable pendant au moins trois ans, prévoyant de donner à tout tiers qui en fera la demande une copie, sous forme lisible par un ordinateur, du code source correspondant, pour un tarif n'excédant pas le coût de la copie, selon les termes des articles 0 et 1, sur un support couramment utilisé pour l'échange de données informatiques ; ou, c) Informer le destinataire de l'endroit où le code source peut être obtenu (cette solution n'est recevable que dans le cas d'une distribution non commerciale, et uniquement si Vous avez reçu le Programme sous forme de code objet ou exécutable avec l'offre prévue à l'alinéa b ci-dessus). Le code source d'un travail désigne la forme de cet ouvrage sous laquelle les modifications sont les plus aisées. Sont ainsi désignés la totalité du code source de tous les modules composant un Programme exécutable, de même que tout fichier de définition associé, ainsi que les scripts utilisés pour effectuer la compilation et l'installation du Programme exécutable. Toutefois, l'environnement standard de développement du système d'exploitation mis en oeuvre (source ou binaire) -- compilateurs, bibliothèques, noyau, etc. -- constitue une exception, sauf si ces éléments sont diffusés en même temps que le Programme exécutable. Si la distribution de l'exécutable ou du code objet consiste à offrir un accès permettant de copier le Programme depuis un endroit particulier, l'offre d'un accès équivalent pour se procurer le code source au même endroit est considéré comme une distribution de ce code source, même si l'utilisateur choisit de ne pas profiter de cette offre. 4. Vous ne pouvez pas copier, modifier, céder, déposer ou distribuer le Programme d'une autre manière que l'autorise la Licence Publique Générale. Toute tentative de ce type annule immédiatement vos droits d'utilisation du Programme sous cette Licence. Toutefois, les tiers ayant reçu de Vous des copies du Programme ou le droit d'utiliser ces copies continueront à bénéficier de leur droit d'utilisation tant qu'ils respecteront pleinement les conditions de la Licence. 5. Ne l'ayant pas signée, Vous n'êtes pas obligé d'accepter cette Licence. Cependant, rien d'autre ne Vous autorise à modifier ou distribuer le Programme ou quelque travaux dérivés : la loi l'interdit tant que Vous n'acceptez pas les termes de cette Licence. En conséquence, en modifiant ou en distribuant le Programme (ou tout travail basé sur lui), Vous acceptez implicitement tous les termes et conditions de cette Licence. 6. La diffusion d'un Programme (ou de tout travail dérivé) suppose l'envoi simultané d'une licence autorisant la copie, la distribution ou la modification du Programme, aux termes et conditions de la Licence. Vous n'avez pas le droit d'imposer de restrictions supplémentaires aux droits transmis au destinataire. Vous n'êtes pas responsable du respect de la Licence par un tiers. 7. Si, à la suite d'une décision de Justice, d'une plainte en contrefaçon ou pour toute autre raison (liée ou non à la contrefaçon), des conditions Vous sont imposées (que ce soit par ordonnance, accord amiable ou autre) qui se révèlent incompatibles avec les termes de la présente Licence, Vous n'êtes pas pour autant dégagé des obligations liées à celle-ci : si Vous ne pouvez concilier vos obligations légales ou autres avec les conditions de cette Licence, Vous ne devez pas distribuer le Programme. Si une partie quelconque de cet article est invalidée ou inapplicable pour quelque raison que ce soit, le reste de l'article continue de s'appliquer et l'intégralité de l'article s'appliquera en toute autre circonstance. Le présent article n'a pas pour but de Vous pousser à enfreindre des droits ou des dispositions légales ni en contester la validité ; son seul objectif est de protéger l'intégrité du système de distribution du Logiciel Libre. De nombreuses personnes ont généreusement contribué à la large gamme de Programmes distribuée de cette façon en toute confiance ; il appartient à chaque auteur/donateur de décider de diffuser ses Programmes selon les critères de son choix. 8. Si la distribution et/ou l'utilisation du Programme est limitée dans certains pays par des brevets ou des droits sur des interfaces, le détenteur original des droits qui place le Programme sous la Licence Publique Générale peut ajouter explicitement une clause de limitation géographique excluant ces pays. Dans ce cas, cette clause devient une partie intégrante de la Licence. 9. La Free Software Foundation se réserve le droit de publier périodiquement des mises à jour ou de nouvelles versions de la Licence. Rédigées dans le même esprit que la présente version, elles seront cependant susceptibles d'en modifier certains détails à mesure que de nouveaux problèmes se font jour. Chaque version possède un numéro distinct. Si le Programme précise un numéro de version de cette Licence et « toute version ultérieure », Vous avez le choix de suivre les termes et conditions de cette version ou de toute autre version plus récente publiée par la Free Software Foundation. Si le Programme ne spécifie aucun numéro de version, Vous pouvez alors choisir l'une quelconque des versions publiées par la Free Software Foundation. 10. Si Vous désirez incorporer des éléments du Programme dans d'autres Programmes libres dont les conditions de distribution diffèrent, Vous devez écrire à l'auteur pour lui en demander la permission. Pour ce qui est des Programmes directement déposés par la Free Software Foundation, écrivez-nous : une exception est toujours envisageable. Notre décision sera basée sur notre volonté de préserver la liberté de notre Programme ou de ses dérivés et celle de promouvoir le partage et la réutilisation du logiciel en général. LIMITATION DE GARANTIE 11. Parce que l'utilisation de ce Programme est libre et gratuite, aucune garantie n'est fournie, comme le permet la loi. Sauf mention écrite, les détenteurs du copyright et/ou les tiers fournissent le Programme en l'état, sans aucune sorte de garantie explicite ou implicite, y compris les garanties de commercialisation ou d'adaptation dans un but particulier. Vous assumez tous les risques quant à la qualité et aux effets du Programme. Si le Programme est défectueux, Vous assumez le coût de tous les services, corrections ou réparations nécessaires. 12. Sauf lorsqu'explicitement prévu par la Loi ou accepté par écrit, ni le détenteur des droits, ni quiconque autorisé à modifier et/ou redistribuer le Programme comme il est permis ci-dessus ne pourra être tenu pour responsable de tout dommage direct, indirect, secondaire ou accessoire (pertes financières dues au manque à gagner, à l'interruption d'activités ou à la perte de données, etc., découlant de l'utilisation du Programme ou de l'impossibilité d'utiliser celui-ci). FIN DES TERMES ET CONDITIONS Comment appliquer ces directives à vos nouveaux programmes Si vous développez un nouveau programme et désirez en faire bénéficier tout un chacun, la meilleure méthode est d'en faire un Logiciel Libre que tout le monde pourra redistribuer et modifier selon les termes de la Licence Publique Générale. Pour cela, insérez les indications suivantes dans votre programme (il est préférable et plus sûr de les faire figurer au début de chaque fichier source ; dans tous les cas, chaque module source devra comporter au minimum la ligne de « copyright » et indiquer où résident toutes les autres indications) : ((une ligne pour donner le nom du programme et donner une idée de sa finalité)) Copyright (C) 19xx ((nom de l'auteur)) Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU publiée par la Free Software Foundation (version 2 ou bien toute autre version ultérieure choisie par vous). Ce programme est distribué car potentiellement utile, mais SANS AUCUNE GARANTIE, ni explicite ni implicite, y compris les garanties de commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU pour plus de détails. Vous devez avoir reçu une copie de la Licence Publique Générale GNU en même temps que ce programme ; si ce n'est pas le cas, écrivez à la Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, États-Unis. Ajoutez également votre adresse électronique, le cas échéant, ainsi que votre adresse postale. Si le programme est interactif, faites-lui afficher un court avertissement du type de celui-ci à chaque invocation : ...(nom du programme) version 69, Copyright (C) 19aa nom de l'auteur ...(nom du programme) est fourni sans AUCUNE GARANTIE. Pour plus de détails, tapez `g'. Ce programme est libre et vous êtes encouragé à le redistribuer sous certaines conditions ; tapez `c' pour plus de détails. Les commandes hypothétiques `g' et `c' doivent afficher les sections appropriées de la Licence Publique Générale GNU. Bien entendu, vous pouvez implanter ces commandes comme bon vous semble : options dans un menu, ou bien accessibles d'un clic de souris, etc., tout dépend de votre programme. Si vous officiez en tant que programmeur, n'omettez pas de demander à votre employeur, votre établissement scolaire ou autres de signer une décharge stipulant leur renoncement aux droits qu'ils pourraient avoir sur le programme : ...((employeur, école...)) déclare par la présente ne pas revendiquer de droits sur le programme « (nom du programme) » réalisé par ...((nom de l'auteur)). ((signature du responsable)), ...((date)), ...((nom et qualité du responsable)). La Licence Publique Générale ne permet pas d'inclure votre programme dans des logiciels sous licence commerciale spécifique. Si votre programme est une fonction de bibliothèque, vous jugerez probablement plus judicieux de le faire relever de la Licence Générale de Bibliothèque GNU (LGPL) plutôt que de la présente. Last modified: Tue Sep 29 22:41:45 MET DST 1998 gwhere-0.2.3/doc/license/license.pl0000444000175000017500000005163210023202521015575 0ustar bartbartGPL Introduction This is an unofficial translation of the GNU General Public License into Polish. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GNU GPL--only the original English text of the GNU GPL does that. However, we hope that this translation will help Polish speakers understand the GNU GPL better. Source is http://www.linux.org.pl/gpl.php Powszechna Licencja Publiczna GNU Wersja 2, czerwiec 1991 Copyright © 1989, 1991 Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139 USA. Zezwala sie na kopiowanie i rozpowszechnianie wiernych kopii niniejszego dokumentu licencyjnego, jednak bez prawa wprowadzania zmian. Preambula Wiekszosc licencji na oprogramowanie pomyslana jest po to, aby odebrac uzytkownikowi mozliwosc swobodnego udostepniania innym i zmieniania danego software'u. Natomiast w wypadku Powszechnej Licencji Publicznej GNU (GNU General Public License, GPL) celem jest zagwarantowanie uzytkownikowi swobody udostepniania i zmieniania tego bezplatnego oprogramowania, a wiec danie pewnosci, iz oprogramowanie jest wolno dostepne dla wszystkich uzytkowników. Niniejsza Powszechna Licencja Publiczna dotyczy wiekszosci oprogramowania wydawanego przez Fundacje Wolnego Oprogramowania (Free Software Foundation) oraz wszelkich innych programów, których autorzy zobowiazuja sie do jej stosowania. (Niektóre rodzaje oprogramowania wydawanego przez Fundacje objete sa Powszechna Licencja Publiczna GNU dla Bibliotek, GNU Library General Public License). Uzytkownik moze stosowac ja równiez do swoich programów. Mówiac o wolnym oprogramowaniu mamy na mysli swobode, a nie cene. Nasze Powszechne Licencje Publiczne wprowadzono po to, aby zapewnic Panstwu swobode rozpowszechniania kopii tego oprogramowania (i - jesli ktos chce - pobierania za te usluge oplaty), jak równiez aby udostepnic kod zródlowy oraz umozliwic dokonywanie zmian tego oprogramowania lub wykorzystywania jego fragmentów w nowych, wolnych programach. Nie bez znaczenia jest tez sama mozliwosc dotarcia do Panstwa z informacja o wszystkich tych udogodnieniach. W celu ochrony praw uzytkownika jestesmy zmuszeni wprowadzac ograniczenia zabraniajace komukolwiek kwestionowanie jego praw albo sugerowanie rezygnacji z tych praw. Ograniczenia te sprowadzaja sie do pewnych dla Panstwa obowiazków w przypadku rozpowszechniania przez Was kopii naszego oprogramowania badz dokonywania w nim zmian. Na przyklad, jesli rozprowadzacie Panstwo kopie takiego programu, niezaleznie czy gratisowo, czy za oplata, musicie Panstwo odbiorcy udzielic wszelkich tych praw, jakie mieliscie sami. Musicie zapewnic mu równiez otrzymanie kodu zródlowego (lub mozliwosc otrzymania) oraz przedstawic niniejsze Warunki, aby mógl on poznac swoje prawa. Ochrona Panstwa praw przebiega w dwóch etapach: (1) zastrzegamy prawo wlasnosci autorskiej do oprogramowania, (2) oferujemy Panstwu niniejsza licencje, która daje Wam sankcjonowane prawem zezwolenie na kopiowanie, rozpowszechnianie i/lub modyfikowanie tego oprogramowania. Ponadto dla ochrony tak autora, jak i naszej, pragniemy miec pewnosc, ze kazdy zrozumie, iz na niniejsze wolne oprogramowanie nie udziela sie gwarancji. W razie dokonania w nim przez kogos modyfikacji i puszczenia dalej do obrotu, pragniemy, aby dalsi odbiorcy zdawali sobie sprawe z tego, ze problemy wprowadzone przez inne osoby nie sa wyrazem oryginalnych dzialan twórców. I rzecz ostatnia: kazdemu wolnemu programowi stale zagrazaja patenty na oprogramowanie. Naszym pragnieniem jest unikanie takiego niebezpieczenstwa, kiedy redystrybutorzy wolnego programu indywidualnie uzyskuja prawa patentowe, nadajac tym samym programowi charakter prawnie zastrzezony. W celu zapobiezenia takim zjawiskom jednoznacznie wyjasnilismy, ze kazdy patent musi byc wydawany albo dla swobodnego uzytku przez wszystkich, albo nie wydawany wcale. Ponizej podajemy dokladne zasady i warunki kopiowania, rozpowszechniania i modyfikowania. Zasady i warunki kopiowania, rozpowszechniania i modyfikowania 0. Niniejsza Licencja dotyczy programów i innych prac, na których umieszczona jest pochodzaca od wlasciciela praw autorskich informacja, ze dany program lub praca moze byc rozpowszechniana na warunkach niniejszej Powszechnej Licencji Publicznej. Uzywane ponizej slowo "Program" oznacza wlasnie takie programy lub prace, zas okreslenie "praca oparta na Programie" dotyczy albo Programu, albo pochodzacej od niego pracy w rozumieniu prawa autorskiego, to jest pracy zawierajacej Program lub jego czesc doslowna, badz zmodyfikowana i/lub przelozona na inny jezyk. (W dalszym ciagu niniejszego, pojecie przekladu wlacza sie bez ograniczen do terminu "modyfikacja"). Do kazdego licencjobiorcy bedziemy zwracac sie "per Ty". Niniejsza Licencja nie obejmuje dzialan innych niz kopiowanie, rozprowadzanie i modyfikowanie - nie mieszcza sie one w jej zakresie. Czynnosc uzywania Programu nie jest poddana ograniczeniom, a produkty uzyskane z Programu objete sa Licencja tylko wtedy, gdy ich tresc stanowi prace oparta na Programie (niezaleznie od stworzenia jej przy uzyciu Programu). To, czy fakt taki jest prawda, zalezy od tego, co dany Program wykonuje. 1. Mozesz kopiowac i rozprowadzac w dowolnych mediach wierne kopie kodu zródlowego Programu w otrzymanej formie pod warunkiem, ze w widoczny sposób i odpowiednio podasz na kazdej kopii wlasciwa informacje o prawie autorskim i zrzeczenie sie uprawnien z tytulu gwarancji; wszelkie napisy informacyjne na temat Licencji i faktu nieudzielania gwarancji musisz chronic przed uszkodzeniem, zas wszystkim innym odbiorcom Programu musisz wraz z Programem wreczac egzemplarz niniejszej Licencji. Mozesz pobierac oplate za fizyczna czynnosc przekazania kopii i wedlug wlasnej decyzji mozesz za oplata proponowac ochrone gwarancyjna. 2. Mozesz modyfikowac swoja kopie czy kopie Programu oraz dowolne jego czesci, tworzac przez to prace oparta na Programie, jak równiez kopiowac i rozprowadzac takie modyfikacje i prace na warunkach podanych w pkt.1 powyzej - pod warunkiem przestrzegania calosci ponizszych wymogów: a) Musisz spowodowac umieszczenie na zmodyfikowanych plikach widocznej informacji o tym, ze dane pliki zostaly przez ciebie zmienione, wraz z data dokonania zmian. b) Musisz doprowadzic do tego, aby kazda rozpowszechniana lub publikowana przez ciebie praca, która w calosci lub czesci zawiera Program, albo pochodzi od niego lub jego czesci, byla w calosci i bezplatnie licencjonowana dla wszelkich stron trzecich na warunkach niniejszej Licencji. c) Jezeli zmodyfikowany program podczas korzystania z niego w normalnym trybie odczytuje polecenia interaktywnie, musisz spowodowac, aby po uruchomieniu (uzyty w interaktywny sposób w najzwyklejszym trybie), wydrukowywal on lub wyswietlal powiadomienie o odnosnym prawie autorskim i braku gwarancji (ewentualnie o zapewnianiu gwarancji przez ciebie), oraz o tym, ze uzytkownicy moga redystrybuowac ten program na niniejszych warunkach wraz z informacja, jak uzytkownik moze zapoznac sie z trescia niniejszej Licencji. (Wyjatek: jesli sam Program jest interaktywny, ale normalnie nie drukuje takiego powiadomienia, twoja praca oparta na nim tez nie musi wydrukowywac takiego powiadomienia). Niniejsze wymogi odnosza sie do zmodyfikowanej pracy jako calosci. Jesli dajace sie ustalic sekcje danej pracy nie pochodza od Programu i moga byc racjonalnie uwazane za samodzielne i odrebne same w sobie, to niniejsza Licencja i jej warunki nie maja zastosowania do takich sekcji przy rozprowadzaniu ich przez ciebie jako odrebne prace. Jesli jednak rozprowadzasz je jako czesc calosci, bedacej praca oparta na Programie, rozpowszechnianie tej calosci musi byc dokonywane na warunkach niniejszej Licencji, której zezwolenia dla innych licencjobiorców rozciagaja sie w calej szerokosci na te calosc, a tym samym i na kazda indywidualna jej czesc, niezaleznie od jej autorstwa. Dlatego tez intencja tego fragmentu nie jest roszczenie sobie praw albo podwazanie twych praw do pracy napisanej w calosci przez ciebie. Chodzi nam raczej o korzystanie z prawa kontrolowania dystrybucji pochodnych i zbiorowych prac opartych na Programie. I jeszcze jedno: samo tylko polaczenie z Programem (lub z praca oparta na Programie) innej pracy - nie opartej na Programie, w ramach wolumenu nosnika przechowywania lub dystrybucji, nie powoduje objecia takiej pracy zakresem niniejszej Licencji. 3. Mozesz kopiowac i rozprowadzac Program (lub oparta na nim prace - zgodnie z pkt.2 w kodzie wynikowym lub w formie wykonywalnej w mysl postanowien pkt.1 i 2 powyzej, pod warunkiem zrealizowania równiez ponizszych wymogów: a) Musisz dolaczyc do niego odpowiadajacy mu, kompletny i mozliwy do odczytania przez urzadzenia cyfrowe kod zródlowy, który musi byc rozpowszechniany na warunkach pkt.1 i 2 powyzej i na nosniku zwyczajowo uzywanym dla wzajemnej wymiany oprogramowania; lub b) dolaczyc do niego pisemna oferte, wazna co najmniej 3 lata, przyznajaca kazdej stronie trzeciej - za oplata nie przekraczajaca twego kosztu fizycznego wykonywania dystrybucji zródla - kompletna, odczytywalna przez urzadzenia cyfrowe kopie odpowiadajacego mu kodu zródlowego, rozprowadzana na warunkach pkt.1 i 2 powyzej, na nosniku zwyczajowo uzywanym do wzajemnej wymiany oprogramowania; lub c) dolaczyc do niego informacje, jaka otrzymales na temat oferty rozprowadzania odpowiedniego kodu zródlowego. (Ta mozliwosc dozwolona jest tylko dla dystrybucji niehandlowej i jedynie wtedy, gdy otrzymales dany program w kodzie wynikowym lub formie wykonywalnej wraz z wymieniona oferta - zgodnie z podpunktem "b" powyzej). Okreslenie kod zródlowy dla pracy oznacza forme pracy preferowana dla wprowadzania do niej modyfikacji. Dla wykonanej pracy, kompletny kod zródlowy oznacza caly kod zródlowy wszystkich modulów, wszelkie sprzezone z nia posredniczace pliki opisujace oraz zbiory komend stosowane do sterowania kompilacja i instalowaniem programów. Niemniej jednak, jako wyjatek specjalny, dystrybuowany (w formie zródlowej albo binarnej) kod zródlowy nie musi obejmowac niczego, co jest normalnie rozprowadzane przy pomocy glównych komponentów (kompilator, jadro itd.) systemu operacyjnego, na którym pracuje czesc wykonywalna, o ile sam taki komponent towarzyszy tej czesci. Jesli dystrybucja czesci wykonywalnej albo kodu wynikowego realizowana jest poprzez oferowanie dostepu do kopii z wyznaczonego miejsca, to oferowanie równowaznego dostepu dla kopiowania kodu zródlowego z tego samego miejsca liczy sie jako rozpowszechnianie kodu zródlowego, nawet gdy strony trzecie nie sa zmuszone do kopiowania zródla wraz z kodem wynikowym. 4. Poza przypadkami jednoznacznie dozwolonymi w niniejszej Licencji, nie mozesz kopiowac, modyfikowac, sublicencjonowac ani rozpowszechniac Programu. We wszystkich pozostalych wypadkach, kazda próba skopiowania, sublicencjonowania lub rozpowszechnienia Programu jest niewazna i powoduje automatyczne wygasniecie twoich praw z tytulu Licencji. Niemniej jednak, stronom, które juz otrzymaly od ciebie kopie albo prawa w ramach niniejszej Licencji, licencje nie wygasaja tak dlugo, jak dlugo strony te w pelni stosuja sie do nich. 5. Nie musisz akceptowac niniejszej Licencji, jezeli jej nie podpisales. Niemniej jednak, nic innego nie zapewni ci zezwolenia na modyfikowanie lub rozprowadzanie Programu i pochodzacych od niego prac. Dzialania takie sa prawnie zabronione, jezeli nie przyjmujesz niniejszej Licencji. Dlatego tez, poprzez modyfikowanie badz rozpowszechnianie Programu (lub pracy na nim opartej) dajesz wyraz swojej akceptacji dla Licencji i wszelkich jej postanowien i warunków dotyczacych kopiowania, rozprowadzania i modyfikowania Programu lub opartych na nim prac. 6. W kazdym przypadku redystrybucji przez ciebie Programu (albo opartej na nim pracy), odbiorca automatycznie otrzymuje od pierwotnego licencjodawcy licencje na kopiowanie, rozpowszechnianie i modyfikowanie Programu na niniejszych zasadach i warunkach. Na korzystanie przez odbiorce z udzielonych w niniejszej Licencji praw nie mozesz narzucac juz dalszych ograniczen. Nie jestes strona odpowiedzialna za kontrole przestrzegania Licencji przez osoby trzecie. 7. Jesli na skutek wyroku sadowego lub zarzutu naruszenia patentu, jak tez z kazdej innej przyczyny (nie ograniczonej do kwestii patentowych) zostana narzucone na ciebie (niezaleznie czy to moca wyroku sadowego, umowy, czy w inny sposób) warunki sprzeczne z warunkami niniejszej Licencji, to nie zwalniaja one ciebie z warunków Licencji. Jesli nie mozesz prowadzic dystrybucji tak, aby wypelniac jednoczesnie swoje obowiazki z tytulu niniejszej Licencji i inne odnosne obowiazki, to w rezultacie nie mozesz wcale rozprowadzac Programu. Na przyklad, gdyby licencja patentowa nie zezwalala na wolna od oplat licencyjnych redystrybucje Programu przez wszystkie osoby, które otrzymaly kopie bezposrednio lub posrednio od ciebie, to jedynym sposobem pozwalajacym ci na przestrzeganie i licencji patentowej, i Licencji niniejszej, byloby calkowite powstrzymanie sie od jakiejkolwiek dystrybucji Programu. Jezeli w jakichs szczególnych okolicznosciach którys fragment niniejszego punktu stalby sie niewazny lub niewykonywalny, to intencja jest, aby znajdowala zastosowanie pozostala czesc punktu, a tresc calego punktu byla stosowana w pozostalych okolicznosciach. Celem niniejszego punktu nie jest zachecanie do naruszania patentów czy innych praw wlasnosci, albo tez do podwazania ich waznosci; niniejszy punkt za swój jedyny cel ma ochrone integralnosci systemu rozpowszechniania wolnego oprogramowania, realizowanego za pomoca publicznych licencji. Wielu ludzi bezinteresownie wnioslo swój wklad do stworzenia szerokiego zakresu oprogramowania upowszechnianego w tym systemie, majac zaufanie do konsekwentnego jego stosowania; wylacznie do autora/ofiarodawcy nalezy decyzja, czy zyczy on sobie rozprowadzania oprogramowania za posrednictwem innego systemu i licencjobiorca nie moze tego prawa wyboru ograniczac. Intencja niniejszego punktu jest jasne i wyrazne przedstawienie tego, co uwaza sie za skutki, jakie rodzi pozostala czesc niniejszej Licencji. 8. W przypadku, gdy dystrybucja i/lub uzywanie Programu w niektórych krajach poddane jest ograniczeniom patentowym lub zastrzezeniom prawami autorskimi, poczatkowy posiadacz praw autorskich, który poddaje Program pod oddzialywanie niniejszej Licencji, moze dodac wyraznie zakreslone geograficzne ograniczenie rozpowszechniania wylaczajace te kraje, dzieki czemu dystrybucja dozwolona bedzie wylacznie w krajach czy wsród krajów nie objetych takim wylaczeniem. W przypadku takim, niniejsza Licencja obejmuje dane ograniczenie tak, jakby bylo ono wpisane w jej tresc. 9. W miare potrzeby Fundacja Wolnego Oprogramowania moze publikowac poprawione i/lub nowe wersje Powszechnej Licencji Publicznej. Takie nowe wersje beda napisane w duchu podobnym do obecnej wersji, ale moga róznic sie w szczególach poruszajacych nowe problemy czy zagadnienia. Kazdej wersji nadaje sie wyrózniajacy ja numer. Jezeli Program podaje numer wersji niniejszej Licencji, odnoszacy sie do tej wersji i "wszelkich wersji nastepnych", masz do wyboru albo stosowac sie do postanowien i warunków tej wersji, albo którejkolwiek wersji pózniejszej wydanej przez Fundacje Wolnego Oprogramowania. O ile Program nie podaje numeru wersji niniejszej Licencji, mozesz wybrac dowolna wersje kiedykolwiek opublikowana przez Fundacje. 10. Jesli chcesz wlaczyc czesci Programu do innych wolnych programów, których warunki rozpowszechniania sa inne, zwróc sie pisemnie do autora z prosba o pozwolenie. W przypadku oprogramowania objetego przez Fundacje prawem autorskim, napisz do Fundacji; czasami czynimy od tego odstepstwa. W naszej decyzji kierujemy sie dwoma celami: utrzymania wolnego statusu wszystkich pochodnych naszego wolnego oprogramowania oraz - generalnie - promowania wspóludzialu i wielokrotnego stosowania oprogramowania. WYRÓB BEZ GWARANCJI 11. PONIEWAZ PROGRAM JEST LICENCJONOWANY BEZPLATNIE, NIE JEST OBJETY GWARANCJA W ZAKRESIE DOZWOLONYM PRZEZ OBOWIAZUJACE PRZEPISY. O ILE NA PISMIE NIE STANOWI SIE INACZEJ, POSIADACZE PRAW AUTORSKICH I/LUB INNE STRONY ZAPEWNIAJA PROGRAM W STANIE, W JAKIM JEST ("JAK WIDAC") BEZ JAKIEJKOLWIEK GWARANCJI, ANI WYRAZNEJ, ANI DOMYSLNEJ, W TYM MIEDZY INNYMI DOMYSLNYCH GWARANCJI CO DO PRZYDATNOSCI HANDLOWEJ I PRZYDATNOSCI DO OKRESLONYCH ZASTOSOWAN. CALOSC RYZYKA W ZAKRESIE JAKOSCI I SKUTECZNOSCI DZIALANIA PROGRAMU PONOSISZ SAM. W RAZIE GDYBY PROGRAM OKAZAL SIE WADLIWY, PONOSISZ KOSZT CALEGO NIEZBEDNEGO SERWISU, NAPRAWY I KORYGOWANIA. 12. O ILE OBOWIAZUJACE PRAWO NIE STANOWI INACZEJ ALBO CZEGOS INNEGO NIE UZGODNIONO W FORMIE PISEMNEJ, ZADEN POSIADACZ PRAW AUTORSKICH ANI INNA STRONA MODYFIKUJACA I/LUB REDYSTRYBUJACA PROGRAM ZGODNIE Z POWYZSZYMI ZEZWOLENIAMI, W ZADNYM WYPADKU NIE JEST ODPOWIEDZIALNA WOBEC CIEBIE ZA SZKODY, W TYM SZKODY OGÓLNE, SPECJALNE, UBOCZNE LUB SKUTKOWE, WYNIKLE Z UZYCIA BADZ NIEMOZLIWOSCI UZYCIA PROGRAMU (W TYM, MIEDZY INNYMI, ZA UTRATE DANYCH LUB POWSTANIE DANYCH NIEDOKLADNYCH, ALBO ZA STRATY PONIESIONE PRZEZ CIEBIE LUB STRONY TRZECIE, JAK TEZ NIEDZIALANIE PROGRAMU Z INNYMI PROGRAMAMI), NAWET JESLI DANY POSIADACZ BADZ INNA STRONA ZOSTALI POWIADOMIENI O MOZLIWOSCI POWSTANIA TAKICH SZKÓD. KONIEC ZASAD I WARUNKÓW Jak stosowac niniejsze Warunki do Twoich nowych programów Jesli opracowujesz nowy program i chcialbys, aby stal sie on przydatny dla szerokiego ogólu, najlepsza droga do osiagniecia tego bedzie nadanie twemu programowi charakteru wolnego oprogramowania, które kazdy moze redystrybuowac i zmieniac na niniejszych warunkach. W tym celu do programu dolacz ponizsze informacje. Bezpieczniej jest dolaczyc je na poczatku kazdego pliku zródlowego, dzieki czemu najskuteczniej mozna przekazac fakt nieistnienia gwarancji; kazdy plik powinien przy tym nosic uwage "copyright" i odnosnik, gdzie mozna znalezc pelna informacje. nazwa programu i informacja, do czego on sluzy. Copyright (C) 19../20.. nazwisko autora Niniejszy program jest wolnym oprogramowaniem; mozesz go rozprowadzac dalej i/lub modyfikowac na warunkach Powszechnej Licencji Publicznej GNU, wydanej przez Fundacje Wolnego Oprogramowania - wedlug wersji 2-giej tej Licencji lub którejs z pózniejszych wersji. Niniejszy program rozpowszechniany jest z nadzieja, iz bedzie on uzyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyslnej gwarancji PRZYDATNOSCI HANDLOWEJ albo PRZYDATNOSCI DO OKRESLONYCH ZASTOSOWAN. W celu uzyskania blizszych informacji - Powszechna Licencja Publiczna GNU. Z pewnoscia wraz z niniejszym programem otrzymales tez egzemplarz Powszechnej Licencji Publicznej GNU (GNU General Public License); jesli nie - napisz do Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Podaj tez informacje o sposobie kontaktowania sie z toba poczta elektroniczna lub zwykla. Jesli dany program jest interaktywny, spraw, aby w momencie wchodzenia w tryb interaktywny wyswietlal on komunikat jak w ponizszym przykladzie: Gnomovision wersja 69, Copyright C 19.. nazwisko autora Gnomovision wydawany jest ABSOLUTNIE BEZ ZADNEJ GWARANCJI - w celu uzyskania dalszych szczególów wpisz "show w". To jest wolne oprogramowanie i mile widziane jest dalsze rozpowszechnianie go przez ciebie na okreslonych warunkach - w celu uzyskania blizszych szczególów wpisz "show c". Powyzsze hipotetyczne polecenia "show w" i "show c" winny powodowac wyswietlenie odpowiednich czesci Powszechnej Licencji Publicznej. Oczywiscie mozesz uzywac innych polecen niz "show w" i "show c"; moga to byc nawet klikniecia mysza lub pozycje menu - co tylko sobie uznasz za stosowne. Powinienes tez poprosic swego pracodawce (jesli pracujesz jako programista) czy tez swoja szkole (jesli jestes uczniem), o podpisanie, w razie potrzeby, "Rezygnacji z praw autorskich" do programu. Ponizej podajemy przyklad (zmien nazwy/nazwiska): My, firma Jojodyne Sp. z o.o. niniejszym zrzekamy sie i rezygnujemy z wszelkich interesów prawnych w zakresie praw autorskich do programu "Gnomovision" (który realizuje nastepujace funkcje...), napisanego przez p.Jana Kowalskiego. Podpis: /-/ Gniewoslaw Wielkowazny Gniewoslaw Wielkowazny, Prezes...itp Powszechna Licencja Publiczna nie zezwala na wlaczanie twego programu do programów prawnie zastrzezonych. Jesli twój program jest biblioteka podprogramów, mozesz rozwazyc, czy nie bedzie korzystniej zezwolic na powiazanie prawnie zastrzezonych aplikacji z biblioteka. Jesli chcialbys wlasnie tego dokonac, zamiast niniejszej Licencji zastosuj Powszechna Licencje Publiczna GNU dla Bibliotek. gwhere-0.2.3/doc/license/Makefile.am0000444000175000017500000000013110023202521015636 0ustar bartbartEXTRA_DIST = license.en \ license.de \ license.fr \ license.es \ license.pl gwhere-0.2.3/doc/license/Makefile.in0000644000175000017500000001335710506327573015714 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ EXTRA_DIST = license.en \ mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../config.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/license/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = doc/license distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu doc/license/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean license.de \ license.fr \ license.es \ license.pl # 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: gwhere-0.2.3/doc/license/license.hu0000644000175000017500000004427010023202521015600 0ustar bartbart²GPL Introduction This is an unofficial translation of the GNU General Public License into Hungarian. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GNU GPL--only the original English text of the GNU GPL does that. However, we hope that this translation will help French speakers understand the GNU GPL better. Source is http://lme.linux.hu/forditas/GNU_GPL_hu.txt GNU GPL Magyar fordítás A 2. Verzió (1991. június) fordítása Copyright 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA. Bárki terjesztheti, másolhatja a dokumentumot, de a módosítása nem megengedett. A fordítás csak tájékoztató jellegû és jogi szempontból csakis az angol eredeti a mérvadó. Elõszó A legtöbb program felhasználói jogosultságai azzal a szándékkal készültek, hogy minél kevesebb lehetõséget adjanak a terjesztéshez illetve a szoftver megváltoztatásához. A GNU GPL ezzel szemben minél több jogot kíván biztosítani a szabad szoftverek terjesztéséhez és módosításához, hogy a szoftver ingyenes lehessen az összes felhasználója számára. Az Általános Közreadási Feltételek szabályai vonatkoznak a Szabad Szoftver Alapítvány legtöbb szoftverére, illetve minden olyan programra, melynek szerzõje úgy dönt, hogy ezt használja a szerzõi jog megjelölésekor. (A szabad szoftver alapítvány egyes szoftvereire a GNU LGPL vonatkozik - Library GPL.) Bárki használhatja a programjaiban a GPL-t a szerzõi jogi megjegyzésnél. A szabad szoftver megjelölés nem jelenti azt, hogy a szoftvernek nem lehet ára. A GPL dokumentumok úgy készültek, hogy biztosítsák a szabad szoftverek terjeszthetõségét (pénzért ha úgy tetszik), illetve a forráskód hozzáférhetõséget, hogy bárki szabadon módosíthassa azt, ha akarja mindenképpen tudjon errõl a lehetõségrõl. A szerzõ jogainak védelmében korlátozásokat kell hozni, melyek megtiltják, hogy bárki megtagadja e jogokat másoktól, vagy ezekrõl való lemondásra kényszerítene valakit. Ezek a korlátozások bizonyos kötelezettségeket jelentenek azok számára akik a terjesztik vagy módosítják a szoftvert. Ha valaki ilyen programot terjeszt, akár ingyen akár egy bizonyos összeg fejében, a szoftverre vonatkozó minden jogát tovább kell adnia az ügyfeleinek. Biztosítani kell továbbá, hogy mindenki megkapja, vagy lehetõsége legyen hozzájutni a forráskódhoz. Ezen kívül el kell juttatni ezen szabályokat tartalmazó dokumentumot is, hogy mindenki értesülhessen a jogairól. A jogvédelem két eszköze: (1) a szoftver szerzõi jogainak biztosítása (2) ezen szabályok alapján jogok biztosítása a másoláshoz, terjesztéshez és/vagy a szoftver módosításához. Az egyes szerzõk és a magunk védelmében biztosítani akarjuk, hogy mindenki megértse: nincs garancia az ilyen szoftverekre. Ha a szoftvert mások módosították és továbbterjesztették, mindenkinek, aki a módosított változatot kapja, tudnia kell, hogy az nem eredeti. Így a mások által okozott hibáknak nem lehet semmiféle hatása az eredeti szerzõ hírnevére. Végül, mivel a szabad szoftver létét fenyegetik a szoftverszabadalmak, el szeretnénk kerülni annak veszélyét, hogy a szabad szoftver terjesztõi szabadalmat jegyezhessenek be a szoftverre, így tulajdonukká téve azt. Ennek megelõzéséhez tisztázni kívánjuk: szabadalom szabad szoftverrel kapcsolatban csak mindenki által szabad használatra jegyezhetõ be, vagy egyáltalán nem jegyezhetõ be. A pontos szabályok és a másolásra, terjesztésre, módosításra vonatkozó feltételek következnek. A másolásra, terjesztésre és módosításra vonatkozó feltételek és szabályok 0. Ezek a jogok vonatkoznak bármely olyan programra vagy munkára, melynek a szerzõi jogi megjegyzésében a jog tulajdonosa a következõ szöveget helyezte el: Terjeszthetõ a GNU GPL-ben foglaltak alapján. A következõkben a „Program" megjelölés vonatkozik bármely programra, vagy munkára, a „Programon alapuló munka" pedig magát a Programot, vagy a Programot felhasználó szerzõi joggal védett munkát jelenti, vagyis olyan munkát, mely tartalmazza a Programot, vagy annak egy részletét, módosítottan vagy módosítatlanul és/vagy más nyelvre fordítva. (Ezentúl a fordítás minden egyéb megkötés nélkül beletartozik a ``módosítás'' fogalmába.) A másoláson, terjesztésen és módosításon kívül más tevékenységgel nem foglalkozik ez a dokumentum, azokat hatályon kívülinek tekinti. A Program futtatása nincs korlátozva, illetve a Program kimenetére is csak abban az esetben vonatkozik ez a szabályozás, ha az tartalmazza a Programon alapuló munka egy részletét (attól függetlenül, hogy ez a Program futtatásával jött-e létre). Ez tehát a Program mûködésétõl függ. 1. A Program forráskódja másolható és terjeszthetõ módosítás nélkül bármely adathordozón, feltéve, hogy minden egyes példányon pontosan szerepel a megfelelõ szerzõi jogi megjegyzés, illetve a garanciavállalás elutasítása. Érintetlenül kell hagyni minden erre a szabályozásra és a garancia teljes hiányára utaló szöveget, és ezt a dokumentumot is el kell juttatni mindazokhoz, akik a Programot kapják. Kérhetõ pénz az adatok fizikai továbbítása fejében, illetve díjazás fejében lehet garanciás támogatást adni a Programhoz. 2. A Program, vagy egy darabja módosítható, mely így az egy a Programon alapuló munkát alkot, a módosítás ezután tovább terjeszthetõ az 1. részben adott feltételek szerint, ha az alábbi feltételek is teljesülnek: a. A módosított fájlokat el kell látni olyan megjegyzéssel, mely feltünteti a módosítást végzõ nevét és a módosítások dátumát. b. Minden olyan munkát vagy programot, mely részben vagy egészben tartalmazza a Programot vagy a Programon alapul, olyan szabályokkal kell kiadni, hogy annak használati joga harmadik személy részére ingyenesen hozzáférhetõ legyen, ezen dokumentumban található szabályok alapján. c. Ha a módosított Program interaktív bemenetet használ, akkor azt úgy kell elkészíteni, hogy a megszokott módon történõ indításkor megjelenítsen egy üzenetet a megfelelõ szerzõi jogi megjegyzéssel és a garancia hiányára utaló közléssel (vagy éppen azzal az információval, hogy minként juthat valaki garanciához), illetve azzal az információval, hogy bárki terjesztheti a Programot eme feltételek alapján. Ezen kívül utalást kell tenni rá, hogy miként olvashatja el a felhasználó ezt a dokumentumot. (Kivétel: ha a Program interaktív ugyan, de nem jelenít meg hasonló üzenetet, akkor a Programon alapuló munkának sem kell ezt tennie.) Ezek a feltételek a módosított munkára, mint egészre vonatkoznak. Ha a munka egy azonosítható részei nem a Programon alapulnak, függetlenként elkülönülten azonosíthatók, akkor ez a szabályozás nem vonatkozik ezekre a részekre, ha azok külön munkaként vannak terjesztve. Viszont, ha ugyanez a rész az egész részeként kerül terjesztésre, és az egész a Programon alapuló munka, akkor az egész terjesztése csak ezen dokumentum alapján lehetséges, mely ebben az esetben a jogokat minden egyes felhasználó számára kiterjeszti az egészre tekintet nélkül arra, hogy mely részt ki írta. Ezen szövegrésznek nem az a célja, hogy a mások jogait elvegye vagy korlátozza a kizárólag saját maga által írt munkákra. A cél, hogy a jogok gyakorlása szabályozva legyen a Programon alapuló, illetve a gyûjteményes munkák terjesztése esetében is. Ezen kívül más munkák, melyek nem a Programon alapulnak, a Programmal (vagy a Programon alapuló munkával) közös adathordozón vagy adattárolón szereplése nem jelenti ezen szabályok érvényességét azokra is. 3. A program (vagy a programon alapuló munka a 2. szakasz alapján) másolható és terjeszthetõ tárgykódú vagy végrehajtható kódú formájában az 1. és 2. szakaszban foglaltak szerint, amennyiben az alábbi feltételek is teljesülnek: a. A teljes, gép által értelmezhetõ forráskód kíséri az anyagot, melynek terjesztése az 1. és 2. szakaszban foglaltak szerint történik, szoftverterjesztésre használt hordozón; vagy b. Egy legalább három évre szóló írásos ajánlat kíséri az anyagot, mely szerint bármely külsõ személynek rendelkezésre áll a teljes gép által értelmezhetõ forráskód, a fizikai továbbítást fedezõ összegnél nem nagyobb díjért az 1. és 2. szakaszban foglaltak szerint szoftverterjesztésre használt adathordozón; vagy c. Olyan tájékoztatás kíséri az anyagot, mely tartalmazza az írásos ajánlat szövegét a forráskód biztosítására. (Ez az alternatíva csak nem kereskedelmi terjesztés esetén alkalmazható, abban az esetben, ha a terjesztõ a Programhoz a tárgykódú vagy forráskódú formájában jutott hozzá az ajánlattal együtt a b. cikkelynek megfelelõen.) Egy munka forráskódja a munkának azt a formáját jelenti, melyben a módosításokat szokás végezni. Egy végrehajtható program esetében a teljes forráskód jelenti a modulok forráskódját, a kapcsolódó felületkezelõ definíciós fájlokat, és a fordítást vezérlõ parancsfájlokat. Egy speciális kivételként a forráskódnak nem kell tartalmaznia az operációs rendszer fõbb részeit (kernel fordítóprogram stb.), melyen a végrehajtható kód fut, hacsak nem tartozik ehhez maga a program is. Ha a végrehajtható program vagy tárgykód terjesztése a forráskód hozzáférését egy megadott helyen biztosító ajánlattal történik, ez az ajánlat egyenértékû a forráskód terjesztésével, még akkor is, ha másoknak így nem kell a forrást lemásolniuk a tárgykóddal együtt. 4. A Programot csak ebben a dokumentumban leírtaknak megfelelõen lehet lemásolni, terjeszteni, módosítani, rá jogokat bejegyezni. Az egyéb módon való másolás, módosítás, terjesztés, jogok bejegyzése semmisé teszi a dokumentumban közzétett jogosultságokat. Akik azonban a jogaikat ennek a szerzõi jogi szabályozás keretei között kapták, azok joga mindaddig megmarad, amíg teljesen megfelelnek a leírtaknak. 5. Nem kell elfogadni ezt a szabályozást, mivel aláírni sem kell. Ezen kívül viszont semmi más nem adhat jogokat a Program továbbterjesztésére és módosítására. Ezeket a cselekedeteket a törvény bünteti, ha nem ennek a szerzõi jogi szabályozásnak a keretei között történnek. Mindezek miatt a Program (vagy a Programon alapuló munka) terjesztése vagy módosítása ezen dokumentum szabályinak elfogadását jelenti. 6. Minden alkalommal, amikor a Program (vagy azon alapuló munka) továbbadása történik, a Program „vevõje" automatikusan hozzájut a Program eredeti tulajdonosának szerzõi jogait tartalmazó dokumentumhoz, mely biztosítja a Program másolását és terjesztését eme szabályok szerint. Nem lehet semmi módon további korlátozásokat hozni a „vevõ" számára ezen szabályok betartása céljából. Más szavakkal: a Program továbbadója nem felelõs más személyekkel betartatni ezeket a szabályokat. 7. Ha bírósági határozat vagy más szabadalmi kötöttségek miatt olyan feltételek állnak elõ, melyek ellentétesek e szabályozással, ezek nem mentik fel a terjesztõt a feltételek figyelembevétele alól. Ha a terjesztés nem lehetséges ezen szabályozás szerint, akkor egyáltalán nem lehetséges. Például, ha egy szabadalmi szerzõdés nem engedi meg egy program tiszteletdíj nélküli terjesztését, akkor az egyetlen módja, hogy eleget tegyen valaki mindkét szabályozásnak az, hogy eláll a továbbfejlesztett program terjesztésétõl. Ha ennek a szakasznak bármely része nem érvényesül, vagy nem érvényesíthetõ valamely körülmény folytán, akkor a szakaszt kell mérlegelni, egyéb esetekben a szakasz, mint egész alkalmazandó. Ennek a szakasznak nem az a célja, hogy a szabadalmak vagy egyéb hasonló jogok elutasítására bírjon bárkit is. Mindössze meg szeretné védeni a szabad szoftver terjesztés rendszerének egységét, melyet a szabad közreadást szabályozó feltételrendszerek teremtenek meg. Sok ember nagylelkû közremûködése folytán igen nagyszámú és változatos szoftver terjesztése történik ezen a módon, mely nagyban függ ennek a feltétel-rendszernek állandó betartásán. Minden esetben a szerzõ/adományozó dönti el, hogy mûvét mely rendszer szerint teszi közzé. Ezt a döntést a jogok felhasználója nem befolyásolhatja. Ez a szakasz pontosan szeretné tisztázni a szabályozás hátralevõ részének lehetséges következményeit. Ha a Program terjesztése és/vagy használata egyes országokban nem lehetséges szabadalmak vagy szerõi jogokkal védett kapcsolódási felületek miatt, akkor a Program szerzõi jogainak eredeti tulajdonosa, aki a Programot ezen szabályozás alapján adja közre, egy földrajzi megkötést adhat a terjesztésre, és egyes országokat kizárhat. Ekkor a terjesztés csak azokban az országokban lehetséges, amelyek nem lettek ilyen módon kizárva. Ebben az esetben ennek a szabályozásnak kell tartalmazni az ilyen megkötéseket is is. 9. A Szabad Szoftver Alapítvány idõnként a dokumentum felülvizsgált illetve újabb változatait adja ki. Ezek az újabb dokumentumok az elõzõek szellemében készülnek, de részletekben különböznek, hogy új problémákat kezelhessenek. A dokumentum minden változata egy meghatározott verziószámmal ellátva jelenik meg. Ha a program szerzõi jogi megjegyzésében egy bizonyos vagy annál újabb verzió van megjelölve, akkor lehetõség van akár a megjelölt, vagy a Szabad Szoftver Alapítvány által kiadott késõbbi verzióban leírt feltételek követésére. Ha nincs ilyen megjelölt verzió, akkor a Szabad Szoftver Alapítvány által valaha kibocsátott bármelyik dokumentum alkalmazására lehetõség van. 10. A Programot más szabad szoftverbe, melynek szerzõi jogi szabályozása kü lönbözik a GPL-tõl, akkor lehet beépíteni, ha a szerzõtõl erre engedélyt lehet szerezni. Abban az esetben, ha a program szerzõi jogainak tulajdonosa a Szabad Szoftver Alapítvány, akkor a Szabad Szoftver Alapítvány címére kell írni. Az alapítvány egyes esetekben ezt engedélyezi. A döntés a következõ két cél szem elõtt tartásával fog megtörténni: Megmaradjon a Programon alapuló munkák szabad státusa; Valamint segítse elõ a szoftver újrafelhasználását és megosztását. NINCS GARANCIAVÁLLALÁS 11. MIVEL A PROGRAM HASZNÁLATI JOGA DÍJMENTES, A PROGRAMHOZ NEM JÁR GARANCIA AZ IDEVONATKOZÓ JOGSZABÁLYNAK MEGFELELÕEN. AMENNYIBEN A SZERZÕI JOGOK TULAJDONOSAI ÍRÁSBAN MÁSKÉNT NEM NYILATKOZNAK, A PROGRAM ``ÚGY AHOGY VAN'' KERÜL KIADÁSRA MINDENFÉLE GARANCIAVÁLLALÁS NÉLKÜL. A PROGRAMMAL KAPCSOLATBAN NICS SEM SZÁRMAZTATOTT, SEM EGYÉB GARANCIAVÁLLALÁS BELEÉRTVE DE NEM KIZÁRÓLAGOSAN A FORGALOMBAHOZHATÓSÁGRA VAGY ALKALMAZHATÓSÁGRA VONATKOZÓ GARANCIÁKAT. A PROGRAM MINÕSÉGÉBÕL ÉS MÛKÖDÉSÉBÕL FAKADÓ ÖSSZES KOCKÁZAT A FELHASZNÁLÓT TERHELI. HA A PROGRAM HIBÁSAN MÛKÖDIK, A FELHASZNÁLÓNAK MAGÁNAK KELL VÁLLALNIA A JAVÍTÁSHOZ SZÜKSÉGES MINDEN KÖLTSÉGET. 12. AMENNYIBEN A HATÁLYOS JOGSZABÁLYOK, VAGY A SZERZÕI JOGOK TULAJDONOSAI ÍRÁSOS MEGÁLLAPODÁSBAN MÁSKÉNT NEM RENDELKEZNEK, SEM A PROGRAM SZERZÕJE SEM MÁSOK, AKIK MÓDOSÍTOTTÁK ÉS/VAGY TERJESZTETTÉK A PROGRAMOT A FENTIEKNEK MEGFELELÕEN, NEM TEHETÕK FELELÕSSÉ KÁROKÉRT MELYEK LEHETNEK VÉLETLENEK, VAGY MEGHATÁROZOTT KÖRÜLMÉNYEK MIATT TÖRTÉNTEK (BELEÉRTVE DE NEM KIZÁRÓLAGOSAN A AZ ADATVESZTÉST ÉS A HELYTELEN ADATFELDOLGOZÁST, VALAMINT A MÁS PROGRAMOKKAL VALÓ HIBÁS EGYÜTTMÛKÖDÉST), AKKOR SEM, HA EZEN FELEK TUDATÁBAN VOLTAK ILYEN KÁROK KELETKEZÉSÉNEK LEHETÕSÉGÉNEK. FELTÉTELEK ÉS SZABÁLYOK VÉGE Függelék: Hogyan alkalmazhatóak ezek a szabályok egy új programra Ha valaki egy új programot készít és szeretné hogy az a többi ember számára a lehetõ leginkább hasznos legyen, annak az a legjobb módja, hogy szabad szoftverré teszi azt, megengedve bárki számára a szabad másolást és módosítást ezen szabályok alapján. Ehhez a következõ megjegyzést kell csatolni a programhoz. A legbiztosabb ezt minden egyes forrásfájl elejére beírni, így közölve leghatásosabban a garancia visszautasítását. Minden fájl ezen kívül kell, hogy tartalmazzon egy „copyright'' sort és egy utalást arra helyre, ahol a teljes szöveg található. Egy sor mely megadja a program nevét, és leírja, hogy mit csinál. Copyright 19yy a szerzõ neve Ez egy szabad szoftver; terjeszthetõ illetve módosítható a GNU Általános Közreadási Feltételek dokumentumában leírtak szerint -- 2. vagy késõbbi verzió --, melyet a Szabad Szoftver Alapítvány ad ki. Ez a program abban a reményben kerül közreadásra, hogy hasznos lesz, de minden egyéb GARANCIA NÉLKÜL, az eladhatóságra vagy valamely célra való alkalmazhatóságra való származtatott garanciát is beleértve. További részletekért lásd a GNU Általános Közreadási Feltételek dokumentumát. A programmal együtt kellett, hogy érkezzen egy példány a GNU Általános Közreadási Feltételek dokumentumából is. Ha mégsem akkor ezt a Szabad Szoftver Alapítványnak küldött levélben jelezni kell. A szabad szoftver alapítvány címe: Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. A programhoz csatolni kell azt is, hogy miként lehet kapcsolatba lépni a szerzõvel, elektronikus vagy hagyományos levél küldésével. Ha a program interaktív, a következõhöz hasonló üzenettel lehet ezt megtenni a program indulásakor: Gnomovision version 69, Copyright (C) 19yy a szerzõ neve A Gnomovision programhoz SEMMIFÉLE GARANCIA NEM JÁR; A részletes tájékoztatáshoz ezt kell begépelni: ,,show w''. Ez egy szabad szoftver; bizonyos feltételek mellett terjeszthetõ illetve módosítható. A részletes tájékoztatáshoz ezt kell begépelni: `show c'. A ,,show w'' és ,,show c'' képzeletbeli parancsok, és a GNU Általános Közreadási Feltételek megfelelõ szakaszát kell megjeleníteniük. Természetesen a valódi parancsok lehetnek a ,,show w'' és a ,,show c''- tõl különbözõek is, lehetnek akár egérkattintások vagy menüpontok is a programnak megfelelõen. Ha szükséges, meg kell szerezni a munkáltatótól (programozó esetében) vagy iskolától a program szerzõi jogairól való lemondás igazolását. Erre itt egy példa: Az Adócsaló BT ezennel lemond minden szerzõi jogi érdekeltségérõl a ,,Gnomovision'' programmal kapcsolatban, melyet Hekker Jani írt. Aláírás: Maffy Jocó, 1987. április 1. Maffy Jocó, alelnök A GPL általános közreadási feltételek dokumentuma nem engedi meg, hogy szabad szoftver része legyen szabadalommal védett programnak. Ha a program egy eljáráskönyvtár akkor inkább a más programokkal való összefûzését célszerû megengedni. Ha ez a cél akkor a GNU LGPL dokumentumot lehet alkalmazni, mely ilyen eljáráskönyvtárak közreadását szabályozza. gwhere-0.2.3/doc/Makefile.am0000644000175000017500000000042010241217477014241 0ustar bartbartSUBDIRS = license man DOXYGEN = doxygen noinst_DATA = Doxyfile.in doxygen-html: Doxyfile $(DOXYGEN) $< clean-generic: rm -Rf api EXTRA_DIST = README.Linux \ README.Cygwin \ README.Win32 \ README.FreeBSD \ README.NetBSD \ README.OpenBSD \ $(noinst_DATA) gwhere-0.2.3/doc/Makefile.in0000644000175000017500000002365110506327567014273 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ SUBDIRS = license man DOXYGEN = doxygen noinst_DATA = Doxyfile.in EXTRA_DIST = README.Linux README.Cygwin README.Win32 README.FreeBSD README.NetBSD README.OpenBSD $(noinst_DATA) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = Doxyfile DATA = $(noinst_DATA) DIST_COMMON = Doxyfile.in Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status Doxyfile: $(top_builddir)/config.status Doxyfile.in cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # 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. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = doc distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu doc/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile $(DATA) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean doxygen-html: Doxyfile $(DOXYGEN) $< clean-generic: rm -Rf api # 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: gwhere-0.2.3/doc/man/0000755000175000017500000000000010506575526012772 5ustar bartbartgwhere-0.2.3/doc/man/gwhere.10000444000175000017500000000127210023202521014305 0ustar bartbart.TH GWHERE 1 .SH NAME gwhere \- Catalog manager .SH SYNOPSIS .PP .B gwhere [ .BR catalog ] .SH DESCRIPTION GWhere allows to manage a database of your CDs and other removable media (hard disks, floppy drive, Zip drive, CD-ROM, etc...). It's easy to browse your CDs or to make a quick search without the need to insert the CDs or other media in the drive each at once. .SH OPTIONS You can specify the program to load a catalog file on startup by passing the catalog filename as an argument .TP .BR catalog The filename of the catalog to load at program startup. .SH AUTHOR Sébastien LECACHEUR This manual page written by Luis Parravicini gwhere-0.2.3/doc/man/Makefile.am0000444000175000017500000000002310023202521014767 0ustar bartbartman_MANS = gwhere.1gwhere-0.2.3/doc/man/Makefile.in0000644000175000017500000001572410506327600015034 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ man_MANS = gwhere.1 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../config.h CONFIG_CLEAN_FILES = man1dir = $(mandir)/man1 MANS = $(man_MANS) NROFF = nroff DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/man/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status install-man1: $(mkinstalldirs) $(DESTDIR)$(man1dir) @list='$(man1_MANS)'; \ l2='$(man_MANS)'; for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ done uninstall-man1: @list='$(man1_MANS)'; \ l2='$(man_MANS)'; for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ rm -f $(DESTDIR)$(man1dir)/$$inst; \ done install-man: $(MANS) @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-man1 uninstall-man: @$(NORMAL_UNINSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-man1 tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = doc/man distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu doc/man/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-man install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-man uninstall: uninstall-am all-am: Makefile $(MANS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(mandir)/man1 mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: install-man1 uninstall-man1 install-man uninstall-man tags \ distdir info-am info dvi-am dvi check check-am installcheck-am \ installcheck install-exec-am install-exec install-data-am install-data \ install-am install uninstall-am uninstall all-redirect all-am all \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/doc/README.Cygwin0000644000175000017500000000031110023202521014301 0ustar bartbartSpecific code should be put between #ifdef OS_CYGWIN and #endif BUGS : - Error when close /cygdrive/. file. - Segmentation fault with base64encode. - Title icon is bad (it is the close catalog icon). gwhere-0.2.3/doc/README.FreeBSD0000644000175000017500000000072310023202521014262 0ustar bartbartSpecific code should be put between #ifdef OS_FREEBSD end #endif How to compile GWhere under FreeBSD ? ===================================== There were problems building included libintl. You had to --disable-nls or manually set BUILD(USE)_INCLUDED_INTL = no to build with your system libintl. How should you build it without included intl ? So it was: ./configure --disable-nls | ./configure disable included intl manually gmake gmake install gmake = GNU make gwhere-0.2.3/doc/README.Linux0000644000175000017500000000007610023202521014150 0ustar bartbartSpecific code should be put between #ifdef OS_LINUX end #endifgwhere-0.2.3/doc/README.NetBSD0000644000175000017500000000007710023202521014131 0ustar bartbartSpecific code should be put between #ifdef OS_NETBSD end #endifgwhere-0.2.3/doc/README.OpenBSD0000644000175000017500000000010010023202521014267 0ustar bartbartSpecific code should be put between #ifdef OS_OPENBSD end #endifgwhere-0.2.3/doc/README.Win320000644000175000017500000000013310112717446013765 0ustar bartbartSpecific code should be put between #ifdef OS_WIN32 end #endif GWhere runs with GTK+ 2.4.x.gwhere-0.2.3/doc/README.Darwin0000644000175000017500000000007710074337752014323 0ustar bartbartSpecific code should be put between #ifdef OS_DARWIN end #endifgwhere-0.2.3/doc/README.MacOS0000644000175000017500000000007610074337752014040 0ustar bartbartSpecific code should be put between #ifdef OS_MACOS end #endifgwhere-0.2.3/doc/README.MacOSX0000644000175000017500000000024110112717571014154 0ustar bartbartSpecific code should be put between #ifdef OS_MACOSX end #endif GWhere compile under MAC OS X, but there is no disk in the media list (cannot find mounted disk).gwhere-0.2.3/doc/Doxyfile.in0000644000175000017500000002247410241214672014327 0ustar bartbart# Doxyfile 1.4.2 #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = @PROJECT_NAME@ PROJECT_NUMBER = @VERSION@ OUTPUT_DIRECTORY = @top_srcdir@/doc/api CREATE_SUBDIRS = YES OUTPUT_LANGUAGE = English USE_WINDOWS_ENCODING = YES BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES STRIP_FROM_PATH = STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO DETAILS_AT_TOP = NO INHERIT_DOCS = YES DISTRIBUTE_GROUP_DOC = NO SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 8 ALIASES = OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_JAVA = NO SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = YES EXTRACT_PRIVATE = YES EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = NO HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = YES FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = YES WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = @top_srcdir@/src FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.d \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.idl \ *.odl \ *.cs \ *.php \ *.php3 \ *.inc \ *.m \ *.mm \ *.dox RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = YES INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = YES REFERENCES_RELATION = YES VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = NO COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = YES GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = MAX_DOT_GRAPH_WIDTH = 1024 MAX_DOT_GRAPH_HEIGHT = 1024 MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO gwhere-0.2.3/gwhere.desktop0000644000175000017500000001004210255620636014315 0ustar bartbart[Desktop Entry] Version=1.0 Encoding=UTF-8 Name=Removable media catalog managment Name[ar]=Administración de catálogos de medios removibles Name[cs]=Správa katalogu výmìnných médií Name[de]=Katalog-Verwaltung für Wechselmedien Name[el]=Äéá÷åßñçóç êáôáëüãùí áðïóðþìåíùí ìÝóùí Name[es]=Gestión de medios extraibles Name[fr]=Gestionnaire de catalogues de media amovibles Name[hu]=Lemez katalógus nyilvántartó program Name[it]=Gestione dei cataloghi per dispositivi rimovibili Name[nl]=Beheer verwijderbare media Name[pl]=Innych mediów katalog zarz±dzanie Name[pt]=Gestor de catálogos de media removivel Comment=GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD-ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once. Comment[ar]=GWhere permite administrar una base de datos de tus CDs y otros medios removibles (disco duros, diskettes, discos Zip, CD-ROMs, etc...). Con GWhere es fácil navegar tus CDs o realizar búsquedas sin la necesidad de insertar los CDs en la lectora de a uno por vez. Comment[cs]=GWhere slou¾í k uchování obsahu CD a dal¹ích médií(HDD, floppy, zip,...). Potom mù¾ete procházet databázia vyhledávat soubory bez nutnosti vlo¾it CD do mechaniky. Comment[de]=GWhere erlaubt die Verwaltung einer Datenbank Ihrer CDs und anderer Wechselmedien (Festplatten, Floppies, Zip-Disketten, CD-ROM usw. ...). Mit GWhere ist es sehr einfach, Ihre CDs zu durchsuchen oder eine Schnellsuche durchzuführen ohne jedesmal die CD ins Laufwerk zu stecken. Comment[el]=Ôï GWhere óáò åðéôñÝðåé íá äéá÷åéñéóôåßôå ìéá âÜóç äåäïìÝíùí ôùí CD êáé Üëëùí áðïóðþìåíùí ìÝóùí óáò (óêëçñïß äßóêïé, äéóêÝôåò, Zip drive, CD-ROM, êëð...). Ìå ôï GWhere åßíáé åýêïëï íá ñßîåôå ìéá ìáôéÜ óôá CD óáò Þ íá áíáæçôÞóåôå ãñÞãïñá êÜôé óå áõôÜ ÷ùñßò ôçí áíÜãêç íá ôá åéóÜãåôå óôï drive êÜèå öïñÜ. Comment[es]=GWhere permite manipular una base de datos de tus CDs y otros medios extraibles (discos duros, disquetes, Zips, CD-ROM, etc...) Con GWhere es fácil navegar en tus CDs o hacer búsquedas rápidas sin necesidad de introducir tus CDs en la unidad cada vez. Comment[fr]=GWhere permet de gérer une base de données de vos CD et autres media amovibles (disques durs, disquettes, disquettes Zip, CD-ROM, etc...). Avec GWhere il est facile de parcourir vos CDs ou de faire une recherche rapide sans avoir besoin d'insérer vos CDs dans le lecteur à chaque fois. Comment[hu]=GWhere lehetõvé teszi a CD lemezeid és más mozgatható adathordozóid (hdd, floppy, Zip meghajtó, USB drive....) katalogizálását. A GWhere a lemezekrõl egy adatbázist készít, ami tartalmazza a fájlok neveit, majd késõbb ebben az adatbázisból a CD lemez érintése nélkül gyorsan megállapíthatod melyik lemezen van a keresett fájl. Comment[it]=Gwhere permette di creare e gestire un database dei tuoi CD e di altri dispositivi rimovibili come hard disk, floppy drive, Zip drive, CD-ROM, etc...). Con GWHERE \xc3\xa8 facile leggere i contenuti dei tuoi CD ed \xc3\xa8 anchepossibile fare veloci ricerche senza alcuna necessit\xc3\xa0 di inserire i CD in tuo possesso nel lettore. Comment[nl]=Met GWhere kun je een gegevensbank van je CD's en andere verwijderbare media beheren (harde schijven, diskettes, ZIP diskettes, CD-ROM, enz...). Met GWhere is het makkelijk je CD's te doorlopen of snel iets op te zoeken zonder telkens je CD's in de speler te moeten steken. Comment[pl]=GWHere to program zarz±dzaj±cy baz± Twoich p³yt CD oraz innych mediów (takich jak twarde dyski, dyskietki, dyski Zip itp.). Dziêki GWhere w ³atwy sposób mo¿esz przegl±daæ Twoje p³yty CD i szybko znale¼æ potrzebny Ci plik bez konieczno¶ci ci±g³ego wsadzania p³yt do napêdu. Comment[pt]=GWhere permite gerir uma base de dados dos seus CDs ou outros tipos de media removível (discos rígidos, disquetes, drives ZIP, CD-ROM, etc...). Com o GWhere é fácil explorar os seus CDs ou fazer rápidas pesquisas sem a necessidade de inserir cada um dos seus CDs na drive. TryExec=gwhere Exec=gwhere Icon=gwhere.xpm Terminal=false Type=Application Categories=Application;Utility; gwhere-0.2.3/gwhere.spec.in0000644000175000017500000002507610506575233014221 0ustar bartbart%define name @PACKAGE@ %define version @VERSION@ %define release 1 Name: %{name} Packager: Sébastien LECACHEUR Summary: Removable media catalog managment Summary(ar): Administración de catálogos de medios removibles Summary(cs): Správa katalogu výmìnných médií Summary(de): Katalog-Verwaltung für Wechselmedien Summary(el): Äéá÷åßñçóç êáôáëüãùí áðïóðþìåíùí ìÝóùí Summary(es): Gestión de medios extraibles Summary(fr): Gestionnaire de catalogues de media amovibles Summary(hu): Lemez katalógus nyilvántartó program Summary(it): Gestione dei cataloghi per dispositivi rimovibili Summary(nl): Beheer verwijderbare media Summary(pl): Zarz±dzanie katalogiem mediów Summary(pt): Gestor de catálogos de media removivel Summary(ru): Менеджер каталогов Ñьёмных ноÑителей Summary(sr): Katalog diskova Version: %{version} Release: %{release} #License: GPL #Copyright: Sébastien LECACHEUR Copyright: GPL Source: %{name}-%{version}.tar.bz2 #Source0: http://www.gwhere.org/download/sources/%{name}-%{version}.tar.gz Group: X11/Applications URL: http://www.gwhere.org BuildRequires: autoconf BuildRequires: automake BuildRequires: gettext-devel BuildRequires: gtk+-devel BuildRequires: libtool BuildRequires: zlib-devel Obsoletes: GWhere BuildRoot: /var/tmp/%{name}-buildroot Requires: gtk+ zlib Icon: gwhere.xpm %description GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD-ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once. %description -l ar GWhere permite administrar una base de datos de tus CDs y otros medios removibles (disco duros, diskettes, discos Zip, CD-ROMs, etc...). Con GWhere es fácil navegar tus CDs o realizar búsquedas sin la necesidad de insertar los CDs en la lectora de a uno por vez. %description -l cs GWhere slou¾í k uchování obsahu CD a dal¹ích médií (HDD, floppy, zip,...).Potom mù¾ete procházet databázi a vyhledávat soubory bez nutnosti vlo¾it CD do mechaniky. %description -l de GWhere erlaubt die Verwaltung einer Datenbank Ihrer CDs und anderer Wechselmedien (Festplatten, Floppies, Zip-Disketten, CD-ROM usw. ...). Mit GWhere ist es sehr einfach, Ihre CDs zu durchsuchen oder eine Schnellsuche durchzuführen ohne jedesmal die CD ins Laufwerk zu stecken. %description -l el Ôï GWhere óáò åðéôñÝðåé íá äéá÷åéñéóôåßôå ìéá âÜóç äåäïìÝíùí ôùí CD êáé Üëëùí áðïóðþìåíùí ìÝóùí óáò (óêëçñïß äßóêïé, äéóêÝôåò, Zip drive, CD-ROM, êëð...). Ìå ôï GWhere åßíáé åýêïëï íá ñßîåôå ìéá ìáôéÜ óôá CD óáò Þ íá áíáæçôÞóåôå ãñÞãïñá êÜôé óå áõôÜ ÷ùñßò ôçí áíÜãêç íá ôá åéóÜãåôå óôï drive êÜèå öïñÜ. %description -l es GWhere permite manipular una base de datos de tus CDs y otros medios extraibles (discos duros, disquetes, Zips, CD-ROM, etc...) Con GWhere es fácil navegar en tus CDs o hacer búsquedas rápidas sin necesidad de introducir tus CDs en la unidad cada vez. %description -l fr GWhere permet de gérer une base de données de vos CD et autres media amovibles (disques durs, disquettes, disquettes Zip, CD-ROM, etc...). Avec GWhere il est facile de parcourir vos CDs ou de faire une recherche rapide sans avoir besoin d'insérer vos CDs dans le lecteur à chaque fois. %description -l hu GWhere lehetõvé teszi a CD lemezeid és más mozgatható adathordozóid (hdd, floppy, Zip meghajtó, USB drive....) katalogizálását. A GWhere a lemezekrõl egy adatbázist készít, ami tartalmazza a fájlok neveit, majd késõbb ebben az adatbázisból a CD lemez érintése nélkül gyorsan megállapíthatod melyik lemezen van a keresett fájl. %description -l it Gwhere permette di creare e gestire un database dei tuoi CD e di altri dispositivi rimovibili come hard disk, floppy drive, Zip drive, CD-ROM, etc...). Con GWHERE \xc3\xa8 facile leggere i contenuti dei tuoi CD ed \xc3\xa8 anchepossibile fare veloci ricerche senza alcuna necessit\xc3\xa0 di inserire i CD in tuo possesso nel lettore. %description -l nl Met GWhere kun je een gegevensbank van je CD's en andere verwijderbare media beheren (harde schijven, diskettes, ZIP diskettes, CD-ROM, enz...). Met GWhere is het makkelijk je CD's te doorlopen of snel iets op te zoeken zonder telkens je CD's in de speler te moeten steken. %description -l pl GWhere to program zarz±dzaj±cy baz± p³yt CD oraz innych mediów (takich jak twarde dyski, dyskietki, dyski Zip itp.). Dziêki GWhere w ³atwy sposób mo¿na przegl±daæ swoje p³yty CD i szybko znale¼æ potrzebny plik bez konieczno¶ci ci±g³ego wk³adania p³yt do napêdu. %description -l pt O GWhere permite gerir uma base de dados dos seus CDs ou outros tipos de media removível (discos rígidos, disquetes, drives ZIP, CD-ROM, etc...). Com o GWhere é fácil explorar os seus CDs ou fazer rápidas pesquisas sem a necessidade de inserir cada um dos seus CDs na drive. %description -l ru GWhere позволÑет управлÑть базой данных ваших CD или други Ñьёмных ноÑителей (жёÑткие диÑки, гибкие магнитные диÑки, Zip диÑки, компакт диÑки, и Ñ‚.п.). С GWhere легко проÑмотреть ваши CD или выполнить быÑтрый поиÑк без необходимоÑти вÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ отдельного CD в привод. %description -l sr GWhere vam omogucava da vodite bazu svojih CDova i drugih medijuma (hard diskovi, dlopi diskovi, zip drajvovi, CD-ROm, itd...). Sa GWhere-om je lako da pronadjete bilo sta na vasim diskova bez ubacivanja disk(ov)a u drajv jedan po jedan. %prep rm -rf $RPM_BUILD_ROOT %setup -q %build %configure make %install rm -rf $RPM_BUILD_ROOT install -d $RPM_BUILD_ROOT/%{_bindir} install -d $RPM_BUILD_ROOT/%{_datadir}/%{name} install -d $RPM_BUILD_ROOT/%{_datadir}/pixmaps install -d $RPM_BUILD_ROOT/%{_datadir}/gnome/apps/Applications install -d $RPM_BUILD_ROOT/%{_datadir}/applnk/Applications install -d $RPM_BUILD_ROOT/%{_mandir}/man1 install -d $RPM_BUILD_ROOT/%{_datadir}/locale/ar/LC_MESSAGES install -d $RPM_BUILD_ROOT/%{_datadir}/locale/cs/LC_MESSAGES install -d $RPM_BUILD_ROOT/%{_datadir}/locale/de/LC_MESSAGES install -d $RPM_BUILD_ROOT/%{_datadir}/locale/fr/LC_MESSAGES install -d $RPM_BUILD_ROOT/%{_datadir}/locale/es/LC_MESSAGES install -d $RPM_BUILD_ROOT/%{_datadir}/locale/it/LC_MESSAGES install -d $RPM_BUILD_ROOT/%{_datadir}/locale/hu/LC_MESSAGES install -d $RPM_BUILD_ROOT/%{_datadir}/locale/pl/LC_MESSAGES install -d $RPM_BUILD_ROOT/%{_datadir}/locale/pt/LC_MESSAGES install -d $RPM_BUILD_ROOT/%{_libdir}/%{name}/plugins/descr install -d $RPM_BUILD_ROOT/%{_datadir}/%{name}/plugins/descr install -d $RPM_BUILD_ROOT/%{_libdir}/%{name}/plugins/catalog install -d $RPM_BUILD_ROOT/%{_datadir}/%{name}/plugins/catalog %makeinstall mv $RPM_BUILD_ROOT%{_libdir}/libgwplugindescription*.so* $RPM_BUILD_ROOT%{_datadir}/%{name}/plugins/descr mv $RPM_BUILD_ROOT%{_libdir}/libgwplugindescription*.la* $RPM_BUILD_ROOT%{_datadir}/%{name}/plugins/descr mv $RPM_BUILD_ROOT%{_libdir}/libgwplugindescription*.a* $RPM_BUILD_ROOT%{_datadir}/%{name}/plugins/descr mv $RPM_BUILD_ROOT%{_libdir}/libgwplugincatalog*.so* $RPM_BUILD_ROOT%{_datadir}/%{name}/plugins/catalog mv $RPM_BUILD_ROOT%{_libdir}/libgwplugincatalog*.la* $RPM_BUILD_ROOT%{_datadir}/%{name}/plugins/catalog mv $RPM_BUILD_ROOT%{_libdir}/libgwplugincatalog*.a* $RPM_BUILD_ROOT%{_datadir}/%{name}/plugins/catalog %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %doc ChangeLog ChangeLog.fr %{_bindir}/%{name} %{_datadir}/%{name} %{_datadir}/gnome/apps/Applications/%{name}.desktop %{_datadir}/applnk/Applications/%{name}.desktop %{_mandir}/man1/gwhere.1* %{_datadir}/locale/*/LC_MESSAGES/%{name}.mo %{_datadir}/pixmaps/%{name}.xpm %{_datadir}/%{name}/plugins/descr/*.la* %{_datadir}/%{name}/plugins/descr/*.a* %{_datadir}/%{name}/plugins/descr/*.so* %{_datadir}/%{name}/plugins/catalog/*.la* %{_datadir}/%{name}/plugins/catalog/*.a* %{_datadir}/%{name}/plugins/catalog/*.so* %changelog * Wed Sep 28 2006 : Sébastien LECACHEUR - GWhere-0.2.3 : fix bugs, disk scan optimization * Tue Aug 22 2006 : Sébastien LECACHEUR - GWhere-0.2.2 : fix bugs, submount support * Tue Jun 23 2005 : Sébastien LECACHEUR - GWhere-0.2.1 : fix bugs, search engine optimization * Mon Jun 20 2005 : Sébastien LECACHEUR - GWhere-0.2.0 : fix bugs, catalog plugin managment, import/export support, ... * Wed Feb 18 2004 : Sébastien LECACHEUR - GWhere-0.1.3 : fix bugs, memory optimization, add search options, ... * Mon Sep 01 2003 : Sébastien LECACHEUR - GWhere-0.1.0-2 : FreeBSD port, fix bugs, add descript.ion, FILE_ID.DIZ plugin * Wed Apr 23 2003 : Sébastien LECACHEUR - GWhere-0.1.0-2 : fix bugs, add AVI plugin * Tue Apr 15 2003 : Sébastien LECACHEUR - GWhere-0.1.0-2 : fix missing link for plugin in RPM. * Wed Feb 19 2003 : Sébastien LECACHEUR - GWhere-0.1.0 : beta version, win32 port, GTK 2.0 compatibility, file description plugins, ... * Tue Sep 17 2002 : Sébastien LECACHEUR - GWhere-0.0.26 : config file, send mail * Fri Jul 05 2002 : Sébastien LECACHEUR - GWhere-0.0.25 : zlib support, experimental port on Cygwin * Fri Mar 22 2002 : Sébastien LECACHEUR - GWhere-0.0.24 : nouvelles fonctionnalités * Thu Jan 23 2002 : Sébastien LECACHEUR - GWhere-0.0.23 : nouvelles fonctionnalités * Sun Jan 6 2002 : Sébastien LECACHEUR - GWhere-0.0.22 : corrections de bugs * Fri Oct 26 2001 : Sébastien LECACHEUR - GWhere-0.0.21 : corrections de bugs * Wed Oct 03 2001 : Sébastien LECACHEUR - GWhere-0.0.20 : corrections de bugs et amélioration de divers composants. * Thu Sep 27 2001 : Sébastien LECACHEUR - GWhere-0.0.19 : corrections de bugs et traduction. * Fri Aug 17 2001 : Sébastien LECACHEUR - GWhere-0.0.18 : correction de bugs et amélioration de divers composants. * Sun Aug 05 2001 : Sébastien LECACHEUR - GWhere-0.0.17 : moteur de recherche intégré. Stabilisation de la version. * Fri Oct 13 2000 : Sébastien LECACHEUR - GWhere-0.0.16 : version à plus stable et utilisable * Sun Sep 10 2000 : Sébastien LECACHEUR - GWhere-0.0.15 : ajoute/suppression, beaucoup de bugs corrigés * Sat Aug 26 2000 : Sébastien LECACHEUR - GWhere-0.0.14 : implémentation du supermount * Thu Aug 24 2000 : Sébastien LECACHEUR - GWhere-0.0.13 : toujours en version alpha!! * Fri May 05 2000 : Sébastien LECACHEUR - GWhere-0.0.12 : cette version peut encore évoluer gwhere-0.2.3/gwhere.xpm0000444000175000017500000000204110023202521013424 0ustar bartbart/* XPM */ static char *gwhere[] = { /* columns rows colors chars-per-pixel */ "32 21 14 1", " c black", ". c #191919", "X c gray20", "o c #007f7f", "O c #7f0000", "+ c #7f7f00", "@ c #4c4c4c", "# c #666667", "$ c gray50", "% c cyan", "& c red", "* c yellow", "= c gray60", "- c None", /* pixels */ "----- - .Xo@o#=#@ooX. --. ----", "---- -.@#$=o$$$Xo$$$$=o#.-- --", "--- -.@$=oX.------- -.X#$=o.- -", "- -.$=X.- - - -.X$=@.- ", "- -o=o - .--------- - @=o.-", " -@=X- --------------- -.$$ ", "-@=X- --- - - - . -.$$", ".$@- ----------------------- -.X", "@$.- ----.X-+O-OO.-. X+O.+OO +O.", "o#- ----- + &+ +++-O++ .OX.++O..", "=X- ---- -+++OO+O++++&OXX+O+O+O+", "=X- ---- -O++++.++O+++- X+*.XX ", "o#- ---- - *O.* &+-O++..O.+X.+.O", ".=.- ----- @XX#X#@X@X@#@XXX#X@@+", "-o$.- -- -.##@@#o##@#@o##@#o#o$=", "-.$$ - ------------------- -X$X", " -.$o.- . -.o=X-", "- -.$=@.- - -.X$$X- ", "-- -@$=#..---------- -.X$$@.- -", "--- -.@$=$#XXXo XXXX#o$=o.- --", "----- -..o$====$$==%#@X. ---" }; gwhere-0.2.3/INSTALL0000444000175000017500000001722710023202521012462 0ustar bartbartBasic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. gwhere-0.2.3/INSTALL-FR0000644000175000017500000000347010023202521012764 0ustar bartbart Installation ============ La façon la plus simple de compiler ce paquetage est : 1. `cd' le répertoire qui contient l'archive du propramme et taper tar -xvzf "nom_archive" [user@localhost]#tar -xvfz gwhere-x.x.x.tar.gz ou [user@localhost]#tar -xvfz gwhere-x.x.x.tar.bz2 2. `cd' le nouveau répertoire qui contient le code source. [user@localhost]#cd gwhere-x.x.x 3. Taper "./configure" pour configurer la compilation. [user@localhost]#./configure Pour activer le mode débugage il taper utiliser l'option --enable-debug-all. [user@localhost]#./configure --enable-debug-all Pour activer la compilation avec GTK 1.2 il taper utiliser l'option --enable-gtk12. [user@localhost]#./configure --enable-gtk12 Pour activer la compilation avec GTK 2.0 il taper utiliser l'option --enable-gtk20. [user@localhost]#./configure --enable-gtk20 Pour sélectionner le SE cible de construction utiliser l'option --target=votre_SE Par exemple pour GNU/Linux [user@localhost]#./configure --target=linux Ou pour Cygwin [user@localhost]#./configure --target=cygwin 4. Taper `make' pour compiler the programme. [user@localhost]#make 5. Passer en root en tapant "su root". [user@localhost]#su root 6. Et taper `make install'. [user@localhost]make install 7. Amusez-vous!! Pour lancer GWhere taper gwhere!! [user@localhost]gwhere Pour plus d'information sur GWhere, lire le fichier README. ------ Il y a surement beaucoup de bugs, mais n'ayez pas peur de m'envoyer un mail (zero@gwhere.org) pour me dire que vous en avez trouvé ou pour me proposer des amélioration, ou tout simplement pour me dire que vous utilisez mon programme. Quand vous m'envoyer un mail, donnez la configuration de votre machine et OS (distribution) que vous utilisez!! Merci gwhere-0.2.3/install-sh0000444000175000017500000000000010023202521013407 0ustar bartbartgwhere-0.2.3/intl/0000755000175000017500000000000010506575525012417 5ustar bartbartgwhere-0.2.3/intl/bindtextdom.c0000444000175000017500000001232310023202521015054 0ustar bartbart/* Implementation of the bindtextdomain(3) function Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #if defined STDC_HEADERS || defined _LIBC # include #else # ifdef HAVE_MALLOC_H # include # else void free (); # endif #endif #if defined HAVE_STRING_H || defined _LIBC # include #else # include # ifndef memcpy # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) # endif #endif #ifdef _LIBC # include #else # include "libgettext.h" #endif #include "gettext.h" #include "gettextP.h" /* @@ end of prolog @@ */ /* Contains the default location of the message catalogs. */ extern const char _nl_default_dirname[]; /* List with bindings of specific domains. */ extern struct binding *_nl_domain_bindings; /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define BINDTEXTDOMAIN __bindtextdomain # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define BINDTEXTDOMAIN bindtextdomain__ #endif /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ char * BINDTEXTDOMAIN (domainname, dirname) const char *domainname; const char *dirname; { struct binding *binding; /* Some sanity checks. */ if (domainname == NULL || domainname[0] == '\0') return NULL; for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (dirname == NULL) /* The current binding has be to returned. */ return binding == NULL ? (char *) _nl_default_dirname : binding->dirname; if (binding != NULL) { /* The domain is already bound. If the new value and the old one are equal we simply do nothing. Otherwise replace the old binding. */ if (strcmp (dirname, binding->dirname) != 0) { char *new_dirname; if (strcmp (dirname, _nl_default_dirname) == 0) new_dirname = (char *) _nl_default_dirname; else { #if defined _LIBC || defined HAVE_STRDUP new_dirname = strdup (dirname); if (new_dirname == NULL) return NULL; #else size_t len = strlen (dirname) + 1; new_dirname = (char *) malloc (len); if (new_dirname == NULL) return NULL; memcpy (new_dirname, dirname, len); #endif } if (binding->dirname != _nl_default_dirname) free (binding->dirname); binding->dirname = new_dirname; } } else { /* We have to create a new binding. */ #if !defined _LIBC && !defined HAVE_STRDUP size_t len; #endif struct binding *new_binding = (struct binding *) malloc (sizeof (*new_binding)); if (new_binding == NULL) return NULL; #if defined _LIBC || defined HAVE_STRDUP new_binding->domainname = strdup (domainname); if (new_binding->domainname == NULL) return NULL; #else len = strlen (domainname) + 1; new_binding->domainname = (char *) malloc (len); if (new_binding->domainname == NULL) return NULL; memcpy (new_binding->domainname, domainname, len); #endif if (strcmp (dirname, _nl_default_dirname) == 0) new_binding->dirname = (char *) _nl_default_dirname; else { #if defined _LIBC || defined HAVE_STRDUP new_binding->dirname = strdup (dirname); if (new_binding->dirname == NULL) return NULL; #else len = strlen (dirname) + 1; new_binding->dirname = (char *) malloc (len); if (new_binding->dirname == NULL) return NULL; memcpy (new_binding->dirname, dirname, len); #endif } /* Now enqueue it. */ if (_nl_domain_bindings == NULL || strcmp (domainname, _nl_domain_bindings->domainname) < 0) { new_binding->next = _nl_domain_bindings; _nl_domain_bindings = new_binding; } else { binding = _nl_domain_bindings; while (binding->next != NULL && strcmp (domainname, binding->next->domainname) > 0) binding = binding->next; new_binding->next = binding->next; binding->next = new_binding; } binding = new_binding; } return binding->dirname; } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__bindtextdomain, bindtextdomain); #endif gwhere-0.2.3/intl/cat-compat.c0000444000175000017500000001474110023202521014571 0ustar bartbart/* Compatibility code for gettext-using-catgets interface. Copyright (C) 1995, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef STDC_HEADERS # include # include #else char *getenv (); # ifdef HAVE_MALLOC_H # include # endif #endif #ifdef HAVE_NL_TYPES_H # include #endif #include "libgettext.h" /* @@ end of prolog @@ */ /* XPG3 defines the result of `setlocale (category, NULL)' as: ``Directs `setlocale()' to query `category' and return the current setting of `local'.'' However it does not specify the exact format. And even worse: POSIX defines this not at all. So we can use this feature only on selected system (e.g. those using GNU C Library). */ #ifdef _LIBC # define HAVE_LOCALE_NULL #endif /* The catalog descriptor. */ static nl_catd catalog = (nl_catd) -1; /* Name of the default catalog. */ static const char default_catalog_name[] = "messages"; /* Name of currently used catalog. */ static const char *catalog_name = default_catalog_name; /* Get ID for given string. If not found return -1. */ static int msg_to_cat_id PARAMS ((const char *msg)); /* Substitution for systems lacking this function in their C library. */ #if !_LIBC && !HAVE_STPCPY static char *stpcpy PARAMS ((char *dest, const char *src)); #endif /* Set currently used domain/catalog. */ char * textdomain (domainname) const char *domainname; { nl_catd new_catalog; char *new_name; size_t new_name_len; char *lang; #if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES \ && defined HAVE_LOCALE_NULL lang = setlocale (LC_MESSAGES, NULL); #else lang = getenv ("LC_ALL"); if (lang == NULL || lang[0] == '\0') { lang = getenv ("LC_MESSAGES"); if (lang == NULL || lang[0] == '\0') lang = getenv ("LANG"); } #endif if (lang == NULL || lang[0] == '\0') lang = "C"; /* See whether name of currently used domain is asked. */ if (domainname == NULL) return (char *) catalog_name; if (domainname[0] == '\0') domainname = default_catalog_name; /* Compute length of added path element. */ new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang) + sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1 + sizeof (".cat"); new_name = (char *) malloc (new_name_len); if (new_name == NULL) return NULL; strcpy (new_name, PACKAGE); new_catalog = catopen (new_name, 0); if (new_catalog == (nl_catd) -1) { /* NLSPATH search didn't work, try absolute path */ sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang, PACKAGE); new_catalog = catopen (new_name, 0); if (new_catalog == (nl_catd) -1) { free (new_name); return (char *) catalog_name; } } /* Close old catalog. */ if (catalog != (nl_catd) -1) catclose (catalog); if (catalog_name != default_catalog_name) free ((char *) catalog_name); catalog = new_catalog; catalog_name = new_name; return (char *) catalog_name; } char * bindtextdomain (domainname, dirname) const char *domainname; const char *dirname; { #if HAVE_SETENV || HAVE_PUTENV char *old_val, *new_val, *cp; size_t new_val_len; /* This does not make much sense here but to be compatible do it. */ if (domainname == NULL) return NULL; /* Compute length of added path element. If we use setenv we don't need the first byts for NLSPATH=, but why complicate the code for this peanuts. */ new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname) + sizeof ("/%L/LC_MESSAGES/%N.cat"); old_val = getenv ("NLSPATH"); if (old_val == NULL || old_val[0] == '\0') { old_val = NULL; new_val_len += 1 + sizeof (LOCALEDIR) - 1 + sizeof ("/%L/LC_MESSAGES/%N.cat"); } else new_val_len += strlen (old_val); new_val = (char *) malloc (new_val_len); if (new_val == NULL) return NULL; # if HAVE_SETENV cp = new_val; # else cp = stpcpy (new_val, "NLSPATH="); # endif cp = stpcpy (cp, dirname); cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:"); if (old_val == NULL) { # if __STDC__ stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat"); # else cp = stpcpy (cp, LOCALEDIR); stpcpy (cp, "/%L/LC_MESSAGES/%N.cat"); # endif } else stpcpy (cp, old_val); # if HAVE_SETENV setenv ("NLSPATH", new_val, 1); free (new_val); # else putenv (new_val); /* Do *not* free the environment entry we just entered. It is used from now on. */ # endif #endif return (char *) domainname; } #undef gettext char * gettext (msg) const char *msg; { int msgid; if (msg == NULL || catalog == (nl_catd) -1) return (char *) msg; /* Get the message from the catalog. We always use set number 1. The message ID is computed by the function `msg_to_cat_id' which works on the table generated by `po-to-tbl'. */ msgid = msg_to_cat_id (msg); if (msgid == -1) return (char *) msg; return catgets (catalog, 1, msgid, (char *) msg); } /* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries for the one equal to msg. If it is found return the ID. In case when the string is not found return -1. */ static int msg_to_cat_id (msg) const char *msg; { int cnt; for (cnt = 0; cnt < _msg_tbl_length; ++cnt) if (strcmp (msg, _msg_tbl[cnt]._msg) == 0) return _msg_tbl[cnt]._msg_number; return -1; } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (dest, src) char *dest; const char *src; { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif gwhere-0.2.3/intl/ChangeLog0000444000175000017500000010461410023202521014146 0ustar bartbart1998-04-29 Ulrich Drepper * intl/localealias.c (read_alias_file): Use unsigned char for local variables. Remove unused variable tp. * intl/l10nflist.c (_nl_normalize_codeset): Use unsigned char * for type of codeset. For loosing Solaris systems. * intl/loadinfo.h: Adapt prototype of _nl_normalize_codeset. * intl/bindtextdom.c (BINDTEXTDOMAIN): Don't define local variable len if not needed. Patches by Jim Meyering. 1998-04-28 Ulrich Drepper * loadmsgcat.c (_nl_load_domain): Don't assign the element use_mmap if mmap is not supported. * hash-string.h: Don't include . 1998-04-27 Ulrich Drepper * textdomain.c: Use strdup is available. * localealias.c: Define HAVE_MEMPCPY so that we can use this function. Define and use semapahores to protect modfication of global objects when compiling for glibc. Add code to allow freeing alias table. * l10nflist.c: Don't assume stpcpy not being a macro. * gettextP.h: Define internal_function macri if not already done. Use glibc byte-swap macros instead of defining SWAP when compiled for glibc. (struct loaded_domain): Add elements to allow unloading. * Makefile.in (distclean): Don't remove libintl.h here. * bindtextdomain.c: Carry over changes from glibc. Use strdup if available. * dcgettext.c: Don't assume stpcpy not being a macro. Mark internal functions. Add memory freeing code for glibc. * dgettext.c: Update copyright. * explodename.c: Include stdlib.h and string.h only if they exist. Use strings.h eventually. * finddomain.c: Mark internal functions. Use strdup if available. Add memory freeing code for glibc. 1997-10-10 20:00 Ulrich Drepper * libgettext.h: Fix dummy textdomain and bindtextdomain macros. They should return reasonable values. Reported by Tom Tromey . 1997-09-16 03:33 Ulrich Drepper * libgettext.h: Define PARAMS also to `args' if __cplusplus is defined. * intlh.inst.in: Likewise. Reported by Jean-Marc Lasgouttes . * libintl.glibc: Update from current glibc version. 1997-09-06 02:10 Ulrich Drepper * intlh.inst.in: Reformat copyright. 1997-08-19 15:22 Ulrich Drepper * dcgettext.c (DCGETTEXT): Remove wrong comment. 1997-08-16 00:13 Ulrich Drepper * Makefile.in (install-data): Don't change directory to install. 1997-08-01 14:30 Ulrich Drepper * cat-compat.c: Fix copyright. * localealias.c: Don't define strchr unless !HAVE_STRCHR. * loadmsgcat.c: Update copyright. Fix typos. * l10nflist.c: Don't define strchr unless !HAVE_STRCHR. (_nl_make_l10nflist): Handle sponsor and revision correctly. * gettext.c: Update copyright. * gettext.h: Likewise. * hash-string.h: Likewise. * finddomain.c: Remoave dead code. Define strchr only if !HAVE_STRCHR. * explodename.c: Include . * explodename.c: Reformat copyright text. (_nl_explode_name): Fix typo. * dcgettext.c: Define and use __set_errno. (guess_category_value): Don't use setlocale if HAVE_LC_MESSAGES is not defined. * bindtextdom.c: Pretty printing. 1997-05-01 02:25 Ulrich Drepper * dcgettext.c (guess_category_value): Don't depend on HAVE_LC_MESSAGES. We don't need the macro here. Patch by Bruno Haible . * cat-compat.c (textdomain): DoN't refer to HAVE_SETLOCALE_NULL macro. Instead use HAVE_LOCALE_NULL and define it when using glibc, as in dcgettext.c. Patch by Bruno Haible . * Makefile.in (CPPFLAGS): New variable. Reported by Franc,ois Pinard. Mon Mar 10 06:51:17 1997 Ulrich Drepper * Makefile.in: Implement handling of libtool. * gettextP.h: Change data structures for use of generic lowlevel i18n file handling. Wed Dec 4 20:21:18 1996 Ulrich Drepper * textdomain.c: Put parentheses around arguments of memcpy macro definition. * localealias.c: Likewise. * l10nflist.c: Likewise. * finddomain.c: Likewise. * bindtextdom.c: Likewise. Reported by Thomas Esken. Mon Nov 25 22:57:51 1996 Ulrich Drepper * textdomain.c: Move definition of `memcpy` macro to right position. Fri Nov 22 04:01:58 1996 Ulrich Drepper * finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using bcopy if not already defined. Reported by Thomas Esken. * bindtextdom.c: Likewise. * l10nflist.c: Likewise. * localealias.c: Likewise. * textdomain.c: Likewise. Tue Oct 29 11:10:27 1996 Ulrich Drepper * Makefile.in (libdir): Change to use exec_prefix instead of prefix. Reported by Knut-HåvardAksnes . Sat Aug 31 03:07:09 1996 Ulrich Drepper * l10nflist.c (_nl_normalize_codeset): We convert to lower case, so don't prepend uppercase `ISO' for only numeric arg. Fri Jul 19 00:15:46 1996 Ulrich Drepper * l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after definition of _GNU_SOURCE. Patch by Roland McGrath. * Makefile.in (uninstall): Fix another bug with `for' loop and empty arguments. Patch by Jim Meyering. Correct name os uninstalled files: no intl- prefix anymore. * Makefile.in (install-data): Again work around shells which cannot handle mpty for list. Reported by Jim Meyering. Sat Jul 13 18:11:35 1996 Ulrich Drepper * Makefile.in (install): Split goal. Now depend on install-exec and install-data. (install-exec, install-data): New goals. Created from former install goal. Reported by Karl Berry. Sat Jun 22 04:58:14 1996 Ulrich Drepper * Makefile.in (MKINSTALLDIRS): New variable. Path to mkinstalldirs script. (install): use MKINSTALLDIRS variable or if the script is not present try to find it in the $top_scrdir). Wed Jun 19 02:56:56 1996 Ulrich Drepper * l10nflist.c: Linux libc *partly* includes the argz_* functions. Grr. Work around by renaming the static version and use macros for renaming. Tue Jun 18 20:11:17 1996 Ulrich Drepper * l10nflist.c: Correct presence test macros of __argz_* functions. * l10nflist.c: Include based on test of it instead when __argz_* functions are available. Reported by Andreas Schwab. Thu Jun 13 15:17:44 1996 Ulrich Drepper * explodename.c, l10nflist.c: Define NULL for dumb systems. Tue Jun 11 17:05:13 1996 Ulrich Drepper * intlh.inst.in, libgettext.h (dcgettext): Rename local variable result to __result to prevent name clash. * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to get prototype for stpcpy and strcasecmp. * intlh.inst.in, libgettext.h: Move declaration of `_nl_msg_cat_cntr' outside __extension__ block to prevent warning from gcc's -Wnested-extern option. Fri Jun 7 01:58:00 1996 Ulrich Drepper * Makefile.in (install): Remove comment. Thu Jun 6 17:28:17 1996 Ulrich Drepper * Makefile.in (install): Work around for another Buglix stupidity. Always use an `else' close for `if's. Reported by Nelson Beebe. * Makefile.in (intlh.inst): Correct typo in phony rule. Reported by Nelson Beebe. Thu Jun 6 01:49:52 1996 Ulrich Drepper * dcgettext.c (read_alias_file): Rename variable alloca_list to block_list as the macro calls assume. Patch by Eric Backus. * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using malloc. (read_alias_file): Rename varriabe alloca_list to block_list as the macro calls assume. Patch by Eric Backus. * l10nflist.c: Correct conditional for inclusion. Reported by Roland McGrath. * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not all-@USE_NLS@. * Makefile.in (install): intlh.inst comes from local dir, not $(srcdir). * Makefile.in (intlh.inst): Special handling of this goal. If used in gettext, this is really a rul to construct this file. If used in any other package it is defined as a .PHONY rule with empty body. * finddomain.c: Extract locale file information handling into l10nfile.c. Rename local stpcpy__ function to stpcpy. * dcgettext.c (stpcpy): Add local definition. * l10nflist.c: Solve some portability problems. Patches partly by Thomas Esken. Add local definition of stpcpy. Tue Jun 4 02:47:49 1996 Ulrich Drepper * intlh.inst.in: Don't depend including on HAVE_LOCALE_H. Instead configure must rewrite this fiile depending on the result of the configure run. * Makefile.in (install): libintl.inst is now called intlh.inst. Add rules for updating intlh.inst from intlh.inst.in. * libintl.inst: Renamed to intlh.inst.in. * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1 because gcc has __buitlin_alloca. Reported by Roland McGrath. Mon Jun 3 00:32:16 1996 Ulrich Drepper * Makefile.in (installcheck): New goal to fulfill needs of automake's distcheck. * Makefile.in (install): Reorder commands so that VERSION is found. * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in @datadir@/gettext. (COMSRCS): Add l10nfile.c. (OBJECTS): Add l10nfile.o. (DISTFILES): Rename to DISTFILE.normal. Remove $(DISTFILES.common). (DISTFILE.gettext): Remove $(DISTFILES.common). (all-gettext): Remove goal. (install): If $(PACKAGE) = gettext install, otherwose do nothing. No package but gettext itself should install libintl.h + headers. (dist): Extend goal to work for gettext, too. (dist-gettext): Remove goal. * dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc. Sun Jun 2 17:33:06 1996 Ulrich Drepper * loadmsgcat.c (_nl_load_domain): Parameter is now comes from find_l10nfile. Sat Jun 1 02:23:03 1996 Ulrich Drepper * l10nflist.c (__argz_next): Add definition. * dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca code. Use new l10nfile handling. * localealias.c [!HAVE_ALLOCA]: Add code for handling missing alloca code. * l10nflist.c: Initial revision. Tue Apr 2 18:51:18 1996 Ulrich Drepper * Makefile.in (all-gettext): New goal. Same as all-yes. Thu Mar 28 23:01:22 1996 Karl Eichwalder * Makefile.in (gettextsrcdir): Define using @datadir@. Tue Mar 26 12:39:14 1996 Ulrich Drepper * finddomain.c: Include . Reported by Roland McGrath. Sat Mar 23 02:00:35 1996 Ulrich Drepper * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing with external declaration. Sat Mar 2 00:47:09 1996 Ulrich Drepper * Makefile.in (all-no): Rename from all_no. Sat Feb 17 00:25:59 1996 Ulrich Drepper * gettextP.h [loaded_domain]: Array `successor' must now contain up to 63 elements (because of codeset name normalization). * finddomain.c: Implement codeset name normalization. Thu Feb 15 04:39:09 1996 Ulrich Drepper * Makefile.in (all): Define to `all-@USE_NLS@'. (all-yes, all_no): New goals. `all-no' is noop, `all-yes' is former all. Mon Jan 15 21:46:01 1996 Howard Gayle * localealias.c (alias_compare): Increment string pointers in loop of strcasecmp replacement. Fri Dec 29 21:16:34 1995 Ulrich Drepper * Makefile.in (install-src): Who commented this goal out ? :-) Fri Dec 29 15:08:16 1995 Ulrich Drepper * dcgettext.c (DCGETTEXT): Save `errno'. Failing system calls should not effect it because a missing catalog is no error. Reported by Harald Knig . Tue Dec 19 22:09:13 1995 Ulrich Drepper * Makefile.in (Makefile): Explicitly use $(SHELL) for running shell scripts. Fri Dec 15 17:34:59 1995 Andreas Schwab * Makefile.in (install-src): Only install library and header when we use the own implementation. Don't do it when using the system's gettext or catgets functions. * dcgettext.c (find_msg): Must not swap domain->hash_size here. Sat Dec 9 16:24:37 1995 Ulrich Drepper * localealias.c, libintl.inst, libgettext.h, hash-string.h, gettextP.h, finddomain.c, dcgettext.c, cat-compat.c: Use PARAMS instead of __P. Suggested by Roland McGrath. Tue Dec 5 11:39:14 1995 Larry Schwimmer * libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if !_LIBINTL_H' because Solaris defines _LIBINTL_H as empty. Mon Dec 4 15:42:07 1995 Ulrich Drepper * Makefile.in (install-src): Install libintl.inst instead of libintl.h.install. Sat Dec 2 22:51:38 1995 Marcus Daniels * cat-compat.c (textdomain): Reverse order in which files are tried you load. First try local file, when this failed absolute path. Wed Nov 29 02:03:53 1995 Nelson H. F. Beebe * cat-compat.c (bindtextdomain): Add missing { }. Sun Nov 26 18:21:41 1995 Ulrich Drepper * libintl.inst: Add missing __P definition. Reported by Nelson Beebe. * Makefile.in: Add dummy `all' and `dvi' goals. Reported by Tom Tromey. Sat Nov 25 16:12:01 1995 Franc,ois Pinard * hash-string.h: Capitalize arguments of macros. Sat Nov 25 12:01:36 1995 Ulrich Drepper * Makefile.in (DISTFILES): Prevent files names longer than 13 characters. libintl.h.glibc->libintl.glibc, libintl.h.install->libintl.inst. Reported by Joshua R. Poulson. Sat Nov 25 11:31:12 1995 Eric Backus * dcgettext.c: Fix bug in preprocessor conditionals. Sat Nov 25 02:35:27 1995 Nelson H. F. Beebe * libgettext.h: Solaris cc does not understand #if !SYMBOL1 && !SYMBOL2. Sad but true. Thu Nov 23 16:22:14 1995 Ulrich Drepper * hash-string.h (hash_string): Fix for machine with >32 bit `unsigned long's. * dcgettext.c (DCGETTEXT): Fix horrible bug in loop for alternative translation. Thu Nov 23 01:45:29 1995 Ulrich Drepper * po2tbl.sed.in, linux-msg.sed, xopen-msg.sed: Some further simplifications in message number generation. Mon Nov 20 21:08:43 1995 Ulrich Drepper * libintl.h.glibc: Use __const instead of const in prototypes. * Makefile.in (install-src): Install libintl.h.install instead of libintl.h. This is a stripped-down version. Suggested by Peter Miller. * libintl.h.install, libintl.h.glibc: Initial revision. * localealias.c (_nl_expand_alias, read_alias_file): Protect prototypes in type casts by __P. Tue Nov 14 16:43:58 1995 Ulrich Drepper * hash-string.h: Correct prototype for hash_string. Sun Nov 12 12:42:30 1995 Ulrich Drepper * hash-string.h (hash_string): Add prototype. * gettextP.h: Fix copyright. (SWAP): Add prototype. Wed Nov 8 22:56:33 1995 Ulrich Drepper * localealias.c (read_alias_file): Forgot sizeof. Avoid calling *printf function. This introduces a big overhead. Patch by Roland McGrath. Tue Nov 7 14:21:08 1995 Ulrich Drepper * finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy. * finddomain.c (stpcpy): Define substitution function local. The macro was to flaky. * cat-compat.c: Fix typo. * xopen-msg.sed, linux-msg.sed: While bringing message number to right place only accept digits. * linux-msg.sed, xopen-msg.sed: Now that the counter does not have leading 0s we don't need to remove them. Reported by Marcus Daniels. * Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in dependency. Reported by Marcus Daniels. * cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement. Generally cleanup using #if instead of #ifndef. * Makefile.in: Correct typos in comment. By Franc,ois Pinard. Mon Nov 6 00:27:02 1995 Ulrich Drepper * Makefile.in (install-src): Don't install libintl.h and libintl.a if we use an available gettext implementation. Sun Nov 5 22:02:08 1995 Ulrich Drepper * libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS. Reported by Franc,ois Pinard. * libgettext.h: Use #if instead of #ifdef/#ifndef. * finddomain.c: Comments describing what has to be done should start with FIXME. Sun Nov 5 19:38:01 1995 Ulrich Drepper * Makefile.in (DISTFILES): Split. Use DISTFILES with normal meaning. DISTFILES.common names the files common to both dist goals. DISTFILES.gettext are the files only distributed in GNU gettext. Sun Nov 5 17:32:54 1995 Ulrich Drepper * dcgettext.c (DCGETTEXT): Correct searching in derived locales. This was necessary since a change in _nl_find_msg several weeks ago. I really don't know this is still not fixed. Sun Nov 5 12:43:12 1995 Ulrich Drepper * loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL. This might mark a special condition. * finddomain.c (make_entry_rec): Don't make illegal entry as decided. * Makefile.in (dist): Suppress error message when ln failed. Get files from $(srcdir) explicitly. * libgettext.h (gettext_const): Rename to gettext_noop. Fri Nov 3 07:36:50 1995 Ulrich Drepper * finddomain.c (make_entry_rec): Protect against wrong locale names by testing mask. * libgettext.h (gettext_const): Add macro definition. Capitalize macro arguments. Thu Nov 2 23:15:51 1995 Ulrich Drepper * finddomain.c (_nl_find_domain): Test for pointer != NULL before accessing value. Reported by Tom Tromey. * gettext.c (NULL): Define as (void*)0 instad of 0. Reported by Franc,ois Pinard. Mon Oct 30 21:28:52 1995 Ulrich Drepper * po2tbl.sed.in: Serious typo bug fixed by Jim Meyering. Sat Oct 28 23:20:47 1995 Ulrich Drepper * libgettext.h: Disable dcgettext optimization for Solaris 2.3. * localealias.c (alias_compare): Peter Miller reported that tolower in some systems is even dumber than I thought. Protect call by `isupper'. Fri Oct 27 22:22:51 1995 Ulrich Drepper * Makefile.in (libdir, includedir): New variables. (install-src): Install libintl.a and libintl.h in correct dirs. Fri Oct 27 22:07:29 1995 Ulrich Drepper * Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c. * po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques. * localealias.c: Fix typo and superflous test. Reported by Christian von Roques. Fri Oct 6 11:52:05 1995 Ulrich Drepper * finddomain.c (_nl_find_domain): Correct some remainder from the pre-CEN syntax. Now we don't have a constant number of successors anymore. Wed Sep 27 21:41:13 1995 Ulrich Drepper * Makefile.in (DISTFILES): Add libintl.h.glibc. * Makefile.in (dist-libc): Add goal for packing sources for glibc. (COMSRCS, COMHDRS): Splitted to separate sources shared with glibc. * loadmsgcat.c: Forget to continue #if line. * localealias.c: [_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name space clean. * dcgettext.c, finddomain.c: Better comment to last change. * loadmsgcat.c: [_LIBC]: Rename fstat, open, close, read, mmap, and munmap to __fstat, __open, __close, __read, __mmap, and __munmap resp to keep ANSI C name space clean. * finddomain.c: [_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean. * dcgettext.c: [_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to keep ANSI C name space clean. * libgettext.h: Include sys/types.h for those old SysV systems out there. Reported by Francesco Potorti`. * loadmsgcat.c (use_mmap): Define if compiled for glibc. * bindtextdom.c: Include all those standard headers unconditionally if _LIBC is defined. * finddomain.c: Fix 2 times defiend -> defined. * textdomain.c: Include libintl.h instead of libgettext.h when compiling for glibc. Include all those standard headers unconditionally if _LIBC is defined. * localealias.c, loadmsgcat.c: Prepare to be compiled in glibc. * gettext.c: Include libintl.h instead of libgettext.h when compiling for glibc. Get NULL from stddef.h if we compile for glibc. * finddomain.c: Include libintl.h instead of libgettext.h when compiling for glibc. Include all those standard headers unconditionally if _LIBC is defined. * dcgettext.c: Include all those standard headers unconditionally if _LIBC is defined. * dgettext.c: If compiled in glibc include libintl.h instead of libgettext.h. (locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc. * dcgettext.c: If compiled in glibc include libintl.h instead of libgettext.h. (getcwd): Don't rely on HAVE_GETCWD when compiling for glibc. * bindtextdom.c: If compiled in glibc include libintl.h instead of libgettext.h. Mon Sep 25 22:23:06 1995 Ulrich Drepper * localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0. Reported by Marcus Daniels. * cat-compat.c (bindtextdomain): String used in putenv must not be recycled. Reported by Marcus Daniels. * libgettext.h (__USE_GNU_GETTEXT): Additional symbol to signal that we use GNU gettext library. * cat-compat.c (bindtextdomain): Fix bug with the strange stpcpy replacement. Reported by Nelson Beebe. Sat Sep 23 08:23:51 1995 Ulrich Drepper * cat-compat.c: Include for stpcpy prototype. * localealias.c (read_alias_file): While expand strdup code temporary variable `cp' hided higher level variable with same name. Rename to `tp'. * textdomain.c (textdomain): Avoid warning by using temporary variable in strdup code. * finddomain.c (_nl_find_domain): Remove unused variable `application'. Thu Sep 21 15:51:44 1995 Ulrich Drepper * localealias.c (alias_compare): Use strcasecmp() only if available. Else use implementation in place. * intl-compat.c: Wrapper functions now call *__ functions instead of __*. * libgettext.h: Declare prototypes for *__ functions instead for __*. * cat-compat.c, loadmsgcat.c: Don't use xmalloc, xstrdup, and stpcpy. These functions are not part of the standard libc and so prevent libintl.a from being used standalone. * bindtextdom.c: Don't use xmalloc, xstrdup, and stpcpy. These functions are not part of the standard libc and so prevent libintl.a from being used standalone. Rename to bindtextdomain__ if not used in GNU C Library. * dgettext.c: Rename function to dgettext__ if not used in GNU C Library. * gettext.c: Don't use xmalloc, xstrdup, and stpcpy. These functions are not part of the standard libc and so prevent libintl.a from being used standalone. Functions now called gettext__ if not used in GNU C Library. * dcgettext.c, localealias.c, textdomain.c, finddomain.c: Don't use xmalloc, xstrdup, and stpcpy. These functions are not part of the standard libc and so prevent libintl.a from being used standalone. Sun Sep 17 23:14:49 1995 Ulrich Drepper * finddomain.c: Correct some bugs in handling of CEN standard locale definitions. Thu Sep 7 01:49:28 1995 Ulrich Drepper * finddomain.c: Implement CEN syntax. * gettextP.h (loaded_domain): Extend number of successors to 31. Sat Aug 19 19:25:29 1995 Ulrich Drepper * Makefile.in (aliaspath): Remove path to X11 locale dir. * Makefile.in: Make install-src depend on install. This helps gettext to install the sources and other packages can use the install goal. Sat Aug 19 15:19:33 1995 Ulrich Drepper * Makefile.in (uninstall): Remove stuff installed by install-src. Tue Aug 15 13:13:53 1995 Ulrich Drepper * VERSION.in: Initial revision. * Makefile.in (DISTFILES): Add VERSION file. This is not necessary for gettext, but for other packages using this library. Tue Aug 15 06:16:44 1995 Ulrich Drepper * gettextP.h (_nl_find_domain): New prototype after changing search strategy. * finddomain.c (_nl_find_domain): We now try only to find a specified catalog. Fall back to other catalogs listed in the locale list is now done in __dcgettext. * dcgettext.c (__dcgettext): Now we provide message fall back even to different languages. I.e. if a message is not available in one language all the other in the locale list a tried. Formerly fall back was only possible within one language. Implemented by moving one loop from _nl_find_domain to here. Mon Aug 14 23:45:50 1995 Ulrich Drepper * Makefile.in (gettextsrcdir): Directory where source of GNU gettext library are made available. (INSTALL, INSTALL_DATA): Programs used for installing sources. (gettext-src): New. Rule to install GNU gettext sources for use in gettextize shell script. Sun Aug 13 14:40:48 1995 Ulrich Drepper * loadmsgcat.c (_nl_load_domain): Use mmap for loading only when munmap function is also available. * Makefile.in (install): Depend on `all' goal. Wed Aug 9 11:04:33 1995 Ulrich Drepper * localealias.c (read_alias_file): Do not overwrite '\n' when terminating alias value string. * localealias.c (read_alias_file): Handle long lines. Ignore the rest not fitting in the buffer after the initial `fgets' call. Wed Aug 9 00:54:29 1995 Ulrich Drepper * gettextP.h (_nl_load_domain): Add prototype, replacing prototype for _nl_load_msg_cat. * finddomain.c (_nl_find_domain): Remove unneeded variable filename and filename_len. (expand_alias): Remove prototype because functions does not exist anymore. * localealias.c (read_alias_file): Change type of fname_len parameter to int. (xmalloc): Add prototype. * loadmsgcat.c: Better prototypes for xmalloc. Tue Aug 8 22:30:39 1995 Ulrich Drepper * finddomain.c (_nl_find_domain): Allow alias name to be constructed from the four components. * Makefile.in (aliaspath): New variable. Set to preliminary value. (SOURCES): Add localealias.c. (OBJECTS): Add localealias.o. * gettextP.h: Add prototype for _nl_expand_alias. * finddomain.c: Aliasing handled in intl/localealias.c. * localealias.c: Aliasing for locale names. * bindtextdom.c: Better prototypes for xmalloc and xstrdup. Mon Aug 7 23:47:42 1995 Ulrich Drepper * Makefile.in (DISTFILES): gettext.perl is now found in misc/. * cat-compat.c (bindtextdomain): Correct implementation. dirname parameter was not used. Reported by Marcus Daniels. * gettextP.h (loaded_domain): New fields `successor' and `decided' for oo, lazy message handling implementation. * dcgettext.c: Adopt for oo, lazy message handliing. Now we can inherit translations from less specific locales. (find_msg): New function. * loadmsgcat.c, finddomain.c: Complete rewrite. Implement oo, lazy message handling :-). We now have an additional environment variable `LANGUAGE' with a higher priority than LC_ALL for the LC_MESSAGE locale. Here we can set a colon separated list of specifications each of the form `language[_territory[.codeset]][@modifier]'. Sat Aug 5 09:55:42 1995 Ulrich Drepper * finddomain.c (unistd.h): Include to get _PC_PATH_MAX defined on system having it. Fri Aug 4 22:42:00 1995 Ulrich Drepper * finddomain.c (stpcpy): Include prototype. * Makefile.in (dist): Remove `copying instead' message. Wed Aug 2 18:52:03 1995 Ulrich Drepper * Makefile.in (ID, TAGS): Do not use $^. Tue Aug 1 20:07:11 1995 Ulrich Drepper * Makefile.in (TAGS, ID): Use $^ as command argument. (TAGS): Give etags -o option t write to current directory, not $(srcdir). (ID): Use $(srcdir) instead os $(top_srcdir)/src. (distclean): Remove ID. Sun Jul 30 11:51:46 1995 Ulrich Drepper * Makefile.in (gnulocaledir): New variable, always using share/ for data directory. (DEFS): Add GNULOCALEDIR, used in finddomain.c. * finddomain.c (_nl_default_dirname): Set to GNULOCALEDIR, because it always has to point to the directory where GNU gettext Library writes it to. * intl-compat.c (textdomain, bindtextdomain): Undefine macros before function definition. Sat Jul 22 01:10:02 1995 Ulrich Drepper * libgettext.h (_LIBINTL_H): Protect definition in case where this file is included as libgettext.h on Solaris machines. Add comment about this. Wed Jul 19 02:36:42 1995 Ulrich Drepper * intl-compat.c (textdomain): Correct typo. Wed Jul 19 01:51:35 1995 Ulrich Drepper * dcgettext.c (dcgettext): Function now called __dcgettext. * dgettext.c (dgettext): Now called __dgettext and calls __dcgettext. * gettext.c (gettext): Function now called __gettext and calls __dgettext. * textdomain.c (textdomain): Function now called __textdomain. * bindtextdom.c (bindtextdomain): Function now called __bindtextdomain. * intl-compat.c: Initial revision. * Makefile.in (SOURCES): Add intl-compat.c. (OBJECTS): We always compile the GNU gettext library functions. OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o, and intl-compat.o. (GETTOBJS): Contains now only intl-compat.o. * libgettext.h: Re-include protection matches dualistic character of libgettext.h. For all functions in GNU gettext library define __ counter part. * finddomain.c (strchr): Define as index if not found in C library. (_nl_find_domain): For relative paths paste / in between. Tue Jul 18 16:37:45 1995 Ulrich Drepper * loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h. * xopen-msg.sed: Fix bug with `msgstr ""' lines. A little bit better comments. Tue Jul 18 01:18:27 1995 Ulrich Drepper * Makefile.in: po-mode.el, makelinks, combine-sh are now found in ../misc. * po-mode.el, makelinks, combine-sh, elisp-comp: Moved to ../misc/. * libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__. Sun Jul 16 22:33:02 1995 Ulrich Drepper * Makefile.in (INSTALL, INSTALL_DATA): New variables. (install-data, uninstall): Install/uninstall .elc file. * po-mode.el (Installation comment): Add .pox as possible extension of .po files. Sun Jul 16 13:23:27 1995 Ulrich Drepper * elisp-comp: Complete new version by Franc,ois: This does not fail when not compiling in the source directory. Sun Jul 16 00:12:17 1995 Ulrich Drepper * Makefile.in (../po/cat-id-tbl.o): Use $(MAKE) instead of make for recursive make. * Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh. (install-exec): Add missing dummy goal. (install-data, uninstall): @ in multi-line shell command at beginning, not in front of echo. Reported by Eric Backus. Sat Jul 15 00:21:28 1995 Ulrich Drepper * Makefile.in (DISTFILES): Rename libgettext.perl to gettext.perl to fit in 14 chars file systems. * gettext.perl: Rename to gettext.perl to fit in 14 chars file systems. Thu Jul 13 23:17:20 1995 Ulrich Drepper * cat-compat.c: If !STDC_HEADERS try to include malloc.h. Thu Jul 13 20:55:02 1995 Ulrich Drepper * po2tbl.sed.in: Pretty printing. * linux-msg.sed, xopen-msg.sed: Correct bugs with handling substitute flags in branches. * hash-string.h (hash_string): Old K&R compilers don't under stand `unsigned char'. * gettext.h (nls_uint32): Some old K&R compilers (eg HP) don't understand `unsigned int'. * cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes. Thu Jul 13 01:34:33 1995 Ulrich Drepper * Makefile.in (ELCFILES): New variable. (DISTFILES): Add elisp-comp. Add implicit rule for .el -> .elc compilation. (install-data): install $ELCFILES (clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp. * elisp-comp: Initial revision Wed Jul 12 16:14:52 1995 Ulrich Drepper * Makefile.in: cat-id-tbl.c is now found in po/. This enables us to use an identical intl/ directory in all packages. * dcgettext.c (dcgettext): hashing does not work for table size <= 2. * textdomain.c: fix typo (#if def -> #if defined) Tue Jul 11 18:44:43 1995 Ulrich Drepper * Makefile.in (stamp-cat-id): use top_srcdir to address source files (DISTFILES,distclean): move tupdate.perl to src/ * po-to-tbl.sed.in: add additional jump to clear change flag to recognize multiline strings Tue Jul 11 01:32:50 1995 Ulrich Drepper * textdomain.c: Protect inclusion of stdlib.h and string.h. * loadmsgcat.c: Protect inclusion of stdlib.h. * libgettext.h: Protect inclusion of locale.h. Allow use in C++ programs. Define NULL is not happened already. * Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of po-to-tbl.sed. (distclean): remove po-to-tbl.sed and tupdate.perl. * tupdate.perl.in: Substitute Perl path even in exec line. Don't include entries without translation from old .po file. Tue Jul 4 00:41:51 1995 Ulrich Drepper * tupdate.perl.in: use "Updated: " in msgid "". * cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR). Define getenv if !__STDC__. * bindtextdom.c: Protect stdlib.h and string.h inclusion. Define free if !__STDC__. * finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR. Define free if !__STDC__. * cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR. Mon Jul 3 23:56:30 1995 Ulrich Drepper * Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR. Remove unneeded $(srcdir) from Makefile.in dependency. * makelinks: Add copyright and short description. * po-mode.el: Last version for 0.7. * tupdate.perl.in: Fix die message. * dcgettext.c: Protect include of string.h. * gettext.c: Protect include of stdlib.h and further tries to get NULL. * finddomain.c: Some corrections in includes. * Makefile.in (INCLUDES): Prune list correct path to Makefile.in. * po-to-tbl.sed: Adopt for new .po file format. * linux-msg.sed, xopen-msg.sed: Adopt for new .po file format. Sun Jul 2 23:55:03 1995 Ulrich Drepper * tupdate.perl.in: Complete rewrite for new .po file format. Sun Jul 2 02:06:50 1995 Ulrich Drepper * First official release. This directory contains all the code needed to internationalize own packages. It provides functions which allow to use the X/Open catgets function with an interface like the Uniforum gettext function. For system which does not have neither of those a complete implementation is provided. gwhere-0.2.3/intl/dcgettext.c0000444000175000017500000004020010023202521014521 0ustar bartbart/* Implementation of the dcgettext(3) function. Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif #endif #include #ifndef errno extern int errno; #endif #ifndef __set_errno # define __set_errno(val) errno = (val) #endif #if defined STDC_HEADERS || defined _LIBC # include #else char *getenv (); # ifdef HAVE_MALLOC_H # include # else void free (); # endif #endif #if defined HAVE_STRING_H || defined _LIBC # ifndef _GNU_SOURCE # define _GNU_SOURCE 1 # endif # include #else # include #endif #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index # endif #endif #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else # include "libgettext.h" #endif #include "hash-string.h" /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define getcwd __getcwd # ifndef stpcpy # define stpcpy __stpcpy # endif #else # if !defined HAVE_GETCWD char *getwd (); # define getcwd(buf, max) getwd (buf) # else char *getcwd (); # endif # ifndef HAVE_STPCPY static char *stpcpy PARAMS ((char *dest, const char *src)); # endif #endif /* Amount to increase buffer size by in each try. */ #define PATH_INCR 32 /* The following is from pathmax.h. */ /* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define PATH_MAX but might cause redefinition warnings when sys/param.h is later included (as on MORE/BSD 4.3). */ #if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__)) # include #endif #ifndef _POSIX_PATH_MAX # define _POSIX_PATH_MAX 255 #endif #if !defined(PATH_MAX) && defined(_PC_PATH_MAX) # define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) #endif /* Don't include sys/param.h if it already has been. */ #if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN) # include #endif #if !defined(PATH_MAX) && defined(MAXPATHLEN) # define PATH_MAX MAXPATHLEN #endif #ifndef PATH_MAX # define PATH_MAX _POSIX_PATH_MAX #endif /* XPG3 defines the result of `setlocale (category, NULL)' as: ``Directs `setlocale()' to query `category' and return the current setting of `local'.'' However it does not specify the exact format. And even worse: POSIX defines this not at all. So we can use this feature only on selected system (e.g. those using GNU C Library). */ #ifdef _LIBC # define HAVE_LOCALE_NULL #endif /* Name of the default domain used for gettext(3) prior any call to textdomain(3). The default value for this is "messages". */ const char _nl_default_default_domain[] = "messages"; /* Value used as the default domain for gettext(3). */ const char *_nl_current_default_domain = _nl_default_default_domain; /* Contains the default location of the message catalogs. */ const char _nl_default_dirname[] = GNULOCALEDIR; /* List with bindings of specific domains created by bindtextdomain() calls. */ struct binding *_nl_domain_bindings; /* Prototypes for local functions. */ static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file, const char *msgid)) internal_function; static const char *category_to_name PARAMS ((int category)) internal_function; static const char *guess_category_value PARAMS ((int category, const char *categoryname)) internal_function; /* For those loosing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA /* Nothing has to be done. */ # define ADD_BLOCK(list, address) /* nothing */ # define FREE_BLOCKS(list) /* nothing */ #else struct block_list { void *address; struct block_list *next; }; # define ADD_BLOCK(list, addr) \ do { \ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ /* If we cannot get a free block we cannot add the new element to \ the list. */ \ if (newp != NULL) { \ newp->address = (addr); \ newp->next = (list); \ (list) = newp; \ } \ } while (0) # define FREE_BLOCKS(list) \ do { \ while (list != NULL) { \ struct block_list *old = list; \ list = list->next; \ free (old); \ } \ } while (0) # undef alloca # define alloca(size) (malloc (size)) #endif /* have alloca */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCGETTEXT __dcgettext #else # define DCGETTEXT dcgettext__ #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * DCGETTEXT (domainname, msgid, category) const char *domainname; const char *msgid; int category; { #ifndef HAVE_ALLOCA struct block_list *block_list = NULL; #endif struct loaded_l10nfile *domain; struct binding *binding; const char *categoryname; const char *categoryvalue; char *dirname, *xdomainname; char *single_locale; char *retval; int saved_errno = errno; /* If no real MSGID is given return NULL. */ if (msgid == NULL) return NULL; /* If DOMAINNAME is NULL, we are interested in the default domain. If CATEGORY is not LC_MESSAGES this might not make much sense but the defintion left this undefined. */ if (domainname == NULL) domainname = _nl_current_default_domain; /* First find matching binding. */ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (binding == NULL) dirname = (char *) _nl_default_dirname; else if (binding->dirname[0] == '/') dirname = binding->dirname; else { /* We have a relative path. Make it absolute now. */ size_t dirname_len = strlen (binding->dirname) + 1; size_t path_max; char *ret; path_max = (unsigned) PATH_MAX; path_max += 2; /* The getcwd docs say to do this. */ dirname = (char *) alloca (path_max + dirname_len); ADD_BLOCK (block_list, dirname); __set_errno (0); while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE) { path_max += PATH_INCR; dirname = (char *) alloca (path_max + dirname_len); ADD_BLOCK (block_list, dirname); __set_errno (0); } if (ret == NULL) { /* We cannot get the current working directory. Don't signal an error but simply return the default string. */ FREE_BLOCKS (block_list); __set_errno (saved_errno); return (char *) msgid; } stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname); } /* Now determine the symbolic name of CATEGORY and its value. */ categoryname = category_to_name (category); categoryvalue = guess_category_value (category, categoryname); xdomainname = (char *) alloca (strlen (categoryname) + strlen (domainname) + 5); ADD_BLOCK (block_list, xdomainname); stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), domainname), ".mo"); /* Creating working area. */ single_locale = (char *) alloca (strlen (categoryvalue) + 1); ADD_BLOCK (block_list, single_locale); /* Search for the given string. This is a loop because we perhaps got an ordered list of languages to consider for th translation. */ while (1) { /* Make CATEGORYVALUE point to the next element of the list. */ while (categoryvalue[0] != '\0' && categoryvalue[0] == ':') ++categoryvalue; if (categoryvalue[0] == '\0') { /* The whole contents of CATEGORYVALUE has been searched but no valid entry has been found. We solve this situation by implicitly appending a "C" entry, i.e. no translation will take place. */ single_locale[0] = 'C'; single_locale[1] = '\0'; } else { char *cp = single_locale; while (categoryvalue[0] != '\0' && categoryvalue[0] != ':') *cp++ = *categoryvalue++; *cp = '\0'; } /* If the current locale value is C (or POSIX) we don't load a domain. Return the MSGID. */ if (strcmp (single_locale, "C") == 0 || strcmp (single_locale, "POSIX") == 0) { FREE_BLOCKS (block_list); __set_errno (saved_errno); return (char *) msgid; } /* Find structure describing the message catalog matching the DOMAINNAME and CATEGORY. */ domain = _nl_find_domain (dirname, single_locale, xdomainname); if (domain != NULL) { retval = find_msg (domain, msgid); if (retval == NULL) { int cnt; for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) { retval = find_msg (domain->successor[cnt], msgid); if (retval != NULL) break; } } if (retval != NULL) { FREE_BLOCKS (block_list); __set_errno (saved_errno); return retval; } } } /* NOTREACHED */ } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dcgettext, dcgettext); #endif static char * internal_function find_msg (domain_file, msgid) struct loaded_l10nfile *domain_file; const char *msgid; { size_t top, act, bottom; struct loaded_domain *domain; if (domain_file->decided == 0) _nl_load_domain (domain_file); if (domain_file->data == NULL) return NULL; domain = (struct loaded_domain *) domain_file->data; /* Locate the MSGID and its translation. */ if (domain->hash_size > 2 && domain->hash_tab != NULL) { /* Use the hashing table. */ nls_uint32 len = strlen (msgid); nls_uint32 hash_val = hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); if (nstr == 0) /* Hash table entry is empty. */ return NULL; if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len && strcmp (msgid, domain->data + W (domain->must_swap, domain->orig_tab[nstr - 1].offset)) == 0) return (char *) domain->data + W (domain->must_swap, domain->trans_tab[nstr - 1].offset); while (1) { if (idx >= domain->hash_size - incr) idx -= domain->hash_size - incr; else idx += incr; nstr = W (domain->must_swap, domain->hash_tab[idx]); if (nstr == 0) /* Hash table entry is empty. */ return NULL; if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len && strcmp (msgid, domain->data + W (domain->must_swap, domain->orig_tab[nstr - 1].offset)) == 0) return (char *) domain->data + W (domain->must_swap, domain->trans_tab[nstr - 1].offset); } /* NOTREACHED */ } /* Now we try the default method: binary search in the sorted array of messages. */ bottom = 0; top = domain->nstrings; while (bottom < top) { int cmp_val; act = (bottom + top) / 2; cmp_val = strcmp (msgid, domain->data + W (domain->must_swap, domain->orig_tab[act].offset)); if (cmp_val < 0) top = act; else if (cmp_val > 0) bottom = act + 1; else break; } /* If an translation is found return this. */ return bottom >= top ? NULL : (char *) domain->data + W (domain->must_swap, domain->trans_tab[act].offset); } /* Return string representation of locale CATEGORY. */ static const char * internal_function category_to_name (category) int category; { const char *retval; switch (category) { #ifdef LC_COLLATE case LC_COLLATE: retval = "LC_COLLATE"; break; #endif #ifdef LC_CTYPE case LC_CTYPE: retval = "LC_CTYPE"; break; #endif #ifdef LC_MONETARY case LC_MONETARY: retval = "LC_MONETARY"; break; #endif #ifdef LC_NUMERIC case LC_NUMERIC: retval = "LC_NUMERIC"; break; #endif #ifdef LC_TIME case LC_TIME: retval = "LC_TIME"; break; #endif #ifdef LC_MESSAGES case LC_MESSAGES: retval = "LC_MESSAGES"; break; #endif #ifdef LC_RESPONSE case LC_RESPONSE: retval = "LC_RESPONSE"; break; #endif #ifdef LC_ALL case LC_ALL: /* This might not make sense but is perhaps better than any other value. */ retval = "LC_ALL"; break; #endif default: /* If you have a better idea for a default value let me know. */ retval = "LC_XXX"; } return retval; } /* Guess value of current locale from value of the environment variables. */ static const char * internal_function guess_category_value (category, categoryname) int category; const char *categoryname; { const char *retval; /* The highest priority value is the `LANGUAGE' environment variable. This is a GNU extension. */ retval = getenv ("LANGUAGE"); if (retval != NULL && retval[0] != '\0') return retval; /* `LANGUAGE' is not set. So we have to proceed with the POSIX methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some systems this can be done by the `setlocale' function itself. */ #if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL return setlocale (category, NULL); #else /* Setting of LC_ALL overwrites all other. */ retval = getenv ("LC_ALL"); if (retval != NULL && retval[0] != '\0') return retval; /* Next comes the name of the desired category. */ retval = getenv (categoryname); if (retval != NULL && retval[0] != '\0') return retval; /* Last possibility is the LANG environment variable. */ retval = getenv ("LANG"); if (retval != NULL && retval[0] != '\0') return retval; /* We use C as the default domain. POSIX says this is implementation defined. */ return "C"; #endif } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (dest, src) char *dest; const char *src; { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif #ifdef _LIBC /* If we want to free all resources we have to do some work at program's end. */ static void __attribute__ ((unused)) free_mem (void) { struct binding *runp; for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next) { free (runp->domainname); if (runp->dirname != _nl_default_dirname) /* Yes, this is a pointer comparison. */ free (runp->dirname); } if (_nl_current_default_domain != _nl_default_default_domain) /* Yes, again a pointer comparison. */ free ((char *) _nl_current_default_domain); } text_set_element (__libc_subfreeres, free_mem); #endif gwhere-0.2.3/intl/dgettext.c0000444000175000017500000000337210023202521014367 0ustar bartbart/* Implementation of the dgettext(3) function Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #if defined HAVE_LOCALE_H || defined _LIBC # include #endif #ifdef _LIBC # include #else # include "libgettext.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DGETTEXT __dgettext # define DCGETTEXT __dcgettext #else # define DGETTEXT dgettext__ # define DCGETTEXT dcgettext__ #endif /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale. */ char * DGETTEXT (domainname, msgid) const char *domainname; const char *msgid; { return DCGETTEXT (domainname, msgid, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dgettext, dgettext); #endif gwhere-0.2.3/intl/explodename.c0000444000175000017500000001101010023202521015024 0ustar bartbart/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #if defined STDC_HEADERS || defined _LIBC # include #endif #if defined HAVE_STRING_H || defined _LIBC # include #else # include #endif #include #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ int _nl_explode_name (name, language, modifier, territory, codeset, normalized_codeset, special, sponsor, revision) char *name; const char **language; const char **modifier; const char **territory; const char **codeset; const char **normalized_codeset; const char **special; const char **sponsor; const char **revision; { enum { undecided, xpg, cen } syntax; char *cp; int mask; *modifier = NULL; *territory = NULL; *codeset = NULL; *normalized_codeset = NULL; *special = NULL; *sponsor = NULL; *revision = NULL; /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_' and `@' if we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ mask = 0; syntax = undecided; *language = cp = name; while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@' && cp[0] != '+' && cp[0] != ',') ++cp; if (*language == cp) /* This does not make sense: language has to be specified. Use this entry as it is without exploding. Perhaps it is an alias. */ cp = strchr (*language, '\0'); else if (cp[0] == '_') { /* Next is the territory. */ cp[0] = '\0'; *territory = ++cp; while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@' && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= TERRITORY; if (cp[0] == '.') { /* Next is the codeset. */ syntax = xpg; cp[0] = '\0'; *codeset = ++cp; while (cp[0] != '\0' && cp[0] != '@') ++cp; mask |= XPG_CODESET; if (*codeset != cp && (*codeset)[0] != '\0') { *normalized_codeset = _nl_normalize_codeset (*codeset, cp - *codeset); if (strcmp (*codeset, *normalized_codeset) == 0) free ((char *) *normalized_codeset); else mask |= XPG_NORM_CODESET; } } } if (cp[0] == '@' || (syntax != xpg && cp[0] == '+')) { /* Next is the modifier. */ syntax = cp[0] == '@' ? xpg : cen; cp[0] = '\0'; *modifier = ++cp; while (syntax == cen && cp[0] != '\0' && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= XPG_MODIFIER | CEN_AUDIENCE; } if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_')) { syntax = cen; if (cp[0] == '+') { /* Next is special application (CEN syntax). */ cp[0] = '\0'; *special = ++cp; while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= CEN_SPECIAL; } if (cp[0] == ',') { /* Next is sponsor (CEN syntax). */ cp[0] = '\0'; *sponsor = ++cp; while (cp[0] != '\0' && cp[0] != '_') ++cp; mask |= CEN_SPONSOR; } if (cp[0] == '_') { /* Next is revision (CEN syntax). */ cp[0] = '\0'; *revision = ++cp; mask |= CEN_REVISION; } } /* For CEN syntax values it might be important to have the separator character in the file name, not for XPG syntax. */ if (syntax == xpg) { if (*territory != NULL && (*territory)[0] == '\0') mask &= ~TERRITORY; if (*codeset != NULL && (*codeset)[0] == '\0') mask &= ~XPG_CODESET; if (*modifier != NULL && (*modifier)[0] == '\0') mask &= ~XPG_MODIFIER; } return mask; } gwhere-0.2.3/intl/finddomain.c0000444000175000017500000001333410023202521014646 0ustar bartbart/* Handle list of needed message catalogs Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #if defined STDC_HEADERS || defined _LIBC # include #else # ifdef HAVE_MALLOC_H # include # else void free (); # endif #endif #if defined HAVE_STRING_H || defined _LIBC # include #else # include # ifndef memcpy # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) # endif #endif #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index # endif #endif #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else # include "libgettext.h" #endif /* @@ end of prolog @@ */ /* List of already loaded domains. */ static struct loaded_l10nfile *_nl_loaded_domains; /* Return a data structure describing the message catalog described by the DOMAINNAME and CATEGORY parameters with respect to the currently established bindings. */ struct loaded_l10nfile * internal_function _nl_find_domain (dirname, locale, domainname) const char *dirname; char *locale; const char *domainname; { struct loaded_l10nfile *retval; const char *language; const char *modifier; const char *territory; const char *codeset; const char *normalized_codeset; const char *special; const char *sponsor; const char *revision; const char *alias_value; int mask; /* LOCALE can consist of up to four recognized parts for the XPG syntax: language[_territory[.codeset]][@modifier] and six parts for the CEN syntax: language[_territory][+audience][+special][,[sponsor][_revision]] Beside the first part all of them are allowed to be missing. If the full specified locale is not found, the less specific one are looked for. The various parts will be stripped off according to the following order: (1) revision (2) sponsor (3) special (4) codeset (5) normalized codeset (6) territory (7) audience/modifier */ /* If we have already tested for this locale entry there has to be one data set in the list of loaded domains. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, 0, locale, NULL, NULL, NULL, NULL, NULL, NULL, NULL, domainname, 0); if (retval != NULL) { /* We know something about this locale. */ int cnt; if (retval->decided == 0) _nl_load_domain (retval); if (retval->data != NULL) return retval; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) _nl_load_domain (retval->successor[cnt]); if (retval->successor[cnt]->data != NULL) break; } return cnt >= 0 ? retval : NULL; /* NOTREACHED */ } /* See whether the locale value is an alias. If yes its value *overwrites* the alias name. No test for the original value is done. */ alias_value = _nl_expand_alias (locale); if (alias_value != NULL) { #if defined _LIBC || defined HAVE_STRDUP locale = strdup (alias_value); if (locale == NULL) return NULL; #else size_t len = strlen (alias_value) + 1; locale = (char *) malloc (len); if (locale == NULL) return NULL; memcpy (locale, alias_value, len); #endif } /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_' and `@' if we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ mask = _nl_explode_name (locale, &language, &modifier, &territory, &codeset, &normalized_codeset, &special, &sponsor, &revision); /* Create all possible locale entries which might be interested in generalization. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, mask, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, domainname, 1); if (retval == NULL) /* This means we are out of core. */ return NULL; if (retval->decided == 0) _nl_load_domain (retval); if (retval->data == NULL) { int cnt; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) _nl_load_domain (retval->successor[cnt]); if (retval->successor[cnt]->data != NULL) break; } } /* The room for an alias was dynamically allocated. Free it now. */ if (alias_value != NULL) free (locale); return retval; } #ifdef _LIBC static void __attribute__ ((unused)) free_mem (void) { struct loaded_l10nfile *runp = _nl_loaded_domains; while (runp != NULL) { struct loaded_l10nfile *here = runp; if (runp->data != NULL) _nl_unload_domain ((struct loaded_domain *) runp->data); runp = runp->next; free (here); } } text_set_element (__libc_subfreeres, free_mem); #endif gwhere-0.2.3/intl/gettext.c0000444000175000017500000000362310023202521014222 0ustar bartbart/* Implementation of gettext(3) function. Copyright (C) 1995, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define __need_NULL # include #else # ifdef STDC_HEADERS # include /* Just for NULL. */ # else # ifdef HAVE_STRING_H # include # else # define NULL ((void *) 0) # endif # endif #endif #ifdef _LIBC # include #else # include "libgettext.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define GETTEXT __gettext # define DGETTEXT __dgettext #else # define GETTEXT gettext__ # define DGETTEXT dgettext__ #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * GETTEXT (msgid) const char *msgid; { return DGETTEXT (NULL, msgid); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__gettext, gettext); #endif gwhere-0.2.3/intl/gettext.h0000444000175000017500000000620510023202521014226 0ustar bartbart/* Internal header for GNU gettext internationalization functions. Copyright (C) 1995, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _GETTEXT_H #define _GETTEXT_H 1 #include #if HAVE_LIMITS_H || _LIBC # include #endif /* @@ end of prolog @@ */ /* The magic number of the GNU message catalog format. */ #define _MAGIC 0x950412de #define _MAGIC_SWAPPED 0xde120495 /* Revision number of the currently used .mo (binary) file format. */ #define MO_REVISION_NUMBER 0 /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but doing that would require that the configure script compile and *run* the resulting executable. Locally running cross-compiled executables is usually not possible. */ #if __STDC__ # define UINT_MAX_32_BITS 4294967295U #else # define UINT_MAX_32_BITS 0xFFFFFFFF #endif /* If UINT_MAX isn't defined, assume it's a 32-bit type. This should be valid for all systems GNU cares about because that doesn't include 16-bit systems, and only modern systems (that certainly have ) have 64+-bit integral types. */ #ifndef UINT_MAX # define UINT_MAX UINT_MAX_32_BITS #endif #if UINT_MAX == UINT_MAX_32_BITS typedef unsigned nls_uint32; #else # if USHRT_MAX == UINT_MAX_32_BITS typedef unsigned short nls_uint32; # else # if ULONG_MAX == UINT_MAX_32_BITS typedef unsigned long nls_uint32; # else /* The following line is intended to throw an error. Using #error is not portable enough. */ "Cannot determine unsigned 32-bit data type." # endif # endif #endif /* Header for binary .mo file format. */ struct mo_file_header { /* The magic number. */ nls_uint32 magic; /* The revision number of the file format. */ nls_uint32 revision; /* The number of strings pairs. */ nls_uint32 nstrings; /* Offset of table with start offsets of original strings. */ nls_uint32 orig_tab_offset; /* Offset of table with start offsets of translation strings. */ nls_uint32 trans_tab_offset; /* Size of hashing table. */ nls_uint32 hash_tab_size; /* Offset of first hashing entry. */ nls_uint32 hash_tab_offset; }; struct string_desc { /* Length of addressed string. */ nls_uint32 length; /* Offset of string in file. */ nls_uint32 offset; }; /* @@ begin of epilog @@ */ #endif /* gettext.h */ gwhere-0.2.3/intl/gettextP.h0000444000175000017500000000420610023202521014345 0ustar bartbart/* Header describing internals of gettext library Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _GETTEXTP_H #define _GETTEXTP_H #include "loadinfo.h" /* @@ end of prolog @@ */ #ifndef PARAMS # if __STDC__ # define PARAMS(args) args # else # define PARAMS(args) () # endif #endif #ifndef internal_function # define internal_function #endif #ifndef W # define W(flag, data) ((flag) ? SWAP (data) : (data)) #endif #ifdef _LIBC # include # define SWAP(i) bswap_32 (i) #else static nls_uint32 SWAP PARAMS ((nls_uint32 i)); static inline nls_uint32 SWAP (i) nls_uint32 i; { return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); } #endif struct loaded_domain { const char *data; int use_mmap; size_t mmap_size; int must_swap; nls_uint32 nstrings; struct string_desc *orig_tab; struct string_desc *trans_tab; nls_uint32 hash_size; nls_uint32 *hash_tab; }; struct binding { struct binding *next; char *domainname; char *dirname; }; struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, char *__locale, const char *__domainname)) internal_function; void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain)) internal_function; void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) internal_function; /* @@ begin of epilog @@ */ #endif /* gettextP.h */ gwhere-0.2.3/intl/hash-string.h0000444000175000017500000000337310023202521014774 0ustar bartbart/* Implements a string hashing function. Copyright (C) 1995, 1997 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* @@ end of prolog @@ */ #ifndef PARAMS # if __STDC__ # define PARAMS(Args) Args # else # define PARAMS(Args) () # endif #endif /* We assume to have `unsigned long int' value with at least 32 bits. */ #define HASHWORDBITS 32 /* Defines the so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] */ static unsigned long hash_string PARAMS ((const char *__str_param)); static inline unsigned long hash_string (str_param) const char *str_param; { unsigned long int hval, g; const char *str = str_param; /* Compute the hash value for the given string. */ hval = 0; while (*str != '\0') { hval <<= 4; hval += (unsigned long) *str++; g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4)); if (g != 0) { hval ^= g >> (HASHWORDBITS - 8); hval ^= g; } } return hval; } gwhere-0.2.3/intl/intl-compat.c0000444000175000017500000000315610023202521014766 0ustar bartbart/* intl-compat.c - Stub functions to call gettext functions from GNU gettext Library. Copyright (C) 1995 Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include "libgettext.h" /* @@ end of prolog @@ */ #undef gettext #undef dgettext #undef dcgettext #undef textdomain #undef bindtextdomain char * bindtextdomain (domainname, dirname) const char *domainname; const char *dirname; { return bindtextdomain__ (domainname, dirname); } char * dcgettext (domainname, msgid, category) const char *domainname; const char *msgid; int category; { return dcgettext__ (domainname, msgid, category); } char * dgettext (domainname, msgid) const char *domainname; const char *msgid; { return dgettext__ (domainname, msgid); } char * gettext (msgid) const char *msgid; { return gettext__ (msgid); } char * textdomain (domainname) const char *domainname; { return textdomain__ (domainname); } gwhere-0.2.3/intl/l10nflist.c0000444000175000017500000002424410023202521014354 0ustar bartbart/* Handle list of needed message catalogs Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #if defined HAVE_STRING_H || defined _LIBC # ifndef _GNU_SOURCE # define _GNU_SOURCE 1 # endif # include #else # include # ifndef memcpy # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) # endif #endif #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index # endif #endif #if defined _LIBC || defined HAVE_ARGZ_H # include #endif #include #include #if defined STDC_HEADERS || defined _LIBC # include #endif #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # ifndef stpcpy # define stpcpy(dest, src) __stpcpy(dest, src) # endif #else # ifndef HAVE_STPCPY static char *stpcpy PARAMS ((char *dest, const char *src)); # endif #endif /* Define function which are usually not available. */ #if !defined _LIBC && !defined HAVE___ARGZ_COUNT /* Returns the number of strings in ARGZ. */ static size_t argz_count__ PARAMS ((const char *argz, size_t len)); static size_t argz_count__ (argz, len) const char *argz; size_t len; { size_t count = 0; while (len > 0) { size_t part_len = strlen (argz); argz += part_len + 1; len -= part_len + 1; count++; } return count; } # undef __argz_count # define __argz_count(argz, len) argz_count__ (argz, len) #endif /* !_LIBC && !HAVE___ARGZ_COUNT */ #if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's except the last into the character SEP. */ static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep)); static void argz_stringify__ (argz, len, sep) char *argz; size_t len; int sep; { while (len > 0) { size_t part_len = strlen (argz); argz += part_len; len -= part_len + 1; if (len > 0) *argz++ = sep; } } # undef __argz_stringify # define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep) #endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */ #if !defined _LIBC && !defined HAVE___ARGZ_NEXT static char *argz_next__ PARAMS ((char *argz, size_t argz_len, const char *entry)); static char * argz_next__ (argz, argz_len, entry) char *argz; size_t argz_len; const char *entry; { if (entry) { if (entry < argz + argz_len) entry = strchr (entry, '\0') + 1; return entry >= argz + argz_len ? NULL : (char *) entry; } else if (argz_len > 0) return argz; else return 0; } # undef __argz_next # define __argz_next(argz, len, entry) argz_next__ (argz, len, entry) #endif /* !_LIBC && !HAVE___ARGZ_NEXT */ /* Return number of bits set in X. */ static int pop PARAMS ((int x)); static inline int pop (x) int x; { /* We assume that no more than 16 bits are used. */ x = ((x & ~0x5555) >> 1) + (x & 0x5555); x = ((x & ~0x3333) >> 2) + (x & 0x3333); x = ((x >> 4) + x) & 0x0f0f; x = ((x >> 8) + x) & 0xff; return x; } struct loaded_l10nfile * _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, filename, do_allocate) struct loaded_l10nfile **l10nfile_list; const char *dirlist; size_t dirlist_len; int mask; const char *language; const char *territory; const char *codeset; const char *normalized_codeset; const char *modifier; const char *special; const char *sponsor; const char *revision; const char *filename; int do_allocate; { char *abs_filename; struct loaded_l10nfile *last = NULL; struct loaded_l10nfile *retval; char *cp; size_t entries; int cnt; /* Allocate room for the full file name. */ abs_filename = (char *) malloc (dirlist_len + strlen (language) + ((mask & TERRITORY) != 0 ? strlen (territory) + 1 : 0) + ((mask & XPG_CODESET) != 0 ? strlen (codeset) + 1 : 0) + ((mask & XPG_NORM_CODESET) != 0 ? strlen (normalized_codeset) + 1 : 0) + (((mask & XPG_MODIFIER) != 0 || (mask & CEN_AUDIENCE) != 0) ? strlen (modifier) + 1 : 0) + ((mask & CEN_SPECIAL) != 0 ? strlen (special) + 1 : 0) + (((mask & CEN_SPONSOR) != 0 || (mask & CEN_REVISION) != 0) ? (1 + ((mask & CEN_SPONSOR) != 0 ? strlen (sponsor) + 1 : 0) + ((mask & CEN_REVISION) != 0 ? strlen (revision) + 1 : 0)) : 0) + 1 + strlen (filename) + 1); if (abs_filename == NULL) return NULL; retval = NULL; last = NULL; /* Construct file name. */ memcpy (abs_filename, dirlist, dirlist_len); __argz_stringify (abs_filename, dirlist_len, ':'); cp = abs_filename + (dirlist_len - 1); *cp++ = '/'; cp = stpcpy (cp, language); if ((mask & TERRITORY) != 0) { *cp++ = '_'; cp = stpcpy (cp, territory); } if ((mask & XPG_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, codeset); } if ((mask & XPG_NORM_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, normalized_codeset); } if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0) { /* This component can be part of both syntaces but has different leading characters. For CEN we use `+', else `@'. */ *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@'; cp = stpcpy (cp, modifier); } if ((mask & CEN_SPECIAL) != 0) { *cp++ = '+'; cp = stpcpy (cp, special); } if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0) { *cp++ = ','; if ((mask & CEN_SPONSOR) != 0) cp = stpcpy (cp, sponsor); if ((mask & CEN_REVISION) != 0) { *cp++ = '_'; cp = stpcpy (cp, revision); } } *cp++ = '/'; stpcpy (cp, filename); /* Look in list of already loaded domains whether it is already available. */ last = NULL; for (retval = *l10nfile_list; retval != NULL; retval = retval->next) if (retval->filename != NULL) { int compare = strcmp (retval->filename, abs_filename); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It's not in the list. */ retval = NULL; break; } last = retval; } if (retval != NULL || do_allocate == 0) { free (abs_filename); return retval; } retval = (struct loaded_l10nfile *) malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len) * (1 << pop (mask)) * sizeof (struct loaded_l10nfile *))); if (retval == NULL) return NULL; retval->filename = abs_filename; retval->decided = (__argz_count (dirlist, dirlist_len) != 1 || ((mask & XPG_CODESET) != 0 && (mask & XPG_NORM_CODESET) != 0)); retval->data = NULL; if (last == NULL) { retval->next = *l10nfile_list; *l10nfile_list = retval; } else { retval->next = last->next; last->next = retval; } entries = 0; /* If the DIRLIST is a real list the RETVAL entry corresponds not to a real file. So we have to use the DIRLIST separation mechanism of the inner loop. */ cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask; for (; cnt >= 0; --cnt) if ((cnt & ~mask) == 0 && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0) && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0)) { /* Iterate over all elements of the DIRLIST. */ char *dir = NULL; while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir)) != NULL) retval->successor[entries++] = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, filename, 1); } retval->successor[entries] = NULL; return retval; } /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common names. */ const char * _nl_normalize_codeset (codeset, name_len) const unsigned char *codeset; size_t name_len; { int len = 0; int only_digit = 1; char *retval; char *wp; size_t cnt; for (cnt = 0; cnt < name_len; ++cnt) if (isalnum (codeset[cnt])) { ++len; if (isalpha (codeset[cnt])) only_digit = 0; } retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1); if (retval != NULL) { if (only_digit) wp = stpcpy (retval, "iso"); else wp = retval; for (cnt = 0; cnt < name_len; ++cnt) if (isalpha (codeset[cnt])) *wp++ = tolower (codeset[cnt]); else if (isdigit (codeset[cnt])) *wp++ = codeset[cnt]; *wp = '\0'; } return (const char *) retval; } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (dest, src) char *dest; const char *src; { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif gwhere-0.2.3/intl/libgettext.h0000444000175000017500000001314510023202521014716 0ustar bartbart/* Message catalogs for internationalization. Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Because on some systems (e.g. Solaris) we sometimes have to include the systems libintl.h as well as this file we have more complex include protection above. But the systems header might perhaps also define _LIBINTL_H and therefore we have to protect the definition here. */ #if !defined _LIBINTL_H || !defined _LIBGETTEXT_H #ifndef _LIBINTL_H # define _LIBINTL_H 1 #endif #define _LIBGETTEXT_H 1 /* We define an additional symbol to signal that we use the GNU implementation of gettext. */ #define __USE_GNU_GETTEXT 1 #include #if HAVE_LOCALE_H # include #endif #ifdef __cplusplus extern "C" { #endif /* @@ end of prolog @@ */ #ifndef PARAMS # if __STDC__ || defined __cplusplus # define PARAMS(args) args # else # define PARAMS(args) () # endif #endif #ifndef NULL # if !defined __cplusplus || defined __GNUC__ # define NULL ((void *) 0) # else # define NULL (0) # endif #endif #if !HAVE_LC_MESSAGES /* This value determines the behaviour of the gettext() and dgettext() function. But some system does not have this defined. Define it to a default value. */ # define LC_MESSAGES (-1) #endif /* Declarations for gettext-using-catgets interface. Derived from Jim Meyering's libintl.h. */ struct _msg_ent { const char *_msg; int _msg_number; }; #if HAVE_CATGETS /* These two variables are defined in the automatically by po-to-tbl.sed generated file `cat-id-tbl.c'. */ extern const struct _msg_ent _msg_tbl[]; extern int _msg_tbl_length; #endif /* For automatical extraction of messages sometimes no real translation is needed. Instead the string itself is the result. */ #define gettext_noop(Str) (Str) /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ extern char *gettext PARAMS ((const char *__msgid)); extern char *gettext__ PARAMS ((const char *__msgid)); /* Look up MSGID in the DOMAINNAME message catalog for the current LC_MESSAGES locale. */ extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid)); extern char *dgettext__ PARAMS ((const char *__domainname, const char *__msgid)); /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid, int __category)); extern char *dcgettext__ PARAMS ((const char *__domainname, const char *__msgid, int __category)); /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ extern char *textdomain PARAMS ((const char *__domainname)); extern char *textdomain__ PARAMS ((const char *__domainname)); /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ extern char *bindtextdomain PARAMS ((const char *__domainname, const char *__dirname)); extern char *bindtextdomain__ PARAMS ((const char *__domainname, const char *__dirname)); #if ENABLE_NLS /* Solaris 2.3 has the gettext function but dcgettext is missing. So we omit this optimization for Solaris 2.3. BTW, Solaris 2.4 has dcgettext. */ # if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT) # define gettext(Msgid) \ dgettext (NULL, Msgid) # define dgettext(Domainname, Msgid) \ dcgettext (Domainname, Msgid, LC_MESSAGES) # if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7 /* This global variable is defined in loadmsgcat.c. We need a sign, whether a new catalog was loaded, which can be associated with all translations. */ extern int _nl_msg_cat_cntr; # define dcgettext(Domainname, Msgid, Category) \ (__extension__ \ ({ \ char *__result; \ if (__builtin_constant_p (Msgid)) \ { \ static char *__translation__; \ static int __catalog_counter__; \ if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \ { \ __translation__ = \ dcgettext__ (Domainname, Msgid, Category); \ __catalog_counter__ = _nl_msg_cat_cntr; \ } \ __result = __translation__; \ } \ else \ __result = dcgettext__ (Domainname, Msgid, Category); \ __result; \ })) # endif # endif #else # define gettext(Msgid) (Msgid) # define dgettext(Domainname, Msgid) (Msgid) # define dcgettext(Domainname, Msgid, Category) (Msgid) # define textdomain(Domainname) ((char *) Domainname) # define bindtextdomain(Domainname, Dirname) ((char *) Dirname) #endif /* @@ begin of epilog @@ */ #ifdef __cplusplus } #endif #endif gwhere-0.2.3/intl/linux-msg.sed0000444000175000017500000000520510023202521015010 0ustar bartbart# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file # Copyright (C) 1995 Free Software Foundation, Inc. # Ulrich Drepper , 1995. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # # The first directive in the .msg should be the definition of the # message set number. We use always set number 1. # 1 { i\ $set 1 # Automatically created by po2msg.sed h s/.*/0/ x } # # Mitch's old catalog format does not allow comments. # # We copy the original message as a comment into the .msg file. # /^msgid/ { s/msgid[ ]*"// # # This does not work now with the new format. # /"$/! { # s/\\$// # s/$/ ... (more lines following)"/ # } x # The following nice solution is by # Bruno td # Increment a decimal number in pattern space. # First hide trailing `9' digits. :d s/9\(_*\)$/_\1/ td # Assure at least one digit is available. s/^\(_*\)$/0\1/ # Increment the last digit. s/8\(_*\)$/9\1/ s/7\(_*\)$/8\1/ s/6\(_*\)$/7\1/ s/5\(_*\)$/6\1/ s/4\(_*\)$/5\1/ s/3\(_*\)$/4\1/ s/2\(_*\)$/3\1/ s/1\(_*\)$/2\1/ s/0\(_*\)$/1\1/ # Convert the hidden `9' digits to `0's. s/_/0/g x G s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p } # # The .msg file contains, other then the .po file, only the translations # but each given a unique ID. Starting from 1 and incrementing by 1 for # each message we assign them to the messages. # It is important that the .po file used to generate the cat-id-tbl.c file # (with po-to-tbl) is the same as the one used here. (At least the order # of declarations must not be changed.) # /^msgstr/ { s/msgstr[ ]*"\(.*\)"/# \1/ # Clear substitution flag. tb # Append the next line. :b N # Look whether second part is continuation line. s/\(.*\n\)"\(.*\)"/\1\2/ # Yes, then branch. ta P D # Note that D includes a jump to the start!! # We found a continuation line. But before printing insert '\'. :a s/\(.*\)\(\n.*\)/\1\\\2/ P # We cannot use D here. s/.*\n\(.*\)/\1/ tb } d gwhere-0.2.3/intl/loadinfo.h0000444000175000017500000000455510023202521014343 0ustar bartbart/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef PARAMS # if __STDC__ # define PARAMS(args) args # else # define PARAMS(args) () # endif #endif /* Encoding of locale name parts. */ #define CEN_REVISION 1 #define CEN_SPONSOR 2 #define CEN_SPECIAL 4 #define XPG_NORM_CODESET 8 #define XPG_CODESET 16 #define TERRITORY 32 #define CEN_AUDIENCE 64 #define XPG_MODIFIER 128 #define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE) #define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER) struct loaded_l10nfile { const char *filename; int decided; const void *data; struct loaded_l10nfile *next; struct loaded_l10nfile *successor[1]; }; extern const char *_nl_normalize_codeset PARAMS ((const unsigned char *codeset, size_t name_len)); extern struct loaded_l10nfile * _nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list, const char *dirlist, size_t dirlist_len, int mask, const char *language, const char *territory, const char *codeset, const char *normalized_codeset, const char *modifier, const char *special, const char *sponsor, const char *revision, const char *filename, int do_allocate)); extern const char *_nl_expand_alias PARAMS ((const char *name)); extern int _nl_explode_name PARAMS ((char *name, const char **language, const char **modifier, const char **territory, const char **codeset, const char **normalized_codeset, const char **special, const char **sponsor, const char **revision)); gwhere-0.2.3/intl/loadmsgcat.c0000444000175000017500000001374510023202521014662 0ustar bartbart/* Load needed message catalogs. Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #if defined STDC_HEADERS || defined _LIBC # include #endif #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #if (defined HAVE_MMAP && defined HAVE_MUNMAP) || defined _LIBC # include #endif #include "gettext.h" #include "gettextP.h" /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ISO C functions. This is required by the standard because some ISO C functions will require linking with this object file and the name space must not be polluted. */ # define open __open # define close __close # define read __read # define mmap __mmap # define munmap __munmap #endif /* We need a sign, whether a new catalog was loaded, which can be associated with all translations. This is important if the translations are cached by one of GCC's features. */ int _nl_msg_cat_cntr = 0; /* Load the message catalogs specified by FILENAME. If it is no valid message catalog do nothing. */ void internal_function _nl_load_domain (domain_file) struct loaded_l10nfile *domain_file; { int fd; size_t size; struct stat st; struct mo_file_header *data = (struct mo_file_header *) -1; #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || defined _LIBC int use_mmap = 0; #endif struct loaded_domain *domain; domain_file->decided = 1; domain_file->data = NULL; /* If the record does not represent a valid locale the FILENAME might be NULL. This can happen when according to the given specification the locale file name is different for XPG and CEN syntax. */ if (domain_file->filename == NULL) return; /* Try to open the addressed file. */ fd = open (domain_file->filename, O_RDONLY); if (fd == -1) return; /* We must know about the size of the file. */ if (fstat (fd, &st) != 0 || (size = (size_t) st.st_size) != st.st_size || size < sizeof (struct mo_file_header)) { /* Something went wrong. */ close (fd); return; } #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || defined _LIBC /* Now we are ready to load the file. If mmap() is available we try this first. If not available or it failed we try to load it. */ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); if (data != (struct mo_file_header *) -1) { /* mmap() call was successful. */ close (fd); use_mmap = 1; } #endif /* If the data is not yet available (i.e. mmap'ed) we try to load it manually. */ if (data == (struct mo_file_header *) -1) { size_t to_read; char *read_ptr; data = (struct mo_file_header *) malloc (size); if (data == NULL) return; to_read = size; read_ptr = (char *) data; do { long int nb = (long int) read (fd, read_ptr, to_read); if (nb == -1) { close (fd); return; } read_ptr += nb; to_read -= nb; } while (to_read > 0); close (fd); } /* Using the magic number we can test whether it really is a message catalog file. */ if (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED) { /* The magic number is wrong: not a message catalog file. */ #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || defined _LIBC if (use_mmap) munmap ((caddr_t) data, size); else #endif free (data); return; } domain_file->data = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); if (domain_file->data == NULL) return; domain = (struct loaded_domain *) domain_file->data; domain->data = (char *) data; #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || defined _LIBC domain->use_mmap = use_mmap; #endif domain->mmap_size = size; domain->must_swap = data->magic != _MAGIC; /* Fill in the information about the available tables. */ switch (W (domain->must_swap, data->revision)) { case 0: domain->nstrings = W (domain->must_swap, data->nstrings); domain->orig_tab = (struct string_desc *) ((char *) data + W (domain->must_swap, data->orig_tab_offset)); domain->trans_tab = (struct string_desc *) ((char *) data + W (domain->must_swap, data->trans_tab_offset)); domain->hash_size = W (domain->must_swap, data->hash_tab_size); domain->hash_tab = (nls_uint32 *) ((char *) data + W (domain->must_swap, data->hash_tab_offset)); break; default: /* This is an illegal revision. */ #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || defined _LIBC if (use_mmap) munmap ((caddr_t) data, size); else #endif free (data); free (domain); domain_file->data = NULL; return; } /* Show that one domain is changed. This might make some cached translations invalid. */ ++_nl_msg_cat_cntr; } #ifdef _LIBC void internal_function _nl_unload_domain (domain) struct loaded_domain *domain; { if (domain->use_mmap) munmap ((caddr_t) domain->data, domain->mmap_size); else free ((void *) domain->data); free (domain); } #endif gwhere-0.2.3/intl/localealias.c0000444000175000017500000002355410023202521015014 0ustar bartbart/* Handle aliases for locale names. Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif #endif #if defined STDC_HEADERS || defined _LIBC # include #else char *getenv (); # ifdef HAVE_MALLOC_H # include # else void free (); # endif #endif #if defined HAVE_STRING_H || defined _LIBC # ifndef _GNU_SOURCE # define _GNU_SOURCE 1 # endif # include #else # include # ifndef memcpy # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) # endif #endif #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index # endif #endif #include "gettext.h" #include "gettextP.h" /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define strcasecmp __strcasecmp # define mempcpy __mempcpy # define HAVE_MEMPCPY 1 /* We need locking here since we can be called from different places. */ # include __libc_lock_define_initialized (static, lock); #endif /* For those loosing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA /* Nothing has to be done. */ # define ADD_BLOCK(list, address) /* nothing */ # define FREE_BLOCKS(list) /* nothing */ #else struct block_list { void *address; struct block_list *next; }; # define ADD_BLOCK(list, addr) \ do { \ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ /* If we cannot get a free block we cannot add the new element to \ the list. */ \ if (newp != NULL) { \ newp->address = (addr); \ newp->next = (list); \ (list) = newp; \ } \ } while (0) # define FREE_BLOCKS(list) \ do { \ while (list != NULL) { \ struct block_list *old = list; \ list = list->next; \ free (old); \ } \ } while (0) # undef alloca # define alloca(size) (malloc (size)) #endif /* have alloca */ struct alias_map { const char *alias; const char *value; }; static char *string_space = NULL; static size_t string_space_act = 0; static size_t string_space_max = 0; static struct alias_map *map; static size_t nmap = 0; static size_t maxmap = 0; /* Prototypes for local functions. */ static size_t read_alias_file PARAMS ((const char *fname, int fname_len)) internal_function; static void extend_alias_table PARAMS ((void)); static int alias_compare PARAMS ((const struct alias_map *map1, const struct alias_map *map2)); const char * _nl_expand_alias (name) const char *name; { static const char *locale_alias_path = LOCALE_ALIAS_PATH; struct alias_map *retval; const char *result = NULL; size_t added; #ifdef _LIBC __libc_lock_lock (lock); #endif do { struct alias_map item; item.alias = name; if (nmap > 0) retval = (struct alias_map *) bsearch (&item, map, nmap, sizeof (struct alias_map), (int (*) PARAMS ((const void *, const void *)) ) alias_compare); else retval = NULL; /* We really found an alias. Return the value. */ if (retval != NULL) { result = retval->value; break; } /* Perhaps we can find another alias file. */ added = 0; while (added == 0 && locale_alias_path[0] != '\0') { const char *start; while (locale_alias_path[0] == ':') ++locale_alias_path; start = locale_alias_path; while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':') ++locale_alias_path; if (start < locale_alias_path) added = read_alias_file (start, locale_alias_path - start); } } while (added != 0); #ifdef _LIBC __libc_lock_unlock (lock); #endif return result; } static size_t internal_function read_alias_file (fname, fname_len) const char *fname; int fname_len; { #ifndef HAVE_ALLOCA struct block_list *block_list = NULL; #endif FILE *fp; char *full_fname; size_t added; static const char aliasfile[] = "/locale.alias"; full_fname = (char *) alloca (fname_len + sizeof aliasfile); ADD_BLOCK (block_list, full_fname); #ifdef HAVE_MEMPCPY mempcpy (mempcpy (full_fname, fname, fname_len), aliasfile, sizeof aliasfile); #else memcpy (full_fname, fname, fname_len); memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); #endif fp = fopen (full_fname, "r"); if (fp == NULL) { FREE_BLOCKS (block_list); return 0; } added = 0; while (!feof (fp)) { /* It is a reasonable approach to use a fix buffer here because a) we are only interested in the first two fields b) these fields must be usable as file names and so must not be that long */ unsigned char buf[BUFSIZ]; unsigned char *alias; unsigned char *value; unsigned char *cp; if (fgets (buf, sizeof buf, fp) == NULL) /* EOF reached. */ break; /* Possibly not the whole line fits into the buffer. Ignore the rest of the line. */ if (strchr (buf, '\n') == NULL) { char altbuf[BUFSIZ]; do if (fgets (altbuf, sizeof altbuf, fp) == NULL) /* Make sure the inner loop will be left. The outer loop will exit at the `feof' test. */ break; while (strchr (altbuf, '\n') == NULL); } cp = buf; /* Ignore leading white space. */ while (isspace (cp[0])) ++cp; /* A leading '#' signals a comment line. */ if (cp[0] != '\0' && cp[0] != '#') { alias = cp++; while (cp[0] != '\0' && !isspace (cp[0])) ++cp; /* Terminate alias name. */ if (cp[0] != '\0') *cp++ = '\0'; /* Now look for the beginning of the value. */ while (isspace (cp[0])) ++cp; if (cp[0] != '\0') { size_t alias_len; size_t value_len; value = cp++; while (cp[0] != '\0' && !isspace (cp[0])) ++cp; /* Terminate value. */ if (cp[0] == '\n') { /* This has to be done to make the following test for the end of line possible. We are looking for the terminating '\n' which do not overwrite here. */ *cp++ = '\0'; *cp = '\n'; } else if (cp[0] != '\0') *cp++ = '\0'; if (nmap >= maxmap) extend_alias_table (); alias_len = strlen (alias) + 1; value_len = strlen (value) + 1; if (string_space_act + alias_len + value_len > string_space_max) { /* Increase size of memory pool. */ size_t new_size = (string_space_max + (alias_len + value_len > 1024 ? alias_len + value_len : 1024)); char *new_pool = (char *) realloc (string_space, new_size); if (new_pool == NULL) { FREE_BLOCKS (block_list); return added; } string_space = new_pool; string_space_max = new_size; } map[nmap].alias = memcpy (&string_space[string_space_act], alias, alias_len); string_space_act += alias_len; map[nmap].value = memcpy (&string_space[string_space_act], value, value_len); string_space_act += value_len; ++nmap; ++added; } } } /* Should we test for ferror()? I think we have to silently ignore errors. --drepper */ fclose (fp); if (added > 0) qsort (map, nmap, sizeof (struct alias_map), (int (*) PARAMS ((const void *, const void *))) alias_compare); FREE_BLOCKS (block_list); return added; } static void extend_alias_table () { size_t new_size; struct alias_map *new_map; new_size = maxmap == 0 ? 100 : 2 * maxmap; new_map = (struct alias_map *) realloc (map, (new_size * sizeof (struct alias_map))); if (new_map == NULL) /* Simply don't extend: we don't have any more core. */ return; map = new_map; maxmap = new_size; } #ifdef _LIBC static void __attribute__ ((unused)) free_mem (void) { if (string_space != NULL) free (string_space); if (map != NULL) free (map); } text_set_element (__libc_subfreeres, free_mem); #endif static int alias_compare (map1, map2) const struct alias_map *map1; const struct alias_map *map2; { #if defined _LIBC || defined HAVE_STRCASECMP return strcasecmp (map1->alias, map2->alias); #else const unsigned char *p1 = (const unsigned char *) map1->alias; const unsigned char *p2 = (const unsigned char *) map2->alias; unsigned char c1, c2; if (p1 == p2) return 0; do { /* I know this seems to be odd but the tolower() function in some systems libc cannot handle nonalpha characters. */ c1 = isupper (*p1) ? tolower (*p1) : *p1; c2 = isupper (*p2) ? tolower (*p2) : *p2; if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); return c1 - c2; #endif } gwhere-0.2.3/intl/Makefile.in0000444000175000017500000001446710023202521014447 0ustar bartbart# Makefile for directory with message catalog handling in GNU NLS Utilities. # Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = .. VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ transform = @program_transform_name@ libdir = $(exec_prefix)/lib includedir = $(prefix)/include datadir = $(prefix)/@DATADIRNAME@ localedir = $(datadir)/locale gnulocaledir = $(prefix)/share/locale gettextsrcdir = @datadir@/gettext/intl aliaspath = $(localedir):. subdir = intl INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @MKINSTALLDIRS@ l = @l@ AR = ar CC = @CC@ LIBTOOL = @LIBTOOL@ RANLIB = @RANLIB@ DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \ -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@ CPPFLAGS = @CPPFLAGS@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) HEADERS = $(COMHDRS) libgettext.h loadinfo.h COMHDRS = gettext.h gettextP.h hash-string.h SOURCES = $(COMSRCS) intl-compat.c cat-compat.c COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \ finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \ explodename.c OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \ finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \ explodename.$lo CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo GETTOBJS = intl-compat.$lo DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \ xopen-msg.sed $(HEADERS) $(SOURCES) DISTFILES.normal = VERSION DISTFILES.gettext = libintl.glibc intlh.inst.in .SUFFIXES: .SUFFIXES: .c .o .lo .c.o: $(COMPILE) $< .c.lo: $(LIBTOOL) --mode=compile $(COMPILE) $< INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib all: all-@USE_INCLUDED_LIBINTL@ all-yes: libintl.$la intlh.inst all-no: libintl.a: $(OBJECTS) rm -f $@ $(AR) cru $@ $(OBJECTS) $(RANLIB) $@ libintl.la: $(OBJECTS) $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \ -version-info 1:0 -rpath $(libdir) ../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot cd ../po && $(MAKE) cat-id-tbl.$lo check: all # This installation goal is only used in GNU gettext. Packages which # only use the library should use install instead. # We must not install the libintl.h/libintl.a files if we are on a # system which has the gettext() function in its C library or in a # separate library or use the catgets interface. A special case is # where configure found a previously installed GNU gettext library. # If you want to use the one which comes with this version of the # package, you have to use `configure --with-included-gettext'. install: install-exec install-data install-exec: all if test "$(PACKAGE)" = "gettext" \ && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ if test -r $(MKINSTALLDIRS); then \ $(MKINSTALLDIRS) $(libdir) $(includedir); \ else \ $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \ fi; \ $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \ $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \ else \ : ; \ fi install-data: all if test "$(PACKAGE)" = "gettext"; then \ if test -r $(MKINSTALLDIRS); then \ $(MKINSTALLDIRS) $(gettextsrcdir); \ else \ $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ fi; \ $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \ dists="$(DISTFILES.common)"; \ for file in $$dists; do \ $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: dists="$(DISTFILES.common)"; \ for file in $$dists; do \ rm -f $(gettextsrcdir)/$$file; \ done info dvi: $(OBJECTS): ../config.h libgettext.h bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h tags: TAGS TAGS: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES) id: ID ID: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES) mostlyclean: rm -f *.a *.o *.lo core core.* clean: mostlyclean distclean: clean rm -f Makefile ID TAGS po2msg.sed po2tbl.sed maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." # GNU gettext needs not contain the file `VERSION' but contains some # other files which should not be distributed in other packages. distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: Makefile $(DISTFILES) if test "$(PACKAGE)" = gettext; then \ additional="$(DISTFILES.gettext)"; \ else \ additional="$(DISTFILES.normal)"; \ fi; \ for file in $(DISTFILES.common) $$additional; do \ ln $(srcdir)/$$file $(distdir) 2> /dev/null \ || cp -p $(srcdir)/$$file $(distdir); \ done dist-libc: tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc Makefile: Makefile.in ../config.status cd .. \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # The dependency for intlh.inst is different in gettext and all other # packages. Because we cannot you GNU make features we have to solve # the problem while rewriting Makefile.in. @GT_YES@intlh.inst: intlh.inst.in ../config.status @GT_YES@ cd .. \ @GT_YES@ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \ @GT_YES@ $(SHELL) ./config.status @GT_NO@.PHONY: intlh.inst @GT_NO@intlh.inst: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwhere-0.2.3/intl/Makefile.in.in0000444000175000017500000001530610023202521015045 0ustar bartbart# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # # This file file be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = $(prefix)/@DATADIRNAME@ localedir = $(datadir)/locale gnulocaledir = $(prefix)/share/locale gettextsrcdir = $(prefix)/share/gettext/po subdir = po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@ CC = @CC@ GENCAT = @GENCAT@ GMSGFMT = PATH=../src:$$PATH @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = PATH=../src:$$PATH @XGETTEXT@ MSGMERGE = PATH=../src:$$PATH msgmerge DEFS = @DEFS@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ INCLUDES = -I.. -I$(top_srcdir)/intl COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) SOURCES = cat-id-tbl.c POFILES = @POFILES@ GMOFILES = @GMOFILES@ DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \ stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES) POTFILES = \ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ INSTOBJEXT = @INSTOBJEXT@ .SUFFIXES: .SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat .c.o: $(COMPILE) $< .po.pox: $(MAKE) $(PACKAGE).pot $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox .po.mo: $(MSGFMT) -o $@ $< .po.gmo: file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && $(GENCAT) $@ $*.msg all: all-@USE_NLS@ all-yes: cat-id-tbl.c $(CATALOGS) all-no: $(srcdir)/$(PACKAGE).pot: $(POTFILES) $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ --add-comments --keyword=_ --keyword=N_ \ --files-from=$(srcdir)/POTFILES.in \ && test ! -f $(PACKAGE).po \ || ( rm -f $(srcdir)/$(PACKAGE).pot \ && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot ) $(srcdir)/cat-id-tbl.c: stamp-cat-id; @: $(srcdir)/stamp-cat-id: $(PACKAGE).pot rm -f cat-id-tbl.tmp sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \ | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \ rm cat-id-tbl.tmp; \ else \ echo cat-id-tbl.c changed; \ rm -f $(srcdir)/cat-id-tbl.c; \ mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \ fi cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all if test -r "$(MKINSTALLDIRS)"; then \ $(MKINSTALLDIRS) $(datadir); \ else \ $(SHELL) $(top_srcdir)/mkinstalldirs $(datadir); \ fi @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ case "$$cat" in \ *.gmo) destdir=$(gnulocaledir);; \ *) destdir=$(localedir);; \ esac; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ dir=$$destdir/$$lang/LC_MESSAGES; \ if test -r "$(MKINSTALLDIRS)"; then \ $(MKINSTALLDIRS) $$dir; \ else \ $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \ fi; \ if test -r $$cat; then \ $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \ else \ $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \ fi; \ if test -r $$cat.m; then \ $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ else \ if test -r $(srcdir)/$$cat.m ; then \ $(INSTALL_DATA) $(srcdir)/$$cat.m \ $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ else \ true; \ fi; \ fi; \ done if test "$(PACKAGE)" = "gettext"; then \ if test -r "$(MKINSTALLDIRS)"; then \ $(MKINSTALLDIRS) $(gettextsrcdir); \ else \ $(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ fi; \ $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ $(gettextsrcdir)/Makefile.in.in; \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ done rm -f $(gettextsrcdir)/po-Makefile.in.in check: all cat-id-tbl.o: ../intl/libgettext.h dvi info tags TAGS ID: mostlyclean: rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f $(GMOFILES) distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: update-po $(DISTFILES) dists="$(DISTFILES)"; \ for file in $$dists; do \ ln $(srcdir)/$$file $(distdir) 2> /dev/null \ || cp -p $(srcdir)/$$file $(distdir); \ done update-po: Makefile $(MAKE) $(PACKAGE).pot PATH=`pwd`/../src:$$PATH; \ cd $(srcdir); \ catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ mv $$lang.po $$lang.old.po; \ echo "$$lang:"; \ if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \ rm -f $$lang.old.po; \ else \ echo "msgmerge for $$cat failed!"; \ rm -f $$lang.po; \ mv $$lang.old.po $$lang.po; \ fi; \ done POTFILES: POTFILES.in ( if test 'x$(srcdir)' != 'x.'; then \ posrcprefix='$(top_srcdir)/'; \ else \ posrcprefix="../"; \ fi; \ rm -f $@-t $@ \ && (sed -e '/^#/d' -e '/^[ ]*$$/d' \ -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ | sed -e '$$s/\\$$//') > $@-t \ && chmod a-w $@-t \ && mv $@-t $@ ) Makefile: Makefile.in.in ../config.status POTFILES cd .. \ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwhere-0.2.3/intl/po2tbl.sed.in0000444000175000017500000000456510023202521014704 0ustar bartbart# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets # Copyright (C) 1995 Free Software Foundation, Inc. # Ulrich Drepper , 1995. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # 1 { i\ /* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot. */\ \ #if HAVE_CONFIG_H\ # include \ #endif\ \ #include "libgettext.h"\ \ const struct _msg_ent _msg_tbl[] = { h s/.*/0/ x } # # Write msgid entries in C array form. # /^msgid/ { s/msgid[ ]*\(".*"\)/ {\1/ tb # Append the next line :b N # Look whether second part is continuation line. s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/ # Yes, then branch. ta # Because we assume that the input file correctly formed the line # just read cannot be again be a msgid line. So it's safe to ignore # it. s/\(.*\)\n.*/\1/ bc # We found a continuation line. But before printing insert '\'. :a s/\(.*\)\(\n.*\)/\1\\\2/ P # We cannot use D here. s/.*\n\(.*\)/\1/ # Some buggy seds do not clear the `successful substitution since last ``t''' # flag on `N', so we do a `t' here to clear it. tb # Not reached :c x # The following nice solution is by # Bruno td # Increment a decimal number in pattern space. # First hide trailing `9' digits. :d s/9\(_*\)$/_\1/ td # Assure at least one digit is available. s/^\(_*\)$/0\1/ # Increment the last digit. s/8\(_*\)$/9\1/ s/7\(_*\)$/8\1/ s/6\(_*\)$/7\1/ s/5\(_*\)$/6\1/ s/4\(_*\)$/5\1/ s/3\(_*\)$/4\1/ s/2\(_*\)$/3\1/ s/1\(_*\)$/2\1/ s/0\(_*\)$/1\1/ # Convert the hidden `9' digits to `0's. s/_/0/g x G s/\(.*\)\n\([0-9]*\)/\1, \2},/ s/\(.*\)"$/\1/ p } # # Last line. # $ { i\ };\ g s/0*\(.*\)/int _msg_tbl_length = \1;/p } d gwhere-0.2.3/intl/textdomain.c0000444000175000017500000000630110023202521014706 0ustar bartbart/* Implementation of the textdomain(3) function. Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H # include #endif #if defined STDC_HEADERS || defined _LIBC # include #endif #if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC # include #else # include # ifndef memcpy # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) # endif #endif #ifdef _LIBC # include #else # include "libgettext.h" #endif /* @@ end of prolog @@ */ /* Name of the default text domain. */ extern const char _nl_default_default_domain[]; /* Default text domain in which entries for gettext(3) are to be found. */ extern const char *_nl_current_default_domain; /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define TEXTDOMAIN __textdomain # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define TEXTDOMAIN textdomain__ #endif /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ char * TEXTDOMAIN (domainname) const char *domainname; { char *old; /* A NULL pointer requests the current setting. */ if (domainname == NULL) return (char *) _nl_current_default_domain; old = (char *) _nl_current_default_domain; /* If domain name is the null string set to default domain "messages". */ if (domainname[0] == '\0' || strcmp (domainname, _nl_default_default_domain) == 0) _nl_current_default_domain = _nl_default_default_domain; else { /* If the following malloc fails `_nl_current_default_domain' will be NULL. This value will be returned and so signals we are out of core. */ #if defined _LIBC || defined HAVE_STRDUP _nl_current_default_domain = strdup (domainname); #else size_t len = strlen (domainname) + 1; char *cp = (char *) malloc (len); if (cp != NULL) memcpy (cp, domainname, len); _nl_current_default_domain = cp; #endif } if (old != _nl_default_default_domain) free (old); return (char *) _nl_current_default_domain; } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__textdomain, textdomain); #endif gwhere-0.2.3/intl/VERSION0000444000175000017500000000005110023202521013432 0ustar bartbartGNU gettext library from gettext-0.10.35 gwhere-0.2.3/intl/xopen-msg.sed0000444000175000017500000000537610023202521015013 0ustar bartbart# po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file # Copyright (C) 1995 Free Software Foundation, Inc. # Ulrich Drepper , 1995. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # # The first directive in the .msg should be the definition of the # message set number. We use always set number 1. # 1 { i\ $set 1 # Automatically created by po2msg.sed h s/.*/0/ x } # # We copy all comments into the .msg file. Perhaps they can help. # /^#/ s/^#[ ]*/$ /p # # We copy the original message as a comment into the .msg file. # /^msgid/ { # Does not work now # /"$/! { # s/\\$// # s/$/ ... (more lines following)"/ # } s/^msgid[ ]*"\(.*\)"$/$ Original Message: \1/ p } # # The .msg file contains, other then the .po file, only the translations # but each given a unique ID. Starting from 1 and incrementing by 1 for # each message we assign them to the messages. # It is important that the .po file used to generate the cat-id-tbl.c file # (with po-to-tbl) is the same as the one used here. (At least the order # of declarations must not be changed.) # /^msgstr/ { s/msgstr[ ]*"\(.*\)"/\1/ x # The following nice solution is by # Bruno td # Increment a decimal number in pattern space. # First hide trailing `9' digits. :d s/9\(_*\)$/_\1/ td # Assure at least one digit is available. s/^\(_*\)$/0\1/ # Increment the last digit. s/8\(_*\)$/9\1/ s/7\(_*\)$/8\1/ s/6\(_*\)$/7\1/ s/5\(_*\)$/6\1/ s/4\(_*\)$/5\1/ s/3\(_*\)$/4\1/ s/2\(_*\)$/3\1/ s/1\(_*\)$/2\1/ s/0\(_*\)$/1\1/ # Convert the hidden `9' digits to `0's. s/_/0/g x # Bring the line in the format ` ' G s/^[^\n]*$/& / s/\(.*\)\n\([0-9]*\)/\2 \1/ # Clear flag from last substitution. tb # Append the next line. :b N # Look whether second part is a continuation line. s/\(.*\n\)"\(.*\)"/\1\2/ # Yes, then branch. ta P D # Note that `D' includes a jump to the start!! # We found a continuation line. But before printing insert '\'. :a s/\(.*\)\(\n.*\)/\1\\\2/ P # We cannot use the sed command `D' here s/.*\n\(.*\)/\1/ tb } d gwhere-0.2.3/ltmain.sh0000644000175000017500000054737210472407554013311 0ustar bartbart# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.6 TIMESTAMP=" (1.1220.2.95 2004/04/11 05:50:42) Debian$Rev: 224 $" # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` if test "X$win32_nmres" = "Ximport" ; then win32_libid_type="x86 archive import" else win32_libid_type="x86 archive static" fi fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2003 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $EXIT_SUCCESS ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $EXIT_SUCCESS ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $EXIT_SUCCESS ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case "$arg_mode" in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo $srcfile > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi fi build_libtool_libs=no build_old_libs=yes prefer_static_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 exit $EXIT_FAILURE fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-mingw* | *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # gcc -m* arguments should be passed to the linker via $compiler_flags # in order to pass architecture information to the linker # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo # but this is not reliable with gcc because gcc may use -mfoo to # select a different linker, different libraries, etc, while # -Wl,-mfoo simply passes -mfoo to the linker. -m*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" if test "$with_gcc" = "yes" ; then compiler_flags="$compiler_flags $arg" fi continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test "$status" -ne 0 && test ! -d "$output_objdir"; then exit $status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) if test "$deplibs_check_method" != pass_all; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $dir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5* ) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else convenience="$convenience $dir/$old_library" old_convenience="$old_convenience $dir/$old_library" deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$deplibs $path" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name="`expr $a_deplib : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$save_output-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$save_output-${k}.$objext k=`expr $k + 1` output=$output_objdir/$save_output-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadale object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$output.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' else $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) cwrappersource=`$echo ${objdir}/lt-${output}.c` cwrapper=`$echo ${output}.exe` $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR #define DIR_SEPARATOR '/' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) #define HAVE_DOS_BASED_FILE_SYSTEM #ifndef DIR_SEPARATOR_2 #define DIR_SEPARATOR_2 '\\' #endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); char * basename (const char *name); char * fnqualify(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup ((char *) basename (argv[0])); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = fnqualify(argv[0]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } char * basename (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha (name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return (char *) base; } char * fnqualify(const char *path) { size_t size; char *p; char tmp[LT_PATHMAX + 1]; assert(path != NULL); /* Is it qualified already? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha (path[0]) && path[1] == ':') return xstrdup (path); #endif if (IS_DIR_SEPARATOR (path[0])) return xstrdup (path); /* prepend the current directory */ /* doesn't handle '~' */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ p = XMALLOC(char, size); sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); return p; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \$progdir\\\\\$program \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \$progdir/\$program \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" # Add in members from convenience archives. for xlib in $addlibs; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` done fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # GNU ar 2.10+ was changed to match POSIX; thus no paths are # encoded into archives. This makes 'ar r' malfunction in # this piecewise linking case whenever conflicting object # names appear in distinct ar calls; check, warn and compensate. if (for obj in $save_oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 AR_FLAGS=cq fi # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg="$nonopt" fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest="$arg" continue fi case $arg in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; -m) prev="-m" ;; -o) prev="-o" ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest="$arg" continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir="/tmp" test -n "$TMPDIR" && tmpdir="$TMPDIR" tmpdir="$tmpdir/libtool-$$" save_umask=`umask` umask 0077 if $mkdir "$tmpdir"; then umask $save_umask else umask $save_umask $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 continue fi file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyways case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "----------------------------------------------------------------------" $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "----------------------------------------------------------------------" exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" if test "$mode" = uninstall; then if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. fi fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $EXIT_SUCCESS # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: gwhere-0.2.3/Makefile.am0000644000175000017500000000067310244177004013500 0ustar bartbart## Process this file with automake to produce Makefile.in SUBDIRS = debian slackware doc intl po src win32 ApplicationGnomedir = $(datadir)/gnome/apps/Applications ApplicationGnome_DATA = gwhere.desktop ApplicationKDEdir = $(datadir)/applnk/Applications ApplicationKDE_DATA = gwhere.desktop pixdir = $(datadir)/pixmaps pix_DATA = gwhere.xpm EXTRA_DIST = ChangeLog.fr \ BUGS BUGS.fr \ gwhere.spec.in \ gwhere.xpm \ gwhere.desktop gwhere-0.2.3/Makefile.in0000644000175000017500000003605110506327525013516 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ SUBDIRS = debian slackware doc intl po src win32 ApplicationGnomedir = $(datadir)/gnome/apps/Applications ApplicationGnome_DATA = gwhere.desktop ApplicationKDEdir = $(datadir)/applnk/Applications ApplicationKDE_DATA = gwhere.desktop pixdir = $(datadir)/pixmaps pix_DATA = gwhere.xpm EXTRA_DIST = ChangeLog.fr BUGS BUGS.fr gwhere.spec.in gwhere.xpm gwhere.desktop ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = gwhere.spec DATA = $(ApplicationGnome_DATA) $(ApplicationKDE_DATA) $(pix_DATA) DIST_COMMON = README ./stamp-h.in ABOUT-NLS AUTHORS COPYING ChangeLog \ INSTALL Makefile.am Makefile.in NEWS TODO acconfig.h aclocal.m4 \ config.guess config.h.in config.sub configure configure.in \ gwhere.spec.in install-sh ltmain.sh missing mkinstalldirs DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status $(ACLOCAL_M4): configure.in cd $(srcdir) && $(ACLOCAL) config.status: $(srcdir)/configure.in $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) config.h: stamp-h @if test ! -f $@; then \ rm -f stamp-h; \ $(MAKE) stamp-h; \ else :; fi stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES= CONFIG_HEADERS=config.h \ $(SHELL) ./config.status @echo timestamp > stamp-h 2> /dev/null $(srcdir)/config.h.in: $(srcdir)/stamp-h.in @if test ! -f $@; then \ rm -f $(srcdir)/stamp-h.in; \ $(MAKE) $(srcdir)/stamp-h.in; \ else :; fi $(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h cd $(top_srcdir) && $(AUTOHEADER) @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null mostlyclean-hdr: clean-hdr: distclean-hdr: -rm -f config.h maintainer-clean-hdr: gwhere.spec: $(top_builddir)/config.status gwhere.spec.in cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status install-ApplicationGnomeDATA: $(ApplicationGnome_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(ApplicationGnomedir) @list='$(ApplicationGnome_DATA)'; for p in $$list; do \ if test -f $(srcdir)/$$p; then \ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(ApplicationGnomedir)/$$p"; \ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(ApplicationGnomedir)/$$p; \ else if test -f $$p; then \ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(ApplicationGnomedir)/$$p"; \ $(INSTALL_DATA) $$p $(DESTDIR)$(ApplicationGnomedir)/$$p; \ fi; fi; \ done uninstall-ApplicationGnomeDATA: @$(NORMAL_UNINSTALL) list='$(ApplicationGnome_DATA)'; for p in $$list; do \ rm -f $(DESTDIR)$(ApplicationGnomedir)/$$p; \ done install-ApplicationKDEDATA: $(ApplicationKDE_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(ApplicationKDEdir) @list='$(ApplicationKDE_DATA)'; for p in $$list; do \ if test -f $(srcdir)/$$p; then \ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(ApplicationKDEdir)/$$p"; \ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(ApplicationKDEdir)/$$p; \ else if test -f $$p; then \ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(ApplicationKDEdir)/$$p"; \ $(INSTALL_DATA) $$p $(DESTDIR)$(ApplicationKDEdir)/$$p; \ fi; fi; \ done uninstall-ApplicationKDEDATA: @$(NORMAL_UNINSTALL) list='$(ApplicationKDE_DATA)'; for p in $$list; do \ rm -f $(DESTDIR)$(ApplicationKDEdir)/$$p; \ done install-pixDATA: $(pix_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(pixdir) @list='$(pix_DATA)'; for p in $$list; do \ if test -f $(srcdir)/$$p; then \ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pixdir)/$$p"; \ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pixdir)/$$p; \ else if test -f $$p; then \ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(pixdir)/$$p"; \ $(INSTALL_DATA) $$p $(DESTDIR)$(pixdir)/$$p; \ fi; fi; \ done uninstall-pixDATA: @$(NORMAL_UNINSTALL) list='$(pix_DATA)'; for p in $$list; do \ rm -f $(DESTDIR)$(pixdir)/$$p; \ done # 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. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist -rm -rf $(distdir) GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz mkdir $(distdir)/=build mkdir $(distdir)/=inst dc_install_base=`cd $(distdir)/=inst && pwd`; \ cd $(distdir)/=build \ && ../configure --with-included-gettext --srcdir=.. --prefix=$$dc_install_base \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) dist -rm -rf $(distdir) @banner="$(distdir).tar.gz is ready for distribution"; \ dashes=`echo "$$banner" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ echo "$$dashes" dist: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) dist-all: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) distdir: $(DISTFILES) -rm -rf $(distdir) mkdir $(distdir) -chmod 777 $(distdir) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive all-recursive-am: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-ApplicationGnomeDATA install-ApplicationKDEDATA \ install-pixDATA install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-ApplicationGnomeDATA \ uninstall-ApplicationKDEDATA uninstall-pixDATA uninstall: uninstall-recursive all-am: Makefile $(DATA) config.h all-redirect: all-recursive-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(ApplicationGnomedir) \ $(DESTDIR)$(ApplicationKDEdir) $(DESTDIR)$(pixdir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-hdr clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-hdr distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive -rm -f config.status maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive -rm -f config.status .PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ uninstall-ApplicationGnomeDATA install-ApplicationGnomeDATA \ uninstall-ApplicationKDEDATA install-ApplicationKDEDATA \ uninstall-pixDATA install-pixDATA install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \ install-exec-am install-exec install-data-am install-data install-am \ install uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/Makefile.win0000644000175000017500000000030110222307465013666 0ustar bartbart# Project: GWhere # Makefile created for GWhere CC = gcc.exe WINDRES = windres.exe RES = OBJ = $(RES) LIBS = INCS = BIN = CFLAGS = .PHONY: clean all: clean: rm -f $(OBJ) $(BIN) gwhere-0.2.3/missing0000544000175000017500000000000010023202521013003 0ustar bartbartgwhere-0.2.3/mkinstalldirs0000544000175000017500000000133010023202521014221 0ustar bartbart#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here gwhere-0.2.3/NEWS0000644000175000017500000000005010023202521012114 0ustar bartbartGo to : http://www.gwhere.org/news.php3 gwhere-0.2.3/po/0000755000175000017500000000000010506575525012067 5ustar bartbartgwhere-0.2.3/po/ar.gmo0000644000175000017500000011172010472436234013172 0ustar bartbartÞ•·Ô KŒ¸$ ¹$aÇ$$)%N% k%w%‰% œ%*¨%$Ó%ø%&%&A& J& W&b&j&r&z&‚&Š&’&š&1¯&á&qý&7o'°§'X(_( e( q(}( (Ž( —(¤(»(0Ô( )) &)+1)m])4Ë)J*RK*ž* ¦* ±*¿* Ï* Û*é*ÿ*-+ >+H+h+{++ †+ +œ+ £+C±+õ+1 ,?,S,*d, ,›,ª,¿,Ç, Þ,ë,û,- -<-P- a-n--—-¯-¾- Ñ-ß-ò- û-.\.u.n‰.(ø.!/ '/5/1O/(/5ª/5à/H0D_0?¤0ä0 ê0 ø0,101@1H1d1 ‚1 1ž1 £1 ¯1»1Ê1Ï1 ã1 í1ú1 22$282/N2 ~2M‹2Ù2ß2ð23 33r33¦3L¶3449&4@`43¡4#Õ4ù45$5@5T5%j5&5)·5Rá546S6s6I6\Ù6C67z7L”7"á7$8)8G8L8,_8$Œ8±8º8Á8Ó8Ø8 ì8 ö899 .9;9!L9n9 t9 ~9Š9‘9 §9 ³9¿9Î9 á9 ï9 ú9: ::7:;:N:pO;À;Ý;+î;?<?Z<gš<G=@J=‹=‘=š= =¨=¯=´=É=Ï=PO> >§>»>Ã>Ó>.í>?8?I?P?DY? ž?¨?¸?Ì?à?ÿ?@+@B@V@[@[t@ Ð@Û@ í@iû@ eA pA{A€A ˆA “A A ¤A°A¹AÂAÅA-ÚABB"B>BZBhxBáB æB óBýBC CC1C7C@CEEC‹C ©CµCÄCeÌC 2D=DCDIDcDvD†D…šD E'E 6E BE NE!\E~E™E  EªEÇEÐE0ÕEF"F*F :F$GFlF{F‘F šF¤F «FµF ÇF ÕF áFîFGGx'G] G<þG ;HK\H¨H½H ÏHÙH öH I II ,I:IRI[IlIqI…I ŠI”I œII¦I5ðI&J>J2ZJ?J>ÍJ/ K8Lf‹ff ¦f*Çf òfüfg g !g-gz IzTz [zezlzuz{z Šz –z¤z§z;¿zûz {*&{)Q{,{{•¨{>|D| S|a|j| r|||˜|ž|§|V¬|+}/}@}T}~\} Û}ç}î}õ} ~~0~ŒF~ Ó~Ý~ð~*'Ro x.„ ³ÁHÉ0€ C€P€f€$w€œ€¯€ Ï€ Ú€è€ ï€ù€) :1FxŒ„ n%‚?”‚#Ô‚[ø‚Tƒmƒ …ƒ%‘ƒ·ƒƃÙƒéƒüƒ"„ 5„B„Y„&a„ˆ„„–„Ÿ„K¨„8ô„-…G…Rb…Mµ…H†@L†6†<Ć@‡CB‡'†‡=®‡;쇣(ˆẌ¬%‰GÒ‰§ŠËŠ8Ž‹,Ç‹4ô‹1)Œ9[Œ.•ŒcÄŒm(S–êCî72ŽOjŽºŽÍŽâŽýŽ3"Jm„‰‘'¥Í ßê8Z@›¬ µÀ È Óßò# ‘ -‘7‘W‘Z‘7s’«’²’»’Ã’ Ì’Ö’å’î’õ’ü’“““ “ “&“ :“D“M“ V“ b“o“(w“  “¬“¾“c9lÄrBEi)8f ±k[È´xkV3ÜI“*Ž£r~Å'w¡.”ß4×™Ÿ=îžt ‰¥7ygR`s·ZALž›¢,–|«ÖbÛz 'l#µ@&zÇDq<ñ·jsu䜤#ã£|ˆïÎýÊ)€¤7Ó^ÿF ê¯!—%hZ>dœ™.Xm(´ÌNóÑ0a®\³ÍŒEchKªSQ LØìHϦ«!]CËŸŠæŽ/ U•먗]ÚÝ‚g³T(þ9‡8­RT‚An²µ»5a"Д©ð6¹˜$u±{P¶;¿Cšàv…§piø€OÙå@Šo?É ©+0‹}-‘^‹†4m~š%‘§ õqF¦Y2 {„<ª•°â ²/ç;>G¯í¢¬÷Ã?Þb\ V1ÆpáÂ_½WYe6G$›ô5†ºÀÔ `NKSnI2[QyB… }o&Xƒ­U–Œ¾°„è‰-H_=˜*MMW¬f3¨+ü¡ûv,dòO“öJ‡¼¥wù"DP’újƒ:Á¸¶1 ÕetÒé®Jˆ:’x Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Empty disk Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A catalog is already openedA component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A critical error occured when extracting file information of %s%s%s. Save your catalog if it is possible, exit GWhere and report this trouble to the GWhere project team please.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.All usersAll users|Current userAllow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Audio CD : Audio CD : %dAuto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog exportedCatalog fileCatalog importedCatalog is not exportedCatalog is not importedCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerExportExport catalog toFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGTK+ 2.6 RunTime (required)GUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.GWhere can be installed for all users or only for current user. Select for which you want install GWhere please.GWhere install rights accessGenerals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?ImportImport catalog fromInfo : Install optionsInstaller already runningInsufficient memory to complete the operation.Invalid filled catalog nameIs running on %sJaz : Jaz : %dKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : Network : Network : %dNewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new disk name was filledNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPlugins for auto extraction of file descriptions and plugins for importation/exportation of catalogs.PropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :Tape : Tape : %dThe catalog is invalid or doesn't exists. Check your catalog path please.The current catalog is never be saved, cannot send itThe disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled disk name already exist in the current catalogThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.There is no available catalog pluginThis Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Files : %ldTotal Folders : Total Folders : %ldTotal Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : Which users can run GWhere ?WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberYou must uninstall your last version of GWhereZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: 0.2 Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2005-06-09 07:58:-0300 Last-Translator: Luis Parravicini Language-Team: spanish MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Corriendo en Administración de catálogos de medios removibles Por Sébastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacidad: %s, libre : %s %s [ %s ], total de discos : %d %s, %s, %s Explorador del catálogo Administración del catálogo Disco vacio Directorio "%s", %s (%d archivos, %d subdirectorios) Items listados : %d (tamaño total: %s) Motor de búsqueda Item seleccionado : %d Item seleccionado : %d (tamaño total: %s) Tipo : hecha con %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) encontrados.%s fuera del espacio de direcciones del proceso.El catálogo ya está abiertoUn componente del siguiente nombre excedió los %d caracteres, o todo el nombre de directorio excedió los %d caracteres : %s.Un componenete del path no es un directorio : %s.Un error critico ocurrió mientras se estaba extrayendo información de %s%s%s. Guarde su catálogo si esto es posible, salga de GWhere y reporte este problema al equipo de GWhere por favor._AcercaAcercaFecha de accesoRuta de accesoAgregarAgregar / ActualizarAgregar discoAgregar nuevo discoAgregando discoDeben concordar todas las palabras clavesTodos los archivos de lenguajes para la traducción del programa.Todos los usuariosTodos los usuarios|Usuario actualPermitir el beepPermite emitir un beep en algunos eventos.Permite actualizar las propiedades de la categoría seleccionada. Clickea en el botón Agregar / Actualizar para guardar las actualizaciones.Ocurrió un error de I/O cambiando al directorio : %s.Ocurrió un error durante el envío del mail. Por favor revise los parámetros.Aplicar la categoría seleccionada a todos los items en el disco a agregar (disco, directorios y archivos).ArchivoArchivo N°Archivo N# : Archivo adjuntado :Audio CD : Audio CD : %dDescripción automáticaAutocargar catálogoAutocarga un catálogo por default cuando comienza.AutomontarCambiar automaticamente todas las columnas del explorador.Cambiar automaticamente el ancho de las columnasBCC :CC :CD-Rom : CD-Rom : %d_CerrarC_olapsar todoSe pueden usar expresiones regulares. Leer la documentación para más información.No se puede editar este archivo!! No se puede eliminar esta categorría. Es usada por un item.No se pueden recibir datosNo se puede enviar datosNo se puede comenzar la búsqueda: no se cargó ningún catálogoCapacidad : Coincidir mayúsculas/minúsculasOrdenamiento sensitivo a mayúsculas/minúsculas.CatálogoDescripción del Catálogo : Información del CatálogoNombre del Catálogo : Categorías del catálogo : Catálogo cerradoNivel de compresión del catálogo :Descripción del catáolgoCatálogo exportadoArchivo del catálogoCatálogo importadoEl catálogo no se exportóEl catálogo no se importoCatálogo cargadoPropiedades del catálogoCatálogo guardadoLista de categorías : CategoríaCategoría : Nombre de categoría : Cambie en este panel todas las propiedades disponibles para poder configurar el programa como quiera.Cambiar la etiquetaElegir si todas las palabras clave o solo una de todas las palabras clave deben matchear con el item para que este se muestre como resultado.Elija adjuntar o no el archivo del catálogo.LimpiarBorrar historialLimpia los resultados de la búsquedaCliquee aquí seleccionar un catálogo.Cliquee aquí para cancelar el envío del mail.Cliquee aquí para limpiar el historial de archivos recientemente abiertos.Cliquee aquí para enviar un mail (con un catálogo adjuntado).Cliquee en el botón de Aplicar para aplicar los cambios (sin cerrar el diálogo de Preferencias).Cliquee sobre el botón Cancelar para cancelar los cambios y cerrar el diálogo de Preferencias.Cliquee sobre el botón de OK para aplicar los cambios y cerrar el diálogo de Preferencias.CerrarCerrar catálogoCerrar archivoCerrar la ventana de edición de propiedades de las categorías.Cerrando catálogoCompactaConexión cerrada por el cliente No se pudo encontrar el archivo pixmap: %sCreado : Fecha de creaciónFechaBorrar discoDescripciónDescripción : DiscoDescripción del Disco : Información del DiscoNombre del disco : Estadísticas del Disco : Descripción del discoDiscosDiscos en catálogo : Discos en el catálogo : %dMostrar si el disco seleccionado está montado o no.Mostrar informaciónMuestra información del dispositivo seleccionado como ruta, capacidad, espacio libre, etiqueta,..._Salir_Editar categoríasEditar categoríasEditar descripciónEditar archivoExpulsar disco si es posibleExpulsar el disco si es posible (CD-ROM...), incluso si la bandeja estaba cerrada. Esto está habilitado sólo si automontar está habilitado!!Dirección de correo :Ingresa una lista de palabras clave que deben estar contenidas en los archivos matcheados.Ingrese el nombre del catálogoIngrese nombre del discoIngrese aquí la dirección de correo electrónico de los contactos copiados.Ingrese aquí la dirección de correo electrónico de los contactos copiados.Ingrese la dirección de correo electrónico de tu(s) contacto(s).Ingrese aquí el objeto del mail.Ingrese el nuevo nombre del catálogoIngrese nombre del nuevo discoIngrese etiqueta del nuevo discoIngrese el nombre del nuevo archivoIngrese el nombre del nuevo directorioIngrese el número de archivo del disco.Ingrese la descripción de la categoría.Ingrese el path completo del archivo del catálogo a cargar.Ingresa todo el patron de comodines. Este patron puede contener los caracteres "?" y "*".Ingrese el nombre del catálogo.Ingrese el nombre de la categoría.Ingrese el nombre del disco.Ingrese el nombre del nuevo disco. Es el nombre el que aparecerá en el catálogo.Ingrese el número del nuevo disco. Este número puede ayudarte como un histórico del catálogo.Ingrese el puerto del servidor de mail saliente (el valor más común es 25).Ingrese su dirección de mail.Ingrese el servidor de mail saliente. Usualmente esta dirección es mail.tudominio.comError : no se puede obtener el directorio actual.Error : no se puede ir al directorio actual.Error cargando archivo pixmap: %sSalirExpandir solo los _discosExplorar archivos comprimidos (.tar, .gz, .zip, ...)Explorar la estructura del disco.ExploradorExportarExportar catálogo aArchivoDescripción del Archivo : Información del ArchivoTamaño del archivo : Tamaño del archivo : %s (%s bytes)Descripción del archivoNombre del archivo : Nombre del archivoTipo de archivo : todavía no ha sido implementado!!ArchivosDiskette : Diskette : %dDirectorioDescripción del directorio : Información de DirectorioNombre del DirectorioTamaño del Directorio : Descripción del directorioEspacio libre : Espacio libreEspacio libre : CompletaCapacidad totalLibrerías de GTK+ 2.6 (requerido)GUIGWhere (requerido)GWhere permite administrar una base de datos de tus CDs y otros medios removibles (discos duros, diskettes, discos Zip, CD-ROMs, etc...). Con GWhere es fácil navegar tus CDs o realizar búsquedas sin la necesidad de insertar los CDs en la lectora de a uno por vez.GWhere puede ser instalado para todos los usuarios o solamente para el usuario actual. Seleccione que tipo de instalación desea.Permisos de acceso de la instalacion de GWhereOpciones generalesIngrese el nombre del dispositivo del medio seleccionado.Ingrese el espacio libre del disco seleccionado (solo si se encuentra montado).Ingrese el espacio total del disco seleccionado (solo si se encuentra montado).Ingrese el número de serie del disco seleccionado (solo si está montado). Este número es un número de fabricación.Ingrese el sistema de archivos del los discos seleccionados (por ejemplo: ext2, ext3, vfat, ntfs, ...).Ingrese el nombre del volumen del disco seleccionado (solo si está montado).GrupoGrupo : HD : HD : %dOcultoOcultarOcultar las operaciones sobre los archivosINodoSi no ingresaste nombre de disco y si el dispositivo seleccionado tiene un nombre de volumen, el nombre del volumen sera aplicado como nombre de disco.Si no aplicas los cambios se perderán todos los cambios. ¿Desea aplicar los cambios?ImportarImportar catálogo deInfo : Opciones de instalaciónEl instalador ya esta corriendoMemoria insuficiente para completar la operación.El nombre de catálogo ingresado es inválidoCorriendo en %sJaz : Jaz : %dMantene esta opcion seleccionada para escanear toda la informacion de directorios y archivos.Palabras claveArchivos de lenguajeÚltimo acceso : Última modificación : Carga el último catálogo abierto.Carga el catálogo seleccionado.Cargar catálogoLa carga del catálogo fallóPosición en el disco : MailPrograma principal.Crear una descripción automaticamente del archivo (descripción del formato del archivo, tamaño de la imagen para xmp o jpg, etc...).AdministraciónFecha de modificaciónError de montaje Montar el disco solo si no lo estaba. Y desmontar luego el disco incluso si estaba montado antes de la exploración.Montado : Mover A...NombreNombre : Red : Red : %dNuevoNuevo catálogoNuevo discoNuevo archivoNoNo hay catálogo abiertoNo hay catálogo abierto : no se puede editar las categoríasNo se encontraron resultados.Sin etiquetaNo se ingreso el nombre del nuevo catálogoNo se ingreso el nombre del nuevo archivoNo se ingreso el nombre del nuevo directorioTodavía sin implementar!! Explorar todos los archivos comprimidos, como si fuera un directorio. Los archivos comprimidos son los archivos tar o gzip.AbrirAbrir catálogoAbrir archivoOpcionesOtro : Otro : %dServidor de mail saliente :DueñoDueño : RutaPor favor configurar las opciones de mail en las preferencias para poder enviar mails.Por favor seleccione un nombre de catálogo Por favor esperePor favor espere...PluginsPlugins para la extracción automática de las descripciones de archivos y plugins para la importacion/exportacion de catálogos.PropiedadesRapidoSalir Catálogos recientes :Expresión regularEliminar categoríaEliminar del catálogoElimina la categoría seleccionada de la lista de categorías. Las categorías pueden ser eliminadas solo si no hay ningún item que la utilice.RenombrarRenombrar catálogoRenombrar discoRenombrar archivoRenombrar directorioOrdenar resultados por directorio/archivo.Ordenar resultados por tipo.PermisosPermisos : Librerías para la interfaz gráfica de usuario.G_uardar comoGuardarGuardar propiedades de la interfaz como posición y tamaño de la ventana.Guardar las propiedades de la interfaz al salir.Guardar comoGuardar como catálogoGuardar catálogoGuardar los cambios en la categoría.Guardando catálogoLa grabación del catálogo fallóEscaneandoPre_ferenciasBuscarBuscar : Buscar en el catálogoResultados de la búsquedaTipo de búsquedaBuscando...Seleccione el catálogo a cargarse automáticamenteSeleccione catálogoSeleccione disco : Seleccione el nivel de compresión del catálogo. El valor por default es 3, es un buen valor entre gran performance y tamaño pequeño.Seleccione la categoría que será aplicada al disco que será agregado (incluso si la opción está seleccionada).Seleccione el disco que será agregado como disco a tu catálogo.Seleccione la sección a configurar.Elija el tamaño de la lista de catálogos recientemente abiertos. El valor por default es 5.Enviar catálogo por mailEnviar archivo por mailEnviar mailEnviando mensaje, por favor espere...N° de serie : Número de serie : Número de serieNúmero de serie : Puerto del servidor :Setear la categoría recursivamentePreferenciasPreferencias cambiadasMostrarMostrar operaciones sobre los archivosTamañoTema :Cinta : Cinta : El catálogo es inválido o no existe. Por favor revise el path del catálogo.El catálogo actual no se guardó nunca, no puede enviarseEl disco ha sido agregadoEl disco ha sido agregado El disco no ha sido agregado La operación de agregado fué cancelada por el usuarioEl disco no ha sido agregado Error : no se puede cerrar el directorio actual.El disco no ha sido agregado Error : no se puede ir al directorio padre.El disco no ha sido agregado : no se puede montar el dispositivoEl disco no ha sido agregado : no hay un disco montadoEl nombre de disco ingresado ya existe en el catálogo actualEl nombre de archivo ingresado ya existe en el directorio actualEl nombre de directorio ingresado ya existe en el directorio actualEl siguiente directorio no existe : %s.El siguiente directorio no existe, o el nombre es vacío : %s.El siguiente nombre de directorio no es un directorio : %s.Los resultados en el explorador pueden ser agrupados por tipo de item. Si esta opcion esta seleccionada todos los items seran agrupados por directorios y archivos.El ordenamiento de los resultados en el explorador es sensitivo a mayusculas/minusculas.El resultado de la busqueda puede agruparse por tipo de item. Si esta opcion esta seleccionada todos los items seran agrupados por catalogs, discos, directorios y archivos.El ordenamiento de los resultados es sensitivo a mayusculas/minusculas.La búsqueda puede ser o no sensitiva a las mayúsculas / minúsculas. Cuando es sensitiva "Archivo.txt" no es igual a "archivo.txt". Pero cuando no lo es sí son iguales.La búsqueda puede ser sensitiva a las mayúsculas / minúsculas. Los comodines soportan el caracter "*". Ejemplo : img*.bmp o *.htm Las búsqueda de palabras clave acepta una lista de palabras obligatorias.La búsqueda se hace sobre los nombres de las categorías.La búsqueda se hace sobre las descripciones.La búsqueda se hace sobre los nombres de los discos.La búsqueda se hace sobre los nombres de archivo.La búsqueda se hace sobre los nombres de los directorios.No hay disponible un plugin para los catálogosEste diálogo de preferencias permite configurar algunas funcionalidades y propiedades del programa.Este diálogo de preferencias permite configurar el programa. Algunas propiedades pueden ser modificadas aquí.Este diálogo te permite enviar el catálogo por mail a uno (o más) de tus contactos.A :Demasiados descriptores de archivos abiertos en uso por el proceso.Demasiados archivos archivos actualmente en el sistema.Demasiados links simbólicos fueron encontrados cuando se resolvía el path : %s.Capacidad total : Total de archivos : Cantidad de Archivos : %ldTotal de directorios : Cantidad de directorios : %ldEspacio Libre Total : Espacio Total de Almacenamiento : Espacio Total Usado : TipoTipo : Tipo : (directorio)Tipee aquí el texto del mensje de mail.Dueño desconocidoActualizarActualizar en el catálogo : Usar un patron avanzado para generar el nombre del discoUsar nombre del volumen como nombre del disco (solo cuando el nombre del disco esta vacio)Espacio usado : Versión Versión : VisibleVolumen : Etiqueta : Nombre del volumenEtiqueta de volumen : Que usuarios pueden correr GWhere ?Comodines¿Desea guardar el catálogo? : SíPodes completar tags extras para generar un nombre de disco con la informacion del disco - %% : % - %n : numero de archivo (se puede usar un prefijo para agregar ceros : %.4n da 0001, 0002, 0003, ..., 0091, ... - %l : etiqueta del disco - %t : tipo de disco - %s : numero de serieDebes desinstalar tu ultima version de GWhere instaladaZip : Zip : %dA_cción_Aplicar_Cancelar_Expandir todo_ArchivoAy_uda_Nuevo_No_OK_Ok_Abrir_Opciones_PropiedadesA_rchivos recientes_Eliminar_Guardar_Guardar_Actualizarno hay disconingunase canceló la operación de agregar discodesconocidogrupo desconocidodueño desconocidogwhere-0.2.3/po/el.po0000644000175000017500000021447110472436220013026 0ustar bartbart# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: 0.1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2003-09-22 18:54-0200\n" "Last-Translator: Dimitris Garanatsios \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-7\n" "Content-Transfer-Encoding: 8bit\n" #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "Áäýíáôç ç ëÞøç äåäïìÝíùí" #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "Ç óýíäåóç Ýêëåéóå áðü ôçí ðëåõñÜ ôïõ client\n" #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "Áäýíáôç ç áðïóôïëÞ äåäïìÝíùí" #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%.0f bytes" #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f Kb" #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f Mb" #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f Gb" #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f Tb" #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f Pb" #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f Hb" #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f Ib" #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "OK" #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "¶êõñï" #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Äéüñèùóç êáôçãïñéþí" #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "Ëßóôá êáôçãïñéþí : " #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "¼íïìá" #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "ÐåñéãñáöÞ" #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "ÅíçìÝñùóç" #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" "ÅðéôñÝðåé ôçí åíçìÝñùóç ôùí éäéïôÞôùí ôçò êáôçãïñßáò ðïõ åßíáé åðéëåãìÝíç. " "ÊÜíôå click óôï êïõìðß ÐñïóèÞêç / ÅíçìÝñùóç ãéá íá áðïèçêåýóåôå ôéò áëëáãÝò." #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "ÄéáãñáöÞ" #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" "ÄéáãñáöÞ ôçò åðéëåãìÝíçò êáôçãïñßáò áðü ôç ëßóôá êáôçãïñéþí. Ïé êáôçãïñßåò " "ìðïñïýí íá äéáãñáöïýí ìüíï áí äå ÷ñçóéìïðïéïýíôáé áðü êáíÝíá áíôéêåßìåíï." #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "¼íïìá êáôçãïñßáò : " #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "ÅéóÜãåôå ôï üíïìá ôçò êáôçãïñßáò." #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "ÐåñéãñáöÞ : " #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "ÅéóÜãåôå ôçí ðåñéãñáöÞ ôçò êáôçãïñßáò." #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "ÐñïóèÞêç / ÅíçìÝñùóç" #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "ÁðïèÞêåõóç ôùí áëëáãþí ôùí éäéïôÞôùí ìéáò êáôçãïñßáò." #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Êëåßóéìï" #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Êëåßóéìï ôïõ ðáñáèýñïõ äéüñèùóçò ôùí éäéïôÞôùí ôùí êáôçãïñéþí." #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "êáìßá" #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "ÄéáãñáöÞ êáôçãïñßáò" #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "" "Áäýíáôç ç äéáãñáöÞ áõôÞò ôçò êáôçãïñßáò. ×ñçóéìïðïéåßôáé áðü êÜðïéï " "áíôéêåßìåíï." #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "ÐñïóèÞêç" #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "ÅíçìÝñùóç" #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "¼÷é" #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "Áðüêñõøç ôùí åíåñãåéþí ôùí áñ÷åßùí" #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "ÅìöÜíéóç ôùí åíåñãåéþí ôùí áñ÷åßùí" #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "ÅíÝñãåéá" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "ÅðÝêôáóç üëùí" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "ÅðÝêôáóç ìüíï ôùí äßóêùí" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "ÊáôÜññåõóç üëùí" #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "Äéüñèùóç êáôçãïñéþí" #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "Äåí õðÜñ÷åé áíïéêôüò êÜðïéïò êáôÜëïãïò : áäýíáôç ç äéüñèùóç êáôçãïñéþí" #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "Áñ÷åßï" #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "Äçìéïõñãßá" #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "¶íïéãìá" #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "ÁðïèÞêåõóç" #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "ÁðïèÞêåõóç ùò" #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "Êëåßóéìï" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "" #: src/gui/gwmenufile.c:199 #, fuzzy msgid "Export" msgstr "Åîåñåýíçóç" #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "Éäéüôçôåò" #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "Ðñüóöáôá áíïéãìÝíá áñ÷åßá" #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "¸îïäïò" #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Äçìéïõñãßá êáôáëüãïõ" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "" #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "Èá èÝëáôå íá áðïèçêåýóåôå ôïí êáôÜëïãï :\n" "\n" #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Äçìéïõñãßá áñ÷åßïõ" #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "ÅéóÜãåôå ôï üíïìá ôïõ êáôáëüãïõ" #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "¶íïéãìá êáôáëüãïõ" #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "¶íïéãìá áñ÷åßïõ" #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Êëåßóéìï áñ÷åßïõ" #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "Äåí õðÜñ÷åé áíïéêôüò êÜðïéïò êáôÜëïãïò" #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "ÁðïóôïëÞ áñ÷åßïõ ìå mail" #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "" "Ðáñáêáëþ ñõèìßóôå ôéò åðéëïãÝò ôïõ mail óôéò Ñõèìßóåéò þóôå íá óôÝëíåôå " "mails." #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "ÁðïèÞêåõóç óáí êáôÜëïãï" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "" #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "Éäéüôçôåò êáôáëüãïõ" #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "ÁðïèÞêåõóç êáôáëüãïõ" #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "¸îïäïò" #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "" #: src/gui/gwmenufilecallback.c:1231 #, fuzzy msgid "Catalog imported" msgstr "Éäéüôçôåò êáôáëüãïõ" #: src/gui/gwmenufilecallback.c:1233 #, fuzzy msgid "Catalog is not imported" msgstr "Äåí õðÜñ÷åé áíïéêôüò êÜðïéïò êáôÜëïãïò" #: src/gui/gwmenufilecallback.c:1267 #, fuzzy msgid "A catalog is already opened" msgstr "Äåí õðÜñ÷åé áíïéêôüò êÜðïéïò êáôÜëïãïò" #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 #, fuzzy msgid "Export catalog to" msgstr "ÅéóÜãåôå ôï üíïìá ôïõ êáôáëüãïõ" #: src/gui/gwmenufilecallback.c:1291 #, fuzzy msgid "Catalog exported" msgstr "Åîåñåýíçóç êáôáëüãïõ" #: src/gui/gwmenufilecallback.c:1293 #, fuzzy msgid "Catalog is not exported" msgstr "Åîåñåýíçóç êáôáëüãïõ" #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "ÂïÞèåéá" #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "Ðåñß" #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "ÅðéëïãÝò" #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "Ñõèìßóåéò" #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Äçìéïõñãßá" #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "¶íïéãìá" #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "ÁðïèÞêåõóç" #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "ÁðïèÞêåõóç ùò" #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "¸îïäïò" #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Ìåôïíïìáóßá" #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Äéüñèùóç ðåñéãñáöÞò" #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "Éäéüôçôåò" #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "Ìåôáêßíçóç óå..." #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "ÄéáãñáöÞ äßóêïõ" #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "ÁëëáãÞ ôçò åôéêÝôáò ôïõ ôüìïõ" #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "ÄéáãñáöÞ áðü ôïí êáôÜëïãï" #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "Äéüñèùóç áñ÷åßïõ" #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "Áäýíáôç ç äéüñèùóç áõôïý ôïõ áñ÷åßïõ!!\n" #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Ìåôïíïìáóßá êáôáëüãïõ" #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "ÅéóÜãåôå íÝï üíïìá êáôáëüãïõ" #: src/gui/gwmenupopupcallback.c:121 #, fuzzy msgid "Invalid filled catalog name" msgstr "ÅéóÜãåôå üíïìá äßóêïõ" #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "ÐåñéãñáöÞ êáôáëüãïõ" #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Ìåôïíïìáóßá äßóêïõ" #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "ÅéóÜãåôå íÝï üíïìá äßóêïõ" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "" #: src/gui/gwmenupopupcallback.c:374 #, fuzzy msgid "No new disk name was filled" msgstr "ÅéóÜãåôå íÝï üíïìá äßóêïõ" #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "ÅéóÜãåôå íÝá åôéêÝôá ôüìïõ" #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "ÐåñéãñáöÞ äßóêïõ" #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 #, fuzzy msgid "Rename folder" msgstr "Ìåôïíïìáóßá äßóêïõ" #: src/gui/gwmenupopupcallback.c:652 #, fuzzy msgid "Enter new folder name" msgstr "ÅéóÜãåôå íÝï üíïìá äßóêïõ" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "" #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "ÐåñéãñáöÞ öáêÝëïõ" #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 #, fuzzy msgid "Rename file" msgstr "Ìåôïíïìáóßá äßóêïõ" #: src/gui/gwmenupopupcallback.c:921 #, fuzzy msgid "Enter new file name" msgstr "ÅéóÜãåôå íÝï üíïìá äßóêïõ" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "" #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "ÐåñéãñáöÞ áñ÷åßïõ" #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Êáôá÷þñçóç" #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "ÊáôÜëïãïò" #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "Êëåßóéìï êáôáëüãïõ" #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "Ðáñáêáëþ ðåñéìÝíåôå..." #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Ï êáôÜëïãïò Ýêëåéóå" #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "Üãíùóôïò éäéïêôÞôçò" #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "Üãíùóôç ïìÜäá" #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Äçìéïõñãßá äßóêïõ" #: src/gui/gwnotebookmanagment.c:173 #, fuzzy msgid "Select the media that will be added as disk to your catalog." msgstr "ÅðéëÝîôå ôï äßóêï ðïõ èá ðñïóôåèåß óôïí êáôÜëïãü óáò" #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 #, fuzzy msgid "Select media : " msgstr "ÅðéëïãÞ äßóêïõ : " #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "" "ÅéóÜãåôå ôïí áñéèìü ôïõ íÝïõ äßóêïõ. Ï áñéèìüò áõôüò ìðïñåß íá óáò âïçèÞóåé " "ìå ôï éóôïñéêü ôïõ êáôáëüãïõ óáò." #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Áñéèìüò êáôá÷þñçóçò : " #: src/gui/gwnotebookmanagment.c:232 #, fuzzy msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "" "ÅéóÜãåôå ôï üíïìá ôïõ íÝïõ äßóêïõ. Ôï üíïìÜ ôïõ èá åìöáíßæåôáé óôïí êáôÜëïãü " "óáò." #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "¼íïìá : " #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "Êáôçãïñßá : " #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "" "ÅðéëÝîôå ôçí êáôçãïñßá üðïõ êáôáôÜóåôáé ï äßóêïò ðïõ èá ðñïóôåèåß (áêüìá êáé " "áí ç åðéëïãÞ åßíáé ôóåêáñéóìÝíç)." #: src/gui/gwnotebookmanagment.c:273 #, fuzzy msgid "Give the device file of the selected media." msgstr "" "Äþóôå ôïí åëåýèåñï ÷þñï ôïõ åðéëåãìÝíïõ äßóêïõ (áí åíáé ðñïóáñôçìÝíïò)." #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Ðëçñïöïñßåò : " #: src/gui/gwnotebookmanagment.c:290 #, fuzzy msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "" "Äþóôå ôïí ôýðï ôïõ åðéëåãìÝíïõ äßóêïõ. Ï ôýðïò åßíáé Ýíáò áðü áõôïýò ôïõ " "áñ÷åßïõ /etc/fstab." #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Ôýðïò : " #: src/gui/gwnotebookmanagment.c:307 #, fuzzy msgid "Display if the selected media is mounted or no." msgstr "ÅìöÜíéóç áí ï åðéëåãìÝíïò äßóêïò åßíáé ðñïóáñôçìÝíïò Þ ü÷é." #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "ÐñïóáñôçìÝíïò : " #: src/gui/gwnotebookmanagment.c:324 #, fuzzy msgid "Give the volume name of the selected media (only if is mounted)." msgstr "" "Äþóôå ôçí ïíïìáóßá ôïõ ôüìïõ ôïõ åðéëåãìÝíïõ äßóêïõ (áí åßíáé ðñïóáñôçìÝíïò)." #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Ôüìïò : " #: src/gui/gwnotebookmanagment.c:340 #, fuzzy msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "" "Äþóôå ôï óåéñéáêü áñéèìü ôïõ åðéëåãìÝíïõ äßóêïõ (áí åßíáé ðñïóáñôçìÝíïò). Ï " "áñéèìüò áõôüò äßíåôáé áðü ôïí êáôáóêåõáóôÞ." #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Óåéñéáêüò áñéèìüò : " #: src/gui/gwnotebookmanagment.c:356 #, fuzzy msgid "Give the full space of the selected media (only if is mounted)." msgstr "" "Äþóôå ôç óõíïëéêÞ ÷ùñçôéêüôçôá ôïõ åðéëåãìÝíïõ äßóêïõ (áí åßíáé " "ðñïóáñôçìÝíïò)." #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "×ùñçôéêüôçôá : " #: src/gui/gwnotebookmanagment.c:372 #, fuzzy msgid "Give the free space of the selected media (only if is mounted)." msgstr "" "Äþóôå ôïí åëåýèåñï ÷þñï ôïõ åðéëåãìÝíïõ äßóêïõ (áí åíáé ðñïóáñôçìÝíïò)." #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Åëåýèåñïò ÷þñïò : " #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "ÅðéëïãÝò" #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "ÅìöÜíéóç ðëçñïöïñéþí" #: src/gui/gwnotebookmanagment.c:404 #, fuzzy msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" "Åìöáíßæåé ðëçñïöïñßåò ãéá ôçí åðéëåãìÝíç óõóêåõÞ üðùò óçìåßï ðñïóÜñôçóçò, " "÷ùñçôéêüôçôá, åëåýèåñïò ÷þñïò, åôéêÝôá,..." #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Áõôüìáôç ðñïóÜñôçóç" #: src/gui/gwnotebookmanagment.c:418 #, fuzzy msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" "ÐñïóÜñôçóç ôïõ äßóêïõ áí äåí åßíáé ðñïóáñôçìÝíïò. Êáôüðéí, áðïðñïóÜñôçóç ôïõ " "äßóêïõ áêüìá êáé áí Þôáí ðñïóáñôçìÝíïò ðñéí ôçí áíß÷íåõóç" #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 #, fuzzy msgid "Explore tree structure of the media." msgstr "Åîåñåýíçóç ôçò äïìÞò ôïõ äßóêïõ" #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "" "ÔóåêÜñåôå áõôÞí ôçí åðéëïãÞ ãéá áíß÷íåõóç ðëçñïöïñéþí ôùí öáêÝëùí êáé ôùí " "áñ÷åßùí." #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "Åîåñåýíçóç óå óõìðéåóìÝíá áñ÷åßá (.tar, .gz, .zip, ...)" #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "×áñáêôçñéóôéêü ìç äéáèÝóéìï áêüìá!!\n" "Åîåñåýíçóç üëùí ôùí óõìðéåóìÝíùí áñ÷åßùí óáí íá Þôáí öÜêåëïé." #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 #, fuzzy msgid "Eject media if possible" msgstr "ÁðïâïëÞ ôïõ äßóêïõ áí åßíáé äõíáôüí" #: src/gui/gwnotebookmanagment.c:458 #, fuzzy msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" "ÁðïâïëÞ ôïõ äßóêïõ áí åßíáé äõíáôüí (CD-ROM...), áêüìá êáé áí âñéóêüôáí óôï " "drive. Ç ëåéôïõñãßá äéáôßèåôáé ìüíï áí åßíáé åíåñãïðïéçìÝíç ç åðéëïãÞ ôçò " "áõôüìáôçò ðñïóÜñôçóçò!!" #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "ÅðáíáëçðôéêÞ åöáñìïãÞ ôçò êáôçãïñßáò" #: src/gui/gwnotebookmanagment.c:471 #, fuzzy msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "" "ÅöáñìïãÞ ôçò åðéëåãìÝíçò êáôçãïñßáò óå üëá ôá áíôéêåßìåíá ôïõ åðéëåãìÝíïõ " "äßóêïõ (äßóêïò, öÜêåëïé, áñ÷åßá)." #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "Áõôüìáôç äçìéïõñãßá ðåñéãñáöÞò" #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "" "Áõôüìáôç äçìéïõñãßá ðåñéãñáöÞò áñ÷åßùí (ðåñéãñáöÞ ôïõ ôýðïõ ôïõò, ìÝãåèïò " "åéêüíáò ãéá xpm Þ jpg, êëð...)." #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "×ñÞóç ðñïçãìÝíïõ ðñïôýðïõ ãéá ôç äçìéïõñãßá ôïõ ïíüìáôïò ôïõ äßóêïõ" #: src/gui/gwnotebookmanagment.c:497 #, fuzzy msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Ìðïñåßôå íá óõìðëçñþóåôå ðåñáéôÝñù ðåäßá ãéá ôç äçìéïõñãßá ôïõ ïíüìáôïò ôïõ " "äßóêïõ ìå ôéò ðëçñïöïñßåò ôïõ :\n" "- %% : %\n" "- %n : áñéèìüò êáôá÷þñçóçò (äõíáôÞ ÷ñÞóç ôïõ 0 ùò ðñüèåìá : %.4n äßíåé 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : ïíïìáóßá ôüìïõ ôïõ äßóêïõ\n" "- %t : ôýðïò ôïõ äßóêïõ\n" "- %s : óåéñéáêüò áñéèìüò" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 #, fuzzy msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "×ñÞóç ïíüìáôïò ôüìïõ óáí üíïìá äßóêïõ" #: src/gui/gwnotebookmanagment.c:510 #, fuzzy msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" "Áí äå äþóáôå üíïìá äßóêïõ êáé ç åðéëåãìÝíç óõóêåõÞ Ý÷åé üíïìá ôüìïõ, óáí " "üíïìá äßóêïõ èá ÷ñçóéìïðïéçèåß ôï üíïìá ôüìïõ." #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "ÐñïóèÞêç äßóêïõ" #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Äéá÷åßñéóç" #: src/gui/gwnotebookmanagmentcallback.c:152 #, fuzzy msgid "The disk hasn't been added : there are not mounted media" msgstr "Ï äßóêïò äåí ðñïóôÝèçêå : äåí Þôáí ðñïóáñôçìÝíïò" #: src/gui/gwnotebookmanagmentcallback.c:160 #, fuzzy msgid "The disk hasn't been added : cannot mount media" msgstr "Ï äßóêïò äåí ðñïóôÝèçêå : Þôáí áäýíáôç ç ðñïóÜñôçóÞ ôïõ" #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "ÐñïóèÞêç íÝïõ äßóêïõ" #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "ÅéóÜãåôå üíïìá äßóêïõ" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "Áíé÷íåýïíôáò" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "ÐñïóèÞêç äßóêïõ óå åîÝëéîç" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "Ðáñáêáëþ ðåñéìÝíåôå" #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "Ï äßóêïò ðñïóôÝèçêå" #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Ç ðñïóÜñôçóç áðÝôõ÷å\n" #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Óåéñéáêüò áñéèìüò : " #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "Êåíü drive" #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "unknown" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Íáé" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "¼÷é" #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "ÊåíÞ åôéêÝôá" #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Ïíïìáóßá ôüìïõ : " #: src/gui/gwnotebookmanagmentcallback.c:643 #, fuzzy msgid "the disk adding is canceled" msgstr "ç ðñïóèÞêç äßóêïõ áêõñþèçêå" #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "Ðáñáêáëþ åðéëÝîôå Ýíá üíïìá êáôáëüãïõ\n" #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "ÁíáæÞôçóç : " #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "ÁíáæÞôçóç" #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "Ç áíáæÞôçóç ìðïñåß íá êÜíåé äéÜêñéóç ìåôáîý ðåæþí êáé êåöáëáßùí êáé " "õðïóôçñßæåé ôï ÷áñáêôÞñá \"*\".\n" "Ãéá ðáñÜäåéãìá : img*.bmp Þ *.htm\n" "Ç áíáæÞôçóç ìå ëÝîåéò êëåéäéÜ äÝ÷åôáé ìéá ëßóôá õðï÷ñåùôéêþí ëÝîåùí." #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "Êáèáñéóìüò" #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "Êáèáñßæåé üëá ôá áðïôåëÝóìáôá ôçò áíáæÞôçóçò" #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "ÄéÜêñéóç ðåæþí/êåöáëáßùí" #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "Ç áíáæÞôçóç ìðïñåß íá êÜíåé Þ íá ìçí êÜíåé äéÜêñéóç ìåôáîý ðåæþí/êåöáëáßùí.\n" "Óôçí ðåñßðôùóç ôçò äéÜêñéóçò ôá \"File.txt\" êáé \"file.txt\" äåí " "ôáõôßæïíôáé. Óôçí áíôßèåôç ðåñßðôùóç ôáõôßæïíôáé." #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "ÁíáæÞôçóç ôýðïõ" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "ËÝîåéò êëåéäéÜ" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "" "ÅéóÜãåôå ìéá ëßóôá áðü ëÝîåéò êëåéäéÜ ðïõ ðñÝðåé üëá íá ðåñéÝ÷ïíôáé óôá " "áñ÷åßá ðïõ ôáéñéÜæïõí." #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "×áñáêôÞñåò ìðáëáíôÝñ" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "" "ÅéóÜãåôå ôï ðñüôõðï ìðáëáíôÝñ. Ìðïñåß íá ðåñéÝ÷åé ôïõò ÷áñáêôÞñåò \"?\" and " "\"*\"." #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "ÖõóéêÞ Ýêöñáóç" #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "" "Åßíáé äõíáôÞ ç ÷ñÞóç öõóéêÞò Ýêöñáóçò (regular expression). ÁíáôñÝîôå óôéò " "ðëçñïöïñßåò ãéá ðåñéóóüôåñåò ëåðôïìÝñåéåò." #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "Áñ÷åßï" #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "ÁíáæÞôçóç óôá ïíüìáôá ôùí áñ÷åßùí." #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "ÖÜêåëïò" #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "ÁíáæÞôçóç óôá ïíüìáôá ôùí öáêÝëùí." #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "Äßóêïò" #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "ÁíáæÞôçóç óôá ïíüìáôá ôùí äßóêùí." #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "Êáôçãïñßá" #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "ÁíáæÞôçóç óôá ïíüìáôá ôùí êáôçãïñéþí." #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "ÁíáæÞôçóç óôéò ðåñéãñáöÝò." #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "¶íáæÞôçóç óôïí êáôÜëïãï" #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "%lu áíôéêåßìåí(ï/á) âñÝèçê(å/áí)." #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "ÁðïôåëÝóìáôá áíáæÞôçóçò" #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "Äåí ôáõôßóôçêå êÜðïéï áíôéêåßìåíï." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "Áíáæçôþíôáò..." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "Áäýíáôç ç Ýíáñîç áíáæÞôçóçò : äåí õðÜñ÷åé áíïéêôüò êáôÜëïãïò" #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "Ok" #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "ÅéóÜãåôå ôï üíïìá ôïõ êáôáëüãïõ" #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "¸êäïóç : " #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "¸êäïóç " #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr " äçìéïõñãÞèçêå ìå ôï " #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "Äßóêïé óôïí êáôÜëïãï : " #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "Äßóêïé óôïí êáôÜëïãï : %d" #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Óýíïëï áñ÷åßùí : " #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, fuzzy, c-format msgid "Total Files : %ld" msgstr "Óýíïëï áñ÷åßùí : %d" #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "Óýíïëï öáêÝëùí : " #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, fuzzy, c-format msgid "Total Folders : %ld" msgstr "Óýíïëï öáêÝëùí : %d" #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "ÌÝãåèïò áñ÷åßïõ : " #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Óõíïëéêüò áðïèçêåõôéêüò ÷þñïò : " #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "Óõíïëéêüò ÷ñçóéìïðïéïýìåíïò ÷þñïò : " #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "Óõíïëéêüò åëåýèåñïò ÷þñïò : " #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "ÓôáôéóôéêÜ äßóêïõ : " #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "CD-Rom : " #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "CD-Rom : %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "" #: src/gui/gwpropertiesbox.c:577 #, fuzzy, c-format msgid "Audio CD : %d" msgstr "HD : %d" #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "HD : " #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "HD : %d" #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "ÄéóêÝôá : " #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "ÄéóêÝôá : %d" #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip : " #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip : %d" #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 #, fuzzy msgid "Tape : " msgstr "Ôýðïò : " #: src/gui/gwpropertiesbox.c:649 #, fuzzy, c-format msgid "Tape : %d" msgstr "Ôýðïò : " #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "" #: src/gui/gwpropertiesbox.c:666 #, fuzzy, c-format msgid "Network : %d" msgstr "¶ëëï : %d" #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 #, fuzzy msgid "Jaz : " msgstr "¼íïìá : " #: src/gui/gwpropertiesbox.c:683 #, fuzzy, c-format msgid "Jaz : %d" msgstr "HD : %d" #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "¶ëëï : " #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "¶ëëï : %d" #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Êáôçãïñßåò êáôáëüãïõ : " #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "ÐåñéãñáöÞ êáôáëüãïõ : " #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Ðëçñïöïñßåò êáôáëüãïõ" #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "ÅéóÜãåôå ôï üíïìá ôïõ äßóêïõ." #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "ÅéóÜãåôå ôïí áñéèìü êáôá÷þñçóçò ôïõ äßóêïõ." #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr "Ôýðïò : " #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "Óåéñéáêüò áñéèìüò : " #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "ÅôéêÝôá ôüìïõ : " #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "ÓõíïëéêÞ ÷ùñçôéêüôçôá : " #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "×ñçóéìïðïéïýìåíïò ÷þñïò : " #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "Åëåýèåñïò ÷þñïò : " #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "¼íïìá êáôáëüãïõ : " #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "ÅíçìÝñùóç óôïí êáôÜëïãï : " #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "ÐåñéãñáöÞ äßóêïõ : " #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Ðëçñïöïñßåò äßóêïõ" #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "¼íïìá öáêÝëïõ" #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Ôýðïò : (öÜêåëïò)" #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "ÌÝãåèïò öáêÝëïõ" #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "Äçìéïõñãßá óôéò : " #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "Ôåëåõôáßá ôñïðïðïßçóç óôéò : " #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "Ôåëåõôáßá ðñüóâáóç óôéò : " #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Äéêáéþìáôá : " #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "ÉäéïêôÞôçò : " #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "ÏìÜäá : " #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "¼íïìá äßóêïõ : " #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "Ôïðïèåóßá óôïí äßóêï : " #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "ÐåñéãñáöÞ öáêÝëïõ : " #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Ðëçñïöïñßåò öáêÝëïõ" #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "¼íïìá áñ÷åßïõ : " #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Ôýðïò áñ÷åßïõ : ÷áñáêôçñéóôéêü ìç äéáèÝóéìï áêüìá!!" #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "ÌÝãåèïò áñ÷åßïõ : %s (% bytes)" #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "ÐåñéãñáöÞ áñ÷åßïõ : " #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Ðëçñïöïñßåò áñ÷åßïõ" #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "Áñ÷åßï êáôáëüãïõ" #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Âáèìüò óõìðßåóçò êáôáëüãïõ :" #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "" "ÅðéëÝîôå ôï âáèìü óõìðßåóçò ôùí êáôáëüãùí. Ç ðñïåðéëåãìÝíç ôéìÞ åßíáé 3, ç " "÷ñõóÞ ôïìÞ ìåôáîý áðüäïóçò êáé ìéêñïý ìåãÝèïõò." #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Ðñüóöáôá áíïéãìÝíïé êáôÜëïãïé :" #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "" "ÅðéëÝîôå ôï ðëÞèïò ôùí êáôá÷ùñßóåùí óôïõò ðñüóöáôá áíïéãìÝíïõò êáôÜëïãïõò. Ç " "ðñïåðéëåãìÝíç ôéìÞ åßíáé 5." #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "Êáèáñéóìüò éóôïñéêïý" #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "" "ÊÜíôå click åäþ ãéá íá êáèáñßóåôå ôç ëßóôá ôùí ðñüóöáôá áíïéãìÝíùí áñ÷åßùí." #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Áõôüìáôï Üíïéãìá êáôáëüãïõ" #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "Áíïßãåé áõôüìáôá Ýíáí ðñïåðéëåãìÝíï êáôÜëïãï êáôÜ ôçí åêêßíçóç." #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "¶íïéãìá ôïõ áñ÷åßïõ êáôáëüãïõ ðïõ áíïß÷èçêå ðéï ðñüóöáôá." #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "¶íïéãìá åðéëåãìÝíïõ áñ÷åßïõ êáôáëüãïõ." #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "ÅéóÜãåôå ôç äéáäñïìÞ êáé ôï üíïìá ôïõ ðñïò Üíïéãìá áñ÷åßïõ êáôáëüãïõ." #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "ÅðéëÝîôå êáôÜëïãï" #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "" "ÊÜíôå click åäþ ãéá íá áíáæçôÞóåôå êáé íá åðéëÝîåôå ôï áñ÷åßï êáôáëüãïõ." #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "ÅðéëÝîôå ôïí êáôÜëïãï ðïõ èá áíïßãåé áõôüìáôá" #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "Åîåñåýíçóç" #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "Ôáîéíüìçóç ìå äéÜêñéóç ðåæþí/êåöáëáßùí" #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "" "Ç ôáîéíüìçóç ôïõ áðïôåëÝóìáôïò óôï ðáñÜèõñï åîåñåýíçóçò êÜíåé äéÜêñéóç ðåæþí/" "êåöáëáßùí." #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Ôáîéíüìçóç ôïõ áðïôåëÝóìáôïò êáôÜ öÜêåëï/áñ÷åßï." #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" "Ç ôáîéíüìçóç ôïõ áðïôåëÝóìáôïò óôï ðáñÜèõñï åîåñåýíçóçò ìðïñåß íá ãßíåé êáôÜ " "ôýðï áíôéêåéìÝíïõ. Áí áõôÞ ç åðéëïãÞ åßíáé ôóåêáñéóìÝíç ôá áíôéêåßìåíá èá " "ïìáäïðïéçèïýí êáôÜ öáêÝëïõò Þ áñ÷åßá." #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Áõôüìáôç ðñïóáñìïãÞ ìåãÝèïõò óôçëþí" #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "" "Áõôüìáôç ðñïóáñìïãÞ ìåãÝèïõò üëùí ôùí óôçëþí ôïõ ðáñáèýñïõ åîåñåýíçóçò." #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "Äßóêïé" #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "ÏñáôÜ" #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Áðüêñõøç" #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "ÅìöÜíéóç" #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "ÊñõììÝíá" #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Áñ÷åßá" #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "" "Ç ôáîéíüìçóç ôïõ áðïôåëÝóìáôïò ôçò áíáæÞôçóçò êÜíåé äéÜêñéóç ìåôáîý ðåæþí/" "êåöáëáßùí." #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Ôáîéíüìçóç ôïõ áðïôåëÝóìáôïò êáôÜ ôýðï." #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" "Ç ôáîéíüìçóç ôïõ áðïôåëÝóìáôïò áíáæÞôçóçò ìðïñåß íá ãßíåé âÜóåé ôïõ ôýðïõ " "ôùí áíôéêåéìÝíùí. Áí áõôÞ ç åðéëïãÞ åßíáé ôóåêáñéóìÝíç üëá ôá áíôéêåßìåíá èá " "ïìáäïðïéçèïýí êáôÜ êáôáëüãïõò, äßóêïõò, öáêÝëïõò êáé áñ÷åßá." #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "¼ëåò ïé ëÝîåéò êëåéäéÜ ðñÝðåé íá ôáéñéÜæïõí" #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" "ÅðéëÝîôå áí ðñÝðåé íá ôáéñéÜæïõí üëåò ïé ëÝîåéò êëåéäéÜ Þ ìüíï ìéá áðü áõôÝò " "þóôå ôï áíôéêåßìåíï íá ðåñéëáìâÜíåôáé óôá áðïôåëÝóìáôá ôçò áíáæÞôçóçò." #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "ÃñÞãïñç" #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "ÃåíéêÝò åðéëïãÝò" #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "Ãñáöéêü ðåñéâÜëëïí åñãáóßáò" #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "ÁðïèÞêåõóç ôùí éäéïôÞôùí ôïõ ãñáöéêïý ðåñéâÜëëïíôïò êáôÜ ôçí Ýîïäï" #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "" "ÁðïèÞêåõóç ôùí éäéïôÞôùí ãñáöéêïý ðåñéâÜëëïíôïò ðïõ áöïñïýí óôç èÝóç êáé ôï " "ìÝãåèïò ôùí ðáñáèýñùí." #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "×ñÞóç Þ÷ïõ" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "ÅðéôñÝðåé ôçí åêðïìðÞ óýíôïìïõ Þ÷ïõ óå êÜðïéï óõìâÜí." #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Áëëçëïãñáößá" #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "Äéåýèõíóç email :" #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "ÅéóÜãåôå ôç äéåýèõíóç ôïõ email óáò." #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "Server åîåñ÷üìåíçò áëëçëïãñáößáò :" #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "" "ÅéóÜãåôå ôïí server ôçò åîåñ÷üìåíçò áëëçëïãñáößáò óáò. ÓõíÞèùò ç äéåýèõíóÞ " "ôïõ åßíáé mail.yourdomain.com" #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Èýñá ôïõ server :" #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "" "ÅéóÜãåôå ôç èýñá ôïõ server ôçò åîåñ÷üìåíçò áëëçëïãñáößáò (ç óõíçèÝóôåñç " "ôéìÞ åßíáé 25)." #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "" "Áõôü ôï ðáñÜèõñï ñõèìßóåùí óáò åðéôñÝðåé íá ñõèìßóåôå êÜðïéåò ëåéôïõñãßåò " "êáé éäéüôçôåò ôïõ ðñïãñÜììáôïò." #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "Ñõèìßóåéò" #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "ÅðéëÝîôå ôçí êáôçãïñßá ðïõ èÝëåôå íá ñõèìßóåôå." #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "" "ÁëëÜîôå åäþ ôéò äéáèÝóéìåò éäéüôçôåò þóôå íá ñõèìßóåôå ôï ðñüãñáììá üðùò èá " "èÝëáôå." #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "" "Áõôü ôï ðáñÜèõñï ñõèìßóåùí óáò åðéôñÝðåé íá ñõèìßóåôå ôï ðñüãñáììá. ÊÜðïéåò " "éäéüôçôåò åäþ ìðïñïýí íá ìåôáâëçèïýí." #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "" "ÊÜíôå click óôï êïõìðß OK ãéá íá åöáñìüóåôå ôéò áëëáãÝò êáé íá êëåßóåôå ôï " "ðáñÜèõñï Ñõèìßóåùí." #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "" "ÊÜíôå click óôï êïõìðß ¶êõñï ãéá íá áêõñþóåôå ôéò áëëáãÝò êáé íá êëåßóåôå ôï " "ðáñÜèõñï Ñõèìßóåùí." #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "ÅöáñìïãÞ" #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "" "ÊÜíôå click óôï êïõìðß ÅöáñìïãÞ ãéá íá åöáñìüóåôå ôéò áëëáãÝò (÷ùñßò íá " "êëåßóåôå ôï ðáñÜèõñï Ñõèìßóåùí)." #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "Ïé ñõèìßóåéò Üëëáîáí" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "" "Áí äåí åöáñìüóåôå ôéò áëëáãÝò áõôÝò èá ÷áèïýí. ÈÝëåôå íá ôéò åöáñìüóåôå;" #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], óýíïëï äßóêùí : %d" #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr " Áíôéêåßìåíá óôç ëßóôá : %d (óõíïëéêü ìÝãåèïò : %s)" #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], ÷ùñçôéêüôçôá : %s, åëåýèåñá : %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr "" #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr " ÅðéëåãìÝíï áíôéêåßìåíï : %d (óõíïëéêü ìÝãåèïò : %s)" #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr " ÖÜêåëïò \"%s\", %s (áñ÷åßá %d, õðïöÜêåëïé %d)" #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr " %s, %s, %s" #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr "ÅðéëåãìÝíï áíôéêåßìåíï : %d" #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr "Åîåñåýíçóç êáôáëüãïõ" #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr "Ìç÷áíÞ áíáæÞôçóçò" #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr "Äéá÷åßñéóç êáôáëüãùí" #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Êëåßóéìï êáôáëüãïõ" #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "ÁðïóôïëÞ êáôáëüãïõ ìå mail" #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "Ðåñé ôïõ ðñïãñÜììáôïò" #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "Äéá÷åßñçóç êáôáëüãùí áðïóðþìåíùí ìÝóùí\n" "Áðü ôïí Sébastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" "Ôï GWhere óáò åðéôñÝðåé íá äéá÷åéñéóôåßôå ìéá âÜóç äåäïìÝíùí ôùí CD êáé " "Üëëùí áðïóðþìåíùí ìÝóùí óáò (óêëçñïß äßóêïé, äéóêÝôåò, Zip drive, CD-ROM, " "êëð...). Ìå ôï GWhere åßíáé åýêïëï íá ñßîåôå ìéá ìáôéÜ óôá CD óáò Þ íá " "áíáæçôÞóåôå ãñÞãïñá êÜôé óå áõôÜ ÷ùñßò ôçí áíÜãêç íá ôá åéóÜãåôå óôï drive " "êÜèå öïñÜ." #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Åêôåëåßôáé óå " #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "" "Áõôü ôï ðáñÜèõñï óáò åðéôñÝðåé íá óôåßëåôå Ýíáí êáôÜëïãï ìå mail óå Ýíáí (Þ " "ðåñéóóüôåñïõò) ðáñáëÞðôåò" #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "ÁðïóôïëÞ mail" #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "Ðñïò :" #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "CC :" #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "BCC :" #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "ÈÝìá :" #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "" "ÅéóÜãåôå åäþ ôçí çëåêôñïíéêÞ äéåýèõíóç ôïõ ðáñáëÞðôç (Þ ôùí ðáñáëçðôþí) óáò." #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "" "ÅéóÜãåôå åäþ ôçí çëåêôñïíéêÞ äéåýèõíóç ôùí áíôåãñáììÝíùí ðáñáëçðôþí ôïõ " "çëåêôñïíéêïý óáò ôá÷õäñïìåßïõ." #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "" "ÅéóÜãåôå åäþ ôçí çëåêôñïíéêÞ äéåýèõíóç ôùí êñõöþí áíôåãñáììÝíùí ðáñáëçðôþí " "ôïõ çëåêôñïíéêïý óáò ôá÷õäñïìåßïõ." #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "ÅéóÜãåôå åäþ ôï èÝìá ôïõ mail óáò." #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "Åðéóýíáøç áñ÷åßïõ :" #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "ÅðéëÝîôå áí èá åðéóõíÜøåôå Þ ü÷é ôï áñ÷åßï ôïõ êáôáëüãïõ." #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "ÅéóÜãåôå åäþ ôï êåßìåíï ôïõ ìçíýìáôüò óáò." #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "ÁðïóôïëÞ" #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "" "ÊÜíôå click åäþ ãéá íá óôåßëåôå êÜðïéï mail (ìå åðéóýíáøç êÜðïéïõ êáôáëüãïõ)." #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "ÊÜíôå click åäþ ãéá íá áêõñþóåôå ôçí áðïóôïëÞ ôïõ mail." #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "ÁðïóôÝëïíôáò ôï mail, ðáñáêáëþ ðåñéìÝíåôå..." #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "" "ÐáñïõóéÜóôçêå êÜðïéï óöÜëìá êáôÜ ôçí áðïóôïëÞ ôïõ mail. Ðáñáêáëþ åëÝãîôå ôéò " "ðáñáìÝôñïõò óáò." #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Áäýíáôç ç åýñåóç ôïõ áñ÷åßïõ ôïõ åéêïíéäßïõ: %s" #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "ÓöÜëìá êáôÜ ôçí áíÜãíùóç ôïõ áñ÷åßïõ ôïõ åéêïíéäßïõ: %s" #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "ÓöÜëìá : áäýíáôç ç áðüêôçóç ôïõ ôñÝ÷ïíôïò öáêÝëïõ." #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "ÓöÜëìá : áäýíáôç ç ìåôÜâáóç óôïí ôñÝ÷ïíôá öÜêåëï." #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "Ï äßóêïò äåí ðñïóôÝèçêå\n" "Ç ðñïóèÞêç áêõñþèçêá áðü ôï ÷ñÞóôç" #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "Ï äßóêïò äåí ðñïóôÝèçêå\n" #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "%s outside the process's allocated address space." #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" "¸íá ìÝñïò ôçò áêüëïõèçò äéáäñïìÞò îåðÝñáóå ôïõò %d ÷áñáêôÞñåò, Þ ìéá " "ïëüêëçñç äéáäñïìÞ îåðÝñáóå ôïõò %d ÷áñáêôÞñåò : %s." #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "Ï áêüëïõèïò öÜêåëïò äåí õðÜñ÷åé : %s." #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "Ìç åðáñêÞò ìíÞìç ãéá ôçí ïëïêëÞñùóç ôçò ëåéôïõñãßáò." #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "¸íá ìÝñïò ôïõ ðñïèÝìáôïò ôçò äéáäñïìÞò äåí åßíáé öÜêåëïò : %s." #: src/gwcatalogmanager.c:484 #, fuzzy, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "" "Õðåñâïëéêüò áñéèìüò áðü symbolic links ðáñïõóéÜóôçêå êáôÜ ôçí åðåîåñãáóßá " "ôçò áêüëïõèçò äéáäñïìÞò : %s ." #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "ÐáñïõóéÜóôçêå óöÜëìá Åéóüäïõ/Åîüäïõ êáôÜ ôçí ìåôÜâáóç óôï öÜêåëï : %s." #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "¶ãíùóôï óöÜëìá" #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" "Ï äßóêïò äåí ðñïóôÝèçêå\n" "ÓöÜëìá : áäýíáôç ç ìåôÜâáóç óôïí ìçôñéêü öÜêåëï." #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Too many file descriptors in use by process." #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Õðåñâïëéêüò áñéèìüò áíïéêôþí áñ÷åßùí óôï óýóôçìá." #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "Ï áêüëïõèïò öÜêåëïò äåí õðÜñ÷åé Þ ôï üíïìÜ ôïõ åßíáé êåíü : %s." #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "Ôï áêüëïõèï üíïìá öáêÝëïõ äåí åßíáé öÜêåëïò : %s." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" "Ï äßóêïò äåí ðñïóôÝèçêå\n" "ÓöÜëìá : áäýíáôï ôï êëåßóéìï ôïõ ôñÝ÷ïíôïò öáêÝëïõ." #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "Åêôåëåßôáé óå %s" #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Ï êáôÜëïãïò öïñôþèçêå" #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "Ç öüñôùóç ôïõ êáôáëüãïõ áðÝôõ÷å" #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "ÁíÜãíùóç êáôáëüãïõ" #: src/gwapplicationmanager.c:499 #, fuzzy msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "" "Ôï áñ÷åßï êáôáëüãïõ äåí õðÜñ÷åé. Ðáñáêáëþ åëÝãîôå ôç äéáäñïìÞ ôïõ áñ÷åßïõ " "óáò." #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "ÁðïèÞêåõóç êáôáëüãïõ" #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Ï êáôÜëïãïò áðïèçêåýèçêå" #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "Ç áðïèÞêåõóç ôïõ êáôáëüãïõ áðÝôõ÷å" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Äéêáéþìáôá" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "ÉäéïêôÞôçò" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "ÏìÜäá" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "ÌÝãåèïò" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "INode" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Çìåñïìçíßá ðñüóâáóçò" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Çìåñïìçíßá ôñïðïðïßçóçò" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "Çìåñïìçíßá äçìéïõñãßáò" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "¼íïìá óõóôÞìáôïò áñ÷åßùí" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "ÄéáäñïìÞ ðñüóâáóçò" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Áñéèìüò êáôá÷þñçóçò" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Ôýðïò" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Ïíïìáóßá ôüìïõ" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "ÓõíïëéêÞ ÷ùñçôéêüôçôá" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "Åëåýèåñïò ÷þñïò" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Çìåñïìçíßá" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Óåéñéáêüò áñéèìüò" #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "ÄéáäñïìÞ" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "ÐëÞñçò" #: win32/config.h:288 msgid "Compact" msgstr "Óõíåêôéêüò" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (áðáéôåßôáé)" #: win32/config.h:290 msgid "Main engine application." msgstr "Êõñßùò åöáñìïãÞ." #: win32/config.h:291 #, fuzzy msgid "GTK+ 2.6 RunTime (required)" msgstr "ÐåñéâÜëëïí åêôÝëåóçò GTK+ 2.0 (áðáéôåßôáé)" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "ÂéâëéïèÞêåò åêôÝëåóçò ôïõ ãñáöéêïý ðåñéâÜëëïíôïò." #: win32/config.h:293 msgid "Plugins" msgstr "Plugins" #: win32/config.h:294 #, fuzzy msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "Plugins ãéá áõôüìáôç åîáãùãÞ ðåñéãñáöþí áñ÷åßùí." #: win32/config.h:295 msgid "Languages Files" msgstr "Ðïëýãëùóóç õðïóôÞñéîç" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "Áñ÷åßá ìåôáãëþôéóçò ôïõ ðñïãñÜììáôïò." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "" #: win32/config.h:298 msgid "Installer already running" msgstr "" #: win32/config.h:299 #, fuzzy msgid "Install options" msgstr "ÃåíéêÝò åðéëïãÝò" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" #: win32/config.h:303 msgid "All users|Current user" msgstr "" #: win32/config.h:304 msgid "All users" msgstr "" #~ msgid "" #~ "The catalog file doesn't exists. Check your catalog file path please." #~ msgstr "" #~ "Ôï áñ÷åßï êáôáëüãïõ äåí õðÜñ÷åé. Ðáñáêáëþ åëÝãîôå ôç äéáäñïìÞ ôïõ áñ÷åßïõ " #~ "óáò." #~ msgid "" #~ "The catalog file to load doesn't have a good file extension. Only .ctg " #~ "files are allowed to be loaded." #~ msgstr "" #~ "Ç êáôÜëçîç ôïõ ðñïò Üíïéãìá áñ÷åßïõ êáôáëüãïõ äåí åßíáé êáôÜëëçëç. Ìüíï " #~ "áñ÷åßá .ctg åðéôñÝðåôáé íá áíïé÷èïýí." #~ msgid "Load file" #~ msgstr "¶íÜãíùóç áñ÷åßïõ" #~ msgid "Error : cannot open this file." #~ msgstr "ÓöÜëìá : áäýíáôï ôï Üíïéãìá áõôïý ôïõ áñ÷åßïõ." #~ msgid "Error : cannot read the file version." #~ msgstr "ÓöÜëìá : áäýíáôç ç áíÜãíùóç ôçò Ýêäïóçò ôïõ áñ÷åßïõ." #~ msgid "Load catalog" #~ msgstr "ÁíÜãíùóç êáôáëüãïõ" #~ msgid "Error : cannot close file." #~ msgstr "ÓöÜëìá : áäýíáôï ôï êëåßóéìï ôïõ áñ÷åßïõ." #~ msgid "Error : it's not a GWhere file." #~ msgstr "ÓöÜëìá : äåí åßíáé áñ÷åßï GWhere." #~ msgid "Error : this GWhere version file is unknown." #~ msgstr "ÓöÜëìá : áõôÞ ç Ýêäïóç ôïõ áñ÷åßïõ GWhere åßíáé Üãíùóôç." #~ msgid "Error : cannot close this file after loading." #~ msgstr "" #~ "ÓöÜëìá : áäýíáôï ôï êëåßóéìï áõôïý ôïõ áñ÷åßïõ ìåôÜ ôçí áíÜãíùóÞ ôïõ." #~ msgid "Error : during the loading of disk." #~ msgstr "ÓöÜëìá : êáôÜ ôçí áíÜãíùóç ôïõ äßóêïõ." #~ msgid "Error : cannot create file." #~ msgstr "ÓöÜëìá : áäýíáôç ç äçìéïõñãßá ôïõ áñ÷åßïõ." #~ msgid "Error : cannot write file version." #~ msgstr "ÓöÜëìá : áäýíáôç ç åããñáöÞ ôçò Ýêäïóçò ôïõ áñ÷åßïõ." #~ msgid "Error : cannot close catalog file." #~ msgstr "ÓöÜëìá : áäýíáôï ôï êëåßóéìï ôïõ áñ÷åßïõ ôïõ êáôáëüãïõ." #~ msgid "Elapsed time to save the catalog : %d secs" #~ msgstr "×ñüíïò áðïèÞêåõóçò ôïõ êáôáëüãïõ : %lu secs" #~ msgid "" #~ "Give the device file of the selected disk. The device file is the one of " #~ "the /etc/fstab file." #~ msgstr "" #~ "Äþóôå ôï áñ÷åßï óõóêåõÞò ôïõ åðéëåãìÝíïõ äßóêïõ. Ôï áñ÷åßï óõóêåõÞò åßíáé " #~ "Ýíá áðü áõôÜ ôïõ áñ÷åßïõ /etc/fstab." #~ msgid "Scan disk" #~ msgstr "Áíß÷íåõóç äßóêïõ" gwhere-0.2.3/po/cat-id-tbl.c0000644000175000017500000000000010023202521014112 0ustar bartbartgwhere-0.2.3/po/ChangeLog0000644000175000017500000000000110023202521013601 0ustar bartbart gwhere-0.2.3/po/es.po0000644000175000017500000034412110472436221013032 0ustar bartbart# translation of es.po to # translation of es-0.1.2.po to # translation of es-0.1.2.po to # translation of es-0.1.2.po to # translation of es.po to es_ES # translation of es.po to es # translation of GWhere.po to es # Copyright (C) 2002,2003, 2004, 2005 Free Software Foundation, Inc. # Victor G. Marimon , 2003, 2005. msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2005-05-15 12:35+0200\n" "Last-Translator: Victor G. Marimon \n" "Language-Team: es_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.9.1\n" # src/tools/gwmail.c:74 # src/tools/gwmail.c:74 #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "No se puede recibir datos" # src/tools/gwmail.c:80 # src/tools/gwmail.c:80 #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "Conexión cerrada por el cliente\n" # src/tools/gwmail.c:109 # src/tools/gwmail.c:109 #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "No se puede mandar datos" # src/tools/gwstring.c:148 # src/tools/gwstring.c:148 #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%.0f bytes" # src/tools/gwstring.c:152 # src/tools/gwstring.c:152 #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f Kb" # src/tools/gwstring.c:156 # src/tools/gwstring.c:156 #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f Mb" # src/tools/gwstring.c:160 # src/tools/gwstring.c:160 #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f Gb" # src/tools/gwstring.c:165 # src/tools/gwstring.c:165 #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f Tb" # src/tools/gwstring.c:170 # src/tools/gwstring.c:170 #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f Pb" # src/tools/gwstring.c:175 # src/tools/gwstring.c:175 #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f Hb" # src/tools/gwstring.c:181 src/tools/gwstring.c:187 # src/tools/gwstring.c:181 src/tools/gwstring.c:187 #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f Ib" # src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:79 src/gui/gwmsgbox.c:76 # src/gui/gwpropertiesbox.c:188 src/gui/gwsettingswindowbox.c:162 # src/gui/gwtextbox.c:110 # src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:79 src/gui/gwmsgbox.c:76 # src/gui/gwpropertiesbox.c:188 src/gui/gwsettingswindowbox.c:163 # src/gui/gwtextbox.c:110 #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "_OK" # src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:114 # src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 # src/gui/gwpropertiesbox.c:220 src/gui/gwsettingswindowbox.c:176 # src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:217 # src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:114 # src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 # src/gui/gwpropertiesbox.c:220 src/gui/gwsettingswindowbox.c:178 # src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:217 #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "_Cancelar" # src/gui/gwcategorieseditbox.c:89 src/gui/gwmenuactioncallback.c:53 # src/gui/gwmenupopup.c:137 # src/gui/gwcategorieseditbox.c:89 src/gui/gwmenuactioncallback.c:151 # src/gui/gwmenupopup.c:137 #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Editar categorías" # src/gui/gwcategorieseditbox.c:105 # src/gui/gwcategorieseditbox.c:105 #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "Lista de categorías:" # src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:271 # src/gwapplicationmanager.h:189 src/gwapplicationmanager.h:321 # src/gui/gwcategorieseditbox.c:132 src/gwapplicationmanager.h:238 # src/gwapplicationmanager.h:372 src/gwapplicationmanager.h:536 #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "Nombre" # src/gui/gwcategorieseditbox.c:138 src/gui/gwnotebooksearch.c:215 # src/gui/gwnotebooksearch.c:301 src/gwapplicationmanager.h:309 # src/gwapplicationmanager.h:453 # src/gui/gwcategorieseditbox.c:138 src/gui/gwnotebooksearch.c:295 # src/gwapplicationmanager.h:358 src/gwapplicationmanager.h:504 # src/gwapplicationmanager.h:608 #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "Descripción" # src/gui/gwcategorieseditbox.c:149 # src/gui/gwcategorieseditbox.c:149 #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "Act_ualizar" # src/gui/gwcategorieseditbox.c:157 # src/gui/gwcategorieseditbox.c:157 #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" "Permite actualizar las propiedades de categoría de la categoría " "seleccionada. Haz click en el botón Añadir / Actualizar para guardar los " "cambios." # src/gui/gwcategorieseditbox.c:164 # src/gui/gwcategorieseditbox.c:164 #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "Quita_r" # src/gui/gwcategorieseditbox.c:172 # src/gui/gwcategorieseditbox.c:172 #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" "Quita la categoría seleccionada de la lista de categorías. Estas categorías " "se pueden quitar sólo si no hay ningún objeto que use esta categoría." # src/gui/gwcategorieseditbox.c:186 # src/gui/gwcategorieseditbox.c:186 #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "Nombre de categoría:" # src/gui/gwcategorieseditbox.c:197 # src/gui/gwcategorieseditbox.c:197 #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "Introduce el nombre de la categoría." # src/gui/gwcategorieseditbox.c:202 # src/gui/gwcategorieseditbox.c:202 #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "Descripción:" # src/gui/gwcategorieseditbox.c:224 # src/gui/gwcategorieseditbox.c:224 #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "Introduce la descripción de la categoría." # src/gui/gwcategorieseditbox.c:243 # src/gui/gwcategorieseditbox.c:243 #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "Añadir / Actualizar" # src/gui/gwcategorieseditbox.c:250 # src/gui/gwcategorieseditbox.c:250 #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "Guardar los cambios de las propiedades de la categoría." # src/gui/gwcategorieseditbox.c:260 src/gui/gwmenupopup.c:67 # src/gui/gwmenupopup.c:170 # src/gui/gwcategorieseditbox.c:260 src/gui/gwmenupopup.c:67 # src/gui/gwmenupopup.c:170 #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Cerrar" # src/gui/gwcategorieseditbox.c:267 # src/gui/gwcategorieseditbox.c:267 #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Cierra la ventana de propiedades de las categorías." # src/data/gwcatalogfileinfo.c:69 src/gui/gwnotebookmanagmentcallback.c:271 # src/data/gwcatalogfileinfo.c:69 src/gui/gwnotebookmanagmentcallback.c:274 #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "ninguno" # src/gui/gwcategorieseditbox.c:392 # src/gui/gwcategorieseditbox.c:392 #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "Quitar categoría" # src/gui/gwcategorieseditbox.c:392 # src/gui/gwcategorieseditbox.c:392 #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "No se puede quitar esta categoría. Está siendo usada por algún objeto." # src/gui/gwcategorieseditbox.c:560 src/gui/gwcategorieseditbox.c:938 # src/gui/gwcategorieseditbox.c:560 src/gui/gwcategorieseditbox.c:938 #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "Añadir" # src/gui/gwcategorieseditbox.c:587 src/gui/gwcategorieseditbox.c:972 # src/gui/gwcategorieseditbox.c:587 src/gui/gwcategorieseditbox.c:972 #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "Actualizar" # src/gui/gwdialogbox.c:97 # src/gui/gwdialogbox.c:97 #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "_No" # src/gui/gwfileselectionbox.c:73 # src/gui/gwfileselectionbox.c:73 #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "Oculta operaciones de ficheros" # src/gui/gwfileselectionbox.c:79 # src/gui/gwfileselectionbox.c:79 #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "Muestra operaciones de ficheros" # src/gui/gwmenuaction.c:52 # src/gui/gwmenuaction.c:64 #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "_Acción" # src/gui/gwmenuaction.c:85 #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "_Expandir todo" # src/gui/gwmenuaction.c:99 #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "Expandir solo _discos" # src/gui/gwmenuaction.c:113 #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "C_ontraer todo" # src/gui/gwmenuaction.c:73 # src/gui/gwmenuaction.c:134 #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "Editar _categorías" # src/gui/gwmenuactioncallback.c:53 # src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "No hay ningún catalogo abierto : no se puede editar categorías" # src/gui/gwmenufile.c:78 # src/gui/gwmenufile.c:78 #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "_Fichero" # src/gui/gwmenufile.c:99 # src/gui/gwmenufile.c:99 #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "_Nuevo" # src/gui/gwmenufile.c:113 # src/gui/gwmenufile.c:113 #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "Abrir" # src/gui/gwmenufile.c:127 # src/gui/gwmenufile.c:127 #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "Guardar" # src/gui/gwmenufile.c:141 # src/gui/gwmenufile.c:141 #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "Guardar como" # src/gui/gwmenufile.c:155 # src/gui/gwmenufile.c:155 #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "Cerrar" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "Importar" # src/gui/gwsettingsexplorer.c:46 # src/gui/gwsettingsexplorer.c:56 #: src/gui/gwmenufile.c:199 msgid "Export" msgstr "Exportar" # src/gui/gwmenufile.c:176 # src/gui/gwmenufile.c:176 #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "_Propiedades" # src/gui/gwmenufile.c:197 # src/gui/gwmenufile.c:197 #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "Ficheros _recientes" # src/gui/gwmenufile.c:220 # src/gui/gwmenufile.c:220 #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "Salir" # src/gui/gwmenufilecallback.c:76 src/gui/gwmenufilecallback.c:683 # src/gui/gwmenufilecallback.c:708 src/gui/gwmenufilecallback.c:757 # src/gui/gwnotebookmanagmentcallback.c:258 src/gui/gwtoolbar.c:77 # src/gui/gwmenufilecallback.c:76 src/gui/gwmenufilecallback.c:683 # src/gui/gwmenufilecallback.c:708 src/gui/gwmenufilecallback.c:757 # src/gui/gwnotebookmanagmentcallback.c:261 src/gui/gwtoolbar.c:77 #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Catalogo nuevo" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "No hay ningún plugin de catálogo" # src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:104 # src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:182 # src/gui/gwmenufilecallback.c:466 src/gui/gwmenufilecallback.c:1402 # src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:104 # src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:182 # src/gui/gwmenufilecallback.c:466 src/gui/gwmenufilecallback.c:1402 #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "¿Quiere guardar el catalogo?:\n" "\n" # src/gui/gwmenufilecallback.c:70 # src/gui/gwmenufilecallback.c:70 #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Fichero nuevo" # src/gui/gwmenufilecallback.c:76 src/gui/gwmenufilecallback.c:683 # src/gui/gwmenufilecallback.c:708 src/gui/gwmenufilecallback.c:757 # src/gui/gwnotebookmanagmentcallback.c:258 # src/gui/gwmenufilecallback.c:76 src/gui/gwmenufilecallback.c:683 # src/gui/gwmenufilecallback.c:708 src/gui/gwmenufilecallback.c:757 # src/gui/gwnotebookmanagmentcallback.c:261 #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "Introduce el nombre del catálogo" # src/gui/gwmenufilecallback.c:111 src/gui/gwmenufilecallback.c:799 # src/gui/gwmenufilecallback.c:821 src/gui/gwmenufilecallback.c:944 # src/gui/gwtoolbar.c:81 # src/gui/gwmenufilecallback.c:111 src/gui/gwmenufilecallback.c:799 # src/gui/gwmenufilecallback.c:821 src/gui/gwmenufilecallback.c:944 # src/gui/gwtoolbar.c:81 #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "Abrir catalogo" # src/gui/gwmenufilecallback.c:105 src/gui/gwmenufilecallback.c:1403 # src/gui/gwmenufilecallback.c:105 src/gui/gwmenufilecallback.c:1403 #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "Abrir fichero" # src/gui/gwmenufilecallback.c:140 # src/gui/gwmenufilecallback.c:140 #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Cerrar fichero" # src/gui/gwmenufilecallback.c:378 # src/gui/gwmenufilecallback.c:378 #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "No hay ningún catalogo abierto" # src/gui/gwmenufilecallback.c:183 src/gui/gwmenufilecallback.c:197 # src/gui/gwmenufilecallback.c:183 src/gui/gwmenufilecallback.c:197 #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "Enviar fichero por correo" # src/gui/gwmenufilecallback.c:197 # src/gui/gwmenufilecallback.c:197 #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "" "Por favor, configura las opciones de correo en los ajustes a fin de enviar " "correos." # src/gui/gwmenufilecallback.c:237 src/gui/gwmenufilecallback.c:404 # src/gui/gwmenufilecallback.c:435 src/gui/gwmenufilecallback.c:677 # src/gui/gwmenufilecallback.c:792 src/gui/gwmenufilecallback.c:859 # src/gui/gwmenufilecallback.c:1045 src/gui/gwmenufilecallback.c:1107 # src/gui/gwmenufilecallback.c:1155 src/gui/gwmenufilecallback.c:1275 # src/gui/gwmenufilecallback.c:237 src/gui/gwmenufilecallback.c:404 # src/gui/gwmenufilecallback.c:435 src/gui/gwmenufilecallback.c:677 # src/gui/gwmenufilecallback.c:792 src/gui/gwmenufilecallback.c:859 # src/gui/gwmenufilecallback.c:1045 src/gui/gwmenufilecallback.c:1107 # src/gui/gwmenufilecallback.c:1155 src/gui/gwmenufilecallback.c:1275 #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "Guardar como catalogo" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "El catálogo actual no fue guardado, no puede enviarse" # src/gui/gwmenufilecallback.c:378 # src/gui/gwmenufilecallback.c:378 #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "Propiedades de catalogo" # src/gui/gwtoolbar.c:85 src/gwcatalogmanager.c:1584 # src/gwcatalogmanager.c:1593 src/gwcatalogmanager.c:1731 # src/gwcatalogmanager.c:1743 src/gwcatalogmanager.c:1747 # src/gwcatalogmanager.c:1785 src/gwcatalogmanager.c:1837 # src/gwcatalogmanager.c:1865 src/gwcatalogmanager.c:1908 # src/gwcatalogmanager.c:1935 # src/gui/gwtoolbar.c:85 src/gwcatalogmanager.c:1587 # src/gwcatalogmanager.c:1596 src/gwcatalogmanager.c:1734 # src/gwcatalogmanager.c:1747 src/gwcatalogmanager.c:1751 # src/gwcatalogmanager.c:1789 src/gwcatalogmanager.c:1841 # src/gwcatalogmanager.c:1869 src/gwcatalogmanager.c:1912 # src/gwcatalogmanager.c:1939 #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "Guardar catálogo" # src/gui/gwmenufilecallback.c:465 # src/gui/gwmenufilecallback.c:465 #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "Salir" #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "Importar catálogo desde" # src/gui/gwmenufilecallback.c:378 # src/gui/gwmenufilecallback.c:378 #: src/gui/gwmenufilecallback.c:1231 msgid "Catalog imported" msgstr "Catálogo importado" # src/gui/gwmenufilecallback.c:378 # src/gui/gwmenufilecallback.c:378 #: src/gui/gwmenufilecallback.c:1233 msgid "Catalog is not imported" msgstr "Cátalogo no importado" # src/gui/gwmenufilecallback.c:378 # src/gui/gwmenufilecallback.c:378 #: src/gui/gwmenufilecallback.c:1267 msgid "A catalog is already opened" msgstr "Ya hay un catálogo abierto" # src/gui/gwmenufilecallback.c:76 src/gui/gwmenufilecallback.c:683 # src/gui/gwmenufilecallback.c:708 src/gui/gwmenufilecallback.c:757 # src/gui/gwnotebookmanagmentcallback.c:258 # src/gui/gwmenufilecallback.c:76 src/gui/gwmenufilecallback.c:683 # src/gui/gwmenufilecallback.c:708 src/gui/gwmenufilecallback.c:757 # src/gui/gwnotebookmanagmentcallback.c:261 #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 msgid "Export catalog to" msgstr "Exportar catálogo a" # src/gui/gwstatusbarcallback.c:223 # src/gui/gwstatusbarcallback.c:223 #: src/gui/gwmenufilecallback.c:1291 msgid "Catalog exported" msgstr "Catálogo exportado" # src/gui/gwstatusbarcallback.c:223 # src/gui/gwstatusbarcallback.c:223 #: src/gui/gwmenufilecallback.c:1293 msgid "Catalog is not exported" msgstr "El catálogo no fue exportado" # src/gui/gwmenuhelp.c:53 # src/gui/gwmenuhelp.c:53 #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "Ayuda" # src/gui/gwmenuhelp.c:75 # src/gui/gwmenuhelp.c:75 #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "Acerca de" # src/gui/gwmenuoptions.c:54 # src/gui/gwmenuoptions.c:54 #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "_Opciones" # src/gui/gwmenuoptions.c:75 # src/gui/gwmenuoptions.c:75 #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "Ajus_tes" # src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 # src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Nuevo" # src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 # src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "Abrir" # src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 # src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "Guardar" # src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 # src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "Guardar como" # src/gui/gwmenupopup.c:76 # src/gui/gwmenupopup.c:76 #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "Salir" # src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 # src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Renombrar" # src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 # src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:367 # src/gui/gwmenupopupcallback.c:183 src/gui/gwmenupopupcallback.c:554 # src/gui/gwmenupopupcallback.c:699 src/gui/gwmenupopupcallback.c:894 # src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 # src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:367 # src/gui/gwmenupopupcallback.c:183 src/gui/gwmenupopupcallback.c:554 # src/gui/gwmenupopupcallback.c:699 src/gui/gwmenupopupcallback.c:894 #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Editar descripción" # src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 # src/gui/gwmenupopup.c:319 src/gui/gwmenupopup.c:382 # src/gui/gwpropertiesbox.c:105 # src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 # src/gui/gwmenupopup.c:319 src/gui/gwmenupopup.c:382 # src/gui/gwpropertiesbox.c:105 #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "Propiedades" # src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 # src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "Mover a..." # src/gui/gwmenupopup.c:234 # src/gui/gwmenupopup.c:234 #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "Borrar disco" # src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:480 # src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:480 #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "Cambiar la etiqueta del volumen" # src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:373 # src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:373 #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "Quitar del catalogo" # src/gui/gwmenupopup.c:390 # src/gui/gwmenupopup.c:390 #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "Editar fichero" # src/gui/gwmenupopup.c:390 # src/gui/gwmenupopup.c:390 #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "No se puede editar este fichero!!\n" # src/gui/gwmenupopupcallback.c:59 # src/gui/gwmenupopupcallback.c:59 #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Renombrar catalogo" # src/gui/gwmenupopupcallback.c:59 # src/gui/gwmenupopupcallback.c:59 #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "Introduce el nuevo nombre del catalogo" # src/gui/gwnotebookmanagmentcallback.c:281 # src/gui/gwnotebookmanagmentcallback.c:284 #: src/gui/gwmenupopupcallback.c:121 msgid "Invalid filled catalog name" msgstr "Nombre del catálogo inválido" # src/gui/gwmenupopupcallback.c:183 # src/gui/gwmenupopupcallback.c:183 #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "Descripción del catálogo" # src/gui/gwmenupopupcallback.c:355 # src/gui/gwmenupopupcallback.c:355 #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Renombrar disco" # src/gui/gwmenupopupcallback.c:355 # src/gui/gwmenupopupcallback.c:355 #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "Introduce el nuevo nombre del disco" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "El nombre del disco ingresado ya existe en el catálogo actual" #: src/gui/gwmenupopupcallback.c:374 msgid "No new disk name was filled" msgstr "No se ingresó ningún nombre de disco nuevo" # src/gui/gwmenupopupcallback.c:480 # src/gui/gwmenupopupcallback.c:480 #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "Introduce la nueva etiqueta del volumen" # src/gui/gwmenupopupcallback.c:554 # src/gui/gwmenupopupcallback.c:554 #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "Descripción de disco" # src/gui/gwmenupopupcallback.c:355 # src/gui/gwmenupopupcallback.c:355 #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "Renombrar carpeta" # src/gui/gwmenupopupcallback.c:355 # src/gui/gwmenupopupcallback.c:355 #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "Introduce el nuevo nombre de la carpeta" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "El nombre de la carpeta ingresado ya existe en la carpeta actual" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "No se ingresó ningún nombre de carpeta nuevo" # src/gui/gwmenupopupcallback.c:699 # src/gui/gwmenupopupcallback.c:699 #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "Descripción de carpeta" # src/gui/gwmenupopupcallback.c:355 # src/gui/gwmenupopupcallback.c:355 #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "Renombrar fichero" # src/gui/gwmenupopupcallback.c:355 # src/gui/gwmenupopupcallback.c:355 #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "Introduce el nuevo nombre del fichero" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "El nombre del fichero ingresado ya existe en la carpeta actual" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "No se ingresó ningún nombre de fichero" # src/gui/gwmenupopupcallback.c:894 # src/gui/gwmenupopupcallback.c:894 #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "Descripción de fichero" # src/gui/gwnotebookcatalog.c:87 # src/gui/gwnotebookcatalog.c:91 #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Archivo" # src/gui/gwnotebookcatalog.c:189 # src/gui/gwnotebookcatalog.c:196 #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "Catálogo" # src/gui/gwnotebookcatalog.c:718 # src/gui/gwnotebookcatalog.c:900 #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "Cerrando catálogo" # src/gui/gwnotebookcatalog.c:718 src/gui/gwnotebooksearchcallback.c:96 # src/gwapplicationmanager.c:487 src/gwapplicationmanager.c:611 # src/gui/gwnotebookcatalog.c:900 src/gui/gwnotebooksearchcallback.c:312 # src/gwapplicationmanager.c:487 src/gwapplicationmanager.c:621 #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "Por favor, espera..." # src/gui/gwnotebookcatalog.c:736 # src/gui/gwnotebookcatalog.c:918 #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Catálogo cerrado" # src/gui/gwnotebookcatalogcallback.c:1174 # src/gui/gwnotebookcatalogcallback.c:1247 # src/gui/gwnotebookcatalogcallback.c:1345 # src/gui/gwnotebookcatalogcallback.c:1409 src/gui/gwpropertiesbox.c:1242 # src/gui/gwpropertiesbox.c:1583 # src/gui/gwnotebookcatalogcallback.c:1332 # src/gui/gwnotebookcatalogcallback.c:1405 # src/gui/gwnotebookcatalogcallback.c:1503 # src/gui/gwnotebookcatalogcallback.c:1567 src/gui/gwpropertiesbox.c:1242 # src/gui/gwpropertiesbox.c:1587 #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "propietario desconocido" # src/gui/gwnotebookcatalogcallback.c:1182 # src/gui/gwnotebookcatalogcallback.c:1255 # src/gui/gwnotebookcatalogcallback.c:1353 # src/gui/gwnotebookcatalogcallback.c:1417 src/gui/gwpropertiesbox.c:1265 # src/gui/gwpropertiesbox.c:1606 # src/gui/gwnotebookcatalogcallback.c:1340 # src/gui/gwnotebookcatalogcallback.c:1413 # src/gui/gwnotebookcatalogcallback.c:1511 # src/gui/gwnotebookcatalogcallback.c:1575 src/gui/gwpropertiesbox.c:1265 # src/gui/gwpropertiesbox.c:1610 #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "grupo desconocido" # src/gui/gwnotebookmanagment.c:151 src/gui/gwnotebookmanagmentcallback.c:281 # src/gui/gwnotebookmanagment.c:157 src/gui/gwnotebookmanagmentcallback.c:284 #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Nuevo disco" # src/gui/gwnotebookmanagment.c:165 # src/gui/gwnotebookmanagment.c:171 #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "Selecciona el medio que sera añadido como disco a tu catálogo." # src/gui/gwnotebookmanagment.c:170 # src/gui/gwnotebookmanagment.c:176 #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "Selecciona medio :" # src/gui/gwnotebookmanagment.c:204 # src/gui/gwnotebookmanagment.c:210 #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "" "Introduce el número del nuevo disco. Este número puede ayudarte con el " "historial de tu catálogo." # src/gui/gwnotebookmanagment.c:209 src/gui/gwpropertiesbox.c:762 # src/gui/gwnotebookmanagment.c:215 src/gui/gwpropertiesbox.c:762 #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Archivo N# :" # src/gui/gwnotebookmanagment.c:224 # src/gui/gwnotebookmanagment.c:230 #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "" "Introduce el nombre del nuevo disco. Este nombre aparecerá en tu catálogo." # src/gui/gwnotebookmanagment.c:229 # src/gui/gwnotebookmanagment.c:235 #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "Nombre :" # src/gui/gwnotebookmanagment.c:247 src/gui/gwpropertiesbox.c:994 # src/gui/gwpropertiesbox.c:1335 src/gui/gwpropertiesbox.c:1693 # src/gui/gwnotebookmanagment.c:253 src/gui/gwpropertiesbox.c:994 # src/gui/gwpropertiesbox.c:1335 src/gui/gwpropertiesbox.c:1697 #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "Categoría :" # src/gui/gwnotebookmanagment.c:253 # src/gui/gwnotebookmanagment.c:259 #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "" "Selecciona la categoría a aplicar al disco el cual sera añadido (si la " "opción está marcada)." # src/gui/gwnotebookmanagment.c:364 # src/gui/gwnotebookmanagment.c:370 #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "Da el fichero de dispositivo del medio seleccionado." # src/gui/gwnotebookmanagment.c:270 src/gui/gwnotebookmanagmentcallback.c:437 # src/gui/gwnotebookmanagmentcallback.c:500 # src/gui/gwnotebookmanagment.c:276 src/gui/gwnotebookmanagmentcallback.c:442 # src/gui/gwnotebookmanagmentcallback.c:505 #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Info :" # src/gui/gwnotebookmanagment.c:282 # src/gui/gwnotebookmanagment.c:288 #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "Da el tipo del medio seleccionado (ej: ext2,ext3,vfat,ntfs,...)." # src/gui/gwnotebookmanagment.c:287 src/gui/gwnotebookmanagmentcallback.c:442 # src/gui/gwnotebookmanagmentcallback.c:522 src/gui/gwpropertiesbox.c:803 # src/gui/gwnotebookmanagment.c:293 src/gui/gwnotebookmanagmentcallback.c:447 # src/gui/gwnotebookmanagmentcallback.c:527 src/gui/gwpropertiesbox.c:803 #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Tipo :" # src/gui/gwnotebookmanagment.c:299 # src/gui/gwnotebookmanagment.c:305 #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "Muestra si el medio seleccionado está montado o no." # src/gui/gwnotebookmanagment.c:304 src/gui/gwnotebookmanagmentcallback.c:448 # src/gui/gwnotebookmanagmentcallback.c:532 # src/gui/gwnotebookmanagment.c:310 src/gui/gwnotebookmanagmentcallback.c:453 # src/gui/gwnotebookmanagmentcallback.c:537 #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "Montado :" # src/gui/gwnotebookmanagment.c:316 # src/gui/gwnotebookmanagment.c:322 #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "" "Da el nombre del volumen del medio seleccionado (sólo si está montado)." # src/gui/gwnotebookmanagment.c:321 src/gui/gwnotebookmanagmentcallback.c:454 # src/gui/gwnotebookmanagment.c:327 src/gui/gwnotebookmanagmentcallback.c:459 #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Volumen :" # src/gui/gwnotebookmanagment.c:332 # src/gui/gwnotebookmanagment.c:338 #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "" "Da el número de serie del medio seleccionado (sólo si está montado). Este " "número es de fábrica." # src/gui/gwnotebookmanagment.c:337 # src/gui/gwnotebookmanagment.c:343 #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Nº serie N# :" # src/gui/gwnotebookmanagment.c:348 # src/gui/gwnotebookmanagment.c:354 #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "Da el espacio total del medio seleccionado (sólo si está montado)." # src/gui/gwnotebookmanagment.c:353 src/gui/gwnotebookmanagmentcallback.c:464 # src/gui/gwnotebookmanagmentcallback.c:568 # src/gui/gwnotebookmanagment.c:359 src/gui/gwnotebookmanagmentcallback.c:469 # src/gui/gwnotebookmanagmentcallback.c:573 #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "Capacidad :" # src/gui/gwnotebookmanagment.c:364 # src/gui/gwnotebookmanagment.c:370 #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "Da el espacio libre del medio seleccionado (sólo si está montado)." # src/gui/gwnotebookmanagment.c:369 src/gui/gwnotebookmanagmentcallback.c:469 # src/gui/gwnotebookmanagmentcallback.c:580 # src/gui/gwnotebookmanagment.c:375 src/gui/gwnotebookmanagmentcallback.c:474 # src/gui/gwnotebookmanagmentcallback.c:585 #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Espacio libre :" # src/gui/gwnotebookmanagment.c:377 # src/gui/gwnotebookmanagment.c:383 #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "Opciones" # src/gui/gwnotebookmanagment.c:388 # src/gui/gwnotebookmanagment.c:394 #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "Muestra info" # src/gui/gwnotebookmanagment.c:396 # src/gui/gwnotebookmanagment.c:402 #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" "Muestra la información del medio seleccionado como punto de montaje, " "capacidad, espacio libre, etiqueta,..." # src/gui/gwnotebookmanagment.c:402 # src/gui/gwnotebookmanagment.c:408 #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Automontar" # src/gui/gwnotebookmanagment.c:410 # src/gui/gwnotebookmanagment.c:416 #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" "Monta el medio si no estaba montado. Y desmonta despues el disco inclusive " "si estaba montado antes del escaneo." # src/gui/gwpropertiesbox.c:747 # src/gui/gwnotebookmanagment.c:422 #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "Explorar estructura de árbol del medio." # src/gui/gwnotebookmanagment.c:430 #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "" "Mantenga esta opción marcada para escanear toda la información de carpetas y " "archivos" # src/gui/gwnotebookmanagment.c:416 # src/gui/gwnotebookmanagment.c:435 #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "Explorar archivo de ficheros (.tar,.gz,.zip,...)" # src/gui/gwnotebookmanagment.c:424 # src/gui/gwnotebookmanagment.c:443 #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "Aun no está implementado!!\n" "Explora todos los archivos, como si fuera un directorio. Los archivos son ." "tar o gzip." # src/gui/gwnotebookmanagment.c:429 # src/gui/gwnotebookmanagment.c:448 #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "Expulsa medio si es posible" # src/gui/gwnotebookmanagment.c:437 # src/gui/gwnotebookmanagment.c:456 #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" "Expulsa el medio si es posible (CD-ROM,...) aun si la bandeja está cerrada. " "Esto está activo solamente si el automontaje está activo!!" # src/gui/gwnotebookmanagment.c:442 # src/gui/gwnotebookmanagment.c:461 #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "Ajusta categoría recursiva" # src/gui/gwnotebookmanagment.c:450 # src/gui/gwnotebookmanagment.c:469 #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "" "Aplica la categoría seleccionada a todos los ítems en el disco para añadir " "(disco, carpetas, ficheros)." # src/gui/gwnotebookmanagment.c:455 # src/gui/gwnotebookmanagment.c:474 #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "Autodescripción." # src/gui/gwnotebookmanagment.c:463 # src/gui/gwnotebookmanagment.c:482 #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "" "Autodescripción del fichero (descripción del formato del fichero, tamaño de " "la imagen para xmp o jpg, etc...)." # src/gui/gwnotebookmanagment.c:487 #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "Usa un patrón avanzado para generar el nombre del disco." # src/gui/gwnotebookmanagment.c:495 #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Tu puedes rellenar pestañas extra para generar un nombre de disco con " "información de disco:\n" "- %% : %\n" "- %n : número archivo- (puedes usar prefijos prefijados por un 0)\n" "- %l : Etiqueta del disco\n" "- %t : tipo del disco\n" "- %s : número de serie" # src/gui/gwnotebookmanagment.c:468 # src/gui/gwnotebookmanagment.c:500 #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "" "Utiliza el nombre del volumen del medio como nombre del disco (solamente " "cuando el nombre del disco esta vacio)." # src/gui/gwnotebookmanagment.c:476 # src/gui/gwnotebookmanagment.c:508 #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" "Si tu no entraste nombre del disco y tu medio seleccionado tiene nombre de " "volumen, el nombre del volumen del medio sera como el nombre del disco." # src/gui/gwnotebookmanagmentcallback.c:160 # src/gui/gwnotebookmanagmentcallback.c:170 # src/gui/gwnotebookmanagmentcallback.c:281 # src/gui/gwnotebookmanagmentcallback.c:366 # src/gui/gwnotebookmanagmentcallback.c:794 src/gwcatalogmanager.c:1668 # src/gwcatalogmanager.c:1961 # src/gui/gwnotebookmanagmentcallback.c:160 # src/gui/gwnotebookmanagmentcallback.c:170 # src/gui/gwnotebookmanagmentcallback.c:284 # src/gui/gwnotebookmanagmentcallback.c:371 # src/gui/gwnotebookmanagmentcallback.c:799 src/gwcatalogmanager.c:1671 # src/gwcatalogmanager.c:1965 #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "Añadir disco" # src/gui/gwnotebookmanagment.c:528 # src/gui/gwnotebookmanagment.c:559 #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Gestión" # src/gui/gwnotebookmanagmentcallback.c:160 # src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "El disco no ha sido añadido : no hay medio montado" # src/gui/gwnotebookmanagmentcallback.c:170 # src/gui/gwnotebookmanagmentcallback.c:170 #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "El disco no ha sido añadido : no se puede montar el medio" # src/gui/gwnotebookmanagmentcallback.c:258 # src/gui/gwnotebookmanagmentcallback.c:261 #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "Añadir nuevo disco" # src/gui/gwnotebookmanagmentcallback.c:281 # src/gui/gwnotebookmanagmentcallback.c:284 #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "Introduce el nombre del disco" # src/gui/gwnotebookmanagmentcallback.c:305 # src/gui/gwnotebookmanagmentcallback.c:310 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "Escaneando" # src/gui/gwnotebookmanagmentcallback.c:305 # src/gui/gwnotebookmanagmentcallback.c:310 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "La adición del disco está en curso" # src/gui/gwnotebookmanagmentcallback.c:305 # src/gui/gwnotebookmanagmentcallback.c:310 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "Por favor, espere" # src/gui/gwnotebookmanagmentcallback.c:316 src/gwcatalogmanager.c:908 # src/gui/gwnotebookmanagmentcallback.c:321 src/gwcatalogmanager.c:910 #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "El disco ha sido añadido" # src/gui/gwnotebookmanagmentcallback.c:366 # src/gui/gwnotebookmanagmentcallback.c:371 #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Montaje fallido\n" # src/gui/gwnotebookmanagmentcallback.c:459 # src/gui/gwnotebookmanagmentcallback.c:560 # src/gui/gwnotebookmanagmentcallback.c:464 # src/gui/gwnotebookmanagmentcallback.c:565 #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Número de serie :" # src/gui/gwnotebookmanagmentcallback.c:500 # src/gui/gwnotebookmanagmentcallback.c:519 # src/gui/gwnotebookmanagmentcallback.c:548 # src/gui/gwnotebookmanagmentcallback.c:552 # src/gui/gwnotebookmanagmentcallback.c:560 # src/gui/gwnotebookmanagmentcallback.c:568 # src/gui/gwnotebookmanagmentcallback.c:580 # src/gui/gwnotebookmanagmentcallback.c:505 # src/gui/gwnotebookmanagmentcallback.c:524 # src/gui/gwnotebookmanagmentcallback.c:553 # src/gui/gwnotebookmanagmentcallback.c:557 # src/gui/gwnotebookmanagmentcallback.c:565 # src/gui/gwnotebookmanagmentcallback.c:573 # src/gui/gwnotebookmanagmentcallback.c:585 #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "no unidad" # src/gui/gwnotebookmanagmentcallback.c:514 # src/gui/gwnotebookmanagmentcallback.c:519 src/gwsupport.c:356 #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "desconocido" # src/gui/gwnotebookmanagmentcallback.c:532 # src/gui/gwnotebookmanagmentcallback.c:537 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Si" # src/gui/gwnotebookmanagmentcallback.c:532 # src/gui/gwnotebookmanagmentcallback.c:537 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "No" # src/gui/gwnotebookmanagmentcallback.c:543 # src/gui/gwnotebookmanagmentcallback.c:548 #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "Sin etiqueta" # src/gui/gwnotebookmanagmentcallback.c:552 # src/gui/gwnotebookmanagmentcallback.c:557 #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Nombre del volumen :" # src/gui/gwnotebookmanagmentcallback.c:695 # src/gui/gwnotebookmanagmentcallback.c:700 #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "La adición del disco ha sido cancelada" # src/gui/gwnotebookmanagmentcallback.c:794 # src/gui/gwnotebookmanagmentcallback.c:799 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "Por favor selecciona un nombre de catalogo\n" # src/gui/gwnotebooksearch.c:103 # src/gui/gwnotebooksearch.c:132 #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "Buscar :" # src/gui/gwnotebooksearch.c:118 src/gui/gwnotebooksearch.c:330 # src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 # src/gui/gwsettingssearch.c:57 #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "Buscar" # src/gui/gwnotebooksearch.c:125 # src/gui/gwnotebooksearch.c:160 #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "La búsqueda puede ser sensitiva a las mayúsculas. La busqueda por comodin " "soporta carácter \"* \".\n" "Ejemplo : img*.bmp o *.htm\n" "La búsqueda por palabras clave acepta una lista de palabras obligatorias." # src/gui/gwcategorieseditbox.c:260 src/gui/gwmenupopup.c:67 # src/gui/gwmenupopup.c:170 # src/gui/gwnotebooksearch.c:168 #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "Limpiar" # src/gui/gwnotebooksearchcallback.c:101 # src/gui/gwnotebooksearchcallback.c:109 # src/gui/gwnotebooksearch.c:175 #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "Limpia todos los resultados de búsquedas" # src/gui/gwnotebooksearch.c:133 # src/gui/gwnotebooksearch.c:183 #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "Sensitivo a mayúsculas" # src/gui/gwnotebooksearch.c:142 # src/gui/gwnotebooksearch.c:193 #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "La busqueda puede ser o no sensitiva a mayúsculas.\n" "En sensitivo a mayúsculas \"Fichero.txt\" no coincide con \"fichero.txt\". " "Pero si no es sensitivo coinciden." # src/gui/gwnotebooksearch.c:118 src/gui/gwnotebooksearch.c:330 # src/gui/gwnotebooksearch.c:198 #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "Búsqueda tipo" # src/gui/gwnotebooksearch.c:206 #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "Palabras clave" # src/gui/gwnotebooksearch.c:214 #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "Introduce una lista de palabras clave las cuales todas deben ser" # src/gui/gwnotebooksearch.c:218 #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "Comodines" # src/gui/gwnotebooksearch.c:226 #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "" "Introduce el patrón de comodines completo. Este patrón puede contener los " "carácteres \"?\" y \"*\"." # src/gui/gwnotebooksearch.c:147 # src/gui/gwnotebooksearch.c:230 #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "Expresión regular" # src/gui/gwnotebooksearch.c:156 # src/gui/gwnotebooksearch.c:238 #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "Puede usar expresión regular. Ver documentación para mas información." # src/gui/gwnotebooksearch.c:166 # src/gui/gwnotebooksearch.c:243 #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "Fichero" # src/gui/gwnotebooksearch.c:174 # src/gui/gwnotebooksearch.c:251 #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "La busqueda coincide con nombre de fichero." # src/gui/gwnotebooksearch.c:179 # src/gui/gwnotebooksearch.c:256 #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "Carpeta" # src/gui/gwnotebooksearch.c:186 # src/gui/gwnotebooksearch.c:264 #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "La busqueda coincide con nombres de carpeta." # src/gui/gwnotebooksearch.c:191 src/gui/gwnotebooksearch.c:276 # src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:548 #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "Disco" # src/gui/gwnotebooksearch.c:198 # src/gui/gwnotebooksearch.c:277 #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "La busqueda coincide con nombre de disco." # src/gui/gwnotebooksearch.c:203 src/gui/gwnotebooksearch.c:296 # src/gwapplicationmanager.h:297 src/gwapplicationmanager.h:441 # src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:346 # src/gwapplicationmanager.h:492 src/gwapplicationmanager.h:596 #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "Categoría" # src/gui/gwnotebooksearch.c:210 # src/gui/gwnotebooksearch.c:290 #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "La busqueda coincide con nombre de categoría." # src/gui/gwnotebooksearch.c:222 # src/gui/gwnotebooksearch.c:303 #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "La busqueda coincide con descripciones." # src/gui/gwnotebooksearchcallback.c:96 # src/gui/gwnotebooksearchcallback.c:312 #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "Buscar en el catálogo" # src/gui/gwnotebooksearchcallback.c:100 # src/gui/gwnotebooksearchcallback.c:316 #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "%lu objeto(s) encontrados." # src/gui/gwnotebooksearchcallback.c:101 # src/gui/gwnotebooksearchcallback.c:109 # src/gui/gwnotebooksearchcallback.c:317 # src/gui/gwnotebooksearchcallback.c:325 #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "Resultado de la búsqueda" # src/gui/gwnotebooksearchcallback.c:109 # src/gui/gwnotebooksearchcallback.c:325 #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "Ningún objeto coincidió." # src/gui/gwnotebooksearchcallback.c:117 # src/gui/gwnotebooksearchcallback.c:335 #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "Buscando..." # src/gui/gwnotebooksearchcallback.c:117 # src/gui/gwnotebooksearchcallback.c:335 #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "No se puede iniciar la busqueda : no se ha cargado catalogo" # src/gui/gwprogressbarbox.c:514 # src/gui/gwprogressbarbox.c:514 #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "_Ok" # src/gui/gwpropertiesbox.c:343 # src/gui/gwpropertiesbox.c:343 #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "Introduce el nombre del catálogo." # src/gui/gwpropertiesbox.c:370 # src/gui/gwpropertiesbox.c:370 #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "Versión : " # src/gui/gwpropertiesbox.c:373 # src/gui/gwpropertiesbox.c:373 #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "Versión " # src/gui/gwpropertiesbox.c:373 # src/gui/gwpropertiesbox.c:373 #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr " construido con " # src/gui/gwpropertiesbox.c:386 # src/gui/gwpropertiesbox.c:386 #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "Discos en catalogo : " # src/gui/gwpropertiesbox.c:389 # src/gui/gwpropertiesbox.c:389 #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "Discos en catálogo : %d" # src/gui/gwpropertiesbox.c:402 src/gui/gwpropertiesbox.c:848 # src/gui/gwpropertiesbox.c:402 src/gui/gwpropertiesbox.c:848 #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Total ficheros : " # src/gui/gwpropertiesbox.c:405 src/gui/gwpropertiesbox.c:851 # src/gui/gwpropertiesbox.c:405 src/gui/gwpropertiesbox.c:851 #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, c-format msgid "Total Files : %ld" msgstr "Total ficheros : %ld" # src/gui/gwpropertiesbox.c:418 src/gui/gwpropertiesbox.c:864 # src/gui/gwpropertiesbox.c:418 src/gui/gwpropertiesbox.c:864 #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "Total carpetas : " # src/gui/gwpropertiesbox.c:421 src/gui/gwpropertiesbox.c:867 # src/gui/gwpropertiesbox.c:421 src/gui/gwpropertiesbox.c:867 #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, c-format msgid "Total Folders : %ld" msgstr "Total carpetas : %ld" # src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:442 # src/gui/gwpropertiesbox.c:1483 # src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:442 # src/gui/gwpropertiesbox.c:1483 #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "Tamaño fichero : " # src/gui/gwpropertiesbox.c:459 src/gui/gwpropertiesbox.c:463 # src/gui/gwpropertiesbox.c:459 src/gui/gwpropertiesbox.c:463 #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Espacio total almacenamiento: " # src/gui/gwpropertiesbox.c:480 src/gui/gwpropertiesbox.c:484 # src/gui/gwpropertiesbox.c:480 src/gui/gwpropertiesbox.c:484 #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "Espacio total usado : " # src/gui/gwpropertiesbox.c:501 src/gui/gwpropertiesbox.c:505 # src/gui/gwpropertiesbox.c:501 src/gui/gwpropertiesbox.c:505 #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "Espacio libre total : " # src/gui/gwpropertiesbox.c:526 # src/gui/gwpropertiesbox.c:526 #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "Estadísticas disco : " # src/gui/gwpropertiesbox.c:543 # src/gui/gwpropertiesbox.c:543 #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "CD-Rom : " # src/gui/gwpropertiesbox.c:546 # src/gui/gwpropertiesbox.c:546 #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "CD-Rom : %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "Audio CD :" # src/gui/gwpropertiesbox.c:562 # src/gui/gwpropertiesbox.c:562 #: src/gui/gwpropertiesbox.c:577 #, c-format msgid "Audio CD : %d" msgstr "Audio CD : %d" # src/gui/gwpropertiesbox.c:559 # src/gui/gwpropertiesbox.c:559 #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "HD : " # src/gui/gwpropertiesbox.c:562 # src/gui/gwpropertiesbox.c:562 #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "HD : %d" # src/gui/gwpropertiesbox.c:575 # src/gui/gwpropertiesbox.c:575 #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "Disquetera : " # src/gui/gwpropertiesbox.c:578 # src/gui/gwpropertiesbox.c:578 #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "Disquetera : %d" # src/gui/gwpropertiesbox.c:595 # src/gui/gwpropertiesbox.c:595 #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip : " # src/gui/gwpropertiesbox.c:598 # src/gui/gwpropertiesbox.c:598 #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip : %d" # src/gui/gwnotebookmanagment.c:287 src/gui/gwnotebookmanagmentcallback.c:442 # src/gui/gwnotebookmanagmentcallback.c:522 src/gui/gwpropertiesbox.c:803 # src/gui/gwnotebookmanagment.c:293 src/gui/gwnotebookmanagmentcallback.c:447 # src/gui/gwnotebookmanagmentcallback.c:527 src/gui/gwpropertiesbox.c:803 #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 msgid "Tape : " msgstr "Cinta :" # src/gui/gwnotebookmanagment.c:287 src/gui/gwnotebookmanagmentcallback.c:442 # src/gui/gwnotebookmanagmentcallback.c:522 src/gui/gwpropertiesbox.c:803 # src/gui/gwnotebookmanagment.c:293 src/gui/gwnotebookmanagmentcallback.c:447 # src/gui/gwnotebookmanagmentcallback.c:527 src/gui/gwpropertiesbox.c:803 #: src/gui/gwpropertiesbox.c:649 #, c-format msgid "Tape : %d" msgstr "Cinta : %d" #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "Red : " # src/gui/gwpropertiesbox.c:614 # src/gui/gwpropertiesbox.c:614 #: src/gui/gwpropertiesbox.c:666 #, c-format msgid "Network : %d" msgstr "Red : %d" # src/gui/gwnotebookmanagment.c:229 # src/gui/gwnotebookmanagment.c:235 #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 msgid "Jaz : " msgstr "Jaz :" # src/gui/gwpropertiesbox.c:562 # src/gui/gwpropertiesbox.c:562 #: src/gui/gwpropertiesbox.c:683 #, c-format msgid "Jaz : %d" msgstr "Jaz : %d" # src/gui/gwpropertiesbox.c:611 # src/gui/gwpropertiesbox.c:611 #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "Otro : " # src/gui/gwpropertiesbox.c:614 # src/gui/gwpropertiesbox.c:614 #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "Otro : %d" # src/gui/gwpropertiesbox.c:631 # src/gui/gwpropertiesbox.c:631 #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Categorías de catálogo : " # src/gui/gwpropertiesbox.c:647 # src/gui/gwpropertiesbox.c:647 #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "Descripción de catálogo : " # src/gui/gwpropertiesbox.c:678 # src/gui/gwpropertiesbox.c:678 #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Información catálogo :" # src/gui/gwpropertiesbox.c:747 # src/gui/gwpropertiesbox.c:747 #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "Introduce en nombre del disco" # src/gui/gwpropertiesbox.c:778 # src/gui/gwpropertiesbox.c:778 #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "Introduce el numero del archivo del disco." # src/gui/gwpropertiesbox.c:800 # src/gui/gwpropertiesbox.c:800 #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr " Tipo: " # src/gui/gwpropertiesbox.c:816 src/gui/gwpropertiesbox.c:819 # src/gui/gwpropertiesbox.c:816 src/gui/gwpropertiesbox.c:819 #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "Serial : " # src/gui/gwpropertiesbox.c:832 src/gui/gwpropertiesbox.c:835 # src/gui/gwpropertiesbox.c:832 src/gui/gwpropertiesbox.c:835 #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "Etiqueta del Volumen: " # src/gui/gwpropertiesbox.c:884 src/gui/gwpropertiesbox.c:888 # src/gui/gwpropertiesbox.c:884 src/gui/gwpropertiesbox.c:888 #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "Capacidad Total :" # src/gui/gwpropertiesbox.c:905 src/gui/gwpropertiesbox.c:909 # src/gui/gwpropertiesbox.c:905 src/gui/gwpropertiesbox.c:909 #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "Espacio Usado : " # src/gui/gwpropertiesbox.c:926 src/gui/gwpropertiesbox.c:930 # src/gui/gwpropertiesbox.c:926 src/gui/gwpropertiesbox.c:930 #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "Espacio Libre : " # src/gui/gwpropertiesbox.c:961 src/gui/gwpropertiesbox.c:964 # src/gui/gwpropertiesbox.c:961 src/gui/gwpropertiesbox.c:964 #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "Nombre del Catalogo: " # src/gui/gwpropertiesbox.c:977 src/gui/gwpropertiesbox.c:981 # src/gui/gwpropertiesbox.c:977 src/gui/gwpropertiesbox.c:981 #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "Actualizado en catalogo : " # src/gui/gwpropertiesbox.c:1011 # src/gui/gwpropertiesbox.c:1011 #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "Descripción del disco : " # src/gui/gwpropertiesbox.c:1042 # src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Información del disco :" # src/gui/gwpropertiesbox.c:1100 # src/gui/gwpropertiesbox.c:1100 #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "Nombre de la carpeta" # src/gui/gwpropertiesbox.c:1131 # src/gui/gwpropertiesbox.c:1131 #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Tipo : (carpeta)" # src/gui/gwpropertiesbox.c:1142 src/gui/gwpropertiesbox.c:1146 # src/gui/gwpropertiesbox.c:1142 src/gui/gwpropertiesbox.c:1146 #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "Tamaño de la carpeta : " # src/gui/gwpropertiesbox.c:1163 src/gui/gwpropertiesbox.c:1167 # src/gui/gwpropertiesbox.c:1504 src/gui/gwpropertiesbox.c:1508 # src/gui/gwpropertiesbox.c:1163 src/gui/gwpropertiesbox.c:1167 # src/gui/gwpropertiesbox.c:1508 src/gui/gwpropertiesbox.c:1512 #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "Creado en: " # src/gui/gwpropertiesbox.c:1181 src/gui/gwpropertiesbox.c:1185 # src/gui/gwpropertiesbox.c:1522 src/gui/gwpropertiesbox.c:1526 # src/gui/gwpropertiesbox.c:1181 src/gui/gwpropertiesbox.c:1185 # src/gui/gwpropertiesbox.c:1526 src/gui/gwpropertiesbox.c:1530 #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "Última modificación en : " # src/gui/gwpropertiesbox.c:1199 src/gui/gwpropertiesbox.c:1203 # src/gui/gwpropertiesbox.c:1540 src/gui/gwpropertiesbox.c:1544 # src/gui/gwpropertiesbox.c:1199 src/gui/gwpropertiesbox.c:1203 # src/gui/gwpropertiesbox.c:1544 src/gui/gwpropertiesbox.c:1548 #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "Ultimo acceso en :" # src/gui/gwpropertiesbox.c:1221 src/gui/gwpropertiesbox.c:1224 # src/gui/gwpropertiesbox.c:1562 src/gui/gwpropertiesbox.c:1565 # src/gui/gwpropertiesbox.c:1221 src/gui/gwpropertiesbox.c:1224 # src/gui/gwpropertiesbox.c:1566 src/gui/gwpropertiesbox.c:1569 #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Permisos : " # src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1242 # src/gui/gwpropertiesbox.c:1246 src/gui/gwpropertiesbox.c:1578 # src/gui/gwpropertiesbox.c:1583 src/gui/gwpropertiesbox.c:1587 # src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1242 # src/gui/gwpropertiesbox.c:1246 src/gui/gwpropertiesbox.c:1582 # src/gui/gwpropertiesbox.c:1587 src/gui/gwpropertiesbox.c:1591 #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "Propietario : " # src/gui/gwpropertiesbox.c:1260 src/gui/gwpropertiesbox.c:1265 # src/gui/gwpropertiesbox.c:1269 src/gui/gwpropertiesbox.c:1601 # src/gui/gwpropertiesbox.c:1606 src/gui/gwpropertiesbox.c:1610 # src/gui/gwpropertiesbox.c:1260 src/gui/gwpropertiesbox.c:1265 # src/gui/gwpropertiesbox.c:1269 src/gui/gwpropertiesbox.c:1605 # src/gui/gwpropertiesbox.c:1610 src/gui/gwpropertiesbox.c:1614 #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "Grupo : " # src/gui/gwpropertiesbox.c:1297 src/gui/gwpropertiesbox.c:1300 # src/gui/gwpropertiesbox.c:1638 src/gui/gwpropertiesbox.c:1644 # src/gui/gwpropertiesbox.c:1650 # src/gui/gwpropertiesbox.c:1297 src/gui/gwpropertiesbox.c:1300 # src/gui/gwpropertiesbox.c:1642 src/gui/gwpropertiesbox.c:1648 # src/gui/gwpropertiesbox.c:1654 #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "Nombre del disco : " # src/gui/gwpropertiesbox.c:1315 src/gui/gwpropertiesbox.c:1319 # src/gui/gwpropertiesbox.c:1665 src/gui/gwpropertiesbox.c:1671 # src/gui/gwpropertiesbox.c:1679 # src/gui/gwpropertiesbox.c:1315 src/gui/gwpropertiesbox.c:1319 # src/gui/gwpropertiesbox.c:1669 src/gui/gwpropertiesbox.c:1675 # src/gui/gwpropertiesbox.c:1683 #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "Localización del disco : " # src/gui/gwpropertiesbox.c:1352 # src/gui/gwpropertiesbox.c:1352 #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "Descripción de la carpeta : " # src/gui/gwpropertiesbox.c:1383 # src/gui/gwpropertiesbox.c:1383 #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Información de la carpeta : " # src/gui/gwpropertiesbox.c:1441 # src/gui/gwpropertiesbox.c:1441 #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "Nombre del fichero : " # src/gui/gwpropertiesbox.c:1472 # src/gui/gwpropertiesbox.c:1472 #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Tipo Fichero: aun no está implementado!!" # src/gui/gwpropertiesbox.c:1487 # src/gui/gwpropertiesbox.c:1487 #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "Tamaño fichero : %s (%s bytes)" # src/gui/gwpropertiesbox.c:1710 # src/gui/gwpropertiesbox.c:1714 #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "Descripción del fichero : " # src/gui/gwpropertiesbox.c:1741 # src/gui/gwpropertiesbox.c:1745 #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Información del fichero : " # src/gui/gwsettingscatalogfile.c:68 # src/gui/gwsettingscatalogfile.c:68 #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "Archivo de catálogo" # src/gui/gwsettingscatalogfile.c:119 # src/gui/gwsettingscatalogfile.c:119 #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Nivel de compresión del catálogo :" # src/gui/gwsettingscatalogfile.c:134 # src/gui/gwsettingscatalogfile.c:134 #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "" "Selecciona el nivel de compresión del catálogo. El valor por defecto es 3, " "es un buen valor entre alto rendimiento y tamaño reducido." # src/gui/gwsettingscatalogfile.c:142 # src/gui/gwsettingscatalogfile.c:142 #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Catálogos abiertos recientemente :" # src/gui/gwsettingscatalogfile.c:157 # src/gui/gwsettingscatalogfile.c:157 #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "" "Selecciona el tamaño del historial de catálogos abiertos recientemente. El " "valor por defecto es 5." # src/gui/gwsettingscatalogfile.c:164 # src/gui/gwsettingscatalogfile.c:164 #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "Borrar Historial" # src/gui/gwsettingscatalogfile.c:168 # src/gui/gwsettingscatalogfile.c:168 #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "Haz click para borrar el historial de ficheros abiertos recientemente." # src/gui/gwsettingscatalogfile.c:174 # src/gui/gwsettingscatalogfile.c:174 #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Autocargar catálogo" # src/gui/gwsettingscatalogfile.c:179 # src/gui/gwsettingscatalogfile.c:179 #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "Autocarga un catálogo por defecto al inicio." # src/gui/gwsettingscatalogfile.c:186 # src/gui/gwsettingscatalogfile.c:186 #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "Carga el último catálogo abierto." # src/gui/gwsettingscatalogfile.c:191 # src/gui/gwsettingscatalogfile.c:193 #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "Carga el catálogo seleccionado." # src/gui/gwsettingscatalogfile.c:200 # src/gui/gwsettingscatalogfile.c:204 #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "Introduce la ruta completa del catálogo a cargar." # src/gui/gwsettingscatalogfile.c:207 # src/gui/gwsettingscatalogfile.c:211 #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "Selecciona catálogo" # src/gui/gwsettingscatalogfile.c:213 # src/gui/gwsettingscatalogfile.c:217 #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "Haz click aquí para desglosar y seleccionar el catálogo." # src/gui/gwsettingscatalogfile.c:603 # src/gui/gwsettingscatalogfile.c:607 #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "Selecciona el catálogo autocargado" # src/gui/gwsettingsexplorer.c:46 # src/gui/gwsettingsexplorer.c:56 #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "Explorador" # src/gui/gwnotebooksearch.c:133 # src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "Ordenación sensitiva a mayúsculas." # src/gui/gwsettingsexplorer.c:112 #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "El resultado ordenado en el explorador es sensitivo a mayúsculas." # src/gui/gwsettingsexplorer.c:118 #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Grupo de ordenación resultante por carpeta/fichero." # src/gui/gwsettingsexplorer.c:123 #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" "El resultado de la ordenación en el explorador puede ser agrupado por tipo " "de item. Si esta opción esta marcada todos los items estarán agrupados por " "carpetas o ficheros." # src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Autoajusta columnas" # src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "Autoajusta todas las columnas del explorador." # src/gui/gwsettingsexplorerdisk.c:54 # src/gui/gwsettingsexplorerdisk.c:54 #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "Discos" # src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 # src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 # src/gui/gwsettingsquicksearch.c:118 #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "Visible" # src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 # src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 # src/gui/gwsettingsquicksearch.c:126 #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Oculto" # src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 # src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 # src/gui/gwsettingsquicksearch.c:131 #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "Muestra" # src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 # src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 # src/gui/gwsettingsquicksearch.c:147 #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "Ocultos" # src/gui/gwsettingsexplorerfile.c:53 # src/gui/gwsettingsexplorerfile.c:53 #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Ficheros" # src/gui/gwsettingssearch.c:114 #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "" "El resultado de la ordenación en la búsqueda es sensitivo a mayúsculas." # src/gui/gwsettingssearch.c:120 #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Resultado del grupo de la ordenación por tipo." # src/gui/gwsettingssearch.c:125 #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" "El resultado de la ordenación en la búsqueda puede ser agrupado por tipo de " "item. Si esta opción esta marcada todos los items serán agrupados por " "catálogos, discos, carpetas y ficheros." # src/gui/gwsettingssearch.c:142 #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "Todas las palabras clave deben coincidir." # src/gui/gwsettingssearch.c:147 #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" "Elige si todas las palabras clave o sólo una de todas ellas deben coincidir " "con el item en orden para estar en el resultado de la búsqueda." # src/gui/gwmenufilecallback.c:465 # src/gui/gwsettingsquicksearch.c:60 #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "Rápido" # src/gui/gwsettingsgeneral.c:44 # src/gui/gwsettingsgeneral.c:44 #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "Opciones generales" # src/gui/gwsettingsgui.c:52 # src/gui/gwsettingsgui.c:54 #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "GUI" # src/gui/gwsettingsgui.c:90 # src/gui/gwsettingsgui.c:93 #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "Guardar las propiedades del GUI al salir" # src/gui/gwsettingsgui.c:95 # src/gui/gwsettingsgui.c:98 #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "Guardar las propiedades GUI como la posición de la ventana y tamaño." # src/gui/gwsettingsgui.c:104 #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "Permite pitidos" # src/gui/gwsettingsgui.c:109 #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "Permite emitir un pitido corto en algunos eventos." # src/gui/gwsettingsmail.c:83 # src/gui/gwsettingsmail.c:83 #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Correo" # src/gui/gwsettingsmail.c:126 # src/gui/gwsettingsmail.c:126 #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "Dirección Email :" # src/gui/gwsettingsmail.c:136 # src/gui/gwsettingsmail.c:136 #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "Introduce tu dirección de email." # src/gui/gwsettingsmail.c:141 # src/gui/gwsettingsmail.c:141 #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "Servidor saliente :" # src/gui/gwsettingsmail.c:151 # src/gui/gwsettingsmail.c:151 #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "" "Introduce tu servidor saliente. Normalmente esta dirección es mail.tudominio." "com" # src/gui/gwsettingsmail.c:156 # src/gui/gwsettingsmail.c:156 #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Puerto del servidor :" # src/gui/gwsettingsmail.c:166 # src/gui/gwsettingsmail.c:166 #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "" "Introduce el puerto del servidor del correo saliente ( el valor más común es " "25)." # src/gui/gwsettingswindowbox.c:81 # src/gui/gwsettingswindowbox.c:82 #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "" "Esta ventana de ajustes permite configurar algunas funcionalidades y " "propiedades del programa." # src/gui/gwsettingswindowbox.c:84 src/gui/gwsettingswindowbox.c:123 # src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "Ajustes" # src/gui/gwsettingswindowbox.c:119 # src/gui/gwsettingswindowbox.c:120 #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "Selecciona la sección a configurar." # src/gui/gwsettingswindowbox.c:133 # src/gui/gwsettingswindowbox.c:134 #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "" "Cambia en este panel todas las propiedades disponibles a fin de configurar " "el programa como tú quieres." # src/gui/gwsettingswindowbox.c:144 # src/gui/gwsettingswindowbox.c:145 #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "" "Esta ventana de ajustes permite configurar el programa. Algunas propiedades " "pueden modificarse aquí." # src/gui/gwsettingswindowbox.c:169 # src/gui/gwsettingswindowbox.c:170 #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "" "Haz click en el botón OK para aplicar los cambios y cerrar la ventana de " "ajustes." # src/gui/gwsettingswindowbox.c:183 # src/gui/gwsettingswindowbox.c:185 #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "" "Haz click en el botón Cancelar para cancelar los cambios y cerrar la ventana " "de ajustes." # src/gui/gwsettingswindowbox.c:189 # src/gui/gwsettingswindowbox.c:191 #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "_Aplicar" # src/gui/gwsettingswindowbox.c:196 # src/gui/gwsettingswindowbox.c:198 #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "" "Haz click en el botón Aplicar para aplicar los cambios (sin cerrar la " "ventana de ajustes)." # src/gui/gwsettingswindowboxcallback.c:89 # src/gui/gwsettingswindowboxcallback.c:89 #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "Ajustes cambiados" # src/gui/gwsettingswindowboxcallback.c:89 # src/gui/gwsettingswindowboxcallback.c:89 #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "" "Si no necesitas aplicar los cambios perderás todos los cambios. ¿Quieres " "aplicar los cambios?" # src/gui/gwstatusbarcallback.c:55 # src/gui/gwstatusbarcallback.c:55 #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], total discos : %d" # src/gui/gwstatusbarcallback.c:56 src/gui/gwstatusbarcallback.c:109 # src/gui/gwstatusbarcallback.c:158 # src/gui/gwstatusbarcallback.c:56 src/gui/gwstatusbarcallback.c:109 # src/gui/gwstatusbarcallback.c:158 #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr "Objetos listados: %d (tamaño total : %s)" # src/gui/gwstatusbarcallback.c:87 # src/gui/gwstatusbarcallback.c:87 #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], capacidad : %s, libre : %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr "Disco vacio" # src/gui/gwstatusbarcallback.c:100 src/gui/gwstatusbarcallback.c:149 # src/gui/gwstatusbarcallback.c:195 # src/gui/gwstatusbarcallback.c:100 src/gui/gwstatusbarcallback.c:149 # src/gui/gwstatusbarcallback.c:195 #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr " Objeto seleccionado : %d (tamaño total : %s)" # src/gui/gwstatusbarcallback.c:140 # src/gui/gwstatusbarcallback.c:140 #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr " Carpeta \"%s\", %s (ficheros %d, subcarpetas %d)" # src/gui/gwstatusbarcallback.c:189 # src/gui/gwstatusbarcallback.c:189 #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr " %s, %s, %s" # src/gui/gwstatusbarcallback.c:222 src/gui/gwstatusbarcallback.c:243 # src/gui/gwstatusbarcallback.c:222 src/gui/gwstatusbarcallback.c:243 #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr " Artículo seleccionado : %d" # src/gui/gwstatusbarcallback.c:223 # src/gui/gwstatusbarcallback.c:223 #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr " Explorador de catálogo" # src/gui/gwstatusbarcallback.c:244 # src/gui/gwstatusbarcallback.c:244 #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr "Motor de busqueda" # src/gui/gwstatusbarcallback.c:263 # src/gui/gwstatusbarcallback.c:263 #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr "Gestión de catalogo" # src/gui/gwtoolbar.c:89 # src/gui/gwtoolbar.c:89 #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Cerrar catálogo" # src/gui/gwtoolbar.c:93 # src/gui/gwtoolbar.c:93 #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "Enviar catálogo por correo" # src/gui/gwwindowboxabout.c:121 # src/gui/gwwindowboxabout.c:121 #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "Acerca de" # src/gui/gwwindowboxabout.c:152 # src/gui/gwwindowboxabout.c:152 #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "Gestión de medios extraíbles\n" "por Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" # src/gui/gwwindowboxabout.c:153 # src/gui/gwwindowboxabout.c:153 #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" "GWhere permite manipular una base de datos de tus CDs y otros medios " "extraibles (discos duros, disquetes, Zips, CD-ROM, etc...) Con GWhere es " "fácil navegar en tus CDs o hacer búsquedas rápidas sin necesidad de " "introducir tus CDs en la unidad cada vez." # src/gui/gwwindowboxabout.c:154 # src/gui/gwwindowboxabout.c:154 #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Está ejecutándose en " # src/gui/gwwindowboxmail.c:83 # src/gui/gwwindowboxmail.c:83 #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "" "Esta ventana te permite enviar un catálogo por correo a uno (o más) de tus " "contactos." # src/gui/gwwindowboxmail.c:86 src/gui/gwwindowboxmailcallback.c:57 # src/gui/gwwindowboxmailcallback.c:64 # src/gui/gwwindowboxmail.c:86 src/gui/gwwindowboxmailcallback.c:57 # src/gui/gwwindowboxmailcallback.c:64 #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "Enviar correo" # src/gui/gwwindowboxmail.c:110 # src/gui/gwwindowboxmail.c:110 #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "A:" # src/gui/gwwindowboxmail.c:116 # src/gui/gwwindowboxmail.c:116 #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "CC:" # src/gui/gwwindowboxmail.c:122 # src/gui/gwwindowboxmail.c:122 #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "BCC:" # src/gui/gwwindowboxmail.c:128 # src/gui/gwwindowboxmail.c:128 #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "Asunto :" # src/gui/gwwindowboxmail.c:138 # src/gui/gwwindowboxmail.c:138 #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "Introduce aquí la dirección de email de tu(s) contacto(s)." # src/gui/gwwindowboxmail.c:146 # src/gui/gwwindowboxmail.c:146 #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "Introduce aquí la dirección de email de los contactos copiados." # src/gui/gwwindowboxmail.c:154 # src/gui/gwwindowboxmail.c:154 #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "Introduce aquí la dirección email de los contactos ocultos copiados." # src/gui/gwwindowboxmail.c:162 # src/gui/gwwindowboxmail.c:162 #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "Introduce aquí el asunto de tu correo." # src/gui/gwwindowboxmail.c:166 # src/gui/gwwindowboxmail.c:166 #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "Fichero adjunto:" # src/gui/gwwindowboxmail.c:180 # src/gui/gwwindowboxmail.c:180 #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "Elige o no adjuntar el fichero catalogo." # src/gui/gwwindowboxmail.c:195 # src/gui/gwwindowboxmail.c:195 #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "Teclea aquí el texto para el mensaje de correo." # src/gui/gwwindowboxmail.c:206 # src/gui/gwwindowboxmail.c:206 #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "Enviar" # src/gui/gwwindowboxmail.c:211 # src/gui/gwwindowboxmail.c:211 #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "Haz click aquí para enviar un correo (con catalogo adjunto)." # src/gui/gwwindowboxmail.c:223 # src/gui/gwwindowboxmail.c:223 #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "Haz click aquí para cancelar el envío de un correo." # src/gui/gwwindowboxmailcallback.c:57 # src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "Enviando correo, por favor espera..." # src/gui/gwwindowboxmailcallback.c:64 # src/gui/gwwindowboxmailcallback.c:64 #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "" "Ocurrió un error durante el envío del correo. Por favor comprueba tus " "parámetros." # src/gwsupport.c:129 # src/gwsupport.c:129 #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "No se pudo encontrar el fichero mapa de pixels: %s" # src/gwsupport.c:136 # src/gwsupport.c:136 #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "Error cargando fichero mapa de pixels: %s" # src/gwcatalogmanager.c:870 # src/gwcatalogmanager.c:872 #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "Error: no se puede obtener la carpeta actual." # src/gwcatalogmanager.c:908 # src/gwcatalogmanager.c:910 #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "Error: no se puede ir a la carpeta de trabajo." # src/gwcatalogmanager.c:976 # src/gwcatalogmanager.c:979 #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "El disco no ha sido añadido\n" "Adición cancelada por el usuario" # src/gwcatalogmanager.c:994 src/gwcatalogmanager.c:999 # src/gwcatalogmanager.c:1004 src/gwcatalogmanager.c:1009 # src/gwcatalogmanager.c:1014 src/gwcatalogmanager.c:1020 # src/gwcatalogmanager.c:1025 src/gwcatalogmanager.c:1030 # src/gwcatalogmanager.c:1051 src/gwcatalogmanager.c:1056 # src/gwcatalogmanager.c:1061 src/gwcatalogmanager.c:1067 # src/gwcatalogmanager.c:1072 src/gwcatalogmanager.c:1078 # src/gwcatalogmanager.c:997 src/gwcatalogmanager.c:1002 # src/gwcatalogmanager.c:1007 src/gwcatalogmanager.c:1012 # src/gwcatalogmanager.c:1017 src/gwcatalogmanager.c:1023 # src/gwcatalogmanager.c:1028 src/gwcatalogmanager.c:1033 # src/gwcatalogmanager.c:1054 src/gwcatalogmanager.c:1059 # src/gwcatalogmanager.c:1064 src/gwcatalogmanager.c:1070 # src/gwcatalogmanager.c:1075 src/gwcatalogmanager.c:1081 #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "El disco no ha sido añadido\n" # src/gwcatalogmanager.c:994 # src/gwcatalogmanager.c:997 #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "%s fuera del espacio de direcciones asignadas por el proceso." # src/gwcatalogmanager.c:999 # src/gwcatalogmanager.c:1002 #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" "Un componente de la siguiente ruta excedió %d caracteres, o el nombre de una " "ruta entera excedió %d caracteres: %s." # src/gwcatalogmanager.c:1004 # src/gwcatalogmanager.c:1007 #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "El siguiente directorio no existe: %s." # src/gwcatalogmanager.c:1009 src/gwcatalogmanager.c:1067 # src/gwcatalogmanager.c:1012 src/gwcatalogmanager.c:1070 #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "Memoria insuficiente para completar la operación." # src/gwcatalogmanager.c:1014 # src/gwcatalogmanager.c:1017 #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "Un componente del prefijo de la ruta no es un directorio: %s." # src/gwcatalogmanager.c:1020 # src/gwcatalogmanager.c:1023 #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "" "Demasiados enlaces simbólicos fueron encontrados resolviendo la siguiente " "ruta: %s." # src/gwcatalogmanager.c:1025 # src/gwcatalogmanager.c:1028 #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "Un error de E/S ocurrió cuando se cambio el directorio a: %s." # src/gwcatalogmanager.c:1030 src/gwcatalogmanager.c:1078 # src/gwcatalogmanager.c:1033 src/gwcatalogmanager.c:1081 #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "Error desconocido" # src/gwcatalogmanager.c:1546 # src/gwcatalogmanager.c:1549 #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" "El disco no ha sido añadido\n" "Error: no se pudo ir a la carpeta padre." # src/gwcatalogmanager.c:1051 # src/gwcatalogmanager.c:1054 #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Demasiados descriptores de ficheros en uso por el proceso." # src/gwcatalogmanager.c:1056 # src/gwcatalogmanager.c:1059 #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Actualmente están abiertos demasiados ficheros en el sistema." # src/gwcatalogmanager.c:1061 # src/gwcatalogmanager.c:1064 #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "" "El siguiente directorio no existe, o el nombre es una cadena vacía: %s." # src/gwcatalogmanager.c:1072 # src/gwcatalogmanager.c:1075 #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "El siguiente nombre de directorio no es un directorio: %s." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" "Un error critico ocurrió extrayendo la información del fichero de %s %s %s.\n" "Guarda tu catálogo si es posible, sal de GWhere y reporta este problema al " "equipo del proyecto GWhere, por favor." # src/gwcatalogmanager.c:1538 # src/gwcatalogmanager.c:1541 #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" "El disco no ha sido añadido\n" "Error: no se pudo cerrar la carpeta actual." # src/gwapplicationmanager.c:71 # src/gwapplicationmanager.c:71 #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "Está ejecutándose en %s" # src/gwapplicationmanager.c:500 # src/gwapplicationmanager.c:500 #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Catalogo cargado" # src/gwapplicationmanager.c:505 # src/gwapplicationmanager.c:505 #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "Carga de catálogo fallida" # src/gwapplicationmanager.c:487 src/gwapplicationmanager.c:511 # src/gwapplicationmanager.c:518 # src/gwapplicationmanager.c:487 src/gwapplicationmanager.c:511 # src/gwapplicationmanager.c:518 #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "Cargando catalogo" # src/gwapplicationmanager.c:511 # src/gwapplicationmanager.c:511 #: src/gwapplicationmanager.c:499 msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "" "El catálogo es invalido o no existe. Revisa tu ruta de catálogo, por favor." # src/gwapplicationmanager.c:611 # src/gwapplicationmanager.c:621 #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "Guardando catálogo" # src/gwapplicationmanager.c:622 # src/gwapplicationmanager.c:632 #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Catálogo guardado" # src/gwapplicationmanager.c:629 # src/gwapplicationmanager.c:639 #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "Fallado guardado del catálogo" # src/gwapplicationmanager.h:201 # src/gwapplicationmanager.h:250 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Derechos" # src/gwapplicationmanager.h:213 # src/gwapplicationmanager.h:262 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "Propietario" # src/gwapplicationmanager.h:225 # src/gwapplicationmanager.h:274 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "Grupo" # src/gui/gwnotebooksearch.c:286 src/gwapplicationmanager.h:237 # src/gwapplicationmanager.h:286 src/gwapplicationmanager.h:572 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "Tamaño" # src/gwapplicationmanager.h:249 # src/gwapplicationmanager.h:298 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "INode" # src/gwapplicationmanager.h:261 # src/gwapplicationmanager.h:310 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Fecha de acceso" # src/gwapplicationmanager.h:273 # src/gwapplicationmanager.h:322 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Fecha de modificación" # src/gwapplicationmanager.h:285 # src/gwapplicationmanager.h:334 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "Fecha de creación" # src/gwapplicationmanager.h:333 # src/gwapplicationmanager.h:384 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "Nombre del sistema de ficheros" # src/gwapplicationmanager.h:345 # src/gwapplicationmanager.h:396 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "Ruta de acceso" # src/gwapplicationmanager.h:357 # src/gwapplicationmanager.h:408 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Fichero N#" # src/gwapplicationmanager.h:369 # src/gwapplicationmanager.h:420 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Tipo" # src/gwapplicationmanager.h:381 # src/gwapplicationmanager.h:432 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Nombre del Volumen" # src/gwapplicationmanager.h:393 # src/gwapplicationmanager.h:444 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "Capacidad Total" # src/gwapplicationmanager.h:405 # src/gwapplicationmanager.h:456 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "Espacio libre" # src/gui/gwnotebooksearch.c:291 src/gwapplicationmanager.h:417 # src/gwapplicationmanager.h:468 src/gwapplicationmanager.h:584 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Fecha" # src/gwapplicationmanager.h:429 # src/gwapplicationmanager.h:480 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Número de serie" # src/gui/gwnotebooksearch.c:281 # src/gwapplicationmanager.h:560 #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "Ruta" # win32/config.h:287 # win32/config.h:287 #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "Completo/a" # win32/config.h:288 # win32/config.h:288 #: win32/config.h:288 msgid "Compact" msgstr "Compacto/a" # win32/config.h:289 # win32/config.h:289 #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (requerido)" # win32/config.h:290 # win32/config.h:290 #: win32/config.h:290 msgid "Main engine application." msgstr "Motor aplicacion principal." # win32/config.h:291 # win32/config.h:291 #: win32/config.h:291 msgid "GTK+ 2.6 RunTime (required)" msgstr "RunTime GTK+ 2.6 (requerido)" # win32/config.h:292 # win32/config.h:292 #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "Runtime para entorno GUI." # win32/config.h:293 # win32/config.h:293 #: win32/config.h:293 msgid "Plugins" msgstr "Plugins" # win32/config.h:294 # win32/config.h:294 #: win32/config.h:294 msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "" "Plugins para autoextracción de las descripciones de fichero y plugins para/" "importar y exportar catálogos." # win32/config.h:295 # win32/config.h:295 #: win32/config.h:295 msgid "Languages Files" msgstr "Ficheros de idioma" # win32/config.h:296 # win32/config.h:296 #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "Todos los ficheros de idioma para la traduccion del programa." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "Debes desinstalar tu última versión de GWhere" #: win32/config.h:298 msgid "Installer already running" msgstr "El instalador ya está en ejecución" # src/gui/gwsettingsgeneral.c:44 # src/gui/gwsettingsgeneral.c:44 #: win32/config.h:299 msgid "Install options" msgstr "Opciones de instalación" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "Que usuarios pueden ejecutar GWhere ?" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "GWhere instala los permisos de acceso" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" "GWhere puede ser instalado para todos los usuarios o solamente para el " "usuario actual. Por favor selecciona como quieres instalar GWhere." #: win32/config.h:303 msgid "All users|Current user" msgstr "Todos los usuarios|Usuario actual" #: win32/config.h:304 msgid "All users" msgstr "Todos los usuarios" # src/gwapplicationmanager.c:511 # src/gwapplicationmanager.c:511 #~ msgid "" #~ "The catalog file doesn't exists. Check your catalog file path please." #~ msgstr "El catálogo no existe. Revisa la ruta del catálogo." # src/gwapplicationmanager.c:518 # src/gwapplicationmanager.c:518 #~ msgid "" #~ "The catalog file to load doesn't have a good file extension. Only .ctg " #~ "files are allowed to be loaded." #~ msgstr "" #~ "El catálogo a cargar no tiene una extensión correcta. Solamente se pueden " #~ "cargar ficheros .ctg." # src/gwcatalogmanager.c:100 src/gwcatalogmanager.c:112 # src/gwcatalogmanager.c:133 src/gwcatalogmanager.c:186 # src/gwcatalogmanager.c:198 src/gwcatalogmanager.c:276 # src/gwcatalogmanager.c:424 # src/gwcatalogmanager.c:100 src/gwcatalogmanager.c:112 # src/gwcatalogmanager.c:133 src/gwcatalogmanager.c:186 # src/gwcatalogmanager.c:198 src/gwcatalogmanager.c:276 # src/gwcatalogmanager.c:424 #~ msgid "Load file" #~ msgstr "Cargar fichero" # src/gwcatalogmanager.c:100 # src/gwcatalogmanager.c:100 #~ msgid "Error : cannot open this file." #~ msgstr "Error : no se pudo abrir este fichero" # src/gwcatalogmanager.c:112 # src/gwcatalogmanager.c:112 #~ msgid "Error : cannot read the file version." #~ msgstr "Error : no se pudo leer la versión del fichero." # src/gwcatalogmanager.c:116 src/gwcatalogmanager.c:138 # src/gwcatalogmanager.c:116 src/gwcatalogmanager.c:138 #~ msgid "Load catalog" #~ msgstr "Cargar catálogo" # src/gwcatalogmanager.c:116 src/gwcatalogmanager.c:138 # src/gwcatalogmanager.c:1747 src/gwcatalogmanager.c:1785 # src/gwcatalogmanager.c:1837 src/gwcatalogmanager.c:1865 # src/gwcatalogmanager.c:1908 src/gwcatalogmanager.c:1935 # src/gwcatalogmanager.c:116 src/gwcatalogmanager.c:138 # src/gwcatalogmanager.c:1751 src/gwcatalogmanager.c:1789 # src/gwcatalogmanager.c:1841 src/gwcatalogmanager.c:1869 # src/gwcatalogmanager.c:1912 src/gwcatalogmanager.c:1939 #~ msgid "Error : cannot close file." #~ msgstr "Error : no se pudo cerrar el fichero." # src/gwcatalogmanager.c:133 # src/gwcatalogmanager.c:133 #~ msgid "Error : it's not a GWhere file." #~ msgstr "Error : esto no es un fichero de GWhere." # src/gwcatalogmanager.c:186 # src/gwcatalogmanager.c:186 #~ msgid "Error : this GWhere version file is unknown." #~ msgstr "Error : esta versión del archivo GWhere es desconocida." # src/gwcatalogmanager.c:198 # src/gwcatalogmanager.c:198 #~ msgid "Error : cannot close this file after loading." #~ msgstr "Error: no se puede cerrar este fichero despues de cargar." # src/gwcatalogmanager.c:276 src/gwcatalogmanager.c:424 # src/gwcatalogmanager.c:276 src/gwcatalogmanager.c:424 #~ msgid "Error : during the loading of disk." #~ msgstr "Error: durante la carga del disco." # src/gwcatalogmanager.c:1584 src/gwcatalogmanager.c:1731 # src/gwcatalogmanager.c:1587 src/gwcatalogmanager.c:1734 #~ msgid "Error : cannot create file." #~ msgstr "Error: no se pudo crear el fichero." # src/gwcatalogmanager.c:1593 src/gwcatalogmanager.c:1743 # src/gwcatalogmanager.c:1596 src/gwcatalogmanager.c:1747 #~ msgid "Error : cannot write file version." #~ msgstr "Error: no se pudo escribir la versión del fichero." # src/gwcatalogmanager.c:1668 src/gwcatalogmanager.c:1961 # src/gwcatalogmanager.c:1671 src/gwcatalogmanager.c:1965 #~ msgid "Error : cannot close catalog file." #~ msgstr "Error: no se pudo la cerrar el fichero catalogo." # src/gwcatalogmanager.c:1972 # src/gwcatalogmanager.c:1976 #~ msgid "Elapsed time to save the catalog : %d secs" #~ msgstr "Tiempo transcurrido para guardar el catalogo: %d seg" # src/gui/gwnotebookmanagment.c:265 # src/gui/gwnotebookmanagment.c:271 #~ msgid "" #~ "Give the device file of the selected disk. The device file is the one of " #~ "the /etc/fstab file." #~ msgstr "" #~ "Da el fichero del dispositivo del disco seleccionado. El fichero del " #~ "dispositivo es uno del archivo /etc/fstab." # src/gui/gwnotebookmanagment.c:481 # src/gui/gwnotebookmanagment.c:513 #~ msgid "Scan disk" #~ msgstr "Escanear disco" # src/gwsupport.c:356 #~ msgid "unkown" #~ msgstr "desconocido" #~ msgid "Not yet implemented" #~ msgstr "Aún no está implementado" #~ msgid "Is running on GNU/Linux" #~ msgstr "Está ejecutándose en GNU/Linux" #~ msgid "Is running on FreeBSD" #~ msgstr "Está ejecutándose en FreeBSD" #~ msgid "Is running on OpenBSD" #~ msgstr "Está ejecutándose en OpenBSD" #~ msgid "Is running on NetBSD" #~ msgstr "Está ejecutándose en NetBSD" #~ msgid "Is running on MS Windows" #~ msgstr "Está ejecutándose en MS Windows" #~ msgid "Is running on unkown OS" #~ msgstr "Está ejecutándose en un S.O. desconocido." #~ msgid "Total Size" #~ msgstr "Tamaño total" #~ msgid " " #~ msgstr " " #~ msgid "%s %s is running in debug mode\n" #~ msgstr "%s %s está ejecutándose en modo depuración\n" gwhere-0.2.3/po/de.po0000644000175000017500000021450310472436217013020 0ustar bartbart# translation of de.po to deutsch # Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. # Hermann J. Beckers , 2003, 2004. # Hermann J. Beckers , 2005. # msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2005-05-20 14:44GMT\n" "Last-Translator: Hermann J. Beckers \n" "Language-Team: deutsch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.3\n" #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr " Kann keine Daten empfangen" #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "Verbindung vom Client geschlossen\n" #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "Kann Daten nicht senden" #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%.0f Bytes" #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f Kb" #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f Mb" #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f Gb" #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f Tb" #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f Pb" #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f Hb" #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f Ib" #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "_OK" #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "_Abbruch" #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Kategorien editieren" #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "Kategorien-Liste:" #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "Name" #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "Beschreibung" #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "_Aktualisierung" #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" "Erlaubt es, die Eigenschaften der gewählten Kategorie zu aktualisieren. " "Wählen Sie Hinzufügen/Aktualisieren, um die Änderungen zu sichern." #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "_Entfernen" #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" "Entfernt die ausgewählte Kategorie aus der Kategorienliste. Diese Kategorie " "kann nurentfernt werden, wenn sie von keinem Eintrag mehr benutzt wird." #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "Kategorie-Name:" #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "Namen der Kategorie eingeben. " #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "Beschreibung :" #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "Beschreibung der Kategorie eingeben." #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "Hinzufügen / Aktualisieren" #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "Sichere Eigenschaftsänderungen der Kategorie." #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Schliessen" #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Schliesse das Editierfenster für Kategorie-Eigenschaften." #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "keine" #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "Kategorie entfernen" #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "" "Kann diese Kategorie nicht entfernen. Sie wird von einem Eintrag benutzt." #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "Hinzufügen" #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "Aktualisierung" #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "_Nein" #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "Dateioperationen ausblenden" #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "Dateioperationen anzeigen" #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "_Aktion" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "Alles einblenden" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "Nur Platten einblenden" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "Alle einfalten" #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "_Kategorien editieren" #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "Es ist kein Katalog geöffnet; Kategorien können nicht editiert werden." #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "_Datei" #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "_Neu" #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "_Öffnen" #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "_Speichern" #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "Sp_eichern als" #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "Sch_liessen" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "Import" #: src/gui/gwmenufile.c:199 msgid "Export" msgstr "Export" #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "_Eigenschaften" #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "_Letzte Dateien" #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "_Ende" #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Neuer Katalog" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "Es ist keine Katalog-Erweiterung verfügbar" #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "Wollen Sie den Katalog speichern:\n" "\n" #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Neue Datei" #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "Katalognamen eingeben" #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "Katalog öffnen" #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "Öffne Datei" #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Schliesse Datei" #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "Es ist kein Katalog geöffnet" #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "Sende Datei per Email" #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "" "Bitte konfigurieren Sie die Mail-Optionen in den Einstellungen, um Email " "versenden zu können." #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "Speichere als Katalog" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "" "Der aktuelle Katalog wurde nicht gesichert und kann nicht verschickt werden." #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "Katalog-Eigenschaften" #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "Speichere Katalog" #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "Ende" #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "Importiere Katalog von" #: src/gui/gwmenufilecallback.c:1231 msgid "Catalog imported" msgstr "Katalog importiert" #: src/gui/gwmenufilecallback.c:1233 msgid "Catalog is not imported" msgstr "Katalog wurde nicht importiert" #: src/gui/gwmenufilecallback.c:1267 msgid "A catalog is already opened" msgstr "Es ist bereits ein Katalog geöffnet" #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 msgid "Export catalog to" msgstr "Katalog exportieren als" #: src/gui/gwmenufilecallback.c:1291 msgid "Catalog exported" msgstr "Katalog exportiert" #: src/gui/gwmenufilecallback.c:1293 msgid "Catalog is not exported" msgstr "Katalog wurde nicht exportiert" #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "_Hilfe" #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "_Über" #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "_Optionen" #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "_Einstellungen" #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Neu" #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "Öffnen" #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "Speichern" #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "Speichern als" #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "Ende" #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Umbenennen" #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Beschreibung editieren" #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "Eigenschaften" #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "Übertragen nach ..." #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "Volume löschen" #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "Volume-Label ändern" #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "Aus Katalog entfernen" #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "Datei editieren" #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "Kann diese Datei nicht editieren!!\n" #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Katalog umbenennen" #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "Neuen Katalog-Namen eingeben" #: src/gui/gwmenupopupcallback.c:121 msgid "Invalid filled catalog name" msgstr "Eingegebener Katalogname ungültig" #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "Katalog-Beschreibung" #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Volume umbenennen" #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "Neuen Volume-Namen eingeben" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "Der eingegebene Plattenname existiert bereits im aktuellen Katalog" #: src/gui/gwmenupopupcallback.c:374 msgid "No new disk name was filled" msgstr "Es wurde kein neuer Plattenname eingegeben" #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "Neuen Volume-Label eingeben" #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "Volume-Beschreibung" #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "Verzeichnis umbenennen" #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "Neuen Verzeichnis-Namen eingeben" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "" "Der eingetragene Verzeichnis-Name existiert bereits im aktuellen Verzeichnis" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "Es wurde kein neuer Verzeichnisname eingegeben" #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "Verzeichnis-Beschreibung" #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "Datei umbenennen" #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "Neuen Datei-Namen eingeben" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "Der eingegebene Dateiname existiert bereits im aktuellen Verzeichnis" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "Es wurde kein neuer Dateiname eingegeben" #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "Datei-Beschreibung" #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Archiv" #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "Katalog" #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "Schließe Katalog" #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "Bitte warten" #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Katalog geschlossen" #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "unbekannter Eigner" #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "unbekannte Gruppe" #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Neues Volume" #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "Wählen Sie das Volume, welches zum Katalog hinzugefügt wird." #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "Wähle Volume:" #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "" "Geben Sie die Nummer des neuen Volumes ein. Diese Nummer kann bei der " "Verwaltungdes Katalogs hilfreich sein." #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Archiv-Nummer:" #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "" "Geben Sie den Namen des neuen Volumes ein. Dieser Name wird in Ihrem Katalog " "benutzt." #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "Name:" #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "Kategorie : " #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "" "Wählen Sie die Kategorie, die auf das hinzugefügte Volume angewandt wird " "(selbst wenn die Option aktiviert ist)." #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "Gerätedatei des gewählten Volumes angeben." #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Info:" #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "Geben Sie den Typ des Volumes ein (z. B. ext2, ext3, vfat, ntfs, ...)." #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Typ:" #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "Anzeige, ob das gewählte Volume angehängt oder nicht angehängt ist." #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "angehängt:" #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "Volume-Name des gewählten Volumes (wenn angehängt)." #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Volume : " #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "" "Serien-Nummer des gewählten Volumes (wenn angehängt). Diese Nummer ist eine " "Hersteller-Nummer." #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Serien-Nr.:" #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "Geben Sie den vollen Platz des gewählten Volumes an (wenn angehängt)." #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "Kapazität:" #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "Freier Platz des gewählten Volumes (wenn angehängt)." #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Freier Platz:" #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "Optionen" #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "Zeige Info" #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" "Zeigt Informationen zum gewählten Gerät an wie Mount-Punkt, Kapazität, " "freier Platz, Label, ..." #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Automount" #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" "Volume anhängen, wenn es nicht angehängt war. Und Aushängen des Volumes, " "auch wenn es vor dem Scan angehängt war." #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "Baumstruktur der Platte durchsuchen." #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "Diese Option markiert lassen, um alle Ordner und Dateien zu prüfen." #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "Archiv-Dateien durchsuchen (tar, .gz., zip, ...)" #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "Noch nicht implementiert!!\n" "Alle Archive wie Verzeichnisse durchsuchen. Archive sind tar- oder (g)zip-" "Dateien." #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "Volume auswerfen, wenn möglich." #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" "Volume auswerfen, wenn möglich (CD-ROM ...), auch wenn die Schublade " "geschlossen ist. Dies ist nur möglich, wenn Automount aktiviert ist!!" #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "Setzt die Kategorie rekursiv" #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "" "Wende gewählte Kategorie auf alle Einträge in der hinzuzufügenden Platte " "anwenden (Volume, Ordner, Dateien)." #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "Beschreibung automatisch erstellen" #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "" "Erstellt Beschreibung der Datei (Dateiformat-Beschreibung, Bildgröße für xmp " "oder jpg, usw. ...) automatisch." #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "Benutze ein erweitertes Muster zur Generierung des Plattennamens." #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Sie können zusätzliche Markierungen nutzen, um einen Plattennamen mit " "Platteninformationen zu generieren :\n" "- %% : %\n" "- %n : Archiv nummerieren (Sie können 0 als Präfix benutzen: %.4n gibt 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : Volume-Label der Platte\n" "- %t : Plattentyp\n" "- %s : Serien-Nummer" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "" "Volume-Namen als Platten-Namen benutzen (nur wenn Plattenname leer ist)" #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" "Wenn Sie keinen Plattennamen angegeben haben und das gewählte Gerät über " "einen Volume-Namen verfügt, wird dieser als Plattenname benutzt." #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "Neues Volume hinzufügen " #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Verwaltung" #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "Laufwerk wurde nicht hinzugefügt: Es sind keine Geräte angehangen" #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "Laufwerk wurde nicht hinzugefügt: Kann Gerät nicht anhängen" #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "Neues Volume hinzufügen" #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "Volume-Namen eingeben" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "Suche" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "Laufwerk hinzufügen aktiv" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "Bitte warten" #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "Laufwerk wurde hinzugefügt." #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Mount nicht erfolgreich\n" #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Serien-Nr.:" #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "kein Laufwerk" #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "unbekannte" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Ja" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "Nein" #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "Kein Label" #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Volume-Name:" #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "Laufwerk hinzufügen wurde abgebrochen" #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "Bitte wählen Sie einen Katalog-Namen\n" #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "Suche:" #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "Suche" #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "Die Suche unterscheidet Groß-/Kleinschreibung und unterstützt \"*\".\n" "Beispiele: img*.bmp oder *.htm\n" "Die Schlüsselwortsuche akzeptiert Wörter, die vorhanden sein müssen." #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "Löschen" #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "Löscht alle Such-Ergebnisse" #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "Gross-/Kleinschreibung" #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "Die Suche kann zwischen Gross-/Kleinschreibung unterscheiden.\n" "Bei Unterscheidung ist \"File.txt\" nicht gleich \"file.txt\". Bei Nicht-" "Differenzierung wird Gleichheit angenommen." #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "Suche Typ" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "Schlüsselworte" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "" "Geben Sie eine Liste von Schlüsselworten ein, die alle in den Trefferdateien " "enthalten sein müssen." #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "Platzhalter" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "" "Geben Sie vollständige Muster ein. Diese Muster können \"?\" und \"*\" " "enthalten." #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "Regulärer Ausdruck" #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "" "Kann reguläre Ausdrücke benutzen. S. Dokumentation für weitere Information." #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "Datei" #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "Die Suche trifft auf Dateiname zu." #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "Verzeichnis" #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "Die Suche trifft auf den Ordnernamen zu." #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "Platte" #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "Die Suche trifft auf den Plattennamen zu." #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "Kategorie" #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "Die Suche passt auf den Kategorienname zu." #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "Die Suche trifft auf die Beschreibungen zu." #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "In Katalog suchen" #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "%lu Einträge gefunden." #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "Such-Ergebnis" #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "Keinen passenden Eintrag gefunden." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "Suche ..." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "Kann Suche nicht beginnen: Kein Katalog geladen" #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "_OK" #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "Namen des Katalogs eingeben." #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "Version:" #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "Version " #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr "erstellt mit " #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "Volume in Katalog: " #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "Datenträger im Katalog: %d" #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Gesamtzahl Dateien:" #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, c-format msgid "Total Files : %ld" msgstr "Gesamtzahl Dateien: %ld" #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "Gesamtzahl Verzeichnisse:" #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, c-format msgid "Total Folders : %ld" msgstr "Gesamtzahl Verzeichnisse: %ld" #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "Datei-Größe:" #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Gesamt-Speicherplatz:" #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "insg. benutzter Platz:" #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "insg. freier Platz:" #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "Volume-Statistik:" #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "Cd-Rom:" #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "Cd-Rom: %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "Audio CD: " #: src/gui/gwpropertiesbox.c:577 #, c-format msgid "Audio CD : %d" msgstr "Audio CD: %d" #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "HD:" #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "HD: %d" #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "Floppy:" #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "Floppy: %d" #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip:" #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip: %d" #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 msgid "Tape : " msgstr "Band:" #: src/gui/gwpropertiesbox.c:649 #, c-format msgid "Tape : %d" msgstr "Band: %d" #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "Netzwerk:" #: src/gui/gwpropertiesbox.c:666 #, c-format msgid "Network : %d" msgstr "Netzwerk: %d" #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 msgid "Jaz : " msgstr "Jaz: " #: src/gui/gwpropertiesbox.c:683 #, c-format msgid "Jaz : %d" msgstr "Jaz: %d" #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "sonstige:" #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "sonstige: %d" #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Katalog-Kategorien : " #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "Katalog-Beschreibung:" #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Katalog-Info" #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "Namen des Volumes eingeben." #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "Archiv-Nummer des Volumes eingeben." #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr " Typ: " #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "Serien-Nr.:" #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "Volume-Label:" #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "Gesamt-Kapazität:" #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "benutzter Platz:" #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "freier Platz:" #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "Katalog-Name:" #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "in Katalog aktualisieren:" #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "Volume-Beschreibung:" #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Platten-Info" #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "Ordner-Name" #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Typ: (Verzeichnis)" #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "Verzeichnis-Größe:" #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "erstellt am:" #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "zuletzt geändert am:" #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "letzter Zugriff am:" #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Rechte:" #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "Eigentümer:" #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "Gruppe:" #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "Volume-Name:" #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "Speicherort auf Volume:" #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "Verzeichnis-Beschreibung:" #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Verzeichnis-Info" #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "Datei-Name: " #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Datei-Typ: noch nicht implementiert!!" #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "Datei-Größe: %s (%s Bytes)" #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "Datei-Beschreibung:" #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Datei-Info" #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "Katalog-Datei" #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Katalog-Komprimierungs-Level: " #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "" "Wählt den Komprimierungs-Level für den Katalog. Fehlwert ist 3, dies ist ein " "guter Kompromiß zwischen guter Performanz und geringer Größe." #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Zuletzt geöffnete Kataloge:" #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "Wählt die Anzahl zuletzt geöffneter Kataloge. Fehlwert ist 5." #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "Verlauf löschen" #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "Klicken Sie hier, um die zuletzt geöffneten Dateien zu löschen." #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Katalog automatisch laden" #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "Lädt beim Start automatisch eine Katalog-Datei." #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "Lade letzte geöffnete Katalog-Datei." #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "Lade selektierte Katalog-Datei." #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "Geben Sie den vollständigen Pfad der zu ladenden Katalogdatei ein." #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "Katalog wählen" #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "Klicken Sie hier um die Katalog-Datei zu wählen." #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "Auto-Katalog wählen" #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "Explorer" #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "Sortierung mit Gross-/Kleinschreibung" #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "Das Sort-Ergebnis im Explorer berücksichtigt Groß-/Kleinschreibung." #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Gruppiere Sort-Ergebnis nach Ordner/Datei." #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" "Das Sortier-Ergebnis im Explorer kann nach dem Typ gruppiert werden. Wenn " "diese Option aktiviert ist, werden alle Einträge nach Ordner oder Datei " "gruppiert." #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Spalten automatisch anpassen" #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "Passt alle Explorer-Spalten automatisch an. " #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "Platten" #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "Sichtbar" #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Verstecken" #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "Zeige" #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "Versteckt" #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Dateien" #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "Das Sortier-Ergebnis in der Suche unterscheidet Groß-/Kleinschreibung." #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Sortier-Ergebnis nach Typ gruppiert." #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" "Das Sortier-Ergebnis in der Suche kann nach dem Typ gruppiert werden. Wenn " "diese Option aktiviert ist, werden alle Einträge nach Katalog, Platte, " "Ordner und Datei gruppiert." #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "Alle Schlüsselworte müssen vorhanden sein" #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" "Wählen Sie, ob alle Schlüsselworte oder nur eins mit dem Eintrag " "übereinstimmen muss, um Bestandteil des Such-Ergebnisses zu werden." #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "Schnell" #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "Allgemeine Optionen" #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "GUI" #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "GUI-Eigenschaft bei Ende speichern" #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "Speichere GUI-Eigenschaften wie Window-Position und -Größe." #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "Ton zulassen" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "Erlaubt die Ausgabe eines kurzen Tons für einige Ereignisse." #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Email" #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "Email-Adresse:" #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "Geben Sie Ihre Email-Adresse ein." #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "Mailserver:" #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "" "Geben Sie den Mailserver an. Dies ist normalerweise mail.Ihre_Domain.de" #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Server-Port:" #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "Geben Sie den Port des Mailservers an (zumeist 53)." #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "" "Dieses Einstellungsfenster erlaubt Ihnen die Konfiguration einiger " "Funktionalitäten und Eigenschaften des Programms." #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "Einstellungen" #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "Wählen Sie den zu konfigurierenden Abschnitt." #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "" "Ändern Sie in diesem Panel alle verfügbaren Eigenschaften, um das Programm " "nach Ihren Wünschen zu konfigurieren." #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "" "Dieses Einstellungsfenster erlaubt Ihnen die Konfiguration des Programmes. " "Einige Eigenschaften können hier verändert werden." #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "" "Klicken Sie auf den OK-Schalter, um die Änderungen anzuwenden und das " "Einstellungen-Fenster zu schliessen. " #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "" "Klicken Sie auf die Abbruch-Schaltfläche, um die Änderungen zu verwerfen und " "das Einstellungen-Fenster zu schliessen." #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "_Anwenden" #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "" "Klicken Sie auf die Anwenden-Schaltfläche, um die Änderungen zu aktivieren " "(ohne das Einstellungen-Fenster zu schliessen)." #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "Einstellungen geändert" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "" "Wenn Sie die Änderungen nicht anwenden, gehen alle Änderungen verloren. " "Sollen die Änderungen angewandt werden?" #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], Platten gesamt : %d" #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr " aufgeführte Einträge: %d (Gesamtgröße: %s)" #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], Kapazität: %s, frei: %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr " Leeres Laufwerk" #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr "gewählter Eintrag: %d (Gesamtgröße: %s)" #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr " Ordner \"%s\", %s (Dateien %d, Unterordner %d)" #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr " %s, %s, %s" #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr "gewählter Eintrag: %d" #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr " Katalog-Explorer:" #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr "Such-Maschine" #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr "Katalog-Verwaltung" #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Katalog schliessen" #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "Katalog per Email versenden" #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "Über" #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "Katalog-Verwaltung für Wechselmedien\n" "By Sébastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" "GWhere erlaubt die Verwaltung einer Datenbank Ihrer CDs und anderer " "Wechselmedien (Festplatten, Floppies, Zip-Disketten, CD-ROM usw. ...). Mit " "GWhere ist es sehr einfach, Ihre CDs zu durchsuchen oder eine Schnellsuche " "durchzuführen ohne jedesmal die CD ins Laufwerk zu stecken." #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Läuft auf " #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "" "Dieses Fenster erlaubt Ihnen den Versand einer Katalogdatei per Email an " "einen (oder mehrere) Ihrer Kontakt(e)." #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "Email senden" #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "An:" #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "CC: " #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "BCC:" #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "Thema:" #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "Geben Sie die Email-Adresse(n) an." #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "Geben Sie hier die Emailadresse(n) an, die Kopien erhalten." #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "" "Geben Sie hier die Email-Adresse(n) an, die versteckte Kopien erhalten." #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "Geben Sie hier den Betreff Ihrer Email an." #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "Angehängte Datei:" #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "Wählen Sie, ob Sie die Katalogdatei (nicht) anhängen wollen." #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "Geben Sie hier den Text der Email ein." #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "_Senden" #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "Klicken Sie hier um eine Email (mit angehängtem Katalog) zu versenden." #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "Klicken Sie hier, um den Versand der Email abzubrechen." #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "Versende Email, bitte warten ..." #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "" "Während des Sendens trat ein Fehler auf. Prüfen Sie bitte Ihre Parameter." #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Kann pixmap-Datei %s nicht finden" #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "Fehler beim Laden der Pixmap-Datei: %s" #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "Fehler: kann aktuellen Ordner nicht lesen." #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "Fehler: kann nicht auf Arbeitsverzeichnis zugreifen." #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "Laufwerk wurde nicht hinzugefügt\n" "Hinzufügen durch Benutzer abgebrochen" #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "Laufwerk wurde nicht hinzugefügt\n" #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "%s außerhalb des dem Prozeß zugeordneten Adressraumes." #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" "Ein Teil des folgenden Pfadnamens überschreitet %d Zeichen, oder ein " "gesamter Pfadname überschreitet %d Zeichen: %s. " #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "Das folgende Verzeichnis existiert nicht: %s." #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "Nicht genügend Speicher zum Beenden der Operation." #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "Ein Teil des Pfad-Prefixes ist kein Verzeichnis: %s." #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "Zu viele symbolische Links bei der Auflösung des folgenden Pfads: %s." #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "I/O-Fehler bei Wechsel zu Verzeichnis: %s." #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "unbekannter Fehler" #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" "Laufwerk wurde nicht hinzugefügt\n" "Fehler: kann nicht in Eltern-Verzeichnis wechseln." #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Vom Prozeß werden zuviele Dateideskriptoren benutzt." #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Derzeit sind im System zu viele Dateien geöffnet." #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "Das folgende Verzeichnis existiert nicht oder der Name ist leer: %s." #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "Das folgende Verzeichnis ist kein Verzeichnis: %s." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" "Beim Auslesen der Dateiinformation von %s%s%s trat ein schwerer Fehler auf \n" "Speichen Sie Ihren Katalog, wenn möglich, beenden Sie GWhere und informieren " "Sie bitte das GWhere Projektteam über diesen Fehler." #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" "Das Laufwerk wurde nicht hinzugefügt\n" "Fehler: kann aktuellen Ordner nicht schliessen." #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "Läuft auf %s" #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Katalog geladen" #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "Fehler beim Katalog-Laden" #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "Lade Katalog" #: src/gwapplicationmanager.c:499 msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "" "Der Katalog ist ungültig oder existiert nicht. Überprüfen Sie bitte Ihren " "Katalogpfad." #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "Speichere Katalog " #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Katalog gespeichert" #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "Fehler beim Katalog-Speichern" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Rechte" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "Eigentümer" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "Gruppe" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "Größe" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "Inode" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Zugriffsdatum" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Veränderungsdatum" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "erstellt am:" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "Dateisystem-Name: " #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "Zugriffspfad" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Archiv-Nr." #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Typ" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Volume-Name" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "Gesamt-Kapazität:" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "freier Platz" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Datum" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Serien-Nr.:" #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "Pfad" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "Voll" #: win32/config.h:288 msgid "Compact" msgstr "Kompakt" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (erforderlich)" #: win32/config.h:290 msgid "Main engine application." msgstr "Hauptanwendung." #: win32/config.h:291 msgid "GTK+ 2.6 RunTime (required)" msgstr "GTK+ 2.6 Laufzeit-Umgebung (erforderlich)" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "Laufzeit-Umgebung für die grafische Oberfläche." #: win32/config.h:293 msgid "Plugins" msgstr "Erweiterunge" #: win32/config.h:294 msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "" "Erweiterungen für autom. Extraktion der Dateibeschreibungen und " "Erweiterungen für Katalog-Import/Export." #: win32/config.h:295 msgid "Languages Files" msgstr "Sprachdateien" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "Alle Sprachdateien für die Programm-Übersetzung." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "Sie müssen die vorherige Version von GWhere deinstallieren." #: win32/config.h:298 msgid "Installer already running" msgstr "Installationsprogramm bereits aktiv" #: win32/config.h:299 msgid "Install options" msgstr "Installations-Optionen" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "Welche Benutzer können GWhere starten ?" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "GWhere Installation der Zugriffsrechte" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" "GWhere kann für alle oder nur den aktuellen Benutzer installiert werden. " "Wählen Sie bitte, wie GWhere installiert werden soll." #: win32/config.h:303 msgid "All users|Current user" msgstr "Alle Benutzer|Aktueller Benutzer" #: win32/config.h:304 msgid "All users" msgstr "Alle Benutzer" #~ msgid "" #~ "The catalog file doesn't exists. Check your catalog file path please." #~ msgstr "" #~ "Die Katalogdatei existiert nicht. Überprüfen Sie bitte Ihre Katalogdatei." #~ msgid "" #~ "The catalog file to load doesn't have a good file extension. Only .ctg " #~ "files are allowed to be loaded." #~ msgstr "" #~ "Die zu ladende Katalogdatei hat keine richtige Datei-Erweiterung. Nur ." #~ "ctg-Dateien sind zulässig." #~ msgid "Load file" #~ msgstr "Lade Datei" #~ msgid "Error : cannot open this file." #~ msgstr "Fehler: kann diese Datei nicht öffnen." #~ msgid "Error : cannot read the file version." #~ msgstr "Fehler: kann die Datei-Version nicht lesen." #~ msgid "Load catalog" #~ msgstr "Lade Katalog" #~ msgid "Error : cannot close file." #~ msgstr "Fehler: kann Datei nicht schließen." #~ msgid "Error : it's not a GWhere file." #~ msgstr "Fehler: Dies ist keine GWhere-Datei." #~ msgid "Error : this GWhere version file is unknown." #~ msgstr "Fehler: diese GWhere Versions-Datei ist unbekannt." #~ msgid "Error : cannot close this file after loading." #~ msgstr "Fehler: kann diese Datei nach dem Laden nicht schliessen." #~ msgid "Error : during the loading of disk." #~ msgstr "Fehler: während des Ladens des Volumens." #~ msgid "Error : cannot create file." #~ msgstr "Fehler: kann Datei nicht anlegen." #~ msgid "Error : cannot write file version." #~ msgstr "Fehler: kann Datei-Version nicht schreiben." #~ msgid "Error : cannot close catalog file." #~ msgstr "Fehler: kann Katalog-Datei nicht schliessen." #~ msgid "Elapsed time to save the catalog : %d secs" #~ msgstr "Benötigte Zeit zum Speichern des Katalogs: %d Sek." #~ msgid "" #~ "Give the device file of the selected disk. The device file is the one of " #~ "the /etc/fstab file." #~ msgstr "" #~ "Geben Sie die Gerätedatei des Volumes ein. Die Gerätedatei findet sich in " #~ "der /etc/fstab-Datei." #~ msgid "Scan disk" #~ msgstr "Volume durchsuchen" #~ msgid "unkown" #~ msgstr "unbekannte" #~ msgid "Not yet implemented" #~ msgstr "Noch nicht implementiert" #~ msgid "Is running on GNU/Linux" #~ msgstr "Läuft auf GNU/Linux" #~ msgid "Is running on FreeBSD" #~ msgstr "Läuft auf FreeBSD" #~ msgid "Is running on OpenBSD" #~ msgstr "Läuft auf FreeBSD" #~ msgid "Is running on NetBSD" #~ msgstr "Läuft auf NetBSD" #~ msgid "Is running on MS Windows" #~ msgstr "Läuft auf MS Windows" #~ msgid "Is running on unkown OS" #~ msgstr "Läuft auf unbekanntem BS" #~ msgid "Cancel" #~ msgstr "Abbruch" #~ msgid "Ok" #~ msgstr "OK" #~ msgid "Total Size" #~ msgstr "Gesamt-Größe" #~ msgid " " #~ msgstr " " #~ msgid "%s %s is running in debug mode\n" #~ msgstr "%s %s läuft im Debug-Modus \n" gwhere-0.2.3/po/de.gmo0000644000175000017500000011052110472436234013156 0ustar bartbartÞ•·Ô KŒ¸$ ¹$aÇ$$)%N% k%w%‰% œ%*¨%$Ó%ø%&%&A& J& W&b&j&r&z&‚&Š&’&š&1¯&á&qý&7o'°§'X(_( e( q(}( (Ž( —(¤(»(0Ô( )) &)+1)m])4Ë)J*RK*ž* ¦* ±*¿* Ï* Û*é*ÿ*-+ >+H+h+{++ †+ +œ+ £+C±+õ+1 ,?,S,*d, ,›,ª,¿,Ç, Þ,ë,û,- -<-P- a-n--—-¯-¾- Ñ-ß-ò- û-.\.u.n‰.(ø.!/ '/5/1O/(/5ª/5à/H0D_0?¤0ä0 ê0 ø0,101@1H1d1 ‚1 1ž1 £1 ¯1»1Ê1Ï1 ã1 í1ú1 22$282/N2 ~2M‹2Ù2ß2ð23 33r33¦3L¶3449&4@`43¡4#Õ4ù45$5@5T5%j5&5)·5Rá546S6s6I6\Ù6C67z7L”7"á7$8)8G8L8,_8$Œ8±8º8Á8Ó8Ø8 ì8 ö899 .9;9!L9n9 t9 ~9Š9‘9 §9 ³9¿9Î9 á9 ï9 ú9: ::7:;:N:pO;À;Ý;+î;?<?Z<gš<G=@J=‹=‘=š= =¨=¯=´=É=Ï=PO> >§>»>Ã>Ó>.í>?8?I?P?DY? ž?¨?¸?Ì?à?ÿ?@+@B@V@[@[t@ Ð@Û@ í@iû@ eA pA{A€A ˆA “A A ¤A°A¹AÂAÅA-ÚABB"B>BZBhxBáB æB óBýBC CC1C7C@CEEC‹C ©CµCÄCeÌC 2D=DCDIDcDvD†D…šD E'E 6E BE NE!\E~E™E  EªEÇEÐE0ÕEF"F*F :F$GFlF{F‘F šF¤F «FµF ÇF ÕF áFîFGGx'G] G<þG ;HK\H¨H½H ÏHÙH öH I II ,I:IRI[IlIqI…I ŠI”I œII¦I5ðI&J>J2ZJ?J>ÍJ/ K8gMgTg ig vgƒg•g©g±gÅgCàg $h_/hh•h«hÀh×hçhŠi’ic¡ijj;1jGmj"µj*Øjk k‘c9lÄrBEi)8f ±k[È´xkV3ÜI“*Ž£r~Å'w¡.”ß4×™Ÿ=îžt ‰¥7ygR`s·ZALž›¢,–|«ÖbÛz 'l#µ@&zÇDq<ñ·jsu䜤#ã£|ˆïÎýÊ)€¤7Ó^ÿF ê¯!—%hZ>dœ™.Xm(´ÌNóÑ0a®\³ÍŒEchKªSQ LØìHϦ«!]CËŸŠæŽ/ U•먗]ÚÝ‚g³T(þ9‡8­RT‚An²µ»5a"Д©ð6¹˜$u±{P¶;¿Cšàv…§piø€OÙå@Šo?É ©+0‹}-‘^‹†4m~š%‘§ õqF¦Y2 {„<ª•°â ²/ç;>G¯í¢¬÷Ã?Þb\ V1ÆpáÂ_½WYe6G$›ô5†ºÀÔ `NKSnI2[QyB… }o&Xƒ­U–Œ¾°„è‰-H_=˜*MMW¬f3¨+ü¡ûv,dòO“öJ‡¼¥wù"DP’újƒ:Á¸¶1 ÕetÒé®Jˆ:’x Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Empty disk Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A catalog is already openedA component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A critical error occured when extracting file information of %s%s%s. Save your catalog if it is possible, exit GWhere and report this trouble to the GWhere project team please.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.All usersAll users|Current userAllow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Audio CD : Audio CD : %dAuto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog exportedCatalog fileCatalog importedCatalog is not exportedCatalog is not importedCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerExportExport catalog toFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGTK+ 2.6 RunTime (required)GUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.GWhere can be installed for all users or only for current user. Select for which you want install GWhere please.GWhere install rights accessGenerals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?ImportImport catalog fromInfo : Install optionsInstaller already runningInsufficient memory to complete the operation.Invalid filled catalog nameIs running on %sJaz : Jaz : %dKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : Network : Network : %dNewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new disk name was filledNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPlugins for auto extraction of file descriptions and plugins for importation/exportation of catalogs.PropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :Tape : Tape : %dThe catalog is invalid or doesn't exists. Check your catalog path please.The current catalog is never be saved, cannot send itThe disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled disk name already exist in the current catalogThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.There is no available catalog pluginThis Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Files : %ldTotal Folders : Total Folders : %ldTotal Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : Which users can run GWhere ?WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberYou must uninstall your last version of GWhereZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: de Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2005-05-20 14:44GMT Last-Translator: Hermann J. Beckers Language-Team: deutsch MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Generator: KBabel 1.3 Läuft auf Katalog-Verwaltung für Wechselmedien By Sébastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], Kapazität: %s, frei: %s %s [ %s ], Platten gesamt : %d %s, %s, %s Katalog-Explorer:Katalog-Verwaltung Leeres Laufwerk Ordner "%s", %s (Dateien %d, Unterordner %d) aufgeführte Einträge: %d (Gesamtgröße: %s)Such-Maschinegewählter Eintrag: %dgewählter Eintrag: %d (Gesamtgröße: %s) Typ: erstellt mit %.0f Bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu Einträge gefunden.%s außerhalb des dem Prozeß zugeordneten Adressraumes.Es ist bereits ein Katalog geöffnetEin Teil des folgenden Pfadnamens überschreitet %d Zeichen, oder ein gesamter Pfadname überschreitet %d Zeichen: %s. Ein Teil des Pfad-Prefixes ist kein Verzeichnis: %s.Beim Auslesen der Dateiinformation von %s%s%s trat ein schwerer Fehler auf Speichen Sie Ihren Katalog, wenn möglich, beenden Sie GWhere und informieren Sie bitte das GWhere Projektteam über diesen Fehler._ÜberÜberZugriffsdatumZugriffspfadHinzufügenHinzufügen / AktualisierenNeues Volume hinzufügen Neues Volume hinzufügenLaufwerk hinzufügen aktivAlle Schlüsselworte müssen vorhanden seinAlle Sprachdateien für die Programm-Übersetzung.Alle BenutzerAlle Benutzer|Aktueller BenutzerTon zulassenErlaubt die Ausgabe eines kurzen Tons für einige Ereignisse.Erlaubt es, die Eigenschaften der gewählten Kategorie zu aktualisieren. Wählen Sie Hinzufügen/Aktualisieren, um die Änderungen zu sichern.I/O-Fehler bei Wechsel zu Verzeichnis: %s.Während des Sendens trat ein Fehler auf. Prüfen Sie bitte Ihre Parameter.Wende gewählte Kategorie auf alle Einträge in der hinzuzufügenden Platte anwenden (Volume, Ordner, Dateien).ArchivArchiv-Nr.Archiv-Nummer:Angehängte Datei:Audio CD: Audio CD: %dBeschreibung automatisch erstellenKatalog automatisch ladenLädt beim Start automatisch eine Katalog-Datei.AutomountPasst alle Explorer-Spalten automatisch an. Spalten automatisch anpassenBCC:CC: Cd-Rom:Cd-Rom: %dSch_liessenAlle einfaltenKann reguläre Ausdrücke benutzen. S. Dokumentation für weitere Information.Kann diese Datei nicht editieren!! Kann diese Kategorie nicht entfernen. Sie wird von einem Eintrag benutzt. Kann keine Daten empfangenKann Daten nicht sendenKann Suche nicht beginnen: Kein Katalog geladenKapazität:Gross-/KleinschreibungSortierung mit Gross-/KleinschreibungKatalogKatalog-Beschreibung:Katalog-InfoKatalog-Name:Katalog-Kategorien : Katalog geschlossenKatalog-Komprimierungs-Level: Katalog-BeschreibungKatalog exportiertKatalog-DateiKatalog importiertKatalog wurde nicht exportiertKatalog wurde nicht importiertKatalog geladenKatalog-EigenschaftenKatalog gespeichertKategorien-Liste:KategorieKategorie : Kategorie-Name:Ändern Sie in diesem Panel alle verfügbaren Eigenschaften, um das Programm nach Ihren Wünschen zu konfigurieren.Volume-Label ändernWählen Sie, ob alle Schlüsselworte oder nur eins mit dem Eintrag übereinstimmen muss, um Bestandteil des Such-Ergebnisses zu werden.Wählen Sie, ob Sie die Katalogdatei (nicht) anhängen wollen.LöschenVerlauf löschenLöscht alle Such-ErgebnisseKlicken Sie hier um die Katalog-Datei zu wählen.Klicken Sie hier, um den Versand der Email abzubrechen.Klicken Sie hier, um die zuletzt geöffneten Dateien zu löschen.Klicken Sie hier um eine Email (mit angehängtem Katalog) zu versenden.Klicken Sie auf die Anwenden-Schaltfläche, um die Änderungen zu aktivieren (ohne das Einstellungen-Fenster zu schliessen).Klicken Sie auf die Abbruch-Schaltfläche, um die Änderungen zu verwerfen und das Einstellungen-Fenster zu schliessen.Klicken Sie auf den OK-Schalter, um die Änderungen anzuwenden und das Einstellungen-Fenster zu schliessen. SchliessenKatalog schliessenSchliesse DateiSchliesse das Editierfenster für Kategorie-Eigenschaften.Schließe KatalogKompaktVerbindung vom Client geschlossen Kann pixmap-Datei %s nicht findenerstellt am:erstellt am:DatumVolume löschenBeschreibungBeschreibung :PlatteVolume-Beschreibung:Platten-InfoVolume-Name:Volume-Statistik:Volume-BeschreibungPlattenVolume in Katalog: Datenträger im Katalog: %dAnzeige, ob das gewählte Volume angehängt oder nicht angehängt ist.Zeige InfoZeigt Informationen zum gewählten Gerät an wie Mount-Punkt, Kapazität, freier Platz, Label, ..._Ende_Kategorien editierenKategorien editierenBeschreibung editierenDatei editierenVolume auswerfen, wenn möglich.Volume auswerfen, wenn möglich (CD-ROM ...), auch wenn die Schublade geschlossen ist. Dies ist nur möglich, wenn Automount aktiviert ist!!Email-Adresse:Geben Sie eine Liste von Schlüsselworten ein, die alle in den Trefferdateien enthalten sein müssen.Katalognamen eingebenVolume-Namen eingebenGeben Sie hier die Emailadresse(n) an, die Kopien erhalten.Geben Sie hier die Email-Adresse(n) an, die versteckte Kopien erhalten.Geben Sie die Email-Adresse(n) an.Geben Sie hier den Betreff Ihrer Email an.Neuen Katalog-Namen eingebenNeuen Volume-Namen eingebenNeuen Volume-Label eingebenNeuen Datei-Namen eingebenNeuen Verzeichnis-Namen eingebenArchiv-Nummer des Volumes eingeben.Beschreibung der Kategorie eingeben.Geben Sie den vollständigen Pfad der zu ladenden Katalogdatei ein.Geben Sie vollständige Muster ein. Diese Muster können "?" und "*" enthalten.Namen des Katalogs eingeben.Namen der Kategorie eingeben. Namen des Volumes eingeben.Geben Sie den Namen des neuen Volumes ein. Dieser Name wird in Ihrem Katalog benutzt.Geben Sie die Nummer des neuen Volumes ein. Diese Nummer kann bei der Verwaltungdes Katalogs hilfreich sein.Geben Sie den Port des Mailservers an (zumeist 53).Geben Sie Ihre Email-Adresse ein.Geben Sie den Mailserver an. Dies ist normalerweise mail.Ihre_Domain.deFehler: kann aktuellen Ordner nicht lesen.Fehler: kann nicht auf Arbeitsverzeichnis zugreifen.Fehler beim Laden der Pixmap-Datei: %sEndeNur Platten einblendenArchiv-Dateien durchsuchen (tar, .gz., zip, ...)Baumstruktur der Platte durchsuchen.ExplorerExportKatalog exportieren alsDateiDatei-Beschreibung:Datei-InfoDatei-Größe:Datei-Größe: %s (%s Bytes)Datei-BeschreibungDatei-Name: Dateisystem-Name: Datei-Typ: noch nicht implementiert!!DateienFloppy:Floppy: %dVerzeichnisVerzeichnis-Beschreibung:Verzeichnis-InfoOrdner-NameVerzeichnis-Größe:Verzeichnis-Beschreibungfreier Platz:freier PlatzFreier Platz:VollGesamt-Kapazität:GTK+ 2.6 Laufzeit-Umgebung (erforderlich)GUIGWhere (erforderlich)GWhere erlaubt die Verwaltung einer Datenbank Ihrer CDs und anderer Wechselmedien (Festplatten, Floppies, Zip-Disketten, CD-ROM usw. ...). Mit GWhere ist es sehr einfach, Ihre CDs zu durchsuchen oder eine Schnellsuche durchzuführen ohne jedesmal die CD ins Laufwerk zu stecken.GWhere kann für alle oder nur den aktuellen Benutzer installiert werden. Wählen Sie bitte, wie GWhere installiert werden soll.GWhere Installation der ZugriffsrechteAllgemeine OptionenGerätedatei des gewählten Volumes angeben.Freier Platz des gewählten Volumes (wenn angehängt).Geben Sie den vollen Platz des gewählten Volumes an (wenn angehängt).Serien-Nummer des gewählten Volumes (wenn angehängt). Diese Nummer ist eine Hersteller-Nummer.Geben Sie den Typ des Volumes ein (z. B. ext2, ext3, vfat, ntfs, ...).Volume-Name des gewählten Volumes (wenn angehängt).GruppeGruppe:HD:HD: %dVerstecktVersteckenDateioperationen ausblendenInodeWenn Sie keinen Plattennamen angegeben haben und das gewählte Gerät über einen Volume-Namen verfügt, wird dieser als Plattenname benutzt.Wenn Sie die Änderungen nicht anwenden, gehen alle Änderungen verloren. Sollen die Änderungen angewandt werden?ImportImportiere Katalog vonInfo:Installations-OptionenInstallationsprogramm bereits aktivNicht genügend Speicher zum Beenden der Operation.Eingegebener Katalogname ungültigLäuft auf %sJaz: Jaz: %dDiese Option markiert lassen, um alle Ordner und Dateien zu prüfen.SchlüsselworteSprachdateienletzter Zugriff am:zuletzt geändert am:Lade letzte geöffnete Katalog-Datei.Lade selektierte Katalog-Datei.Lade KatalogFehler beim Katalog-LadenSpeicherort auf Volume:EmailHauptanwendung.Erstellt Beschreibung der Datei (Dateiformat-Beschreibung, Bildgröße für xmp oder jpg, usw. ...) automatisch.VerwaltungVeränderungsdatumMount nicht erfolgreich Volume anhängen, wenn es nicht angehängt war. Und Aushängen des Volumes, auch wenn es vor dem Scan angehängt war.angehängt:Übertragen nach ...NameName:Netzwerk:Netzwerk: %dNeuNeuer KatalogNeues VolumeNeue DateiNeinEs ist kein Katalog geöffnetEs ist kein Katalog geöffnet; Kategorien können nicht editiert werden.Keinen passenden Eintrag gefunden.Kein LabelEs wurde kein neuer Plattenname eingegebenEs wurde kein neuer Dateiname eingegebenEs wurde kein neuer Verzeichnisname eingegebenNoch nicht implementiert!! Alle Archive wie Verzeichnisse durchsuchen. Archive sind tar- oder (g)zip-Dateien.ÖffnenKatalog öffnenÖffne DateiOptionensonstige:sonstige: %dMailserver:EigentümerEigentümer:PfadBitte konfigurieren Sie die Mail-Optionen in den Einstellungen, um Email versenden zu können.Bitte wählen Sie einen Katalog-Namen Bitte wartenBitte wartenErweiterungeErweiterungen für autom. Extraktion der Dateibeschreibungen und Erweiterungen für Katalog-Import/Export.EigenschaftenSchnellEndeZuletzt geöffnete Kataloge:Regulärer AusdruckKategorie entfernenAus Katalog entfernenEntfernt die ausgewählte Kategorie aus der Kategorienliste. Diese Kategorie kann nurentfernt werden, wenn sie von keinem Eintrag mehr benutzt wird.UmbenennenKatalog umbenennenVolume umbenennenDatei umbenennenVerzeichnis umbenennenGruppiere Sort-Ergebnis nach Ordner/Datei.Sortier-Ergebnis nach Typ gruppiert.RechteRechte:Laufzeit-Umgebung für die grafische Oberfläche.Sp_eichern alsSpeichernSpeichere GUI-Eigenschaften wie Window-Position und -Größe.GUI-Eigenschaft bei Ende speichernSpeichern alsSpeichere als KatalogSpeichere KatalogSichere Eigenschaftsänderungen der Kategorie.Speichere Katalog Fehler beim Katalog-SpeichernSuche_EinstellungenSucheSuche:In Katalog suchenSuch-ErgebnisSuche TypSuche ...Auto-Katalog wählenKatalog wählenWähle Volume:Wählt den Komprimierungs-Level für den Katalog. Fehlwert ist 3, dies ist ein guter Kompromiß zwischen guter Performanz und geringer Größe.Wählen Sie die Kategorie, die auf das hinzugefügte Volume angewandt wird (selbst wenn die Option aktiviert ist).Wählen Sie das Volume, welches zum Katalog hinzugefügt wird.Wählen Sie den zu konfigurierenden Abschnitt.Wählt die Anzahl zuletzt geöffneter Kataloge. Fehlwert ist 5.Katalog per Email versendenSende Datei per EmailEmail sendenVersende Email, bitte warten ...Serien-Nr.:Serien-Nr.:Serien-Nr.:Serien-Nr.:Server-Port:Setzt die Kategorie rekursivEinstellungenEinstellungen geändertZeigeDateioperationen anzeigenGrößeThema:Band:Band: %dDer Katalog ist ungültig oder existiert nicht. Überprüfen Sie bitte Ihren Katalogpfad.Der aktuelle Katalog wurde nicht gesichert und kann nicht verschickt werden.Laufwerk wurde hinzugefügt.Laufwerk wurde nicht hinzugefügt Laufwerk wurde nicht hinzugefügt Hinzufügen durch Benutzer abgebrochenDas Laufwerk wurde nicht hinzugefügt Fehler: kann aktuellen Ordner nicht schliessen.Laufwerk wurde nicht hinzugefügt Fehler: kann nicht in Eltern-Verzeichnis wechseln.Laufwerk wurde nicht hinzugefügt: Kann Gerät nicht anhängenLaufwerk wurde nicht hinzugefügt: Es sind keine Geräte angehangenDer eingegebene Plattenname existiert bereits im aktuellen KatalogDer eingegebene Dateiname existiert bereits im aktuellen VerzeichnisDer eingetragene Verzeichnis-Name existiert bereits im aktuellen VerzeichnisDas folgende Verzeichnis existiert nicht: %s.Das folgende Verzeichnis existiert nicht oder der Name ist leer: %s.Das folgende Verzeichnis ist kein Verzeichnis: %s.Das Sortier-Ergebnis im Explorer kann nach dem Typ gruppiert werden. Wenn diese Option aktiviert ist, werden alle Einträge nach Ordner oder Datei gruppiert.Das Sort-Ergebnis im Explorer berücksichtigt Groß-/Kleinschreibung.Das Sortier-Ergebnis in der Suche kann nach dem Typ gruppiert werden. Wenn diese Option aktiviert ist, werden alle Einträge nach Katalog, Platte, Ordner und Datei gruppiert.Das Sortier-Ergebnis in der Suche unterscheidet Groß-/Kleinschreibung.Die Suche kann zwischen Gross-/Kleinschreibung unterscheiden. Bei Unterscheidung ist "File.txt" nicht gleich "file.txt". Bei Nicht-Differenzierung wird Gleichheit angenommen.Die Suche unterscheidet Groß-/Kleinschreibung und unterstützt "*". Beispiele: img*.bmp oder *.htm Die Schlüsselwortsuche akzeptiert Wörter, die vorhanden sein müssen.Die Suche passt auf den Kategorienname zu.Die Suche trifft auf die Beschreibungen zu.Die Suche trifft auf den Plattennamen zu.Die Suche trifft auf Dateiname zu.Die Suche trifft auf den Ordnernamen zu.Es ist keine Katalog-Erweiterung verfügbarDieses Einstellungsfenster erlaubt Ihnen die Konfiguration einiger Funktionalitäten und Eigenschaften des Programms.Dieses Einstellungsfenster erlaubt Ihnen die Konfiguration des Programmes. Einige Eigenschaften können hier verändert werden.Dieses Fenster erlaubt Ihnen den Versand einer Katalogdatei per Email an einen (oder mehrere) Ihrer Kontakt(e).An:Vom Prozeß werden zuviele Dateideskriptoren benutzt.Derzeit sind im System zu viele Dateien geöffnet.Zu viele symbolische Links bei der Auflösung des folgenden Pfads: %s.Gesamt-Kapazität:Gesamtzahl Dateien:Gesamtzahl Dateien: %ldGesamtzahl Verzeichnisse:Gesamtzahl Verzeichnisse: %ldinsg. freier Platz:Gesamt-Speicherplatz:insg. benutzter Platz:TypTyp:Typ: (Verzeichnis)Geben Sie hier den Text der Email ein.unbekannter FehlerAktualisierungin Katalog aktualisieren:Benutze ein erweitertes Muster zur Generierung des Plattennamens.Volume-Namen als Platten-Namen benutzen (nur wenn Plattenname leer ist)benutzter Platz:Version Version:SichtbarVolume : Volume-Label:Volume-NameVolume-Name:Welche Benutzer können GWhere starten ?PlatzhalterWollen Sie den Katalog speichern: JaSie können zusätzliche Markierungen nutzen, um einen Plattennamen mit Platteninformationen zu generieren : - %% : % - %n : Archiv nummerieren (Sie können 0 als Präfix benutzen: %.4n gibt 0001, 0002, 0003, ..., 0091, ... - %l : Volume-Label der Platte - %t : Plattentyp - %s : Serien-NummerSie müssen die vorherige Version von GWhere deinstallieren.Zip:Zip: %d_Aktion_Anwenden_AbbruchAlles einblenden_Datei_Hilfe_Neu_Nein_OK_OK_Öffnen_Optionen_Eigenschaften_Letzte Dateien_Entfernen_Speichern_Senden_Aktualisierungkein LaufwerkkeineLaufwerk hinzufügen wurde abgebrochenunbekannteunbekannte Gruppeunbekannter Eignergwhere-0.2.3/po/cs.gmo0000644000175000017500000007654410472436234013213 0ustar bartbartÞ•¥D 3l8# 9#aG#$©#Î# ë#÷# $*$$G$l${$%$µ$ ¾$ Ë$Ö$Þ$æ$î$ö$þ$%%1#%U%qq%7ã%&"& (& 4&@& D&Q& Z&g&~&0—& È&+Ó&mÿ&4m'J¢'Rí'@( H( S(a( q((•(-¦( Ô(Þ(þ()) ) &)2) 9)CG)‹)1£)Õ)é)*ú) %*1*@*U*]* t**‘*§*¶*Ò*æ* ÷*++-+E+T+ g+u+ˆ+ ‘++\®+ ,n,(Ž,·, ½,Ë,1å,(-5@-5v-H¬-Dõ-?:.z. €. Ž.,™.Æ.Ö.Þ.ú. / &/4/ 9/ E/Q/`/e/ y/ ƒ//£/´/º/Î//ä/ 0M!0o0u0†0–0 §0±0rÉ0<1LL1™1¬19¼1@ö1372#k22¦2º2Ö2ê2%3&&3)M3Rw3Ê3é3 4I%4\o4CÌ45L*5"w5$š5¿5Ý5â5,õ5$"6G6P6W6i6n6 ‚6 Œ6™6³6 Ä6Ñ6!â67 7 7 7'7 =7 I7U7d7 w7 …7 7ž7 £7±7µ7È7É8+Ú8?9?F9g†9Gî9@6:w:}:†:Œ:”:›: :µ:»:P;;Œ;.”;Ã;ß;ð;÷;D< E<O<_<s<‡<¦<Â<Ò<é<ý<=[= w=‚= ”=i¢= > >">'> /><> @>L>U>^>a>-v>¤>µ>¾>Ú>ö>h?}? ‚? ?™?¡? ª?µ?Í?Ó?Ü?Eá?'@ E@Q@`@ h@s@y@@™@¬@¼@…Ð@VA]A lA xA „A!’A´AÏA ÖAàAýAB0 BCMCx]C]ÖC<4D qDK’DÞDóD EE ,E 6E CEQE bEpEˆE‘E¢E§E»E ÀEÊE ÒEIÜE&F>F2ZF?F>ÍF/ G8clcKˆc(Ôc+ýc)dCdId)Zd„d Ÿd ªdµdËdÒdãd ÷de e*e;e*Qe|e „e e›e£eµeÈe ×eãeòeûef ffff¢/fÒf&æf& g 4g:Ug>g.Ïgþg hhh!h*h2hKh_Qh;±híh(õhi =iIiPiAYi ›i©iºi Îi Øiùij"j>jGj MjCWj›j¢j¨jR»j kk#k)k2k;k @k Mk Wkckfk7{k³k Ík"ÙküklG-lul}llœl¢l ªl´lÏl Øläl<êl'mEmUmhm pm{m‚m‰m¥m¶mÊm`ßm @nLn`nqn„n)—nÁnßnånîn oo*o"Io loxoŒo›o¸oÈoäo ìo÷o þopp +p 7p$ApfpupS‡pJÛp0&qWq8oq¨qÀq ×qåqrr $r2rCrRr oryr‹r’r©r ²r¼rÅr@Îrss,2s>_s@žs0ßs*t,;t$htt#¨t;Ìt$u¤-u<Òu—v9§v˜áv¥zw x4xGx_xyxA”x8Öx+y;y)Ay*ky;–y Òy Þy éy öy zz z %z1z5zõBQS2w*-iË!ÆqЛ±ã(¤Oúf#~kÝ}61GC—)4/Ÿž;U9 ß› ]nOä½\5|¿¦ ª‰”ë>mHÚ13HÃ…’aÍ2 `ŽŽ4†9ü_»E?L«'jTñxaº5,¢˜)yÒKŠ_ærÅþTA ‘;„©ò£RØíEšQÉÎP€3è+gôl²y:{. ‚@7|ý@‚]ju Ê=ìÑ™r” ~A„Dð Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A catalog is already openedA component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.Allow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Audio CD : %dAuto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog exportedCatalog fileCatalog importedCatalog is not exportedCatalog is not importedCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerExportExport catalog toFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.Generals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?Info : Insufficient memory to complete the operation.Invalid filled catalog nameIs running on %sJaz : Jaz : %dKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : Network : %dNewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new disk name was filledNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :Tape : Tape : %dThe catalog is invalid or doesn't exists. Check your catalog path please.The disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled disk name already exist in the current catalogThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.This Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Files : %ldTotal Folders : Total Folders : %ldTotal Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: 0.1.3 Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2003-08-20 17:56+0200 Last-Translator: Thomas Navara Language-Team: Czech MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 8bit Bì¾í na Správa katalogu výmìnných médií Od Sébastiena LECACHEURa zero@gwhere.org http://www.gwhere.org %s [ %s ], kapacita : %s, volné : %s %s [ %s ], celkem diskù: %d %s, %s, %s Prùzkum katalogu Správa katalogu Adresáø "%s", %s (souborù %d, slo¾ek %d) Vybrané objekty: %d (velikost : %s) Vyhledávání Zvolený objekt : %d Zvolený objekt: %d (celkem : %s) Typ : sestaveno s %.0f bytù%.2f GB%.2f HB%.2f IB%.2f Kb%.2f MB%.2f PB%.2f TBnalezeno %lu polo¾ek.%s mimo alokovaný adresní prostor programu.Katalog je ji¾ otevøenKomponenta následující cesty pøekroèila %d znakù nebocelá cesta pøekroèila %d znakù : %s.Komponenta prefixu cesty není adresáø: %s._O programuO programuPoslední pøístupCestaPøidatPøidat / AktualizovatPøidat diskPøidat nový diskNaèítá se diskV¹echna klíèová slova musí souhlasitV¹ecny jazykové soubory pro pøeklad.Povolit zvukPovolit krátké pípnutí pøi nìkterých událostech.Umo¾nuje aktualizovat vlastnosti oznaèené kategorie. Kliknìte na Pøidat/Aktualizovat pro ulo¾ení zmìn.Chyba I/O pøi zmìnì adresáøe do : %s.Bìhem odesílání do¹lo k chybì. Prosím, zkotrolujte nastavení.Nastaví zvolenou kategorii v¹em polo¾kám disku (adresáøe).ArchívArchív è.Archív è. : Pøíloha :Audio CD : %dAutomatický popisAutomaticky nahrát katalogAutomaticky nahraje katalog pøi spu¹tìní.Automatické pøipojováníAutomaticky mìní velikost sloupcù.Mìnit velikost sloupcù automatickyBCC :CC :CD-ROM : CD-ROM : %d_ZavøítSvinout v¹eUmo¾nuje pou¾ívat regulární výrazu. Více najdete v dokumentaci.Nemohu editovat tento soubor!! Kategorie je pou¾ívána, nemohu ji odstranitNemohu obdr¾et dataNemohu odeslat dataNemohu zaèít hledat : není otevøen ¾ádný katalogKapacita : Rozli¹ovat velikost písmenRozli¹ovat velikost písmenKatalogPopis katalogu : Informace o kataloguJméno katalogu : Kategorie katalogu : Katalog zavøen.Úroveò komprese katalogu :Popis kataloguKatalog exportovánSoubor kataloguKatalog importovánKatalog nebyl exportovánKatalog nebyl importovánKatalog naètenVlastnosti kataloguKatalog ulo¾enSeznam kategorií : KategorieKategorie : Jméno kategorie : Pou¾ijte panely k nastavení programu podle va¹ich pøedstav.Zmìnit jméno svazkuZvolte, jestli musí souhlasit v¹echna klíèová slova nebo staèí pouze jedno aby byl výsledek nalezen.Zvolte katalog pro pøipojení k e-mailu.SmazatVyèistit historiiSmazat výsledky hledáníKliknìte pro zvolení souboru katalogu.Kliknìte pro zru¹ení e-mailu.Kliknìte pro otevøení historie naposled otevøených souborù.Kliknìte pro odeslání e-mailu (s pøilo¾eným katalogem).Kliknìte na Pou¾ij pro pou¾ití zmìn (bez zavøení okna).Kliknìte na Zru¹it pro zavøení okna (bez ukládání zmìn).Kliknìte na OK pro ulo¾ení zmìn a zavøení okna.ZavøítZavøít katalogZavøít souborZavøít okno s nastavením kategorií.Zavøít katalogKompaktníSpojení ukonèeno klientem Nemohu najít obrázek: %sVytvoøen : VytvoøenDatumSmazat diskPopisPopis : DiskPopis disku : Informace o diskuJméno disku : Statistika : Popis diskuDiskyDiskù v katalogu : Diskù v katalogu : %dZobrazuje jestli je médium pøipojeno nebo ne.Zobrazit informaceZobrazí informace o zvoleném zaøízení - bod pøipojení, kapacitu, volné místo, popis,..._KonecEditovat _kategorieEditovat kategorieZmìnit popisEditovat souborVysune médium, je-li to mo¾né.Vysune médium (CD-ROM, zip,...) i pokud jsou zavøena dvíøka. Je to mo¾né pouzeje-li zapnut automount !E-mailová adresa :Vlo¾te klíèová slova, která musí být obsa¾ena v souborech.Vlo¾te jméno kataloguVlo¾te jméno diskuAdresát(i) kopií.Adresát(i) skrytých kopií.Adresát(i).Nadpis e-mailuVlo¾te nové jméno pro katalogVlo¾te nové jméno diskuVlo¾te nové jméno svazkuVlo¾te nové jméno souboruVlo¾te nové jméno slo¾kyVlo¾te èíslo disku.Vlo¾te popis kategorie.Vlo¾te celou sestu k souboru.Vlo¾te celé jméno souboru vèetnì zástupných znakù.Vzorek mù¾e obsahovat znaky "?" and "*" Vlo¾te jméno katalogu.Jméno kategorie.Vlo¾te jméno disku.Vlo¾te jméno nového disku - tak se bude zobrazovat v kataloguVlo¾te èíslo nového disku. Pomáhá udr¾et pøehled o katalogu.Vlo¾te èíslo portu SMTP serveru (typicky 25).Vlo¾te svoji e-mail adresu.Vlo¾te adresu Va¹eho SMTP serveru pro odchozí po¹tu. Napø. smtp.example.comChyba : nemohu otevøít aktuální adresáø.Chyba: nemohu vejít do pracovního adresáøe.Nemohu nahrát obrázek: %sKonecRozvinout _diskyProhledávat archivy (.tar, .gz, .zip,...)Prozkoumá strukturu disku.PrùzkumníkExportovatExportovat katalog doSouborPopis souboru : Informace o souboruSoubory : Velikost : %s (%ld bajtù)Popis souboruJméno souboru : Jméno systému souboruTyp souboru : funkce není implementována!!SouboryDisketa : Disket : %dAdresáøPopis adresáøe : Informace o slo¾ceJméno adresáøeVelikost : Popis adresáøeVolné : VolnéVolné : PlnýKapacitaGUIGWhere (vy¾adován)GWhere slou¾í k uchování obsahu CD a dal¹ích médií(HDD, floppy, zip,...). Potom mù¾ete procházet databázia vyhledávat soubory bez nutnosti vlo¾it CD do mechaniky.V¹eobecné nastaveníVlo¾te jméno zaøízení zvoleného média.Volné místo na médiu (je-li pøipojen).Kapacita média (je-li pøipojen).Sériové èíslo média (je-li pøipojen). Je to výrobní èíslo.Vlo¾te typ zvoleného média (napø. ext2, ext3, vfat, ntfs,...).Jméno svazku zvoleného média (je-li pøipojen).SkupinaSkupina : HDD : HDD : %dSchovanýSchovatSkrýt operace se souboryINodePokud nezadáte jméno disku a médium bude obsahovat jméno svazku,pou¾ije se to jako jméno disku.Pokud neulo¾íte zmìny, pøijdete o nì. Chcete ulo¾it zmìny ?Info : Nedostatek pamìti pro dokonèení operace.Vyplnìno ¹patné jméno kataloguBì¾í pod %sJaz : Jaz : %dPøi zak¹rtnutí prohlí¾í v¹echny adresáøe a informace o souborech.Klíèová slovaJazyky prostøedíPoslední pøístup : Zmìnìn : Nahrát naposled otevøený soubor.Nahrát zvolený katalog.Otevírám katalogChyba pøi otvírání kataloguCesta : Po¹taAplikace.Automatické vytvoøení popisu (formát souboru, velikost obrázku,...)SprávaZmìnaPøipojení selhalo Pøipojí médium pokud nebyl, odpojí ho po skenování (i pokud byl pøedtím pøipojen).Pøipojen : Vejít...JménoJméno : Sí» : %dNovýNový katalogNový diskNový souborNeNení otevøen katalog®ádný katalog není otevøený : nemohu editovat kategorie®ádné polo¾ky nenalezeny.®ádné jménoNebylo vyplnìno jméno nového diskuNevyplnìno jméno souboruNevyplnìno jméno slo¾kyFunkce není implementována!! Prochází archivy jako by to byly adresáøe.OtevøítOtevøít katalogOtevøít souborVolbyJiné : Jiné : %dServer pro odchozí po¹tu :VlastníkVlastník : CestaProsím nastavte v nastavení parametry pro odesílání e-mailù.Prosím zvolte jméno katalogu Prosím poèkejteProsím poèkejte...PluginyVlastnostiRychleKonec Naposled otevøené soubory :Regulární výrazyOdstranit kategoriiOdstranit z kataloguOdstraní zvolenou kategorii ze seznamu. Kategorie mù¾e být odstranìna pouze kdy¾ není pou¾ívána.PøejmenovatPøejmenovat katalogPøejmenovat diskPøejmenovat souborPøejmenovat slo¾kuVýsledek seøazený podle adresáøe/souboru.Výsledky seøazené podle typu.PrávaPráva : Knihovny pro GUI prostøedí.Ulo¾it _jakoUlo¾itUlo¾í prostøedí (velikosti a pozice oken).Ulo¾it vlastnosti GUI pøi odchodu.Ulo¾it jakoUlo¾it jako katalogUlo¾it katalogUlo¾it vlastnosti kategorie.Ukládám katalogChyba pøi ukládání kataloguNaèítám_NastaveníHledatHledat : Hledat v kataloguVýsledky hledáníTyp hledáníHledám...Zvolit automaticky nahrávaný katalogZvolit katalogVyberte médium : Zvolte úroveò komprese souboru. Bì¾nì je 3, co¾ je kompromis rychlosti a velikosti.Vyberte kategorii, do které bude disk pøidán (i kdy¾ je volba za¹krtnuta).Zvolte médium pro vlo¾ení do katalogu jako disk.Zvolte sekci nastavení.Zvolte velikost historie otevøených souborù. Bì¾nì je 5.Poslat katalog e-mailemPoslat soubor e-mailemPoslat e-mailOdesílám e-mail, poèkejte...Sériové èíslo : Sériové èíslo : Sériové èísloSériové èíslo : Port serveru :Nastavit kategorii rekuzivnìNastaveníNastavení zmìnìnoUkázatUkázat akce se souboryVelikostPøedmìt :Páska : Páska : Soubor katalogu neexistuje, zkontrolujte prosím cestu k souboru.Disk byl pøidánDisk nebyl pøidán Disk nebyl pøidán Operace zru¹ena u¾ivatelemDisk nebyl pøidán Chyba : není mo¾né opustit aktuální adresáø.Disk nebyl pøidán Chyba : nemohu pøejít do nadøazeného adresáøe.Disk nebyl pøidán : není mo¾né pøipojit zaøízeníDisk nebyl pøidán : nejsou pøipojená médiaV aktuálním katalog ji¾ je disk tohoto jménaTento soubor v adresáøi ji¾ existujeZadabá slo¾ka ji¾ existujeNásledující adresáø neexistuje: %s.Adresáø neexistuje nebo jeho jméno je prázdný øetìzec : %s.Následující jméno není adresár : %s.Výsledek seøazený v prohlí¾eèi mù¾e být ve skupinách podle typu objektu.Pokud je tato volba za¹krtnuta, v¹echny objekty budou seskupeny podle adresáøù nebo souborù.Výsledek seøazený v prohlí¾eèi je citlivý na velikost znakù.Výsledek mù¾e být seøazen podle typu objektu. Pokud je tato volba za¹krtnuta v¹echny objekty budou seøazeny podle kategorií, diskù, adresáøù a souborù.Výsledek øazení pøi hledání je citlivý na velikost znakù.Vyhledávání mù¾e/nemusí rozli¹ovat malá/velká písmena. V pøípadì zapnuté citlivosti "Soubor.txt" není "soubor.txt", pøi vypnutém rozli¹ování je nalezen.Vyhledávání mù¾e být citlivé na velikost znakù. Hledaná slova podporují znaky"*". Napøíklad: img*.bmp lub *.htm Hledání klíèových slov pøijímá seznam povinných slov.Hledat v kategorie.Hledat v popisech.Hledat v jmenéch diskù.Hledat v jménech souborù.Hledat v jménech adresáøù.Toto okno umo¾nuje nastavit nìkteré funkce a vlastnosti programu.Toto okno umo¾nuje nastavit nìkteré vlastnosti programu.Toto okno umo¾nuje poslat katalog e-mailem.Pro :Pøíli¹ mnoho souborù otevøených procesem.Pøíli¹ mnoho otevøených souborù v systému.Pøíli¹ mnoho symbolických odkazù pøi rozli¹ování cesty: %s.Kapacita : Souborù : Souborù : %dAdresáøù : Adresáøù : %dVolné : Kapacita : Obsazeno : TypTyp : Typ : (adresáø)Text zprávy.Neznámá chybaAktualizovatAktualizace : Pou¾ít pokroèilé vzorky pro generování jména diskuPou¾ít jméno média jako jméno diskuObsazeno : Verze : Verze : ViditelnýSvazek : Jméno svazku : Jméno svazkuJméno svazku : Zástupné znakyChcete ulo¾it katalog : AnoMù¾ete pøidat dal¹í tagy pro vygenerování jména disku z informací o disku: - %% : % - %n : èíslo archivu (mù¾ete pou¾ít poèet èíslic pro doplnìní 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : jméno média - %t : typ média - %s : sériové èísloZip : Zip : %d_Akce_Pou¾ij_Zru¹it_Rozvinout v¹eSoubor_Pomoc_Nový_Ne_OK_Ok_Otevøít_Mo¾nosti_VlastnostiN_aposledy otevøené_Odstranit_Ulo¾it_Poslat_Aktualizovat¾ádný disk¾ádnýpøidávání disku zru¹enoneznámáneznámá skupinaneznámý vlastníkgwhere-0.2.3/po/el.gmo0000644000175000017500000007302010472436235013171 0ustar bartbartÞ•s´ óL a'$‰® Ë×é*ü$' L [ %o • ž « ¶ ¾ Æ Î Ö Þ æ î 1!q5!7§!ß!æ! ì! ø!" "" "+"B"0[" Œ"+—"mÃ"41#Jf#±# ¹# Ä#Ò#â#ø#- $ 7$A$a$t$z$ $ ‰$•$ œ$Cª$î$1%8%L%*]% ˆ%”%£%¸%À% ×%ä%ô% &&5& I&V&e& x&†&™& ¢&®&\¿&'n0'(Ÿ'È' Î'Ü'1ö'(((5Q(5‡(H½(D)?K)‹) ‘) Ÿ),ª)×)ç)ï) * )* 7*E* J* V*b*q*v* Š* ”*¡*´*Å*Ë*ß* õ*+++)+ :+D+LT+¡+´+9Ä+@þ+3?,#s,—,®,Â,%Þ,&-)+-RU-¨-Ç-ç-\.C`.¤.L¾." /$./S/q/v/,‰/¶/¿/Ä/ Ø/ â/ï/ 0 0'0!80Z0 `0 j0v0}0 “0 Ÿ0«0º0 Í0 Û0 æ0ô0 ù01 1120262?2E2M2T2Y2n2Pt2Å2.Í2ü2D 3 R3\3l3€3”3³3Ï3ß3ö3 44[(4 „44 ¡4 ¯4 º4Å4Ê4Ò4 Ö4â4ë4ô4÷4- 5:5K5hT5½5 Â5 Ï5Ù5á5 ê5õ5 666E!6g6 …6‘6 6 ¨6³6¹6¿6Ù6ì6ü6…7–77 ¬7!¸7Ú7õ7 ü78#8,8018b8~8†8 –8$£8È8×8í8 ö89 99 #9 19 =9J9d9xs9]ì9 J:Kk:·:Ì: Þ:è: ; ; ;*; ;;I;a;j;{;€;”; ™;£;»;2×;? <>J<,‰<H¶<5ÿ<€5=.¶=å=,v>‹£>£/?(Ó?%ü?#"@#F@%j@Z@`ë@XLA¥A,ªA0×ABB)B:BNBeByB~B†B(–B ¿BÍBÔB-éB C%C .C9C ACKC [CgC vC€C C¤C«C´C¼CÃC ËC×CÝCãCèCìCðCôCúC DDD&D,D2D:DCDHD PD ^D?lD¬Ek½E,)FVF uFF–F,«F3ØF GG4:GoGxG ŽG™G¡G©G±G¹GÁGÉG!ÑG1óGx%H>žHÝHâHøH I I)I>INIcI+~I%ªI ÐI5ÛI—JF©J]ðJ NKYKmK„K˜K·K?ÒKLG&L#nL’L˜L L §L³L¼LuÌL'BMPjM»MÔM<ñM.N>N&WN ~NˆNŸNµNÈNàNôNO%O6OLO`OyO O —O¤OS¸O P“*P9¾P øPQ,QHEQ7ŽQKÆQMRh`R`ÉR^*S‰S’S¥S>¶SõS T,T/@TpTƒT šT¥T µT ¿TÌTÓTçTúT UU0U7UOUiU~U…U™U­UÁUÒU^äUCVcVfyVmàVLNW"›W¾WÛWõW+X&qiaqqËqe=r£r,ªr1×r s"s4sFs cs$„s©s¯s¸s*Êsõs ttC)tmtˆt tšt t©tºtÉtÛt*ðtuu&u/u8uAu GuUu\u duousuvuyuu Šu”u®u ·uÂu Ëu Õuàuæu îuüuõtU2žq˜9(ÞG¿·={X/Ji0‡f³”yYh\QK?!Õ:>Kô#‚V;EéÙˆËáŠµØ [A½f ù¦É&]óo›ÅQ•4bún1WãÐT¬4o®©<±Ñè‘N¼]—[²V´w¨}(ï^×&IPƒ£ü`ëX ÷zâBdp:>¸ðI­Ì*åÆ §eLÒMà#sñZR€8ÏýZHŒÓ p17È–=Àr†'n.)¡NWEÃ`ß$Fc œ/’öÎAC¯6+¹BäaºÔR?.ÚÿUrG<jì+øš@™S!m,‰ÛD 32%~j"¾Y«ŽS;^ç “¤vÖ6Üg¶ŸieM¢ò c* ,h"PÇ„-_O'd$êT0»|…gukxklîO@mLíl %ªÁ \-Ê ¥_8aÝJ5ÂÍDqCF7H°‹æ3)59ûbsÄþ Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.Allow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.ArchiveArchive N#Archive N# : Attached file :Auto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog fileCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay infoE_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEmail address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)ExplorerFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.Generals optionsGroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you don't apply changes you will lose all changes. Do you want apply changes?Info : Insufficient memory to complete the operation.Is running on %sKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mounted : Move To...NameName : NewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :The disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.This Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Total Capacity : Total Files : Total Folders : Total Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUsed Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : WildcardsWould you want save catalog : YesZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenoneunknownunknown groupunknown ownerProject-Id-Version: 0.1.3 Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2003-09-22 18:54-0200 Last-Translator: Dimitris Garanatsios Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-7 Content-Transfer-Encoding: 8bit Åêôåëåßôáé óå Äéá÷åßñçóç êáôáëüãùí áðïóðþìåíùí ìÝóùí Áðü ôïí Sébastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], ÷ùñçôéêüôçôá : %s, åëåýèåñá : %s %s [ %s ], óýíïëï äßóêùí : %d %s, %s, %sÅîåñåýíçóç êáôáëüãïõÄéá÷åßñéóç êáôáëüãùí ÖÜêåëïò "%s", %s (áñ÷åßá %d, õðïöÜêåëïé %d) Áíôéêåßìåíá óôç ëßóôá : %d (óõíïëéêü ìÝãåèïò : %s)Ìç÷áíÞ áíáæÞôçóçòÅðéëåãìÝíï áíôéêåßìåíï : %d ÅðéëåãìÝíï áíôéêåßìåíï : %d (óõíïëéêü ìÝãåèïò : %s)Ôýðïò : äçìéïõñãÞèçêå ìå ôï %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu áíôéêåßìåí(ï/á) âñÝèçê(å/áí).%s outside the process's allocated address space.¸íá ìÝñïò ôçò áêüëïõèçò äéáäñïìÞò îåðÝñáóå ôïõò %d ÷áñáêôÞñåò, Þ ìéá ïëüêëçñç äéáäñïìÞ îåðÝñáóå ôïõò %d ÷áñáêôÞñåò : %s.¸íá ìÝñïò ôïõ ðñïèÝìáôïò ôçò äéáäñïìÞò äåí åßíáé öÜêåëïò : %s.ÐåñßÐåñé ôïõ ðñïãñÜììáôïòÇìåñïìçíßá ðñüóâáóçòÄéáäñïìÞ ðñüóâáóçòÐñïóèÞêçÐñïóèÞêç / ÅíçìÝñùóçÐñïóèÞêç äßóêïõÐñïóèÞêç íÝïõ äßóêïõÐñïóèÞêç äßóêïõ óå åîÝëéîç¼ëåò ïé ëÝîåéò êëåéäéÜ ðñÝðåé íá ôáéñéÜæïõíÁñ÷åßá ìåôáãëþôéóçò ôïõ ðñïãñÜììáôïò.×ñÞóç Þ÷ïõÅðéôñÝðåé ôçí åêðïìðÞ óýíôïìïõ Þ÷ïõ óå êÜðïéï óõìâÜí.ÅðéôñÝðåé ôçí åíçìÝñùóç ôùí éäéïôÞôùí ôçò êáôçãïñßáò ðïõ åßíáé åðéëåãìÝíç. ÊÜíôå click óôï êïõìðß ÐñïóèÞêç / ÅíçìÝñùóç ãéá íá áðïèçêåýóåôå ôéò áëëáãÝò.ÐáñïõóéÜóôçêå óöÜëìá Åéóüäïõ/Åîüäïõ êáôÜ ôçí ìåôÜâáóç óôï öÜêåëï : %s.ÐáñïõóéÜóôçêå êÜðïéï óöÜëìá êáôÜ ôçí áðïóôïëÞ ôïõ mail. Ðáñáêáëþ åëÝãîôå ôéò ðáñáìÝôñïõò óáò.Êáôá÷þñçóçÁñéèìüò êáôá÷þñçóçòÁñéèìüò êáôá÷þñçóçò : Åðéóýíáøç áñ÷åßïõ :Áõôüìáôç äçìéïõñãßá ðåñéãñáöÞòÁõôüìáôï Üíïéãìá êáôáëüãïõÁíïßãåé áõôüìáôá Ýíáí ðñïåðéëåãìÝíï êáôÜëïãï êáôÜ ôçí åêêßíçóç.Áõôüìáôç ðñïóÜñôçóçÁõôüìáôç ðñïóáñìïãÞ ìåãÝèïõò üëùí ôùí óôçëþí ôïõ ðáñáèýñïõ åîåñåýíçóçò.Áõôüìáôç ðñïóáñìïãÞ ìåãÝèïõò óôçëþíBCC :CC :CD-Rom : CD-Rom : %dÊëåßóéìïÊáôÜññåõóç üëùíÅßíáé äõíáôÞ ç ÷ñÞóç öõóéêÞò Ýêöñáóçò (regular expression). ÁíáôñÝîôå óôéò ðëçñïöïñßåò ãéá ðåñéóóüôåñåò ëåðôïìÝñåéåò.Áäýíáôç ç äéüñèùóç áõôïý ôïõ áñ÷åßïõ!! Áäýíáôç ç äéáãñáöÞ áõôÞò ôçò êáôçãïñßáò. ×ñçóéìïðïéåßôáé áðü êÜðïéï áíôéêåßìåíï.Áäýíáôç ç ëÞøç äåäïìÝíùíÁäýíáôç ç áðïóôïëÞ äåäïìÝíùíÁäýíáôç ç Ýíáñîç áíáæÞôçóçò : äåí õðÜñ÷åé áíïéêôüò êáôÜëïãïò×ùñçôéêüôçôá : ÄéÜêñéóç ðåæþí/êåöáëáßùíÔáîéíüìçóç ìå äéÜêñéóç ðåæþí/êåöáëáßùíÊáôÜëïãïòÐåñéãñáöÞ êáôáëüãïõ : Ðëçñïöïñßåò êáôáëüãïõ¼íïìá êáôáëüãïõ : Êáôçãïñßåò êáôáëüãïõ : Ï êáôÜëïãïò ÝêëåéóåÂáèìüò óõìðßåóçò êáôáëüãïõ :ÐåñéãñáöÞ êáôáëüãïõÁñ÷åßï êáôáëüãïõÏ êáôÜëïãïò öïñôþèçêåÉäéüôçôåò êáôáëüãïõÏ êáôÜëïãïò áðïèçêåýèçêåËßóôá êáôçãïñéþí : ÊáôçãïñßáÊáôçãïñßá : ¼íïìá êáôçãïñßáò : ÁëëÜîôå åäþ ôéò äéáèÝóéìåò éäéüôçôåò þóôå íá ñõèìßóåôå ôï ðñüãñáììá üðùò èá èÝëáôå.ÁëëáãÞ ôçò åôéêÝôáò ôïõ ôüìïõÅðéëÝîôå áí ðñÝðåé íá ôáéñéÜæïõí üëåò ïé ëÝîåéò êëåéäéÜ Þ ìüíï ìéá áðü áõôÝò þóôå ôï áíôéêåßìåíï íá ðåñéëáìâÜíåôáé óôá áðïôåëÝóìáôá ôçò áíáæÞôçóçò.ÅðéëÝîôå áí èá åðéóõíÜøåôå Þ ü÷é ôï áñ÷åßï ôïõ êáôáëüãïõ.ÊáèáñéóìüòÊáèáñéóìüò éóôïñéêïýÊáèáñßæåé üëá ôá áðïôåëÝóìáôá ôçò áíáæÞôçóçòÊÜíôå click åäþ ãéá íá áíáæçôÞóåôå êáé íá åðéëÝîåôå ôï áñ÷åßï êáôáëüãïõ.ÊÜíôå click åäþ ãéá íá áêõñþóåôå ôçí áðïóôïëÞ ôïõ mail.ÊÜíôå click åäþ ãéá íá êáèáñßóåôå ôç ëßóôá ôùí ðñüóöáôá áíïéãìÝíùí áñ÷åßùí.ÊÜíôå click åäþ ãéá íá óôåßëåôå êÜðïéï mail (ìå åðéóýíáøç êÜðïéïõ êáôáëüãïõ).ÊÜíôå click óôï êïõìðß ÅöáñìïãÞ ãéá íá åöáñìüóåôå ôéò áëëáãÝò (÷ùñßò íá êëåßóåôå ôï ðáñÜèõñï Ñõèìßóåùí).ÊÜíôå click óôï êïõìðß ¶êõñï ãéá íá áêõñþóåôå ôéò áëëáãÝò êáé íá êëåßóåôå ôï ðáñÜèõñï Ñõèìßóåùí.ÊÜíôå click óôï êïõìðß OK ãéá íá åöáñìüóåôå ôéò áëëáãÝò êáé íá êëåßóåôå ôï ðáñÜèõñï Ñõèìßóåùí.ÊëåßóéìïÊëåßóéìï êáôáëüãïõÊëåßóéìï áñ÷åßïõÊëåßóéìï ôïõ ðáñáèýñïõ äéüñèùóçò ôùí éäéïôÞôùí ôùí êáôçãïñéþí.Êëåßóéìï êáôáëüãïõÓõíåêôéêüòÇ óýíäåóç Ýêëåéóå áðü ôçí ðëåõñÜ ôïõ client Áäýíáôç ç åýñåóç ôïõ áñ÷åßïõ ôïõ åéêïíéäßïõ: %sÄçìéïõñãßá óôéò : Çìåñïìçíßá äçìéïõñãßáòÇìåñïìçíßáÄéáãñáöÞ äßóêïõÐåñéãñáöÞÐåñéãñáöÞ : ÄßóêïòÐåñéãñáöÞ äßóêïõ : Ðëçñïöïñßåò äßóêïõ¼íïìá äßóêïõ : ÓôáôéóôéêÜ äßóêïõ : ÐåñéãñáöÞ äßóêïõÄßóêïéÄßóêïé óôïí êáôÜëïãï : Äßóêïé óôïí êáôÜëïãï : %dÅìöÜíéóç ðëçñïöïñéþí¸îïäïòÄéüñèùóç êáôçãïñéþíÄéüñèùóç êáôçãïñéþíÄéüñèùóç ðåñéãñáöÞòÄéüñèùóç áñ÷åßïõÄéåýèõíóç email :ÅéóÜãåôå ìéá ëßóôá áðü ëÝîåéò êëåéäéÜ ðïõ ðñÝðåé üëá íá ðåñéÝ÷ïíôáé óôá áñ÷åßá ðïõ ôáéñéÜæïõí.ÅéóÜãåôå ôï üíïìá ôïõ êáôáëüãïõÅéóÜãåôå üíïìá äßóêïõÅéóÜãåôå åäþ ôçí çëåêôñïíéêÞ äéåýèõíóç ôùí áíôåãñáììÝíùí ðáñáëçðôþí ôïõ çëåêôñïíéêïý óáò ôá÷õäñïìåßïõ.ÅéóÜãåôå åäþ ôçí çëåêôñïíéêÞ äéåýèõíóç ôùí êñõöþí áíôåãñáììÝíùí ðáñáëçðôþí ôïõ çëåêôñïíéêïý óáò ôá÷õäñïìåßïõ.ÅéóÜãåôå åäþ ôçí çëåêôñïíéêÞ äéåýèõíóç ôïõ ðáñáëÞðôç (Þ ôùí ðáñáëçðôþí) óáò.ÅéóÜãåôå åäþ ôï èÝìá ôïõ mail óáò.ÅéóÜãåôå íÝï üíïìá êáôáëüãïõÅéóÜãåôå íÝï üíïìá äßóêïõÅéóÜãåôå íÝá åôéêÝôá ôüìïõÅéóÜãåôå ôïí áñéèìü êáôá÷þñçóçò ôïõ äßóêïõ.ÅéóÜãåôå ôçí ðåñéãñáöÞ ôçò êáôçãïñßáò.ÅéóÜãåôå ôç äéáäñïìÞ êáé ôï üíïìá ôïõ ðñïò Üíïéãìá áñ÷åßïõ êáôáëüãïõ.ÅéóÜãåôå ôï ðñüôõðï ìðáëáíôÝñ. Ìðïñåß íá ðåñéÝ÷åé ôïõò ÷áñáêôÞñåò "?" and "*".ÅéóÜãåôå ôï üíïìá ôïõ êáôáëüãïõÅéóÜãåôå ôï üíïìá ôçò êáôçãïñßáò.ÅéóÜãåôå ôï üíïìá ôïõ äßóêïõ.ÅéóÜãåôå ôïí áñéèìü ôïõ íÝïõ äßóêïõ. Ï áñéèìüò áõôüò ìðïñåß íá óáò âïçèÞóåé ìå ôï éóôïñéêü ôïõ êáôáëüãïõ óáò.ÅéóÜãåôå ôç èýñá ôïõ server ôçò åîåñ÷üìåíçò áëëçëïãñáößáò (ç óõíçèÝóôåñç ôéìÞ åßíáé 25).ÅéóÜãåôå ôç äéåýèõíóç ôïõ email óáò.ÅéóÜãåôå ôïí server ôçò åîåñ÷üìåíçò áëëçëïãñáößáò óáò. ÓõíÞèùò ç äéåýèõíóÞ ôïõ åßíáé mail.yourdomain.comÓöÜëìá : áäýíáôç ç áðüêôçóç ôïõ ôñÝ÷ïíôïò öáêÝëïõ.ÓöÜëìá : áäýíáôç ç ìåôÜâáóç óôïí ôñÝ÷ïíôá öÜêåëï.ÓöÜëìá êáôÜ ôçí áíÜãíùóç ôïõ áñ÷åßïõ ôïõ åéêïíéäßïõ: %s¸îïäïòÅðÝêôáóç ìüíï ôùí äßóêùíÅîåñåýíçóç óå óõìðéåóìÝíá áñ÷åßá (.tar, .gz, .zip, ...)ÅîåñåýíçóçÁñ÷åßïÐåñéãñáöÞ áñ÷åßïõ : Ðëçñïöïñßåò áñ÷åßïõÌÝãåèïò áñ÷åßïõ : ÌÝãåèïò áñ÷åßïõ : %s (% bytes)ÐåñéãñáöÞ áñ÷åßïõ¼íïìá áñ÷åßïõ : ¼íïìá óõóôÞìáôïò áñ÷åßùíÔýðïò áñ÷åßïõ : ÷áñáêôçñéóôéêü ìç äéáèÝóéìï áêüìá!!Áñ÷åßáÄéóêÝôá : ÄéóêÝôá : %dÖÜêåëïòÐåñéãñáöÞ öáêÝëïõ : Ðëçñïöïñßåò öáêÝëïõ¼íïìá öáêÝëïõÌÝãåèïò öáêÝëïõÐåñéãñáöÞ öáêÝëïõÅëåýèåñïò ÷þñïò : Åëåýèåñïò ÷þñïòÅëåýèåñïò ÷þñïò : ÐëÞñçòÓõíïëéêÞ ÷ùñçôéêüôçôáÃñáöéêü ðåñéâÜëëïí åñãáóßáòGWhere (áðáéôåßôáé)Ôï GWhere óáò åðéôñÝðåé íá äéá÷åéñéóôåßôå ìéá âÜóç äåäïìÝíùí ôùí CD êáé Üëëùí áðïóðþìåíùí ìÝóùí óáò (óêëçñïß äßóêïé, äéóêÝôåò, Zip drive, CD-ROM, êëð...). Ìå ôï GWhere åßíáé åýêïëï íá ñßîåôå ìéá ìáôéÜ óôá CD óáò Þ íá áíáæçôÞóåôå ãñÞãïñá êÜôé óå áõôÜ ÷ùñßò ôçí áíÜãêç íá ôá åéóÜãåôå óôï drive êÜèå öïñÜ.ÃåíéêÝò åðéëïãÝòÏìÜäáÏìÜäá : HD : HD : %dÊñõììÝíáÁðüêñõøçÁðüêñõøç ôùí åíåñãåéþí ôùí áñ÷åßùíINodeÁí äåí åöáñìüóåôå ôéò áëëáãÝò áõôÝò èá ÷áèïýí. ÈÝëåôå íá ôéò åöáñìüóåôå;Ðëçñïöïñßåò : Ìç åðáñêÞò ìíÞìç ãéá ôçí ïëïêëÞñùóç ôçò ëåéôïõñãßáò.Åêôåëåßôáé óå %sÔóåêÜñåôå áõôÞí ôçí åðéëïãÞ ãéá áíß÷íåõóç ðëçñïöïñéþí ôùí öáêÝëùí êáé ôùí áñ÷åßùí.ËÝîåéò êëåéäéÜÐïëýãëùóóç õðïóôÞñéîçÔåëåõôáßá ðñüóâáóç óôéò : Ôåëåõôáßá ôñïðïðïßçóç óôéò : ¶íïéãìá ôïõ áñ÷åßïõ êáôáëüãïõ ðïõ áíïß÷èçêå ðéï ðñüóöáôá.¶íïéãìá åðéëåãìÝíïõ áñ÷åßïõ êáôáëüãïõ.ÁíÜãíùóç êáôáëüãïõÇ öüñôùóç ôïõ êáôáëüãïõ áðÝôõ÷åÔïðïèåóßá óôïí äßóêï : ÁëëçëïãñáößáÊõñßùò åöáñìïãÞ.Áõôüìáôç äçìéïõñãßá ðåñéãñáöÞò áñ÷åßùí (ðåñéãñáöÞ ôïõ ôýðïõ ôïõò, ìÝãåèïò åéêüíáò ãéá xpm Þ jpg, êëð...).Äéá÷åßñéóçÇìåñïìçíßá ôñïðïðïßçóçòÇ ðñïóÜñôçóç áðÝôõ÷å ÐñïóáñôçìÝíïò : Ìåôáêßíçóç óå...¼íïìá¼íïìá : ÄçìéïõñãßáÄçìéïõñãßá êáôáëüãïõÄçìéïõñãßá äßóêïõÄçìéïõñãßá áñ÷åßïõ¼÷éÄåí õðÜñ÷åé áíïéêôüò êÜðïéïò êáôÜëïãïòÄåí õðÜñ÷åé áíïéêôüò êÜðïéïò êáôÜëïãïò : áäýíáôç ç äéüñèùóç êáôçãïñéþíÄåí ôáõôßóôçêå êÜðïéï áíôéêåßìåíï.ÊåíÞ åôéêÝôá×áñáêôçñéóôéêü ìç äéáèÝóéìï áêüìá!! Åîåñåýíçóç üëùí ôùí óõìðéåóìÝíùí áñ÷åßùí óáí íá Þôáí öÜêåëïé.¶íïéãìá¶íïéãìá êáôáëüãïõ¶íïéãìá áñ÷åßïõÅðéëïãÝò¶ëëï : ¶ëëï : %dServer åîåñ÷üìåíçò áëëçëïãñáößáò :ÉäéïêôÞôçòÉäéïêôÞôçò : ÄéáäñïìÞÐáñáêáëþ ñõèìßóôå ôéò åðéëïãÝò ôïõ mail óôéò Ñõèìßóåéò þóôå íá óôÝëíåôå mails.Ðáñáêáëþ åðéëÝîôå Ýíá üíïìá êáôáëüãïõ Ðáñáêáëþ ðåñéìÝíåôåÐáñáêáëþ ðåñéìÝíåôå...PluginsÉäéüôçôåòÃñÞãïñç¸îïäïòÐñüóöáôá áíïéãìÝíïé êáôÜëïãïé :ÖõóéêÞ ÝêöñáóçÄéáãñáöÞ êáôçãïñßáòÄéáãñáöÞ áðü ôïí êáôÜëïãïÄéáãñáöÞ ôçò åðéëåãìÝíçò êáôçãïñßáò áðü ôç ëßóôá êáôçãïñéþí. Ïé êáôçãïñßåò ìðïñïýí íá äéáãñáöïýí ìüíï áí äå ÷ñçóéìïðïéïýíôáé áðü êáíÝíá áíôéêåßìåíï.ÌåôïíïìáóßáÌåôïíïìáóßá êáôáëüãïõÌåôïíïìáóßá äßóêïõÔáîéíüìçóç ôïõ áðïôåëÝóìáôïò êáôÜ öÜêåëï/áñ÷åßï.Ôáîéíüìçóç ôïõ áðïôåëÝóìáôïò êáôÜ ôýðï.ÄéêáéþìáôáÄéêáéþìáôá : ÂéâëéïèÞêåò åêôÝëåóçò ôïõ ãñáöéêïý ðåñéâÜëëïíôïò.ÁðïèÞêåõóç ùòÁðïèÞêåõóçÁðïèÞêåõóç ôùí éäéïôÞôùí ãñáöéêïý ðåñéâÜëëïíôïò ðïõ áöïñïýí óôç èÝóç êáé ôï ìÝãåèïò ôùí ðáñáèýñùí.ÁðïèÞêåõóç ôùí éäéïôÞôùí ôïõ ãñáöéêïý ðåñéâÜëëïíôïò êáôÜ ôçí ÝîïäïÁðïèÞêåõóç ùòÁðïèÞêåõóç óáí êáôÜëïãïÁðïèÞêåõóç êáôáëüãïõÁðïèÞêåõóç ôùí áëëáãþí ôùí éäéïôÞôùí ìéáò êáôçãïñßáò.ÁðïèÞêåõóç êáôáëüãïõÇ áðïèÞêåõóç ôïõ êáôáëüãïõ áðÝôõ÷åÁíé÷íåýïíôáòÑõèìßóåéòÁíáæÞôçóçÁíáæÞôçóç : ¶íáæÞôçóç óôïí êáôÜëïãïÁðïôåëÝóìáôá áíáæÞôçóçòÁíáæÞôçóç ôýðïõÁíáæçôþíôáò...ÅðéëÝîôå ôïí êáôÜëïãï ðïõ èá áíïßãåé áõôüìáôáÅðéëÝîôå êáôÜëïãïÅðéëÝîôå ôï âáèìü óõìðßåóçò ôùí êáôáëüãùí. Ç ðñïåðéëåãìÝíç ôéìÞ åßíáé 3, ç ÷ñõóÞ ôïìÞ ìåôáîý áðüäïóçò êáé ìéêñïý ìåãÝèïõò.ÅðéëÝîôå ôçí êáôçãïñßá üðïõ êáôáôÜóåôáé ï äßóêïò ðïõ èá ðñïóôåèåß (áêüìá êáé áí ç åðéëïãÞ åßíáé ôóåêáñéóìÝíç).ÅðéëÝîôå ôçí êáôçãïñßá ðïõ èÝëåôå íá ñõèìßóåôå.ÅðéëÝîôå ôï ðëÞèïò ôùí êáôá÷ùñßóåùí óôïõò ðñüóöáôá áíïéãìÝíïõò êáôÜëïãïõò. Ç ðñïåðéëåãìÝíç ôéìÞ åßíáé 5.ÁðïóôïëÞ êáôáëüãïõ ìå mailÁðïóôïëÞ áñ÷åßïõ ìå mailÁðïóôïëÞ mailÁðïóôÝëïíôáò ôï mail, ðáñáêáëþ ðåñéìÝíåôå...Óåéñéáêüò áñéèìüò : Óåéñéáêüò áñéèìüò : Óåéñéáêüò áñéèìüòÓåéñéáêüò áñéèìüò : Èýñá ôïõ server :ÅðáíáëçðôéêÞ åöáñìïãÞ ôçò êáôçãïñßáòÑõèìßóåéòÏé ñõèìßóåéò ÜëëáîáíÅìöÜíéóçÅìöÜíéóç ôùí åíåñãåéþí ôùí áñ÷åßùíÌÝãåèïòÈÝìá :Ï äßóêïò ðñïóôÝèçêåÏ äßóêïò äåí ðñïóôÝèçêå Ï äßóêïò äåí ðñïóôÝèçêå Ç ðñïóèÞêç áêõñþèçêá áðü ôï ÷ñÞóôçÏ äßóêïò äåí ðñïóôÝèçêå ÓöÜëìá : áäýíáôï ôï êëåßóéìï ôïõ ôñÝ÷ïíôïò öáêÝëïõ.Ï äßóêïò äåí ðñïóôÝèçêå ÓöÜëìá : áäýíáôç ç ìåôÜâáóç óôïí ìçôñéêü öÜêåëï.Ï áêüëïõèïò öÜêåëïò äåí õðÜñ÷åé : %s.Ï áêüëïõèïò öÜêåëïò äåí õðÜñ÷åé Þ ôï üíïìÜ ôïõ åßíáé êåíü : %s.Ôï áêüëïõèï üíïìá öáêÝëïõ äåí åßíáé öÜêåëïò : %s.Ç ôáîéíüìçóç ôïõ áðïôåëÝóìáôïò óôï ðáñÜèõñï åîåñåýíçóçò ìðïñåß íá ãßíåé êáôÜ ôýðï áíôéêåéìÝíïõ. Áí áõôÞ ç åðéëïãÞ åßíáé ôóåêáñéóìÝíç ôá áíôéêåßìåíá èá ïìáäïðïéçèïýí êáôÜ öáêÝëïõò Þ áñ÷åßá.Ç ôáîéíüìçóç ôïõ áðïôåëÝóìáôïò óôï ðáñÜèõñï åîåñåýíçóçò êÜíåé äéÜêñéóç ðåæþí/êåöáëáßùí.Ç ôáîéíüìçóç ôïõ áðïôåëÝóìáôïò áíáæÞôçóçò ìðïñåß íá ãßíåé âÜóåé ôïõ ôýðïõ ôùí áíôéêåéìÝíùí. Áí áõôÞ ç åðéëïãÞ åßíáé ôóåêáñéóìÝíç üëá ôá áíôéêåßìåíá èá ïìáäïðïéçèïýí êáôÜ êáôáëüãïõò, äßóêïõò, öáêÝëïõò êáé áñ÷åßá.Ç ôáîéíüìçóç ôïõ áðïôåëÝóìáôïò ôçò áíáæÞôçóçò êÜíåé äéÜêñéóç ìåôáîý ðåæþí/êåöáëáßùí.Ç áíáæÞôçóç ìðïñåß íá êÜíåé Þ íá ìçí êÜíåé äéÜêñéóç ìåôáîý ðåæþí/êåöáëáßùí. Óôçí ðåñßðôùóç ôçò äéÜêñéóçò ôá "File.txt" êáé "file.txt" äåí ôáõôßæïíôáé. Óôçí áíôßèåôç ðåñßðôùóç ôáõôßæïíôáé.Ç áíáæÞôçóç ìðïñåß íá êÜíåé äéÜêñéóç ìåôáîý ðåæþí êáé êåöáëáßùí êáé õðïóôçñßæåé ôï ÷áñáêôÞñá "*". Ãéá ðáñÜäåéãìá : img*.bmp Þ *.htm Ç áíáæÞôçóç ìå ëÝîåéò êëåéäéÜ äÝ÷åôáé ìéá ëßóôá õðï÷ñåùôéêþí ëÝîåùí.ÁíáæÞôçóç óôá ïíüìáôá ôùí êáôçãïñéþí.ÁíáæÞôçóç óôéò ðåñéãñáöÝò.ÁíáæÞôçóç óôá ïíüìáôá ôùí äßóêùí.ÁíáæÞôçóç óôá ïíüìáôá ôùí áñ÷åßùí.ÁíáæÞôçóç óôá ïíüìáôá ôùí öáêÝëùí.Áõôü ôï ðáñÜèõñï ñõèìßóåùí óáò åðéôñÝðåé íá ñõèìßóåôå êÜðïéåò ëåéôïõñãßåò êáé éäéüôçôåò ôïõ ðñïãñÜììáôïò.Áõôü ôï ðáñÜèõñï ñõèìßóåùí óáò åðéôñÝðåé íá ñõèìßóåôå ôï ðñüãñáììá. ÊÜðïéåò éäéüôçôåò åäþ ìðïñïýí íá ìåôáâëçèïýí.Áõôü ôï ðáñÜèõñï óáò åðéôñÝðåé íá óôåßëåôå Ýíáí êáôÜëïãï ìå mail óå Ýíáí (Þ ðåñéóóüôåñïõò) ðáñáëÞðôåòÐñïò :Too many file descriptors in use by process.Õðåñâïëéêüò áñéèìüò áíïéêôþí áñ÷åßùí óôï óýóôçìá.ÓõíïëéêÞ ÷ùñçôéêüôçôá : Óýíïëï áñ÷åßùí : Óýíïëï öáêÝëùí : Óõíïëéêüò åëåýèåñïò ÷þñïò : Óõíïëéêüò áðïèçêåõôéêüò ÷þñïò : Óõíïëéêüò ÷ñçóéìïðïéïýìåíïò ÷þñïò : ÔýðïòÔýðïò : Ôýðïò : (öÜêåëïò)ÅéóÜãåôå åäþ ôï êåßìåíï ôïõ ìçíýìáôüò óáò.¶ãíùóôï óöÜëìáÅíçìÝñùóçÅíçìÝñùóç óôïí êáôÜëïãï : ×ñÞóç ðñïçãìÝíïõ ðñïôýðïõ ãéá ôç äçìéïõñãßá ôïõ ïíüìáôïò ôïõ äßóêïõ×ñçóéìïðïéïýìåíïò ÷þñïò : ¸êäïóç ¸êäïóç : ÏñáôÜÔüìïò : ÅôéêÝôá ôüìïõ : Ïíïìáóßá ôüìïõÏíïìáóßá ôüìïõ : ×áñáêôÞñåò ìðáëáíôÝñÈá èÝëáôå íá áðïèçêåýóåôå ôïí êáôÜëïãï : ÍáéZip : Zip : %dÅíÝñãåéáÅöáñìïãÞ¶êõñïÅðÝêôáóç üëùíÁñ÷åßïÂïÞèåéáÄçìéïõñãßá¼÷éOKOk¶íïéãìáÅðéëïãÝòÉäéüôçôåòÐñüóöáôá áíïéãìÝíá áñ÷åßáÄéáãñáöÞÁðïèÞêåõóçÁðïóôïëÞÅíçìÝñùóçÊåíü driveêáìßáunknownÜãíùóôç ïìÜäáÜãíùóôïò éäéïêôÞôçògwhere-0.2.3/po/es.gmo0000644000175000017500000011074210472436235013203 0ustar bartbartÞ•·Ô KŒ¸$ ¹$aÇ$$)%N% k%w%‰% œ%*¨%$Ó%ø%&%&A& J& W&b&j&r&z&‚&Š&’&š&1¯&á&qý&7o'°§'X(_( e( q(}( (Ž( —(¤(»(0Ô( )) &)+1)m])4Ë)J*RK*ž* ¦* ±*¿* Ï* Û*é*ÿ*-+ >+H+h+{++ †+ +œ+ £+C±+õ+1 ,?,S,*d, ,›,ª,¿,Ç, Þ,ë,û,- -<-P- a-n--—-¯-¾- Ñ-ß-ò- û-.\.u.n‰.(ø.!/ '/5/1O/(/5ª/5à/H0D_0?¤0ä0 ê0 ø0,101@1H1d1 ‚1 1ž1 £1 ¯1»1Ê1Ï1 ã1 í1ú1 22$282/N2 ~2M‹2Ù2ß2ð23 33r33¦3L¶3449&4@`43¡4#Õ4ù45$5@5T5%j5&5)·5Rá546S6s6I6\Ù6C67z7L”7"á7$8)8G8L8,_8$Œ8±8º8Á8Ó8Ø8 ì8 ö899 .9;9!L9n9 t9 ~9Š9‘9 §9 ³9¿9Î9 á9 ï9 ú9: ::7:;:N:pO;À;Ý;+î;?<?Z<gš<G=@J=‹=‘=š= =¨=¯=´=É=Ï=PO> >§>»>Ã>Ó>.í>?8?I?P?DY? ž?¨?¸?Ì?à?ÿ?@+@B@V@[@[t@ Ð@Û@ í@iû@ eA pA{A€A ˆA “A A ¤A°A¹AÂAÅA-ÚABB"B>BZBhxBáB æB óBýBC CC1C7C@CEEC‹C ©CµCÄCeÌC 2D=DCDIDcDvD†D…šD E'E 6E BE NE!\E~E™E  EªEÇEÐE0ÕEF"F*F :F$GFlF{F‘F šF¤F «FµF ÇF ÕF áFîFGGx'G] G<þG ;HK\H¨H½H ÏHÙH öH I II ,I:IRI[IlIqI…I ŠI”I œII¦I5ðI&J>J2ZJ?J>ÍJ/ K8XJXbX vX/‚X(²XÛXíX- Y7Y?Y PY[YcYkYsY{YƒY‹Y“Y=®YìYsZ={Z½¹Z w[ [‹[›[ª[±[ Å[Ò["å[)\=2\p\!ƒ\¥\2µ\‘è\=z]Q¸]g ^r^ z^ …^’^ £^ ®^¼^Í^,á^ _-_G_[_`_ d_ n_z__E_"Ö_Fù_@`Z`;s` ¯`»`"Ò`õ`þ`a0aFa`a"qa”a­aÀaÔaçabb+bCbUb jb tb€bg•býbŒc(ªcÓcÛc(ìc8d3NdF‚d<ÉdZeXaeQºe ff#f32fff xf ƒf2¤f ×fãfõf ûf g g!g'g@gXglg‚g—gžg´g3Ìg hk hyhh’h¤h·hÆh†âhii@{i ¼iÝi?ûiD;j:€j&»j&âj# k'-k%Uk'{k*£k)Îk1øk_*l!Šl$¬lÑlJïl`:mQ›m ímPn-_n.n)¼nænìn0o'3o [ofoooƒo‹o¦oÁoÓoòo pp(>pgp pp~pŽp–p³pÐpåpýpq %q3q CqNq^q{qqû’q‰Žr%s>s4QsB†sBÉs_ t@ltG­tõtûtu uuu!u@u’Fu]Ùu7v@vXv_v"wv1švÌvévwwUwfwuwˆw›w!µw×w÷w x#x=xDxn`xÏx×xíxoþx ny xyƒyŠy“yšy£y©y ¸y ÄyÒyÕy>ôy3z Lz*Yz&„z,«zqØzJ{P{ _{m{v{ ~{ˆ{ œ{¨{·{S¼{+|<|N|c|ik| Õ|á|è|"î|}#}4}‘H} Ú}ä}÷}~~3+~._~Ž~ —~£~ ½~Ê~DÒ~( @Mc7t¬¿ Ýèñø€€ 0€ >€"J€m€€…”€\>w#¶bÚ=‚X‚ r‚$€‚ ¥‚ ¯‚½‚͂߂õ‚ƒƒ*ƒ2ƒRƒYƒbƒ jƒKuƒ5Áƒ÷ƒ„<-„Gj„D²„9÷„21…=d…>¢…@á…&"†GI†:‘†ªÌ†Aw‡¹¹‡Gsˆœ»ˆÅX‰-Š'LŠ)tŠ+žŠ,ÊŠ ÷Š^‹dw‹UÜ‹2Œ:5Œ=pŒS®Œ&;Mby˜¯´»/Ìü ŽŽ84ŽpmŽÞŽïŽ øŽ ,?%T z„¤í§-•ÃÊÓÛ äîý‘ ‘‘‘‘‘ %‘ /‘<‘P‘X‘`‘ g‘ s‘}‘&…‘ ¬‘¸‘Ê‘c9lÄrBEi)8f ±k[È´xkV3ÜI“*Ž£r~Å'w¡.”ß4×™Ÿ=îžt ‰¥7ygR`s·ZALž›¢,–|«ÖbÛz 'l#µ@&zÇDq<ñ·jsu䜤#ã£|ˆïÎýÊ)€¤7Ó^ÿF ê¯!—%hZ>dœ™.Xm(´ÌNóÑ0a®\³ÍŒEchKªSQ LØìHϦ«!]CËŸŠæŽ/ U•먗]ÚÝ‚g³T(þ9‡8­RT‚An²µ»5a"Д©ð6¹˜$u±{P¶;¿Cšàv…§piø€OÙå@Šo?É ©+0‹}-‘^‹†4m~š%‘§ õqF¦Y2 {„<ª•°â ²/ç;>G¯í¢¬÷Ã?Þb\ V1ÆpáÂ_½WYe6G$›ô5†ºÀÔ `NKSnI2[QyB… }o&Xƒ­U–Œ¾°„è‰-H_=˜*MMW¬f3¨+ü¡ûv,dòO“öJ‡¼¥wù"DP’újƒ:Á¸¶1 ÕetÒé®Jˆ:’x Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Empty disk Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A catalog is already openedA component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A critical error occured when extracting file information of %s%s%s. Save your catalog if it is possible, exit GWhere and report this trouble to the GWhere project team please.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.All usersAll users|Current userAllow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Audio CD : Audio CD : %dAuto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog exportedCatalog fileCatalog importedCatalog is not exportedCatalog is not importedCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerExportExport catalog toFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGTK+ 2.6 RunTime (required)GUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.GWhere can be installed for all users or only for current user. Select for which you want install GWhere please.GWhere install rights accessGenerals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?ImportImport catalog fromInfo : Install optionsInstaller already runningInsufficient memory to complete the operation.Invalid filled catalog nameIs running on %sJaz : Jaz : %dKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : Network : Network : %dNewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new disk name was filledNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPlugins for auto extraction of file descriptions and plugins for importation/exportation of catalogs.PropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :Tape : Tape : %dThe catalog is invalid or doesn't exists. Check your catalog path please.The current catalog is never be saved, cannot send itThe disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled disk name already exist in the current catalogThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.There is no available catalog pluginThis Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Files : %ldTotal Folders : Total Folders : %ldTotal Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : Which users can run GWhere ?WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberYou must uninstall your last version of GWhereZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: es Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2005-05-15 12:35+0200 Last-Translator: Victor G. Marimon Language-Team: es_ES MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 8bit X-Generator: KBabel 1.9.1 Está ejecutándose en Gestión de medios extraíbles por Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacidad : %s, libre : %s %s [ %s ], total discos : %d %s, %s, %s Explorador de catálogoGestión de catalogoDisco vacio Carpeta "%s", %s (ficheros %d, subcarpetas %d)Objetos listados: %d (tamaño total : %s)Motor de busqueda Artículo seleccionado : %d Objeto seleccionado : %d (tamaño total : %s) Tipo: construido con %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu objeto(s) encontrados.%s fuera del espacio de direcciones asignadas por el proceso.Ya hay un catálogo abiertoUn componente de la siguiente ruta excedió %d caracteres, o el nombre de una ruta entera excedió %d caracteres: %s.Un componente del prefijo de la ruta no es un directorio: %s.Un error critico ocurrió extrayendo la información del fichero de %s %s %s. Guarda tu catálogo si es posible, sal de GWhere y reporta este problema al equipo del proyecto GWhere, por favor.Acerca deAcerca deFecha de accesoRuta de accesoAñadirAñadir / ActualizarAñadir discoAñadir nuevo discoLa adición del disco está en cursoTodas las palabras clave deben coincidir.Todos los ficheros de idioma para la traduccion del programa.Todos los usuariosTodos los usuarios|Usuario actualPermite pitidosPermite emitir un pitido corto en algunos eventos.Permite actualizar las propiedades de categoría de la categoría seleccionada. Haz click en el botón Añadir / Actualizar para guardar los cambios.Un error de E/S ocurrió cuando se cambio el directorio a: %s.Ocurrió un error durante el envío del correo. Por favor comprueba tus parámetros.Aplica la categoría seleccionada a todos los ítems en el disco para añadir (disco, carpetas, ficheros).ArchivoFichero N#Archivo N# :Fichero adjunto:Audio CD :Audio CD : %dAutodescripción.Autocargar catálogoAutocarga un catálogo por defecto al inicio.AutomontarAutoajusta todas las columnas del explorador.Autoajusta columnasBCC:CC:CD-Rom : CD-Rom : %dCerrarC_ontraer todoPuede usar expresión regular. Ver documentación para mas información.No se puede editar este fichero!! No se puede quitar esta categoría. Está siendo usada por algún objeto.No se puede recibir datosNo se puede mandar datosNo se puede iniciar la busqueda : no se ha cargado catalogoCapacidad :Sensitivo a mayúsculasOrdenación sensitiva a mayúsculas.CatálogoDescripción de catálogo : Información catálogo :Nombre del Catalogo: Categorías de catálogo : Catálogo cerradoNivel de compresión del catálogo :Descripción del catálogoCatálogo exportadoArchivo de catálogoCatálogo importadoEl catálogo no fue exportadoCátalogo no importadoCatalogo cargadoPropiedades de catalogoCatálogo guardadoLista de categorías:CategoríaCategoría :Nombre de categoría:Cambia en este panel todas las propiedades disponibles a fin de configurar el programa como tú quieres.Cambiar la etiqueta del volumenElige si todas las palabras clave o sólo una de todas ellas deben coincidir con el item en orden para estar en el resultado de la búsqueda.Elige o no adjuntar el fichero catalogo.LimpiarBorrar HistorialLimpia todos los resultados de búsquedasHaz click aquí para desglosar y seleccionar el catálogo.Haz click aquí para cancelar el envío de un correo.Haz click para borrar el historial de ficheros abiertos recientemente.Haz click aquí para enviar un correo (con catalogo adjunto).Haz click en el botón Aplicar para aplicar los cambios (sin cerrar la ventana de ajustes).Haz click en el botón Cancelar para cancelar los cambios y cerrar la ventana de ajustes.Haz click en el botón OK para aplicar los cambios y cerrar la ventana de ajustes.CerrarCerrar catálogoCerrar ficheroCierra la ventana de propiedades de las categorías.Cerrando catálogoCompacto/aConexión cerrada por el cliente No se pudo encontrar el fichero mapa de pixels: %sCreado en: Fecha de creaciónFechaBorrar discoDescripciónDescripción:DiscoDescripción del disco : Información del disco :Nombre del disco : Estadísticas disco : Descripción de discoDiscosDiscos en catalogo : Discos en catálogo : %dMuestra si el medio seleccionado está montado o no.Muestra infoMuestra la información del medio seleccionado como punto de montaje, capacidad, espacio libre, etiqueta,...SalirEditar _categoríasEditar categoríasEditar descripciónEditar ficheroExpulsa medio si es posibleExpulsa el medio si es posible (CD-ROM,...) aun si la bandeja está cerrada. Esto está activo solamente si el automontaje está activo!!Dirección Email :Introduce una lista de palabras clave las cuales todas deben serIntroduce el nombre del catálogoIntroduce el nombre del discoIntroduce aquí la dirección de email de los contactos copiados.Introduce aquí la dirección email de los contactos ocultos copiados.Introduce aquí la dirección de email de tu(s) contacto(s).Introduce aquí el asunto de tu correo.Introduce el nuevo nombre del catalogoIntroduce el nuevo nombre del discoIntroduce la nueva etiqueta del volumenIntroduce el nuevo nombre del ficheroIntroduce el nuevo nombre de la carpetaIntroduce el numero del archivo del disco.Introduce la descripción de la categoría.Introduce la ruta completa del catálogo a cargar.Introduce el patrón de comodines completo. Este patrón puede contener los carácteres "?" y "*".Introduce el nombre del catálogo.Introduce el nombre de la categoría.Introduce en nombre del discoIntroduce el nombre del nuevo disco. Este nombre aparecerá en tu catálogo.Introduce el número del nuevo disco. Este número puede ayudarte con el historial de tu catálogo.Introduce el puerto del servidor del correo saliente ( el valor más común es 25).Introduce tu dirección de email.Introduce tu servidor saliente. Normalmente esta dirección es mail.tudominio.comError: no se puede obtener la carpeta actual.Error: no se puede ir a la carpeta de trabajo.Error cargando fichero mapa de pixels: %sSalirExpandir solo _discosExplorar archivo de ficheros (.tar,.gz,.zip,...)Explorar estructura de árbol del medio.ExploradorExportarExportar catálogo aFicheroDescripción del fichero : Información del fichero : Tamaño fichero : Tamaño fichero : %s (%s bytes)Descripción de ficheroNombre del fichero : Nombre del sistema de ficherosTipo Fichero: aun no está implementado!!FicherosDisquetera : Disquetera : %dCarpetaDescripción de la carpeta : Información de la carpeta : Nombre de la carpetaTamaño de la carpeta : Descripción de carpetaEspacio Libre : Espacio libreEspacio libre :Completo/aCapacidad TotalRunTime GTK+ 2.6 (requerido)GUIGWhere (requerido)GWhere permite manipular una base de datos de tus CDs y otros medios extraibles (discos duros, disquetes, Zips, CD-ROM, etc...) Con GWhere es fácil navegar en tus CDs o hacer búsquedas rápidas sin necesidad de introducir tus CDs en la unidad cada vez.GWhere puede ser instalado para todos los usuarios o solamente para el usuario actual. Por favor selecciona como quieres instalar GWhere.GWhere instala los permisos de accesoOpciones generalesDa el fichero de dispositivo del medio seleccionado.Da el espacio libre del medio seleccionado (sólo si está montado).Da el espacio total del medio seleccionado (sólo si está montado).Da el número de serie del medio seleccionado (sólo si está montado). Este número es de fábrica.Da el tipo del medio seleccionado (ej: ext2,ext3,vfat,ntfs,...).Da el nombre del volumen del medio seleccionado (sólo si está montado).GrupoGrupo : HD : HD : %dOcultosOcultoOculta operaciones de ficherosINodeSi tu no entraste nombre del disco y tu medio seleccionado tiene nombre de volumen, el nombre del volumen del medio sera como el nombre del disco.Si no necesitas aplicar los cambios perderás todos los cambios. ¿Quieres aplicar los cambios?ImportarImportar catálogo desdeInfo :Opciones de instalaciónEl instalador ya está en ejecuciónMemoria insuficiente para completar la operación.Nombre del catálogo inválidoEstá ejecutándose en %sJaz :Jaz : %dMantenga esta opción marcada para escanear toda la información de carpetas y archivosPalabras claveFicheros de idiomaUltimo acceso en :Última modificación en : Carga el último catálogo abierto.Carga el catálogo seleccionado.Cargando catalogoCarga de catálogo fallidaLocalización del disco : CorreoMotor aplicacion principal.Autodescripción del fichero (descripción del formato del fichero, tamaño de la imagen para xmp o jpg, etc...).GestiónFecha de modificaciónMontaje fallido Monta el medio si no estaba montado. Y desmonta despues el disco inclusive si estaba montado antes del escaneo.Montado :Mover a...NombreNombre :Red : Red : %dNuevoCatalogo nuevoNuevo discoFichero nuevoNoNo hay ningún catalogo abiertoNo hay ningún catalogo abierto : no se puede editar categoríasNingún objeto coincidió.Sin etiquetaNo se ingresó ningún nombre de disco nuevoNo se ingresó ningún nombre de ficheroNo se ingresó ningún nombre de carpeta nuevoAun no está implementado!! Explora todos los archivos, como si fuera un directorio. Los archivos son .tar o gzip.AbrirAbrir catalogoAbrir ficheroOpcionesOtro : Otro : %dServidor saliente :PropietarioPropietario : RutaPor favor, configura las opciones de correo en los ajustes a fin de enviar correos.Por favor selecciona un nombre de catalogo Por favor, esperePor favor, espera...PluginsPlugins para autoextracción de las descripciones de fichero y plugins para/importar y exportar catálogos.PropiedadesRápidoSalirCatálogos abiertos recientemente :Expresión regularQuitar categoríaQuitar del catalogoQuita la categoría seleccionada de la lista de categorías. Estas categorías se pueden quitar sólo si no hay ningún objeto que use esta categoría.RenombrarRenombrar catalogoRenombrar discoRenombrar ficheroRenombrar carpetaGrupo de ordenación resultante por carpeta/fichero.Resultado del grupo de la ordenación por tipo.DerechosPermisos : Runtime para entorno GUI.Guardar comoGuardarGuardar las propiedades GUI como la posición de la ventana y tamaño.Guardar las propiedades del GUI al salirGuardar comoGuardar como catalogoGuardar catálogoGuardar los cambios de las propiedades de la categoría.Guardando catálogoFallado guardado del catálogoEscaneandoAjus_tesBuscarBuscar :Buscar en el catálogoResultado de la búsquedaBúsqueda tipoBuscando...Selecciona el catálogo autocargadoSelecciona catálogoSelecciona medio :Selecciona el nivel de compresión del catálogo. El valor por defecto es 3, es un buen valor entre alto rendimiento y tamaño reducido.Selecciona la categoría a aplicar al disco el cual sera añadido (si la opción está marcada).Selecciona el medio que sera añadido como disco a tu catálogo.Selecciona la sección a configurar.Selecciona el tamaño del historial de catálogos abiertos recientemente. El valor por defecto es 5.Enviar catálogo por correoEnviar fichero por correoEnviar correoEnviando correo, por favor espera...Serial : Nº serie N# :Número de serieNúmero de serie :Puerto del servidor :Ajusta categoría recursivaAjustesAjustes cambiadosMuestraMuestra operaciones de ficherosTamañoAsunto :Cinta :Cinta : %dEl catálogo es invalido o no existe. Revisa tu ruta de catálogo, por favor.El catálogo actual no fue guardado, no puede enviarseEl disco ha sido añadidoEl disco no ha sido añadido El disco no ha sido añadido Adición cancelada por el usuarioEl disco no ha sido añadido Error: no se pudo cerrar la carpeta actual.El disco no ha sido añadido Error: no se pudo ir a la carpeta padre.El disco no ha sido añadido : no se puede montar el medioEl disco no ha sido añadido : no hay medio montadoEl nombre del disco ingresado ya existe en el catálogo actualEl nombre del fichero ingresado ya existe en la carpeta actualEl nombre de la carpeta ingresado ya existe en la carpeta actualEl siguiente directorio no existe: %s.El siguiente directorio no existe, o el nombre es una cadena vacía: %s.El siguiente nombre de directorio no es un directorio: %s.El resultado de la ordenación en el explorador puede ser agrupado por tipo de item. Si esta opción esta marcada todos los items estarán agrupados por carpetas o ficheros.El resultado ordenado en el explorador es sensitivo a mayúsculas.El resultado de la ordenación en la búsqueda puede ser agrupado por tipo de item. Si esta opción esta marcada todos los items serán agrupados por catálogos, discos, carpetas y ficheros.El resultado de la ordenación en la búsqueda es sensitivo a mayúsculas.La busqueda puede ser o no sensitiva a mayúsculas. En sensitivo a mayúsculas "Fichero.txt" no coincide con "fichero.txt". Pero si no es sensitivo coinciden.La búsqueda puede ser sensitiva a las mayúsculas. La busqueda por comodin soporta carácter "* ". Ejemplo : img*.bmp o *.htm La búsqueda por palabras clave acepta una lista de palabras obligatorias.La busqueda coincide con nombre de categoría.La busqueda coincide con descripciones.La busqueda coincide con nombre de disco.La busqueda coincide con nombre de fichero.La busqueda coincide con nombres de carpeta.No hay ningún plugin de catálogoEsta ventana de ajustes permite configurar algunas funcionalidades y propiedades del programa.Esta ventana de ajustes permite configurar el programa. Algunas propiedades pueden modificarse aquí.Esta ventana te permite enviar un catálogo por correo a uno (o más) de tus contactos.A:Demasiados descriptores de ficheros en uso por el proceso.Actualmente están abiertos demasiados ficheros en el sistema.Demasiados enlaces simbólicos fueron encontrados resolviendo la siguiente ruta: %s.Capacidad Total :Total ficheros : Total ficheros : %ldTotal carpetas : Total carpetas : %ldEspacio libre total : Espacio total almacenamiento: Espacio total usado : TipoTipo :Tipo : (carpeta)Teclea aquí el texto para el mensaje de correo.Error desconocidoActualizarActualizado en catalogo : Usa un patrón avanzado para generar el nombre del disco.Utiliza el nombre del volumen del medio como nombre del disco (solamente cuando el nombre del disco esta vacio).Espacio Usado : Versión Versión : VisibleVolumen :Etiqueta del Volumen: Nombre del VolumenNombre del volumen :Que usuarios pueden ejecutar GWhere ?Comodines¿Quiere guardar el catalogo?: SiTu puedes rellenar pestañas extra para generar un nombre de disco con información de disco: - %% : % - %n : número archivo- (puedes usar prefijos prefijados por un 0) - %l : Etiqueta del disco - %t : tipo del disco - %s : número de serieDebes desinstalar tu última versión de GWhereZip : Zip : %d_Acción_Aplicar_Cancelar_Expandir todo_FicheroAyuda_Nuevo_No_OK_OkAbrir_Opciones_PropiedadesFicheros _recientesQuita_rGuardarEnviarAct_ualizarno unidadningunoLa adición del disco ha sido canceladadesconocidogrupo desconocidopropietario desconocidogwhere-0.2.3/po/hu.po0000644000175000017500000021044410472436221013037 0ustar bartbart# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: 0.1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2004-09-20 13:59+0200\n" "Last-Translator: LAJOSHAZI Laszlo Gergely \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" "hu>\n" "Last-Translators: Urbán Zoltán , LAJOSHÁZI László " "Gergely \n" "X-Generator: KBabel 0.9.6\n" #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "A levelezõ kliens nem tud adatot fogadni" #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "A kapcsolatot a levelezõ kliens megszûntette\n" #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "Nem lehet adatot küldeni" #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%.0f byte" #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f Kbyte" #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f MB" #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f GB" #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f TB" #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f PB" #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f HB" #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f Ib" #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "_Rendben" #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "_Mégsem" #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Kategóriák szerkesztése" #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "Kategóriák listája :" #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "Név" #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "Leírás" #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "_Frissít" #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" "Lehetõséget biztosít a kategóratulajdonságok frissítésére a kijelölt " "kategóriában. Kattints a Felvesz/ Frissít gombra a frissítés mentéséhez." #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "_Töröl" #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" "A kijelölt kategória eltávolítása a listából. A kategória csak akkor " "törölhetõ, ha nincsenek ebbe a kategóriába sorolt elemek." #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "Kategória neve :" #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "Írd be a kategória nevét!" #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "Leírás :" #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "Gépeld be a kategória leírását!" #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "Felvesz / Frissít" #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "Kategóriabeállítások elmentése." #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Bezár" #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Kategória-tulajdonságok szerkesztése ablak bezárása." #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "kategorizálatlan" #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "Kategória eltávolítása" #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "" "A kategóriát nem lehet eltávolítani! Van ebbe a kategóriába sorolt elem." #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "Felvesz" #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "Frissít" #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "_Nem" #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "File mûveletek elrejtése" #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "File mûveletek mutatása" #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "_Akciók" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "Teljes katalógusfa megjelenítése" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "Katalógusfa megjelenítése lemez szintig" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "Katalógusfa elrejtése" #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "Kategóriák szerkesztése" #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "Nincs megnyitott katalógus : nem szerkeszthetõ kategória." #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "Katalógus _fájl" #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "Új létrehozása" #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "_Megnyitása" #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "Menté_se" #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "Mentés másként" #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "Bezár" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "" #: src/gui/gwmenufile.c:199 #, fuzzy msgid "Export" msgstr "Böngészõ" #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "_Tulajdonságok" #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "Legutóbb használt megnyitása" #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "Kilépés" #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Új katalógus" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "" #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "El szeretnéd menteni a katalógust? \n" "\n" #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Új fájl" #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "Nevezd el a katalógust" #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "Katalógus megnyitása" #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "Fájl megnyitása" #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Fájl bezárása" #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "Nincs megnyitott katalógus" #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "Fájl küldése e-mailben." #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "" "Levélküldéshez a beállítások menüben állítsd be a levelezéshez szükséges " "információkat!" #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "Mentése más néven" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "" #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "Katalógus tulajdonságai" #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "Katalógus mentése" #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "Kilépés" #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "" #: src/gui/gwmenufilecallback.c:1231 #, fuzzy msgid "Catalog imported" msgstr "Katalógus tulajdonságai" #: src/gui/gwmenufilecallback.c:1233 #, fuzzy msgid "Catalog is not imported" msgstr "Nincs megnyitott katalógus" #: src/gui/gwmenufilecallback.c:1267 #, fuzzy msgid "A catalog is already opened" msgstr "Nincs megnyitott katalógus" #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 #, fuzzy msgid "Export catalog to" msgstr "Nevezd el a katalógust" #: src/gui/gwmenufilecallback.c:1291 #, fuzzy msgid "Catalog exported" msgstr "Katalógus böngészõ" #: src/gui/gwmenufilecallback.c:1293 #, fuzzy msgid "Catalog is not exported" msgstr "Katalógus böngészõ" #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "Súgó" #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "Névjegy" #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "_Beállítások" #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "Beállítások" #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Új" #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "Megnyit" #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "Mentés" #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "Mentés másként.." #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "Bezárás" #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Átnevezés" #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Leírás készítés" #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "Tulajdonságok" #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "Kibontás..." #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "Eltávolítás" #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "Kötetcímke változtatása" #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "Eltávolítás a katalógusból" #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "File szerkesztése" #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "Nem lehet a file-t szerkeszteni!!\n" #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Katalógus átnevezése" #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "Katalógus új neve" #: src/gui/gwmenupopupcallback.c:121 #, fuzzy msgid "Invalid filled catalog name" msgstr "Ervenytelen lemez nev!" #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "Katalógus leírása" #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Lemez átnevezése" #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "Új lemez neve" #: src/gui/gwmenupopupcallback.c:360 #, fuzzy msgid "The filled disk name already exist in the current catalog" msgstr "Az altalad beutott nevu fajl mar letezik az aktualis mappaban" #: src/gui/gwmenupopupcallback.c:374 #, fuzzy msgid "No new disk name was filled" msgstr "Nem adtal meg uj fajl nevet" #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "Új lemez kötetcímkéje" #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "Lemez leírása" #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "Mappa átnevezése" #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "Usd be az uj mappa nevet" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "Mar van ilyen nevu mappa az aktualis mappaban" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "Nem adtal meg uj mappa nevet" #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "Mappa leírása" #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "Fajl átnevezése" #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "Új fajl neve" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "Az altalad beutott nevu fajl mar letezik az aktualis mappaban" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "Nem adtal meg uj fajl nevet" #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "File meghatározása" #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Katalógus" #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "Katalógus" #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "Katalógus bezárása" #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "keresés folyamatban..." #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Katalógus bezáródott" #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "ismeretlen tulajdonos" #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "ismeretlen csoport" #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Új lemez" #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "" "Válaszd ki az adathordozot, ami lemezkent jelenik majd meg a katalogusodban" #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "Adathordozo választása : " #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "Üsd be az új lemez listabeli azonosítókulcsát! " #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Sorszáma a katalógusban : " #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "" "Üsd be az új lemez nevét! Ezzel a névvel fog megjelenni a katalógusodban." #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "Név :" #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "Kategória : " #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "Válaszd ki azt a lemezhez társítandó kategóriát (még ha TODO)" #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "Add meg a kivalasztott adathordozo /dev-es elereset (device file)" #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Tulajdonságai : " #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "" "Add meg a kiválasztott adathordozo fajlrendszerenek tipusát! (ex : ext2, " "ext3, vfat, ntfs, ...)." #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Fájlrendszer tipusa: " #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "Megjeleníti, hogy a kiválasztott lemez mount-olt vagy sem." #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "Mount -olt : " #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "Add meg a kiválsztott lemez kötet nevét (ha mount-olt)" #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Kötet : " #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "" "Ha mountolt a lemez, akkor add meg a kiválasztott lemez gyártási számát!" #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Sorozatszám: " #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "Megadja a kiválasztott lemez szabad területét (ha mount-olt)." #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "Teljes tárolókapacitás : " #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "" "Megadja a szabad tárolókapacitását a választott lemeznek (ha mount-olt)" #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Szabad tárolókapacitás : " #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "Beállítások" #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "Tulajdonságok megjelenítése" #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" "A kiválasztott adathordozo tulajdonságainak megjelenítése úgy mint szabad " "hely, összes hely, mountolt e, blabla" #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Automount" #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" "Ha a lemez nem mount-olt, akkor mountolja, majd unmount-olja, függetlenül " "attól hogy volt e elõzõleg mount-olva. (Mount muvelet teszi olvashatova a " "lemezt.)" #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "Lemez fa struktúrájának átvizsgálása." #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "Kijelölésekor minden fájl és mappa katalógusba kerül." #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "Tömörített fájlok feltárása (.tar, .gz, .zip, ...)" #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "Még nincs megvalósítva!!! \n" "A tömörített fájlok tartalmát is katalogizálja, mintha a tömörített fájl " "mappa lenne." #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "Lemez kiadása (ha lehetséges)" #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" "Lemez kiadása (ha lehetséges - pl. CDROM); használatához az automount-ot is " "engedélyezni kell!" #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "Kategória megadás alkönyvtárakra is vonatkozzon" #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "" "A kiválasztott kategóriát a lemezen található minden mappához, fájlhoz " "hozzárendeli." #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "Automatikus leíráskészítés" #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "" "Leírást készít a fájl jellemzõi ( fájl kiterjesztés, jpg esetén képpontok " "mérete, stb.) alapján " #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "Lemeznév generálás minta alapján" #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Név mezõbe írva a : elõttieket behelyettesítõdnek a : utánival lemez név " "generalaskor:\n" "% : % \n" "%n : katalógusbeli sorszámot adja vissza%.Xn : X számjegyû szám (pl. %.4n " "helyére 0001, 0002,0003, ..., 0091 kerül)\n" "%l : lemez kötetcímkéje %t : fájlrendszer típusa %s : gyártási szám" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "Kötetcimke használata lemeznévként (ha lemez neve nincs kitoltve)" #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" "Ha a lemez rendelkezik kötetnévvel és nem adtál a katalogusnak nevet, akkor " "a lemez neve lesz az uj katalogus neve." #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "Új lemez felvétele a katalógusba" #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Hozzáadás" #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "A lemez nem lett hozzáadva: nincs becsatolva (mount-olva) eszköz" #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "" "A lemez nem lett hozzáadva: nem sikerült az adathordozot becsatolni (mount-" "olni)." #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "Új lemez hozzáadása" #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "Írd be a nevét" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "Keresés" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "Lemez hozzáadása folyamatban" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "Türelem rózsát terem" #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "A lemez hozzáadása befejezõdött." #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Sikertelen Mount mûvelet.\n" #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Gyártási szám : " #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "nem elérhetõ" #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "ismeretlen" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Igen" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "Nem" #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "Nincs cimke" #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Kötet cimk : " #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "lemez hozzáadása megszakítva" #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "Válassz egy katalógus nevet kérlek!\n" #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "Keresés : " #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "Keresés" #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "Kiválasztható a keresés fajtája. Beállítható betûérzékeny keresés is. \n" "Használhatók joker karakterek a keresõmezõben." #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "Törlés" #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "Keresés eredménylistáját törli" #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "Betûérzékeny" #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "A betûérzékeny keresésben megkülönbözteti a kis- és nagybetûs szót, ekkor " "\"File.txt\" nem egyezik \"file.txt\"-vel." #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "Keresés fajtája" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "Kulcsszavas" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "Keresõ mezõbe írt szavak mindegyikére kiírja a találatokat" #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "Joker karakteres" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "" "Keresési szövegben megadhatók a \"?\" és \"*\" jelek is. A ? egy betût " "helyettesít, míg * tetszõleges szöveget." #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "Reguláris kifejezés" #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "" "Ha ezt bekapcsolod, akkor a beírt szó bárhol lehet a fájlnévben. Különben " "meg *-ozhatsz...Reguláris kifejezések használatáról bõvebben a " "dokumentációban olvashatsz." #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "Fájlnév" #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "keresés filenevek között" #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "Mappa" #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "keresés mappanevek között" #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "Lemez" #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "keresés lemez nevekben" #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "Kategória" #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "keresés kategórianevek között" #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "keresés leírásokban" #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "Keresés a katalógusban" #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "%lu darabot találtam!!" #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "Keresés eredménye: " #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "Nem találtam ilyet." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "Keresés..." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "Nem lehet keresni : nincs betöltött katalógus" #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "_Rendben" #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "Írd be a katalógus nevét!" #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "Verzió : " #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "Verzió " #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr " létrehozta: " #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "Lemezek a katalógusban : " #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "%d lemez van a katalógusban." #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Összes fájl : " #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, fuzzy, c-format msgid "Total Files : %ld" msgstr "%d darab fájl található." #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "Összes mappa : " #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, fuzzy, c-format msgid "Total Folders : %ld" msgstr "Összes mappa : %d " #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "Fájlméret : " #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Összes tárolókapacitás : " #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "Teljes használt adatterület : " #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "Teljes szabad tárolókapacitás : " #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "Lemez-statisztikák : " #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "CD-Rom : " #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "CD-Rom : %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "" #: src/gui/gwpropertiesbox.c:577 #, fuzzy, c-format msgid "Audio CD : %d" msgstr "HD : %d" #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "HD : " #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "HD : %d" #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "Floppy : " #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "Floppy : %d" #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip : " #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip : %d" #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 #, fuzzy msgid "Tape : " msgstr "Fájlrendszer tipusa: " #: src/gui/gwpropertiesbox.c:649 #, fuzzy, c-format msgid "Tape : %d" msgstr "Fájlrendszer tipusa: " #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "" #: src/gui/gwpropertiesbox.c:666 #, fuzzy, c-format msgid "Network : %d" msgstr "Más : %d" #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 #, fuzzy msgid "Jaz : " msgstr "Név :" #: src/gui/gwpropertiesbox.c:683 #, fuzzy, c-format msgid "Jaz : %d" msgstr "HD : %d" #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "Más : " #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "Más : %d" #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Katalógus kategóriái : " #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "Katalógus leírás : " #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Katalógus jellemzõk" #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "Írd be a lemez nevét!" #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "Üsd be a lemez archive számát." #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr "Fájlrendszer tipusa : " #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "Gyártási szám : " #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "Lemez cimke : " #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "Teljes adatterület : " #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "Használt terület : " #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "Szabad tárolókapacitás : " #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "Katalógus név : " #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "Frissítés a katalógusban : " #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "Lemez leírás : " #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Lemez jellemzõk" #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "Mappa név" #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Tipus : (mappa)" #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "Mappa méret : " #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "Létrehozva : " #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "Utolsó módosítás : " #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "Utolsó hozzáférés : " #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Jogosultság : " #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "Tulaj : " #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "Csoport : " #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "Lemez neve : " #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "Helye a lemezen : " #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "Mappa leírás : " #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Mappák" #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "Fájlnév : " #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Fájl tipusa : még nincs kész a program ezen része!!" #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "Fájl mérete : %s (%s byte)" #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "Fájl leírása : " #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Fájl adatai" #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "Katalógus fájl" #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Katalógus fájl tömörítettsége : " #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "Alapérték 3, ez aránylag gyors és jó hatásfokú tömörítést ad." #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Legutóbb használt katalógusok : " #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "" "A legutoljára megnyitott katalógusok közül max. ennyit jegyez meg. " "Alapértéke 5." #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "Katalógusok elfelejtése" #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "Kattints ide a legutóbb megnyitott katalógusok listájának ürítéséhez." #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Katalógus betöltése induláskor..." #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "Az alapértelmezett katalógus betöltése induláskor." #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "...az utoljára használtat" #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "...a kiválasztottat : " #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "Írd be a betöltendõ katalógusfájl teljes elérési útvonalát." #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "Katalógus kiválasztása" #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "Kattints ide a katalógusfájl kiválasztásához." #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "induláskor betöltõdõ katalógus" #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "Böngészõ" #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "Betûérzékeny rendezés" #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "A böngészõben látható lista rendezése betûérzékeny." #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Rendezés név szerint" #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" "A böngészõben csoportosíthatók az elemek típus szerint is. Ha ezt " "engedélyezed, akkor minden elem mappa szerint lesz csoportosítva." #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Oszlopok automatikus átméretezhetõsége" #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "Minden oszlop mérete szöveghez igazodhat." #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "Lemezek" #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "Látható" #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Elrejtés" #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "Mutat" #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "Rejtett" #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Fájlok" #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "Betûérzékeny rendezés kereséskor" #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Típus szerinti rendezés" #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" "Elem tipus szerint lehet csoportositani a rendezett listat. Ha ezt " "kivalasztod, akkor minden elem katalogus, lemez, mappa, file szerint lesz " "csoportositva. " #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "Minden kulcs-szónak egyeznie kell" #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" "Ha kivalasztod, akkor a kereseskor megadott kulcsszavak kozul mindnek benne " "kell lennie a talalatok kozt. Ha nem valasztod ki, akkor 1 kulcsszo egyezese " "eseten is kilistazza a talalt elemet. " #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "Gyors" #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "Általános beállítások" #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "Felhasználói felület (GUI)" #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "Állapot elmentése kilépéskor" #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "GUI jellemzõk mentése, mint ablak mérete és helye" #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "Hang engedélyezése" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "Megenged rövid hangjelzést bizonyos eseményeknél" #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Levelezõ beállítások" #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "Email címed : " #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "Gépeld be az e-mail címed, pl a@b.c" #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "Levelezõ szerver" #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "" "Írd be az általad használt kimenõ mail server címét! Általában ez a cím mail." "yourdomain.com" #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Server port :" #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "Üsd be a kimenõ mail server port-ját (általában 25)." #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "" "Ezzel a beállítás ablakkal a program funkcióit és tulajdonságait lehet " "beállítani." #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "Beállítások" #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "Válassz ki egy szekciót." #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "" "Az itt felkínált változtatások teszik lehetõvé a program testreszabását." #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "" "Ezzel a beállítás ablakkal a program nehány funkcióját és tulajdonságát " "lehet beállítani." #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "" "Kattints az erre a gombra a változtatások mentéshez és az ablak bezáráshoz" #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "" "Ha elrontottad a beállításokat, és szeretnéd a legutolsó mentett állapotot " "használni, akkor kattints a Mégsem gombra!" #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "_Alkalmaz" #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "" "Kattints erre a gombra a változtatások elmentéséhez (a beállítások panel nem " "záródik be)" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "Változtatások mentése" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "" "Elmentsem amit az elõbb megpiszkáltál? \n" "Legközelebb az \"Alkalmaz\" gombot nyomogasd... " #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], összes lemez : %d" #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr "Listázott elemek : %d (teljes méret : %s)" #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], kapacitás : %s, szabad hely : %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr "Ures lemez" #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr "Kiválasztott elem : %d (teljes méret : %s)" #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr " Mappa \"%s\", %s (%d fájl, %d al-mappa)" #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr " %s, %s, %s" #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr " Kiválasztott elem : %d" #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr "Katalógus böngészõ" #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr "Keresõ motor" #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr "Katalógus kezelés" #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Katalógus Bezárása" #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "Katalógus küldése levélben" #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "Névjegy" #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "Lemez katalógus nyilvántartó program\n" "Alkotta: Sébastien LECACHEUR\n" "(nagybetûs a vezetékneve)\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" "\n" #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" "GWhere lehetõvé teszi a CD lemezeid és más mozgatható adathordozóid (hdd, " "floppy, Zip meghajtó, USB drive....) katalogizálását.A GWhere a lemezekrõl " "egy adatbázist készít, ami tartalmazza a fájlok neveit, majd késõbb ebben az " "adatbázisból a CD lemez érintése nélkül gyorsan megállapíthatod melyik " "lemezen van a keresett fájl." #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Futtatja " #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "Ez az ablak arra való ,hogy katalógust küldjünk e-mail-en keresztül" #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "Levél küldése" #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "Címzett :" #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "Másolat :" #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "BCC :" #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "Tárgy :" #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "Ide írd be az e-mail címe(i)det , elérhetõsége(i)det." #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "Ide írd be a másolat e-mail címét.*" #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "Ide írd be a titkos másolat e-mail címét." #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "Ide írd be a levél tárgyát." #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "Csatolt file:" #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "Válaszd ki csatolod e a katalógust, avagy sem." #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "Ide jön az üzenet szövege." #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "_Küldés" #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "Üzenetküldéshez katt ide." #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "A küldés megszakítása." #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "Üzenet küldése..." #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "Hiba lépett fel az üzenetküldésnél. Ellenõrizd a beállításokat!" #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Nem található a pixmap fájl : %s" #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "Hiba a pixmap fájl töltésekor : %s" #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "Hiba: aktuális mappa elérése sikertelen" #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "Hiba: nem lehet a munka mappát megnyitni." #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "Nem lett hozzáadva a lemez.\n" "Oka: felhasználói megszakítás." #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "Nem lett hozzáadva a lemez \n" #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "%s kívül esik a futó program által lefoglalt címterületen." #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" "Egy mappa nevének hossza több, mint %d karakter, vagy a teljes elérési " "útvonal neve nagyobb, mint %d karakter : %s" #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "Nincs ilyen mappa : %s" #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "Nem áll rendelkezésre elég szabad memória a mûvelet befejezéséhez. " #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "Az útvonal elõtét egy része nem egy mappa : %s" #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "Túl sok a szimbólikus link ezen az útvonalon :%s" #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "Egy írási/olvasási hiba történt a köv. mappára váltás közben%s" #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "Ismeretlen hiba" #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "A lemez nem lett hozzáadva.Hiba : nem lehet szülõmappára lépni." #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Túl sok fálj-leírót használnak a futó programok." #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Túl sok fájl van már nyitva a rendszerben." #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "" "%s \n" "mappa nem létezik vagy a neve üres strin " #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "%s ez a mappa név nem mappa." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" "Sulyos hiba tortent az alabbi fajl informacioinak kinyeresekor: %s%s%s.\n" "Mentsd el a katalogusodat ha lehetseges, majd lepj ki a GWhere programbol es " "jelezd a hibat a GWhere project csapatnak! " #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "A lemez nem lett hozzáadva." #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "%s % kész." #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Katalógus betöltõdött" #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "Sikertelen katalógus betöltés" #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "Katalógus betöltése" #: src/gwapplicationmanager.c:499 #, fuzzy msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "" "A katalógus nem elérhetõ. Kérlek ellenõrizd az elérési útvonal helyességét!" #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "Katalógus mentése" #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Katalógus elmentve" #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "Katalógus mentése nem sikerült." #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Jogok" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "Tulajdonos" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "Csoport" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "Méret" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "INode" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Utolsó hozzáférés dátuma" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Módosítás dátuma" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "Létrehozás dátuma" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "Eszköz" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "Elérési útvonal" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Azonosító kulcs" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Fájlrendszer" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Kötet neve" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "Teljes adatterület" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "Szabad tárolókapacitás" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Dátum" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Gyártási szám" #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "Útvonal" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "Teljes" #: win32/config.h:288 msgid "Compact" msgstr "Minimális" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (nélkülözhetetlen)" #: win32/config.h:290 msgid "Main engine application." msgstr "Fõbb programrészek." #: win32/config.h:291 #, fuzzy msgid "GTK+ 2.6 RunTime (required)" msgstr "GTK+ 2.0 RunTime (nélkülözhetetlen)" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "A grafikus felület megjelenítéséhez használt futtatókörnyezet." #: win32/config.h:293 msgid "Plugins" msgstr "Plugins" #: win32/config.h:294 #, fuzzy msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "" "Automatikus leírásgyûjtéshez kiegészítõk. pl. mp3 fájlok szöveges adatainak " "kinyeréséhez." #: win32/config.h:295 msgid "Languages Files" msgstr "Fordítások" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "A program magyar nyelvû használatát teszi lehetõvé." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "" #: win32/config.h:298 msgid "Installer already running" msgstr "" #: win32/config.h:299 #, fuzzy msgid "Install options" msgstr "Általános beállítások" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" #: win32/config.h:303 msgid "All users|Current user" msgstr "" #: win32/config.h:304 msgid "All users" msgstr "" #~ msgid "" #~ "The catalog file doesn't exists. Check your catalog file path please." #~ msgstr "" #~ "A katalógus nem elérhetõ. Kérlek ellenõrizd az elérési útvonal " #~ "helyességét!" #~ msgid "" #~ "The catalog file to load doesn't have a good file extension. Only .ctg " #~ "files are allowed to be loaded." #~ msgstr "" #~ "A betöltendõ katalógusfálj kiterjesztése nem megfelelõ. Csak .ctg -re " #~ "végzõdõ fájl betöltése engedélyezett." #~ msgid "Load file" #~ msgstr "Fájl töltés" #~ msgid "Error : cannot open this file." #~ msgstr "Hiba : nem olvasható ez a fájl" #~ msgid "Error : cannot read the file version." #~ msgstr "Hiba : nem olvasható a fájlverzió" #~ msgid "Load catalog" #~ msgstr "Katalógus töltés" #~ msgid "Error : cannot close file." #~ msgstr "Hiba : nem lehet bezárni a fáljt." #~ msgid "Error : it's not a GWhere file." #~ msgstr "Hiba : ez nem egy GWhere katalógusfájl!" #~ msgid "Error : this GWhere version file is unknown." #~ msgstr "Hiba : ez a GWhere fájlverzió ismeretlen" #~ msgid "Error : cannot close this file after loading." #~ msgstr "Hiba : nem lehet bezárni ezt a fájlt a betöltés után" #~ msgid "Error : during the loading of disk." #~ msgstr "Hiba: lemezbetöltés közben" #~ msgid "Error : cannot create file." #~ msgstr "Hiba : fájl nem hozható létre." #~ msgid "Error : cannot write file version." #~ msgstr "Hiba a fájl verzió beírásakor." #~ msgid "Error : cannot close catalog file." #~ msgstr "Hiba: nem lehet bezárni a katalógus fájlt." #~ msgid "Elapsed time to save the catalog : %d secs" #~ msgstr "%d másodperc telt el a katalógus mentése során" #~ msgid "" #~ "Give the device file of the selected disk. The device file is the one of " #~ "the /etc/fstab file." #~ msgstr "Add meg az eszköz" #~ msgid "Scan disk" #~ msgstr "Lemez hozzáadása" gwhere-0.2.3/po/fr.gmo0000644000175000017500000011300010472436234013170 0ustar bartbartÞ•·Ô KŒ¸$ ¹$aÇ$$)%N% k%w%‰% œ%*¨%$Ó%ø%&%&A& J& W&b&j&r&z&‚&Š&’&š&1¯&á&qý&7o'°§'X(_( e( q(}( (Ž( —(¤(»(0Ô( )) &)+1)m])4Ë)J*RK*ž* ¦* ±*¿* Ï* Û*é*ÿ*-+ >+H+h+{++ †+ +œ+ £+C±+õ+1 ,?,S,*d, ,›,ª,¿,Ç, Þ,ë,û,- -<-P- a-n--—-¯-¾- Ñ-ß-ò- û-.\.u.n‰.(ø.!/ '/5/1O/(/5ª/5à/H0D_0?¤0ä0 ê0 ø0,101@1H1d1 ‚1 1ž1 £1 ¯1»1Ê1Ï1 ã1 í1ú1 22$282/N2 ~2M‹2Ù2ß2ð23 33r33¦3L¶3449&4@`43¡4#Õ4ù45$5@5T5%j5&5)·5Rá546S6s6I6\Ù6C67z7L”7"á7$8)8G8L8,_8$Œ8±8º8Á8Ó8Ø8 ì8 ö899 .9;9!L9n9 t9 ~9Š9‘9 §9 ³9¿9Î9 á9 ï9 ú9: ::7:;:N:pO;À;Ý;+î;?<?Z<gš<G=@J=‹=‘=š= =¨=¯=´=É=Ï=PO> >§>»>Ã>Ó>.í>?8?I?P?DY? ž?¨?¸?Ì?à?ÿ?@+@B@V@[@[t@ Ð@Û@ í@iû@ eA pA{A€A ˆA “A A ¤A°A¹AÂAÅA-ÚABB"B>BZBhxBáB æB óBýBC CC1C7C@CEEC‹C ©CµCÄCeÌC 2D=DCDIDcDvD†D…šD E'E 6E BE NE!\E~E™E  EªEÇEÐE0ÕEF"F*F :F$GFlF{F‘F šF¤F «FµF ÇF ÕF áFîFGGx'G] G<þG ;HK\H¨H½H ÏHÙH öH I II ,I:IRI[IlIqI…I ŠI”I œII¦I5ðI&J>J2ZJ?J>ÍJ/ K8•ZÜÔZ±[º[ Ã[Ð[ß[ç[ý[\)\'H\?p\°\+Æ\ò\A]F]H×]Y ^mz^è^ð^__ '_ 3_A_$Y_>~_ ½_<É_*`1`7` <` F`R`Y`bh` Ë`Iì`6aVa>ua ´aÀaÏa çaña b&b:bUb&ebŒb¥b·bÌbÞbýbc-cEcZc rc |c‰co cd›)d5Ådûde)eCBe)†eE°eHöeg?f_§f\gdgkg|g9ŽgÈgÛgäg(h -h8hIhNh `hlh{h‚h›h±hÂhÛhñhùhi25ihiq‚iôiüij)j?jRj}ojíjUýjSknk4†k;»k5÷k!-l"Olrl)’l ¼l#Ýl%m&'m0Nm_mßmûmnE2n\xnMÕn#oU>o'”o/¼o2ìop'p5Fp!|p žp ªp¶pÑpÙpóp q!qAqXqjq)„q®q ·qÄq ÓqÞqûqr'r?rYr irvr†rrŸr½rÁrÕr¡ós*•tÀt6ÒtF uHPur™uF vHSvœv £v­v³v»vÁv&Èvïvœövv“w xx5xDx*[x0†x$·x Üxêxñx]úxXyay wy „y/’y,Âyïyz"z:z"?z}bzàzèzýzf{v{{“{—{ ž{ ¨{´{¼{Î{Ý{í{ñ{:|C| `|)m|*—|-Â|ˆð|y}€}”}¦}®} ·}Â} Ü}é}ù}f~#g~‹~ž~´~u¼~ 2=DMl˜–¯F€O€e€x€Œ€4£€3Ø€ 2P bPn0¿ð‚‚88‚q‚"‚°‚ Á‚ ΂ ؂悃ƒ ,ƒ39ƒmƒ‡ƒ³ ƒjT„;¿„%û„d!…†…¢… ¾…$Ì…ñ…††'†:†!L† n†y††'–†¾†ņ͆ Ö†Tá†G6‡~‡•‡E³‡Iù‡SCˆ<—ˆ:Ôˆ<‰>L‰A‹‰(͉Fö‰:=Š£xŠ?‹Ã\‹; Œ›\Œ¿øŒ,¸&å) Ž*6Ž-aŽ$Žd´Žn[ˆä?è;(Rd·Êàù‘.‘D‘W‘o‘t‘|‘(‘¹‘ ΑÚ‘7ö‘b.’‘’£’ ¬’·’¿’Ð’ á’ï’7“ 8“(B“k“;o“7«”ã”ê”ó” û”• ••&•+•4•9•=•A•I• R•^• p• {•ˆ• ••±•·•Ô•Ü•ë•c9lÄrBEi)8f ±k[È´xkV3ÜI“*Ž£r~Å'w¡.”ß4×™Ÿ=îžt ‰¥7ygR`s·ZALž›¢,–|«ÖbÛz 'l#µ@&zÇDq<ñ·jsu䜤#ã£|ˆïÎýÊ)€¤7Ó^ÿF ê¯!—%hZ>dœ™.Xm(´ÌNóÑ0a®\³ÍŒEchKªSQ LØìHϦ«!]CËŸŠæŽ/ U•먗]ÚÝ‚g³T(þ9‡8­RT‚An²µ»5a"Д©ð6¹˜$u±{P¶;¿Cšàv…§piø€OÙå@Šo?É ©+0‹}-‘^‹†4m~š%‘§ õqF¦Y2 {„<ª•°â ²/ç;>G¯í¢¬÷Ã?Þb\ V1ÆpáÂ_½WYe6G$›ô5†ºÀÔ `NKSnI2[QyB… }o&Xƒ­U–Œ¾°„è‰-H_=˜*MMW¬f3¨+ü¡ûv,dòO“öJ‡¼¥wù"DP’újƒ:Á¸¶1 ÕetÒé®Jˆ:’x Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Empty disk Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A catalog is already openedA component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A critical error occured when extracting file information of %s%s%s. Save your catalog if it is possible, exit GWhere and report this trouble to the GWhere project team please.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.All usersAll users|Current userAllow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Audio CD : Audio CD : %dAuto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog exportedCatalog fileCatalog importedCatalog is not exportedCatalog is not importedCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerExportExport catalog toFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGTK+ 2.6 RunTime (required)GUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.GWhere can be installed for all users or only for current user. Select for which you want install GWhere please.GWhere install rights accessGenerals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?ImportImport catalog fromInfo : Install optionsInstaller already runningInsufficient memory to complete the operation.Invalid filled catalog nameIs running on %sJaz : Jaz : %dKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : Network : Network : %dNewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new disk name was filledNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPlugins for auto extraction of file descriptions and plugins for importation/exportation of catalogs.PropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :Tape : Tape : %dThe catalog is invalid or doesn't exists. Check your catalog path please.The current catalog is never be saved, cannot send itThe disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled disk name already exist in the current catalogThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.There is no available catalog pluginThis Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Files : %ldTotal Folders : Total Folders : %ldTotal Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : Which users can run GWhere ?WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberYou must uninstall your last version of GWhereZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: 0.1.3 Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2001-09-27 00:12GMT Last-Translator: Sébastien LECACHEUR Language-Team: french MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Tourne sous Gestionnaire de catalogues de media amovibles Par Sébastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacité : %s, libre : %s %s [ %s ], total des disques : %d%s, %s, %s Explorateur de catalogue Gestion du catalogueDisque vide Répertoire "%s", %s (fichiers %d, sous-répertoires %d) Eléments sélectionnés : %d (taille totale : %s) Moteur de recherche Elément sélectionné : %d Elément sélectionnés : %d (taille totale : %s) Type : construit avec %.0f octets%.2f Go%.2f Ho%.2f Io%.2f Ko%.2f Mo%.2f Po%.2f To%lu élément(s) trouvé(s).%s est en dehors de l'espace d'allocation mémoire du processus.Un catalogue est déja ouvertUn composant du chemin suivant dépasse les %d caractères, ou le nom du chemin entier dépasse les %d caractères : %s.Un composant du prefix du xhemin n'est pas un répertoire : %s.Une erreur critique a été rencontrée lors de l'extraction des informations du fichier %s%s%s. Enregistrez votre catalogue si possible, quittez GWhere and rapportez l'anomalie à l'équipe du projet GWhere s'il vous plait.A proposA proposDate d'accèsChemin d'accèsAjouterAjouter / Mise à jourAjouter un disqueAjouter un nouveau disqueL'ajout du disque est en coursTous les mots clé doivent correspondre.Tous les fichiers des langages pour la traduction du programme.Tous les utilisateursTous les utilisateurs|L'utilisateur courantAutorise les bipsAutorise l'émission d'un court bip lors de certains d'événements.Autorise la mise à jour des propriétés de la catégories sélectionnée. Cliquer sur le bouton Ajouter / Mise à jour pour sauver les modifications.Une erreur d'E/S a été rencontrée en changement de répertoire vers : %s.Une erreur est survenue pendant l'envoi du mail. Vérifiez vos paramètres s'il vous plait.Appliquer la catégorie sélectionné à tous les éléments du disque à ajouter (disque, répertoires et fichiers).ArchiveNuméro d'archiveNuméro d'archive : Fichier attaché :CD Audio : CD Audio : %dDescription automatiqueCharger automatiquement le catalogueCharge le catalogue par défaut au chargement de l'application.AutomontageRedimensionne automatiquement les colonnes de l'explorateur.Redimensionnement automatique des colonnesCCI :CC :CD-Rom : CD-Rom : %dFermerRabattre t_outPossibilité d'utiliser les expressions régulières. Voir la documentation pour plus d'informations.Ne peut pas éditer ce fichier!! Ne peut pas supprimer cette catégories. Elle est utilisée par un élément.Ne peut pas recevoir de donnéesNe peut pas envoyer de donnéesNe peut pas lancer la recherche : aucun catalogue n'est chargéCapacité : Casse sensibleTri sensible à la casseCatalogueDescription du catalogue : Information du catalogueNom du catalogue : Catégories du catalogue : Catalogue ferméNiveau de compression des catalogues :Description du catalogueCatalogue exportéFichier de catalogueCatalogue importéLe catalogue n'est pas exportéLe catalogue n'est pas importéCatalogue chargéPropriétés du catalogueCatalogue enregistréListe des catégories : CatégorieCatégorie : Nom de la catégorie : Changez dans ce panneau toutes les propriétés disponibles pour configurer le programme comme vous le souhaitez.Changer le nom de volumeChoisir si tous les mots clé ou seulement un parmis la liste doivent correspondre avec l'élément pour qu'il soit afficher dans le résultat de la recherche.Choisissez d'attacher ou non le fichier du catalogue.EffacerEffacer l'historiqueEfface tous les résultats de la rechercheCliquer ici pour parcourir et sélectionner le ficheir de catalogue.Cliquez ici pour annuler l'envoi du mail.Cliquez ici pour effacer l'historique des fichiers ouverts récemment.Cliquez ici pour envoyer le mail (avec un fichier du catalogue attaché).Cliquez sur le bouton Appliquer pour appliquer les changements (sans fermer la fenêtre de paramétrage).Cliquez sur le bouton Annuler pour annuler les changements et fermer la fenêtre de paramètrage.Cliquez sur le bouton OK pour appliquer les changements et fermer la fenêtre de paramétrage.FermerFermer catalogueFermer le fichierFerme la fenêtre d'édition des propriétés des catégories.Ferme le catalogueCompacteConnexion fermée par le client Ne peut pas trouvé le fichier pixmap: %sCréé le : Date de créationDateEffacer le disqueDescriptionDescription : DisqueDescription du disque : Information du disqueNom du disque : Statistiques des disquesDescription du disqueDisquesDisques dans le catalogue : Disques dans le catalogue : %dAffiche si le media sélectionné est mounté ou non.Afficher les informationsAfficher les informations du media séléctionné comme le chemin, la capacité, l'espace libre, le nom de volume,...QuitterEdition des catégoriesEditer les catégoriesEditer la descriptionEdition du fichierEjecter le media si possibleEjecter le media si possible (CD-ROM...), sauf si le tiroir est fermé. Ceci est actif seulement si l'automontage est activé!!Adresse email :Entrer une liste de mots clé qui devront tous être compris dans les fichiers trouvés.Entrer le nom du catalogueEntrer le nom du disqueEntrez ici l'adresse email de vos contacts en copie.Entrez ici l'adresse email de vos contacts en copie cachée.Entrez ici l'adresse email de votre (vos) contact(s).Entrez ici l'objet de votre mail.Entrer le nouveau nom du catalogueEntrer le nouveau nom du disqueentrer le nouveau nom de volume du disqueEntrer le nouveau nom de fichierEntrer le nouveau nom de répertoireEntrer le numéro d'archive du disque.Entrer la description de la catégorie.Saisir le chemin complet du catalogue à charger.Entrer le patron de type wildcards complet. Ce patron peut contenir les caractères "?" and "*" Entrer le nom du catalogue.Entrer le nom de la catégorieEntrer le nom du disque.Entrer le nom du nouveau disque. Ce nom apparaîtra dans le catalogue.Entrer le nombre du nouveau disque. Ce numbre peut aider à faire un historique du catalogue.Saisir le port du serveur de mail sortant (la valeur la plus commune est 25).Saisir votre adresse emailSaisir votre serveur de mail sortant. Souvent cette adresse est mail.votredomaine.comErreur : ne peut pas ouvrir ce fichier.Erreur : ne peut pas entrer dans ce répertoire.Erreur pendant le chargement du fichier pixmap: %sQuitterEtendre seulement les _disquesExplorer les fichiers archives (.tar, .gz, .zip, ...)Explorer l'arborescence du media.ExplorateurExportationExporter le catalogue versFichierDescription du fichier : Information du fichierTaille du fichier : Taille du fichier : %s (%s bytes)Description du fichierNom du fichier : Nom du système de fichierType de fichier : pas encore implémenté!!FichiersDisquette : Disquette : %dRépertoireDescription du répertoire : Information du répertoireNom du répertoireTaille du répertoire : Description du répertoireEspace libre : Espace libreEspace libre : ComplèteCapacité totaleGTK+ 2.6 RunTime (nécessaire)IHMGWhere (nécessaire)GWhere permet de gérer une base de données de vos CD et autres media amovibles (disques durs, disquettes, disquettes Zip, CD-ROM, etc...). Avec GWhere il est facile de parcourir vos CDs ou de faire une recherche rapide sans avoir besoin d'insérer vos CDs dans le lecteur à chaque fois.GWhere peut être installé pour tous les utilisateurs ou seulement pour l'utilisateur courant. Sélectionnez pour qui vous voulez installer GWhere s'il vous plait.Droits d'accès de l'installation de GWhereOptions généralesDonne le fichier de périphérique du media sélectionné.Donne l'espace libre du media sélectionné (seulement si il est monté).Donne l'espace utilisé du media sélectionné (seulement si il est monté).Donne le numéro de série du media sélectionné (seulement si il est monté). Ce numéro est le numéro de fabrication.Donne le type du media sélectionné (ex : ext2, ext3, vfat, ntfs, ...).Donne le nom de volume du media sélectionné (seulement si il est monté).GroupeGroupe : DD : DD : %dCachéCacherCacher les opérations sur les fichiersInoeudSi vous ne saisisez pas de nom de disque et que votre media sélectionné possède un nom de volume, le nom de volume du media sera utilisé comme nom de disqueSi vous n'appliquez pas vos modifications tous vos changements seront perdus. Voulez-vous appliquer les modifications?ImportationImporter le catalogue à partirInformation : Options d'installationLe programme d'installation est déjà lancéPas assez de mémoire pour accomplir l'opération.Le nom de catalog saisi est invalideTourne sur %sJaz : Jaz : %dGarder cette option cochée pour scanner les informations de tous les répertoires et fichiers.Mots cléFichiers des langagesAccédé le : Modifié le : Charger le dernier fichier de catalogue ouvert.Charger le fichier de catalogue sélectionné.Charge le catalogueChargement du catalogue échouéChemin sur le disque : MailMoteur principal de l'application.Fait une description automatique du fichier (description du format du fichier, taille de l'image pour un xmp ou jpg, etc...).GestionDate de modificationEchec du montage Monter le media si il n'est pas monté. Et le démonter après sauf si il était déjà monté avant le scan.Monté : Se déplacer vers...NomNom : Réseau : Réseau : %dNouveauNouveau catalogueNouveau disqueNouveau fichierNonAucun catalogue ouvertAucun catalogue ouvert : ne peut pas éditer les catégoriesAucun élément ne correspond.Pas de labelAucun nouveau nom de disque n'a été saisiAucun nouveau nom de fichier n'a été saisiAucun nouveau nom de répertoire n'a été saisiPas encore implementé!! Explore toutes les archives, comme si c'était des répertoires. Les archives sont des fichiers tarrés ou gzippés.OuvrirOuvrir le catalogueOuvrir un fichierOptionsAutre : Autre : %dServeur de mail sortant :PropriétairePropriétaire : CheminConfigurez les options des mails dans les paramétrages pour pouvoir envoyer des mails s'il vous plait.Entrer le nouveau nom du catalogue Veuillez patienterVeuillez patienter...PluginsModules pour l'extraction automatique des descriptions des fichiers and pour l'importation/exportation de catalogues.PropriétésRapideQuitter Catalogues récemment ouverts :Expression régulièreSupprimer la catégorieSupprimer du catalogueSupprime la catégorie sélectionnée de la liste des catégories. Cette catégories peut être supprimer seulement si il n'y a aucun élément qui l'utilise.RenommerRenommer le catalogueRenommer le disqueRenommer le fichierRenommer le répertoireLe tri des éléments groupe par répertoires/fichiers.Le tri du résultat de la recherche groupe par type.DroitsDroits : Machine d'exécution pour l'environnement de l'IHM._Enregistrer sousEnregistrerEnregistre les propriétés de l'IHM comme la position et la taille de la fenêtre.Enregistrer les propriétés de l'IHM en quittant.Enregistrer sousEnregistrer sous le catalogueEnregistrer le catalogueSauver les modifications des propriétés de la catégorie.Enregistrement du catalogueEnregistrement du catalogue échouéAnalyse en coursParamé_trageRechercheRechercher : Chercher dans le catalogueRésultat de la rechercheType de rechercheRecherche...Selectionner le catalogue à charger automatiquementSelectionner le catalogueSelectionner le media : Selectionner le niveau de compression du catalogue. La valeur par défaut est 3, c'est une bonne valeur pour avoir à la fois une bonne performance et un catalogue de petite taille.Selectionner la catégorie qui sera appliquée au disque qui sera ajouté (sauf si l'option n'est pas cochée.Selectionner le media qui va être ajouter dans le catalogueSélectionnez la section à configurer.Selectionner la taille de l'historique des catalogues récemment ouverts. La valeur par défaut est 5.Envoi du catalogue par mailEnvoyer le fichier par mailEnvoi le mailEnvoi du mail, veuillez patienter...Numéro de série : Numéro de série : Numéro de sérieNuméro de série : Port du serveur :Mettre la categorie recursivementParamètresParamètres modifiésAfficherMontrer les opérations sur les fichiersTailleSujet :Bande : Bande : %dLe catalogue est invalide ou n'existe pas. Veuillez vérifier le chemin du catalogue.Le catalogue courant n'a jamais été enregistré, impossible de l'envoyerLe disque a été ajoutéLe disque n'a pas été ajouté Le disque n'a pas pu être ajouté L'ajout est annulé par l'utilisateurLe disque n'a pas été ajouté Erreur : impossible de fermer le répertoire.Le disque n'a pas été ajouté Erreur : impossible d'aller dans le répertoire parent.Le disque n'a pas été ajouté : impossible de monter le mediaLe disque n'a pas été ajouté : il n'y a pas de media montéLe nom de disque saisi existe déja dans le catalogue courantLe nom de fichier saisi existe déja dans le répertoire courantLe nom de répertoire saisi existe déja dans le répertoire courantLe répertoire suivant n'existe pas : %s.Le répertoire suivant n'existe pas ou le nom est une chaîne vide : %s.Le nom de répertoire suivant n'est pas un répertoire : %s.Le tri des éléments dans l'explorateur peut grouper les éléments par type. Si cette option est cochée tous les éléments seront groupés par répertoires ou fichiers.Le tri des éléments dans l'explorateur est sensible à la casse.Le tri du résultat de la recherche peut être groupé par le type des éléments trouvés. Si cette option est cochée tous les éléments seront groupés par catalogues, disques, répertoires et fichiers.Le tri du résultat de la recherche est sensible à la casse.La casse de la recherche peut être ou non sensible. En casse sensible "File.txt" ne correspond pas avec "file.txt". Mais sans casse sensible il correspond.La recherche peut être sensible à la case. La recheche par wildcards supporte les caractères "*". Exemple : img*.bmp or *.htm La recherche par mots clé accepte une liste de mots obligatoires.La recherche vérifie les noms de catégories.La recherche vérifie les descriptions.La recherche vérifie les noms de disques.La recherche vérifie les noms de fichiers.La recherche vérifie les noms de répertoires.Aucun plugin de catalogue disponibleCette boite de paramétrage permet de configurer quelques fonctionnalités et propriétés du programme.Cette boite de paramétrage permet de configurer le programme. Certaines propriétes peuvent être modifiées ici.Cette fenêtre vous permet d'envoyer un catalogue par mail à l'un (ou plus) de vos contacts.A :Trop de descripteurs de fichers sont utilisés par le processus.Trop de fichiers sont actuellement ouverts dans le système.Trop de liens symboliques ont été rencontrés pour résoudre le chemin suivant : %s.Capacité totale : Total des fichiers : Total des fichiers : %ldtotal des répertoires : Total des répertoires : %ldEspace total libre : Capacité totale : Espace total utilisé : TypeType : Type : (répertoire)Saisissez ici le texte de votre message.Propriétaire inconnuMise à jourMise à jour du catalogue : Utiliser un patron avancé pour générer le nom de disqueUtiliser le nom de volume du media comme nom de disque (seulement quand le nom de disque est vide)Espace utilisé : Version Version : VisibleNom de volume : Nom de volume : Nom de volumeNom de volume : Quels sont les utilisateurs qui peuvent lancer GWhere ?WildcardsVoulez-vous enregistrer le catalogue : OuiVous pouvez saisir des tags spéciaux pour générer un nom de disque à partir des informations du disque : - %% : % - %n : numéro d'archive (possibilité d'utiliser un préfix pour préfixer par des 0 : %.4n donne 0001, 0002, 0003, ..., 0091, ... - %l : nom de volume du media - %t : type du media - %s : numéro de sérieVous devez désinstaller la version précédente de GWhereZip : Zip : %d_Action_Appliquer_Annuler_Etendre tout_FichierAide_Nouveau_Non_OK_Ok_Ouvrir_Options_PropriétésFichiers _récentsSupp_rimerEnregi_strerEnvoyerMise à jo_urpas de périphériqueaucunl'ajout du disque est annuléinconnugroupe inconnupropriétaire inconnugwhere-0.2.3/po/pl.po0000644000175000017500000030012710472436223013036 0ustar bartbart# translation of pl.po to # translation of pl.po to # translation of pl.po to # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # src/SearchEngine.c:320 # Bogdan Modzelewski , 2004. # Bogdan Modzelewski , 2005. msgid "" msgstr "" "Project-Id-Version: pl\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2005-05-19 12:45+0000\n" "Last-Translator: Bogdan Modzelewski \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.9.1\n" #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "Nie mogê odebraæ danych" #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "Po³±czenie zamkniête przez klienta\n" #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "Nie mogê wys³aæ danych" # src/tools/Calcul.c:46 #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%.0f bajtów" # src/tools/Calcul.c:49 #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f KB" # src/tools/Calcul.c:52 #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f MB" # src/tools/Calcul.c:55 #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f GB" # src/tools/Calcul.c:59 #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f TB" # src/tools/Calcul.c:63 #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f PB" # src/tools/Calcul.c:67 #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f HB" # src/tools/Calcul.c:72 src/tools/Calcul.c:77 #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f IB" # src/CaptureBox.c:84 src/MenuFile.c:291 src/MsgBox.c:71 src/Properties.c:164 # src/TextBox.c:100 # src/gui/CaptureBox.c:96 src/gui/DialogBox.c:59 src/gui/MsgBox.c:75 # src/gui/PropertiesBox.c:189 src/gui/TextBox.c:107 #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "_OK" # src/CaptureBox.c:92 src/MenuFile.c:348 src/ProgressBarBox.c:115 # src/ProgressBarBox.c:187 src/ProgressBarBox.c:274 src/Properties.c:189 # src/TextBox.c:108 # src/gui/CaptureBox.c:116 src/gui/DialogBox.c:94 # src/gui/ProgressBarBox.c:127 src/gui/ProgressBarBox.c:246 # src/gui/ProgressBarBox.c:504 src/gui/PropertiesBox.c:216 # src/gui/TextBox.c:122 #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "_Anuluj" # src/Categories.c:58 src/MenuPopup.c:98 # src/gui/CategoriesEditBox.c:88 src/gui/MenuPopup.c:99 #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Edycja kategorii" # src/Categories.c:68 # src/gui/CategoriesEditBox.c:104 #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "Lista kategorii : " # src/Categories.c:99 src/NoteBookCatalog.c:109 src/NoteBookCatalog.c:186 # src/NoteBookCatalog.c:220 src/NoteBookSearch.c:133 # src/gui/CategoriesEditBox.c:135 src/gui/NoteBookCatalog.c:108 # src/gui/NoteBookCatalog.c:206 src/gui/NoteBookCatalog.c:253 # src/gui/NoteBookSearch.c:229 #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "Nazwa" # src/Categories.c:105 src/NoteBookCatalog.c:149 src/NoteBookCatalog.c:194 # src/NoteBookCatalog.c:228 src/NoteBookSearch.c:163 # src/gui/CategoriesEditBox.c:141 src/gui/NoteBookCatalog.c:148 # src/gui/NoteBookCatalog.c:214 src/gui/NoteBookCatalog.c:261 # src/gui/NoteBookSearch.c:185 src/gui/NoteBookSearch.c:247 #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "Opis" # src/Categories.c:118 # src/gui/CategoriesEditBox.c:154 #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "Akt_ualizacja" # src/Categories.c:123 # src/gui/CategoriesEditBox.c:159 #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" "Aktualizacja w³a¶ciwo¶ci wybranej kategorii. Kliknij na Dodaj / Uaktualnij, " "aby zapisaæ zmiany." # src/Categories.c:127 # src/gui/CategoriesEditBox.c:163 #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "_Usuñ" # src/Categories.c:132 # src/gui/CategoriesEditBox.c:168 #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" "Usuniêcie wybranej kategorii z listy kategorii. Kategorie mog± zostaæ " "usuniête tylko wtedy, gdy ¿aden element z niej nie korzysta." # src/Categories.c:147 # src/gui/CategoriesEditBox.c:183 #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "Nazwa kategorii : " # src/Categories.c:157 # src/gui/CategoriesEditBox.c:193 #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "Wprowad¼ nazwê kategorii." # src/Categories.c:160 # src/gui/CategoriesEditBox.c:196 #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "Opis : " # src/Categories.c:183 # src/gui/CategoriesEditBox.c:219 #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "Wprowad¼ opis kategorii." # src/Categories.c:196 # src/gui/CategoriesEditBox.c:232 #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "Dodaj / Uaktualnij" # src/Categories.c:201 # src/gui/CategoriesEditBox.c:237 #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "Zapisz zmiany we w³a¶ciwo¶ciach kategorii." # src/Categories.c:207 src/MenuPopup.c:57 src/MenuPopup.c:127 # src/gui/CategoriesEditBox.c:243 src/gui/MenuPopup.c:58 # src/gui/MenuPopup.c:128 #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Zamknij" # src/Categories.c:212 # src/gui/CategoriesEditBox.c:248 #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Zamknij okno edycji w³a¶ciwo¶ci kategorii." # src/ComboBoxCategories.c:105 src/NoteBookManagmentCallBack.c:168 # src/gui/ComboBoxCategories.c:105 src/gui/NoteBookManagmentCallBack.c:203 #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "brak" # src/Categories.c:297 # src/gui/CategoriesEditBox.c:368 #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "Usuñ kategoriê" # src/Categories.c:297 # src/gui/CategoriesEditBox.c:368 #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "Nie mogê usun±æ tej kategorii. Jest u¿ywana przez jaki¶ element." # src/Categories.c:193 src/Categories.c:395 src/Categories.c:603 # src/gui/CategoriesEditBox.c:229 src/gui/CategoriesEditBox.c:526 # src/gui/CategoriesEditBox.c:849 #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "Dodaj" # src/Categories.c:410 src/Categories.c:623 # src/gui/CategoriesEditBox.c:553 src/gui/CategoriesEditBox.c:882 #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "Uaktualnij" # src/MenuFile.c:320 # src/gui/DialogBox.c:77 #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "_Nie" # src/MenuFile.c:213 src/MenuFile.c:423 # src/gui/FileSelectionBox.c:64 #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "Ukryj operacje na plikach" # src/MenuFile.c:428 #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "Poka¿ operacje na plikach" # src/Menu.c:148 # src/gui/MenuAction.c:41 #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "_Akcja" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "Rozwiñ wszystkie" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "Rozwiñ tylko _dyski" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "_Zwiñ wszystkie" # src/Menu.c:162 # src/gui/MenuAction.c:54 #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "Edycja _kategorii" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "¯aden katalog nie jest otwarty : nie mo¿na edytowaæ kategorii" # src/Menu.c:50 # src/gui/MenuFile.c:48 #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "_Plik" # src/Menu.c:64 # src/gui/MenuFile.c:61 #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "_Nowy" # src/Menu.c:74 # src/gui/MenuFile.c:71 #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "_Otwórz" # src/Menu.c:84 # src/gui/MenuFile.c:81 #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "Zapi_sz" # src/Menu.c:94 # src/gui/MenuFile.c:91 #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "Za_pisz jako" # src/Menu.c:104 # src/gui/MenuFile.c:101 #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "_Zamknij" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "Import" #: src/gui/gwmenufile.c:199 msgid "Export" msgstr "Eksport" # src/Menu.c:121 # src/gui/MenuFile.c:118 #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "W³a¶ciwo¶ci" # src/MenuFile.c:272 # src/gui/MenuFileCallBack.c:82 #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "O_twierane pliki" # src/Menu.c:138 # src/gui/MenuFile.c:135 #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "_Wyj¶cie" # src/MenuFile.c:54 src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:156 # src/ToolBar.c:53 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 src/gui/ToolBar.c:70 #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Nowy katalog" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "Brak katalogu z pluginami" # src/MenuFile.c:284 # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:82 # src/gui/MenuFileCallBack.c:108 src/gui/MenuFileCallBack.c:223 #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "Czy chcesz zapisaæ katalog:\n" "\n" # src/MenuFile.c:269 # src/gui/MenuFileCallBack.c:56 #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Nowy plik" # src/MenuFile.c:54 src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:156 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "Wprowad¼ nazwê katalogu" # src/MenuFile.c:199 src/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "Otwórz katalog" # src/MenuFile.c:272 # src/gui/MenuFileCallBack.c:82 #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "Otwórz plik" # src/MenuFile.c:275 # src/gui/MenuFileCallBack.c:108 #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Zamknij plik" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "¯aden katalog nie jest otwarty" #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "Wy¶lij plik poprzez e-mail" #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "Proszê skonfigurowaæ opcje e-mail w ustawieniach." # src/MenuFile.c:382 # src/gui/MenuFileCallBack.c:175 src/gui/MenuFileCallBack.c:202 # src/gui/MenuFileCallBack.c:406 src/gui/MenuFileCallBack.c:503 # src/gui/MenuFileCallBack.c:596 src/gui/MenuFileCallBack.c:686 # src/gui/MenuFileCallBack.c:763 #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "Zapisz jako katalog" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "Bie¿±cy katalog nie jest zapisywany, nie mogê go wys³aæ" # src/StatusBar.c:220 # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "W³a¶ciwo¶ci katalogu" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "Zapisz katalog" # src/MenuFile.c:278 # src/gui/MenuFileCallBack.c:223 #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "Wyjd¼" #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "Importuj katalog z" # src/StatusBar.c:220 # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:1231 msgid "Catalog imported" msgstr "Katalog zaimportowany" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:1233 msgid "Catalog is not imported" msgstr "Katalog nie jest zaimportowany" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:1267 msgid "A catalog is already opened" msgstr "Katalog jest ju¿ otwarty" # src/MenuFile.c:54 src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:156 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 msgid "Export catalog to" msgstr "Eksportuj katalog do" # src/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 #: src/gui/gwmenufilecallback.c:1291 msgid "Catalog exported" msgstr "Katalog wyeksportowany" # src/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 #: src/gui/gwmenufilecallback.c:1293 msgid "Catalog is not exported" msgstr "Katalog nie wyeksportowany" # src/Menu.c:172 # src/gui/MenuHelp.c:41 #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "_Pomoc" # src/Menu.c:187 # src/gui/MenuHelp.c:54 #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "_O programie" # src/NoteBookManagment.c:258 # src/gui/NoteBookManagment.c:298 #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "_Opcje" #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "Us_tawienia" # src/MenuPopup.c:37 src/MenuPopup.c:107 # src/gui/MenuPopup.c:38 src/gui/MenuPopup.c:108 #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Nowy" # src/MenuPopup.c:42 src/MenuPopup.c:112 # src/gui/MenuPopup.c:43 src/gui/MenuPopup.c:113 #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "Otwórz" # src/MenuPopup.c:47 src/MenuPopup.c:117 # src/gui/MenuPopup.c:48 src/gui/MenuPopup.c:118 #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "Zapisz" # src/MenuPopup.c:52 src/MenuPopup.c:122 # src/gui/MenuPopup.c:53 src/gui/MenuPopup.c:123 #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "Zapisz jako" # src/MenuPopup.c:66 # src/gui/MenuPopup.c:67 #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "Wyjd¼" # src/MenuPopup.c:83 src/MenuPopup.c:158 # src/gui/MenuPopup.c:84 src/gui/MenuPopup.c:159 #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Zmieñ nazwê" # src/MenuPopup.c:93 src/MenuPopup.c:173 src/MenuPopup.c:204 # src/MenuPopup.c:238 src/MenuPopupCallBack.c:123 src/MenuPopupCallBack.c:343 # src/MenuPopupCallBack.c:428 src/MenuPopupCallBack.c:546 # src/gui/MenuPopup.c:94 src/gui/MenuPopup.c:174 src/gui/MenuPopup.c:205 # src/gui/MenuPopup.c:240 src/gui/MenuPopupCallBack.c:129 # src/gui/MenuPopupCallBack.c:358 src/gui/MenuPopupCallBack.c:444 # src/gui/MenuPopupCallBack.c:574 #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Edytuj opis" # src/MenuPopup.c:136 src/MenuPopup.c:182 src/MenuPopup.c:218 # src/MenuPopup.c:252 src/Properties.c:85 # src/gui/MenuPopup.c:137 src/gui/MenuPopup.c:183 src/gui/MenuPopup.c:219 # src/gui/MenuPopup.c:254 src/gui/PropertiesBox.c:110 #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "W³a¶ciwo¶ci" # src/MenuPopup.c:153 src/MenuPopup.c:199 # src/gui/MenuPopup.c:154 src/gui/MenuPopup.c:200 #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "Przenie¶ Do..." # src/MenuPopup.c:163 # src/gui/MenuPopup.c:164 #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "Usuñ dysk" # src/MenuPopup.c:168 src/MenuPopupCallBack.c:292 # src/gui/MenuPopup.c:169 src/gui/MenuPopupCallBack.c:306 #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "Zmieñ etykietê woluminu" # src/MenuPopup.c:209 src/MenuPopup.c:243 # src/gui/MenuPopup.c:210 src/gui/MenuPopup.c:245 #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "Usuñ z katalogu" # src/MenuPopup.c:259 # src/gui/MenuPopup.c:261 #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "Edytuj plik" # src/MenuPopup.c:259 # src/gui/MenuPopup.c:261 #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "Nie mogê edytowaæ tego pliku!!!\n" # src/MenuPopupCallBack.c:55 # src/gui/MenuPopupCallBack.c:57 #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Zmieñ nazwê katalogu" # src/MenuPopupCallBack.c:55 # src/gui/MenuPopupCallBack.c:57 #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "Wprowad¼ now± nazwê katalogu" # src/NoteBookManagmentCallBack.c:174 # src/gui/NoteBookManagmentCallBack.c:213 #: src/gui/gwmenupopupcallback.c:121 msgid "Invalid filled catalog name" msgstr "B³êdna nazwa katalogu" # src/MenuPopupCallBack.c:123 # src/gui/MenuPopupCallBack.c:129 #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "Opis katalogu" # src/MenuPopupCallBack.c:218 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Zmieñ nazwê dysku" # src/MenuPopupCallBack.c:218 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "Wprowad¼ now± nazwê dysku" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "Nazwa dysku ju¿ istnieje w bie¿±cym katalogu" #: src/gui/gwmenupopupcallback.c:374 msgid "No new disk name was filled" msgstr "Nie podano nowej nazwy dysku" # src/MenuPopupCallBack.c:292 # src/gui/MenuPopupCallBack.c:306 #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "Wprowad¼ now± etykietê dysku" # src/MenuPopupCallBack.c:343 # src/gui/MenuPopupCallBack.c:358 #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "Opis dysku" # src/MenuPopupCallBack.c:218 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "Zmieñ nazwê folderu" # src/MenuPopupCallBack.c:218 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "Wprowad¼ now± nazwê folderu" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "Folder ju¿ istnieje" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "Brak foldera" # src/MenuPopupCallBack.c:428 # src/gui/MenuPopupCallBack.c:444 #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "Opis folderu" # src/MenuPopupCallBack.c:218 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "Zmieñ nazwê pliku" # src/MenuPopupCallBack.c:218 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "Wprowad¼ now± nazwê pliku" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "Plik ju¿ istnieje" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "Brak pliku" # src/MenuPopupCallBack.c:546 # src/gui/MenuPopupCallBack.c:574 #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "Opis pliku" # src/NoteBookCatalog.c:67 # src/gui/NoteBookCatalog.c:67 #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Archiwum" # src/NoteBookCatalog.c:154 # src/gui/NoteBookCatalog.c:153 #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "Katalog" # src/ToolBar.c:59 # src/gui/ToolBar.c:76 #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "Zamknij katalog" # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "Proszê czekaæ..." # src/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Katalog usuniêty" # src/Exploration.c:594 src/Exploration.c:650 src/Exploration.c:728 # src/Exploration.c:784 # src/Exploration.c:620 src/Exploration.c:676 src/Exploration.c:757 # src/Exploration.c:813 #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "nieznany w³a¶ciciel" # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "nieznana grupa" # src/NoteBookManagment.c:80 src/NoteBookManagmentCallBack.c:174 # src/gui/NoteBookManagment.c:127 src/gui/NoteBookManagmentCallBack.c:213 #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Nowy dysk" # src/NoteBookManagment.c:96 # src/gui/NoteBookManagment.c:139 #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "Wybierz dysk, który ma zostaæ dodany do katalogu." # src/NoteBookManagment.c:98 # src/gui/NoteBookManagment.c:142 #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "Wybierz dysk : " # src/NoteBookManagment.c:125 # src/gui/NoteBookManagment.c:167 #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "" "Wprowad¼ numer nowego dysku. Pomo¿e Ci on przy historii Twojego katalogu." # src/NoteBookManagment.c:127 src/Properties.c:717 # src/gui/NoteBookManagment.c:170 src/gui/PropertiesBox.c:653 #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Archiwum nr : " # src/NoteBookManagment.c:142 # src/gui/NoteBookManagment.c:183 #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "" "Wprowad¼ nazwê nowego dysku. Jest to nazwa, która pojawi siê w katalogu." # src/NoteBookManagment.c:144 # src/gui/NoteBookManagment.c:186 #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "Nazwa : " # src/NoteBookManagment.c:160 src/Properties.c:945 src/Properties.c:1288 # src/Properties.c:1646 # src/gui/NoteBookManagment.c:200 src/gui/PropertiesBox.c:811 # src/gui/PropertiesBox.c:1065 src/gui/PropertiesBox.c:1334 #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "Kategoria : " # src/NoteBookManagment.c:166 # src/gui/NoteBookManagment.c:206 #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "Wybierz kategoriê, która odnosi siê do dysku, który zostanie dodany." # src/NoteBookManagment.c:251 # src/gui/NoteBookManagment.c:289 #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "Podaj urz±dzenie dla wybranego medium." # src/NoteBookManagment.c:180 src/NoteBookManagmentCallBack.c:312 # src/NoteBookManagmentCallBack.c:354 # src/gui/NoteBookManagment.c:219 src/gui/NoteBookManagmentCallBack.c:332 # src/gui/NoteBookManagmentCallBack.c:376 #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Informacje : " # src/NoteBookManagment.c:191 # src/gui/NoteBookManagment.c:229 #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "Podaj typ wybranego dysku (ext2, ext3, vfat, ntfs, itd.)" # src/NoteBookManagment.c:193 src/NoteBookManagmentCallBack.c:314 # src/NoteBookManagmentCallBack.c:368 src/Properties.c:759 # src/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Typ : " # src/NoteBookManagment.c:203 # src/gui/NoteBookManagment.c:241 #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "Wy¶wietl informacje o podmontowaniu wybranego dysku." # src/NoteBookManagment.c:205 src/NoteBookManagmentCallBack.c:316 # src/NoteBookManagmentCallBack.c:374 # src/gui/NoteBookManagment.c:244 src/gui/NoteBookManagmentCallBack.c:338 # src/gui/NoteBookManagmentCallBack.c:395 #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "Podmontowany : " # src/NoteBookManagment.c:215 # src/gui/NoteBookManagment.c:253 #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "Podaj nazwê woluminu wybranego dysku (je¶li jest podmontowany)." # src/NoteBookManagmentCallBack.c:318 # src/gui/NoteBookManagment.c:256 src/gui/NoteBookManagmentCallBack.c:341 #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Wolumin : " # src/NoteBookManagment.c:227 # src/gui/NoteBookManagment.c:265 #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "" "Podaj numer seryjny wybranego dysku (je¶li jest podmontowany). Numer ten " "jest numerem wytwórcy dysku." # src/NoteBookManagment.c:229 # src/gui/NoteBookManagment.c:268 #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Numer seryjny : " # src/NoteBookManagment.c:239 # src/gui/NoteBookManagment.c:277 #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "Podaj pojemno¶æ wybranego dysku (je¶li jest " # src/NoteBookManagment.c:241 src/NoteBookManagmentCallBack.c:322 # src/NoteBookManagmentCallBack.c:402 # src/gui/NoteBookManagment.c:280 src/gui/NoteBookManagmentCallBack.c:347 # src/gui/NoteBookManagmentCallBack.c:420 #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "Pojemno¶æ : " # src/NoteBookManagment.c:251 # src/gui/NoteBookManagment.c:289 #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "Podaj ilo¶æ wolnego miejsca na wybranym dysku (je¶li jest pod³±czony)." # src/NoteBookManagment.c:253 src/NoteBookManagmentCallBack.c:324 # src/NoteBookManagmentCallBack.c:407 # src/gui/NoteBookManagment.c:292 src/gui/NoteBookManagmentCallBack.c:350 # src/gui/NoteBookManagmentCallBack.c:424 #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Wolne : " # src/NoteBookManagment.c:258 # src/gui/NoteBookManagment.c:298 #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "Opcje" # src/NoteBookManagment.c:269 # src/gui/NoteBookManagment.c:307 #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "Wy¶wietl informacje" # src/NoteBookManagment.c:276 # src/gui/NoteBookManagment.c:314 #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" "Wy¶wietla informacje o wybranym urz±dzeniu (punkt podmontowania, pojemno¶æ, " "wolne miejsce, etykieta itd.)" # src/NoteBookManagment.c:278 # src/gui/NoteBookManagment.c:317 #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Automatyczne podmontowanie" # src/NoteBookManagment.c:285 # src/gui/NoteBookManagment.c:324 #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" "Podmontuj dysk, je¶l nie by³ oraz odmontuj dysk po zakoñczeniu operacji " "(nawet je¶li by³ podmontowany przed skanowaniem)." # src/Properties.c:706 # src/gui/PropertiesBox.c:645 #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "Przegl±danie struktury dysku w postaci drzewa." #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "W³±czenie opcji powoduje przeskanowanie wszystkich katalogów i plików." # src/NoteBookManagment.c:287 # src/gui/NoteBookManagment.c:327 #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "Przegl±daj archiwa (.tar, .gz, .zip itp.)" # src/NoteBookManagment.c:294 # src/gui/NoteBookManagment.c:334 #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "Funkcja jeszcze nie zaimplementowana!!!\n" "Traktuj archiwa jak katalogi." # src/NoteBookManagment.c:296 # src/gui/NoteBookManagment.c:337 #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "Wysuñ dysk je¶li to mo¿liwe" # src/NoteBookManagment.c:303 # src/gui/NoteBookManagment.c:344 #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" "Wysuñ dysk je¶li to mo¿liwe (CD-ROM itp.), nawet je¶li tacka by³a zamkniêta. " "Opcja ta jest w³±czona tylko wtedy, gdy automatyczne montowanie jest " "w³±czone!!!" # src/NoteBookManagment.c:305 # src/gui/NoteBookManagment.c:347 #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "Rekursywnie ustaw kategoriê" # src/NoteBookManagment.c:311 # src/gui/NoteBookManagment.c:353 #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "" "Zastosuj wybran± kategoriê do wszystkich elementów wybranego dysku (dysk, " "foldery, pliki)." # src/NoteBookManagment.c:313 # src/gui/NoteBookManagment.c:356 #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "Automatyczne tworzenie opisów" # src/NoteBookManagment.c:318 # src/gui/NoteBookManagment.c:361 #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "" "Utworzenie automatycznego opisu pliku (opis formatu pliku, wielko¶ci obrazka " "dla jpg itd.)." #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "U¿yj zaawansowanego wzoru do wygenerowania nazwy dysku" #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Mo¿esz wype³niæ dodatkowe pola u¿ywane przy generowaniu nazwy dysku:\n" "- %% : %\n" "- %n : numer archiwum (mo¿esz u¿yæ prefiksu np. %.4n da 0001, 0002, " "0003, ..., 0091 ...\n" "- %l : etykieta dysku\n" "- %t : typ dysku\n" "- %s : numer seryjny" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "U¿yj nazwy wolumenu jako nazwê dysku" #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" "Je¶li nie wprowadzisz nazwy dysku to w przypadku, gdy urz±dzenie posiada " "nazwê wolumenu bêdzie ona u¿yta jako nazwa dysku." # src/Catalog.c:1009 src/Catalog.c:1122 src/NoteBookManagmentCallBack.c:124 # src/NoteBookManagmentCallBack.c:136 src/NoteBookManagmentCallBack.c:174 # src/NoteBookManagmentCallBack.c:260 src/NoteBookManagmentCallBack.c:508 # src/Catalog.c:1186 src/Catalog.c:1344 # src/gui/NoteBookManagmentCallBack.c:148 # src/gui/NoteBookManagmentCallBack.c:162 # src/gui/NoteBookManagmentCallBack.c:213 # src/gui/NoteBookManagmentCallBack.c:285 # src/gui/NoteBookManagmentCallBack.c:620 #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "Dodaj dysk" # src/NoteBookManagment.c:329 # src/gui/NoteBookManagment.c:397 #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Zarz±dzanie" # src/NoteBookManagmentCallBack.c:124 # src/gui/NoteBookManagmentCallBack.c:148 #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "Dysk nie zosta³ dodany : brak podmontowanych urz±dzeñ" # src/NoteBookManagmentCallBack.c:136 # src/gui/NoteBookManagmentCallBack.c:162 #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "Dysk nie zosta³ dodany : nie mogê podmontowaæ urz±dzenia" # src/MenuPopup.c:88 src/NoteBookManagmentCallBack.c:156 # src/gui/MenuPopup.c:89 src/gui/NoteBookManagmentCallBack.c:190 #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "Dodaj nowy dysk" # src/NoteBookManagmentCallBack.c:174 # src/gui/NoteBookManagmentCallBack.c:213 #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "Wprowad¼ nazwê dysku" # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "Skanowanie" # src/NoteBookManagmentCallBack.c:555 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "Dodawanie dysku w toku" # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "Proszê czekaæ" # src/Catalog.c:641 src/NoteBookManagmentCallBack.c:198 # src/NoteBookManagmentCallBack.c:235 # src/Catalog.c:731 src/gui/NoteBookManagmentCallBack.c:245 #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "Dysk zosta³ dodany" # src/NoteBookManagmentCallBack.c:260 # src/gui/NoteBookManagmentCallBack.c:285 #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Montowanie siê nie powiod³o\n" # src/NoteBookManagmentCallBack.c:320 src/NoteBookManagmentCallBack.c:397 # src/gui/NoteBookManagmentCallBack.c:344 # src/gui/NoteBookManagmentCallBack.c:416 #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Numer seryjny : " # src/NoteBookManagmentCallBack.c:354 src/NoteBookManagmentCallBack.c:365 # src/NoteBookManagmentCallBack.c:387 src/NoteBookManagmentCallBack.c:391 # src/NoteBookManagmentCallBack.c:397 src/NoteBookManagmentCallBack.c:402 # src/NoteBookManagmentCallBack.c:407 # src/gui/NoteBookManagmentCallBack.c:376 # src/gui/NoteBookManagmentCallBack.c:387 # src/gui/NoteBookManagmentCallBack.c:407 # src/gui/NoteBookManagmentCallBack.c:411 # src/gui/NoteBookManagmentCallBack.c:416 # src/gui/NoteBookManagmentCallBack.c:420 # src/gui/NoteBookManagmentCallBack.c:424 #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "brak napêdu" # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "nieznana" # src/NoteBookManagmentCallBack.c:374 # src/gui/NoteBookManagmentCallBack.c:395 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Tak" # src/NoteBookManagmentCallBack.c:374 # src/gui/NoteBookManagmentCallBack.c:395 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "Nie" # src/NoteBookManagmentCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:402 #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "Brak etykiety" # src/NoteBookManagment.c:217 src/NoteBookManagmentCallBack.c:391 # src/gui/NoteBookManagmentCallBack.c:411 #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Nazwa Woluminu : " # src/NoteBookManagmentCallBack.c:555 # src/gui/NoteBookManagmentCallBack.c:530 #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "dodawanie dysku zosta³o anulowane" # src/NoteBookManagmentCallBack.c:508 # src/gui/NoteBookManagmentCallBack.c:620 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "Proszê wybraæ nazwê katalogu\n" # src/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:104 #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "Szukaj : " # src/NoteBookSearch.c:71 src/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:116 src/gui/NoteBookSearch.c:273 #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "Szukaj" # src/NoteBookSearch.c:74 # src/gui/NoteBookSearch.c:121 #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "Poszukiwanie uwzglêdnia wielko¶æ liter i ob³uguje znak \"*\".\n" "Na przyk³ad: img*.bmp lub *.htm\n" "Uwzglêdnia te¿ listê wymaganych s³ów" # src/Categories.c:207 src/MenuPopup.c:57 src/MenuPopup.c:127 # src/gui/CategoriesEditBox.c:243 src/gui/MenuPopup.c:58 # src/gui/MenuPopup.c:128 #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "Wyczy¶æ" # src/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:104 #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "Czyszczenie rezultatów wyszukiwania : " # src/NoteBookSearch.c:80 # src/gui/NoteBookSearch.c:127 #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "Uwzglêdnij wielko¶æ liter" # src/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:134 #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "Poszukiwanie uwzglêdnia lub nie uwzglêdnia wielko¶ci liter.\n" "W przypadku uwzglêdniania wielko¶ci liter \"Plik.txt\" nie znajdzie pliku " "\"plik.txt\", natomiast bez uwzglêdniania znajdzie." # src/NoteBookSearch.c:71 src/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:116 src/gui/NoteBookSearch.c:273 #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "Szukaj typu" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "S³owa kluczowe" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "" "Wprowad¼ listê s³ów kluczowych, które musz± byæ zawarte w pasuj±cych plikach." #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "Maski" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "Wprowad¼ maskê. Maska mo¿e zawieraæ znaki \"?\" oraz \"*\" " # src/NoteBookSearch.c:88 # src/gui/NoteBookSearch.c:137 #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "Wyra¿enia regularne" # src/NoteBookSearch.c:93 # src/gui/NoteBookSearch.c:144 #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "" "Wykorzystaj wyra¿enia regularne. Wiêcej informacji znajduje siê w " "dokumentacji." # src/Menu.c:50 # src/gui/NoteBookSearch.c:152 #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "_Plik" # src/gui/NoteBookSearch.c:158 #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "Znaleziono nastêpuj±ce pliki." # src/Properties.c:1341 # src/gui/NoteBookSearch.c:161 #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "Folder" # src/gui/NoteBookSearch.c:166 #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "Znaleziono nastêpuj±ce foldery." # src/NoteBookSearch.c:138 # src/gui/NoteBookSearch.c:169 src/gui/NoteBookSearch.c:232 #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "Dysk" # src/gui/NoteBookSearch.c:174 #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "Znaleziono nastêpuj±ce dyski." # src/NoteBookCatalog.c:144 src/NoteBookCatalog.c:193 # src/NoteBookCatalog.c:227 src/NoteBookSearch.c:158 # src/gui/NoteBookCatalog.c:143 src/gui/NoteBookCatalog.c:213 # src/gui/NoteBookCatalog.c:260 src/gui/NoteBookSearch.c:177 # src/gui/NoteBookSearch.c:244 #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "Kategoria" # src/gui/NoteBookSearch.c:182 #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "Znaleziono nastêpuj±ce nazwy kategorii." # src/gui/NoteBookSearch.c:190 #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "Znaleziono nastêpuj±ce opisy." # src/MenuFile.c:199 src/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "Przeszukaj katalog" #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "%lu znalezionych pozycji." # src/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:104 #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "Rezultaty wyszukiwania : " #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "Brak pasuj±cych pozycji." # src/NoteBookSearch.c:71 src/NoteBookSearch.c:169 # src/gui/NoteBookSearchCallBack.c:99 #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "Szukanie..." # src/gui/NoteBookSearchCallBack.c:99 #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "Nie mogê zacz±æ przeszukiwania: nie za³adowano ¿adnego katalogu" # src/ProgressBarBox.c:185 src/ProgressBarBox.c:215 #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "_Ok" # src/Properties.c:286 # src/gui/PropertiesBox.c:335 #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "Wprowad¼ nazwê katalogu." # src/Properties.c:332 # src/gui/PropertiesBox.c:366 #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "Wersja : " # src/Properties.c:331 # src/gui/PropertiesBox.c:365 #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "Wersja " # src/Properties.c:331 # src/gui/PropertiesBox.c:365 #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr " utworzony z " # src/Properties.c:347 src/Properties.c:348 # src/gui/PropertiesBox.c:376 src/gui/PropertiesBox.c:377 #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "Ilo¶æ dysków w katalogu : " # src/Properties.c:347 src/Properties.c:348 # src/gui/PropertiesBox.c:376 src/gui/PropertiesBox.c:377 #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "Ilo¶æ dysków w katalogu : %d" # src/Properties.c:363 src/Properties.c:364 src/Properties.c:807 # src/Properties.c:808 # src/gui/PropertiesBox.c:387 src/gui/PropertiesBox.c:388 # src/gui/PropertiesBox.c:717 src/gui/PropertiesBox.c:718 #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Ilo¶æ Plików : " # src/Properties.c:363 src/Properties.c:364 src/Properties.c:807 # src/Properties.c:808 # src/gui/PropertiesBox.c:387 src/gui/PropertiesBox.c:388 # src/gui/PropertiesBox.c:717 src/gui/PropertiesBox.c:718 #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, c-format msgid "Total Files : %ld" msgstr "Ilo¶æ Plików : %ld" # src/Properties.c:379 src/Properties.c:380 src/Properties.c:823 # src/Properties.c:824 # src/gui/PropertiesBox.c:398 src/gui/PropertiesBox.c:399 # src/gui/PropertiesBox.c:728 src/gui/PropertiesBox.c:729 #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "Ilo¶æ folderów : " # src/Properties.c:379 src/Properties.c:380 src/Properties.c:823 # src/Properties.c:824 # src/gui/PropertiesBox.c:398 src/gui/PropertiesBox.c:399 # src/gui/PropertiesBox.c:728 src/gui/PropertiesBox.c:729 #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, c-format msgid "Total Folders : %ld" msgstr "Ilo¶æ folderów : %ld" # src/Properties.c:401 src/Properties.c:402 src/Properties.c:1460 # src/Properties.c:1461 # src/gui/PropertiesBox.c:413 src/gui/PropertiesBox.c:414 # src/gui/PropertiesBox.c:1202 src/gui/PropertiesBox.c:1203 #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "Wielko¶æ Pliku : " # src/Properties.c:417 src/Properties.c:418 # src/gui/PropertiesBox.c:424 src/gui/PropertiesBox.c:425 #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Pojemno¶æ : " # src/Properties.c:433 src/Properties.c:434 # src/gui/PropertiesBox.c:435 src/gui/PropertiesBox.c:436 #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "Wykorzystane : " # src/Properties.c:449 src/Properties.c:450 # src/gui/PropertiesBox.c:446 src/gui/PropertiesBox.c:447 #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "Wolne : " # src/Properties.c:471 # src/gui/PropertiesBox.c:461 #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "Statystyki Dysku : " # src/Properties.c:497 src/Properties.c:498 # src/gui/PropertiesBox.c:478 src/gui/PropertiesBox.c:479 #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "CD-ROM : " # src/Properties.c:497 src/Properties.c:498 # src/gui/PropertiesBox.c:478 src/gui/PropertiesBox.c:479 #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "CD-ROM : %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "Audio CD:" # src/Properties.c:513 src/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #: src/gui/gwpropertiesbox.c:577 #, c-format msgid "Audio CD : %d" msgstr "Audio CD : %d" # src/Properties.c:513 src/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "HDD : " # src/Properties.c:513 src/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "HDD : %d" # src/Properties.c:529 src/Properties.c:530 # src/gui/PropertiesBox.c:500 src/gui/PropertiesBox.c:501 #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "Dyskietka : " # src/Properties.c:529 src/Properties.c:530 # src/gui/PropertiesBox.c:500 src/gui/PropertiesBox.c:501 #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "Dyskietka : %d" # src/Properties.c:551 src/Properties.c:552 # src/gui/PropertiesBox.c:515 src/gui/PropertiesBox.c:516 #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip : " # src/Properties.c:551 src/Properties.c:552 # src/gui/PropertiesBox.c:515 src/gui/PropertiesBox.c:516 #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip : %d" # src/NoteBookManagment.c:193 src/NoteBookManagmentCallBack.c:314 # src/NoteBookManagmentCallBack.c:368 src/Properties.c:759 # src/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 msgid "Tape : " msgstr "Ta¶ma : " # src/NoteBookManagment.c:193 src/NoteBookManagmentCallBack.c:314 # src/NoteBookManagmentCallBack.c:368 src/Properties.c:759 # src/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 #: src/gui/gwpropertiesbox.c:649 #, c-format msgid "Tape : %d" msgstr "Ta¶ma : %d" #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "¦ieæ :" # src/Properties.c:567 src/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 #: src/gui/gwpropertiesbox.c:666 #, c-format msgid "Network : %d" msgstr "¦ieæ : %d" # src/NoteBookManagment.c:144 # src/gui/NoteBookManagment.c:186 #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 msgid "Jaz : " msgstr "Jazz : " # src/Properties.c:513 src/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #: src/gui/gwpropertiesbox.c:683 #, c-format msgid "Jaz : %d" msgstr "Jazz : %d" # src/Properties.c:567 src/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "Inny : " # src/Properties.c:567 src/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "Inny : %d" # src/Properties.c:589 # src/gui/PropertiesBox.c:541 #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Kategorie katalogu : " # src/Properties.c:610 # src/gui/PropertiesBox.c:557 #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "Opis katalogu : " # src/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Informacje o katalogu" # src/Properties.c:706 # src/gui/PropertiesBox.c:645 #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "Wprowad¼ nazwê dysku." # src/Properties.c:730 # src/gui/PropertiesBox.c:664 #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "Wprowad¼ numer dysku." # src/NoteBookManagment.c:193 src/NoteBookManagmentCallBack.c:314 # src/NoteBookManagmentCallBack.c:368 src/Properties.c:759 # src/Properties.c:760 # src/gui/PropertiesBox.c:685 #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr " Typ : " # src/Properties.c:775 src/Properties.c:776 # src/gui/PropertiesBox.c:695 src/gui/PropertiesBox.c:696 #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "Numer seryjny : " # src/Properties.c:791 src/Properties.c:792 # src/gui/PropertiesBox.c:706 src/gui/PropertiesBox.c:707 #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "Etykieta Woluminu : " # src/Properties.c:845 src/Properties.c:846 # src/gui/PropertiesBox.c:743 src/gui/PropertiesBox.c:744 #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "Pojemno¶æ : " # src/Properties.c:861 src/Properties.c:862 # src/gui/PropertiesBox.c:754 src/gui/PropertiesBox.c:755 #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "Wykorzystane : " # src/Properties.c:877 src/Properties.c:878 # src/gui/PropertiesBox.c:765 src/gui/PropertiesBox.c:766 #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "Wolne : " # src/Properties.c:915 src/Properties.c:916 # src/gui/PropertiesBox.c:790 src/gui/PropertiesBox.c:791 #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "Nazwa Katalogu : " # src/Properties.c:931 src/Properties.c:932 # src/gui/PropertiesBox.c:801 src/gui/PropertiesBox.c:802 #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "Aktualizacja katalogu : " # src/Properties.c:967 # src/gui/PropertiesBox.c:828 #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "Opis Dysku : " # src/Properties.c:998 # src/gui/PropertiesBox.c:854 #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Informacje o dysku" # src/NoteBookCatalog.c:189 # src/gui/PropertiesBox.c:908 #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "Nazwa Folderu" # src/Properties.c:1104 # src/gui/PropertiesBox.c:940 #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Typ : (folder)" # src/Properties.c:1118 src/Properties.c:1119 # src/gui/PropertiesBox.c:949 src/gui/PropertiesBox.c:950 #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "Wielko¶æ Folderu : " # src/Properties.c:1134 src/Properties.c:1135 src/Properties.c:1476 # src/Properties.c:1477 # src/gui/PropertiesBox.c:960 src/gui/PropertiesBox.c:961 # src/gui/PropertiesBox.c:1213 src/gui/PropertiesBox.c:1214 #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "Utworzony : " # src/Properties.c:1150 src/Properties.c:1151 src/Properties.c:1492 # src/Properties.c:1493 # src/gui/PropertiesBox.c:971 src/gui/PropertiesBox.c:972 # src/gui/PropertiesBox.c:1224 src/gui/PropertiesBox.c:1225 #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "Modyfikacja : " # src/Properties.c:1166 src/Properties.c:1167 src/Properties.c:1508 # src/Properties.c:1509 # src/gui/PropertiesBox.c:982 src/gui/PropertiesBox.c:983 # src/gui/PropertiesBox.c:1235 src/gui/PropertiesBox.c:1236 #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "Ostatnia operacja : " # src/Properties.c:1188 src/Properties.c:1189 src/Properties.c:1530 # src/Properties.c:1531 # src/gui/PropertiesBox.c:997 src/gui/PropertiesBox.c:998 # src/gui/PropertiesBox.c:1250 src/gui/PropertiesBox.c:1251 #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Prawa : " # src/Properties.c:1204 src/Properties.c:1205 src/Properties.c:1546 # src/Properties.c:1547 # src/gui/PropertiesBox.c:1008 src/gui/PropertiesBox.c:1009 # src/gui/PropertiesBox.c:1261 src/gui/PropertiesBox.c:1262 #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "W³a¶ciciel : " # src/Properties.c:1220 src/Properties.c:1221 src/Properties.c:1562 # src/Properties.c:1563 # src/gui/PropertiesBox.c:1019 src/gui/PropertiesBox.c:1020 # src/gui/PropertiesBox.c:1272 src/gui/PropertiesBox.c:1273 #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "Grupa : " # src/Properties.c:1258 src/Properties.c:1259 src/Properties.c:1602 # src/Properties.c:1606 src/Properties.c:1609 # src/gui/PropertiesBox.c:1044 src/gui/PropertiesBox.c:1045 # src/gui/PropertiesBox.c:1299 src/gui/PropertiesBox.c:1303 # src/gui/PropertiesBox.c:1306 #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "Nazwa Dysku : " # src/Properties.c:1274 src/Properties.c:1275 src/Properties.c:1626 # src/Properties.c:1630 src/Properties.c:1633 # src/gui/PropertiesBox.c:1055 src/gui/PropertiesBox.c:1056 # src/gui/PropertiesBox.c:1318 src/gui/PropertiesBox.c:1322 # src/gui/PropertiesBox.c:1325 #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "Lokalizacja na Dysku : " # src/Properties.c:1310 # src/gui/PropertiesBox.c:1082 #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "Opis Folderu : " # src/Properties.c:1341 # src/gui/PropertiesBox.c:1108 #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Informacje o folderze" # src/NoteBookManagment.c:217 src/NoteBookManagmentCallBack.c:391 # src/gui/PropertiesBox.c:1161 #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "Nazwa pliku : " # src/Properties.c:1446 # src/gui/PropertiesBox.c:1193 #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Typ pliku : funkcja jeszcze nie zaimplementowana!!!" # src/Properties.c:401 src/Properties.c:402 src/Properties.c:1460 # src/Properties.c:1461 # src/gui/PropertiesBox.c:413 src/gui/PropertiesBox.c:414 # src/gui/PropertiesBox.c:1202 src/gui/PropertiesBox.c:1203 #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "Wielko¶æ Pliku : %s (%s bajtów)" # src/Properties.c:1668 # src/gui/PropertiesBox.c:1351 #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "Opis Pliku : " # src/Properties.c:1699 # src/gui/PropertiesBox.c:1377 #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Informacje o Pliku" # src/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "Plik katalogu" # src/Properties.c:589 # src/gui/PropertiesBox.c:541 #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Poziom kompresji katalogu : " #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "" "Wybierz poziom kompresji katalogu. Domy¶ln± warto¶ci± jest 3, jest to dobrze " "dobrana warto¶æ pomiêdzy wysok± wydajno¶ci± i ma³± wielko¶ci± pliku." # src/MenuPopupCallBack.c:55 # src/gui/MenuPopupCallBack.c:57 #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Ostatnio otwierane katalogi" #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "" "Wybierz wielko¶æ historii ostatnio otwieranych katalogów. Domy¶ln± warto¶ci± " "jest 5." #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "Wyczy¶æ historiê" #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "Kliknij tutaj, aby wyczy¶ciæ historiê ostatnio otwieranych plików." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Automatycznie wczytaj katalog" #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "Automatycznie wczytaj domy¶lny katalog przy starcie" # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1186 src/Catalog.c:1344 #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "Wczytaj ostatnio otwierany katalog." # src/NoteBookManagmentCallBack.c:508 # src/gui/NoteBookManagmentCallBack.c:620 #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "Wczytaj wybrany katalog." #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "Wprowad¼ pe³n± ¶cie¿kê katalogu do wczytania." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "Wybierz katalog" #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "Kliknij tutaj, aby wybraæ katalog." # src/MenuFile.c:382 # src/gui/MenuFileCallBack.c:175 src/gui/MenuFileCallBack.c:202 # src/gui/MenuFileCallBack.c:406 src/gui/MenuFileCallBack.c:503 # src/gui/MenuFileCallBack.c:596 src/gui/MenuFileCallBack.c:686 # src/gui/MenuFileCallBack.c:763 #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "Wybierz katalog do automatycznego wczytania" #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "Eksplorer" # src/NoteBookSearch.c:80 # src/gui/NoteBookSearch.c:127 #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "Uwzglêdnij wielko¶æ liter" #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "Wyniki sortowania uwzglêdaniaj± wielko¶æ liter." #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Wyniki sortowania grupy po katalogach/plikach." #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" "Rezultaty sortowania mog± byæ pogrupowane po typie pozycji. Je¶li ta opcja " "jest w³±czona to wszystkie pozycje bêd± pogrupowane po katalogach lub " "plikach." #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Automatycznie zmieñ szeroko¶æ kolumn" #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "Automatycznie zmieñ szeroko¶æ wszystkich kolumn." # src/NoteBookSearch.c:138 # src/gui/NoteBookSearch.c:169 src/gui/NoteBookSearch.c:232 #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "Dyski" #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "Widoczny" #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Ukryj" #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "Poka¿" #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "Ukryty" # src/Menu.c:50 # src/gui/NoteBookSearch.c:152 #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Pliki" #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "Rezultaty sortowania uwzglêdniaj± wielko¶æ znaków." #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Rezultaty sortowania grupy po typie." #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" "Rezultaty sortowania w wyszukiwaniu mog± byæ pogrupowane po typie pozycji. " "Je¶li ta opcja jest w³±czona to wszystkie pozycje bêd± pogrupowane po " "katalogu, dysku, folderach i plikach." #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "Wszystkie s³owa kluczowe musz± pasowaæ" #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" "Wybierz je¶li wszystkie s³owa kluczowe lub tylko jedno z nich musi pasowaæ " "do pozycji, aby mog³a siê ona znale¼æ w rezultatach wyszukiwania." # src/MenuFile.c:278 # src/gui/MenuFileCallBack.c:223 #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "Szybkie" #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "Opcje ogólne" #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "GUI" # src/Categories.c:201 # src/gui/CategoriesEditBox.c:237 #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "Zapisz zmiany w³a¶ciwo¶ci GUI przy wyj¶ciu." #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "Zapisz pozycjê i wielko¶æ okna." #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "W³±cz d¼wiêki" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "W³±cza krótki d¼wiêk przy wyst±pieniu niektórych zdarzeñ." #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Poczta" #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "Adres e-mail :" #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "Wprowad¼ adres e-mail." #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "Serwer wychodz±cy :" #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "" "Wprowad¼ adres swojego wychodz±cego serwera pocztowego. Typowo jest to mail." "twojadomena.pl" #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Port serwera :" #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "Wprowad¼ numer portu serwera (typowo 25)." #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "Okno Ustawienia pozwala na konfiguracjê programu." #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "Ustawienia" #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "Wprowad¼ sekcjê do skonfigurowania." #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "" "Dokonaj zmian wszystkich dostêpnych w³a¶ciwo¶ci, aby skonfigurowaæ program " "tak jak chcesz." #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "" "To okno pozwala na konfiguracjê programu. Niektóre z w³a¶ciwo¶ci mog± zostaæ " "tutaj skonfigurowane." #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "Kliknij OK, aby potwierdziæ zmiany i zamkn±æ okno Ustawienia." #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "Kliknij Anuluj, aby anulowaæ zmiany i zamkn±æ okno Ustawienia." #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "_Zastosuj" #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "" "Kliknij Zastosuj, aby potwierdziæ zmiany (bez zamykania okna Ustawienia)." #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "Ustawienia zosta³y zmienione." #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "Je¶li nie zatwierdzisz zmian stracisz je. Czy chcesz je zatwierdziæ ?" # src/gui/StatusBarCallBack.c:56 #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], ilo¶æ dysków: %d" # src/StatusBar.c:203 # src/gui/StatusBarCallBack.c:57 src/gui/StatusBarCallBack.c:88 # src/gui/StatusBarCallBack.c:120 #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr " Wybrane Elementy: %d (wielko¶æ : %s)" # src/gui/StatusBarCallBack.c:80 #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], ³±cznie : %s, wolne : %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr "Dysk pusty" # src/StatusBar.c:203 # src/gui/StatusBarCallBack.c:84 src/gui/StatusBarCallBack.c:116 # src/gui/StatusBarCallBack.c:145 #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr " Wybrany Element: %d (wielko¶æ : %s)" # src/gui/StatusBarCallBack.c:112 #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr " Folder \"%s\", %s (plików %d, podkatalogów %d)" # src/StatusBar.c:197 # src/gui/StatusBarCallBack.c:144 #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr " %s, %s, %s" # src/StatusBar.c:225 src/StatusBar.c:247 # src/gui/StatusBarCallBack.c:169 src/gui/StatusBarCallBack.c:193 #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr " Wybrany Element : %d" # src/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr " Przegl±danie katalogu" # src/StatusBar.c:242 # src/gui/StatusBarCallBack.c:192 #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr " Wyszukiwanie" # src/StatusBar.c:264 # src/gui/StatusBarCallBack.c:216 #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr " Zarz±dzanie katalogiem" # src/ToolBar.c:59 # src/gui/ToolBar.c:76 #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Zamknij katalog" # src/MenuFile.c:199 src/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "Wy¶lij katalog poprzez e-mail" # src/Menu.c:187 # src/gui/About.c:108 #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "O programie" # src/About.c:128 # src/gui/About.c:125 #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "System katalogowania no¶ników wymienialnych\n" "Autor: Sébastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" # src/gui/About.c:126 #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" "GWHere to program zarz±dzaj±cy baz± Twoich p³yt CD oraz innych mediów " "(takich jak twarde dyski, dyskietki, dyski Zip itp.). Dziêki GWhere w ³atwy " "sposób mo¿esz przegl±daæ Twoje p³yty CD i szybko znale¼æ potrzebny Ci plik " "bez konieczno¶ci ci±g³ego wsadzania p³yt do napêdu." #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Praca pod kontrol± " #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "" "To okno pozwala Ci na wys³anie katalogu do jedego (lub wiêcej) Twoich " "znajomych poprzez e-mail." #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "Wy¶lij e-mail" #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "Do :" #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "CC :" #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "BCC :" #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "Temat :" #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "Wprowad¼ tutaj adresy e-mail Twoich znajomych." #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "Wprowad¼ tutaj adresy e-mail, do których zostanie wys³ana kopia." #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "" "Wprowad¼ tutaj adresy e-mail, do których zostanie wys³ana ukryta kopia." #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "Wprowad¼ tutaj temat Twojego maila" #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "Za³±cznik :" #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "Wybierz lub nie katalog do za³±czenia." #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "Wpisz tutaj tekst wiadomo¶ci." # src/Menu.c:84 # src/gui/MenuFile.c:81 #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "Zapi_sz" #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "Kliknij tutaj, aby wys³aæ e-mail (z za³±czonym katalogiem)." #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "Kliknij tutaj, aby anulowaæ wysy³anie e-maila." # src/gui/NoteBookManagmentCallBack.c:234 # #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "Wysy³anie e-maila, proszê czekaæ..." #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "Podczas wysy³ania e-maila wyst±pi³ b³ad. Proszê sprawdziæ parametry." # src/support.c:118 # src/support.c:120 #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Nie mogê znale¼æ obrazka: %s" # src/support.c:125 # src/support.c:127 #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "B³±d podczas ³adowania obrazka: %s" # src/Catalog.c:605 # src/Catalog.c:695 #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "B³±d : nie mogê otworzyæ bie¿±cego folderu" # src/Catalog.c:641 # src/Catalog.c:731 #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "B³±d: nie mogê przej¶æ do folderu roboczego." # src/Catalog.c:692 # src/Catalog.c:780 #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "Dysk nie zosta³ dodany\n" "Operacja anulowana przez u¿ytkownika" # src/Catalog.c:641 src/NoteBookManagmentCallBack.c:198 # src/NoteBookManagmentCallBack.c:235 # src/Catalog.c:798 src/Catalog.c:803 src/Catalog.c:808 src/Catalog.c:813 # src/Catalog.c:818 src/Catalog.c:823 src/Catalog.c:828 src/Catalog.c:833 # src/Catalog.c:850 src/Catalog.c:855 src/Catalog.c:860 src/Catalog.c:865 # src/Catalog.c:870 src/Catalog.c:875 #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "Dysk nie zosta³ dodany\n" # src/Catalog.c:798 #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "%s poza zaalokowan± przestrzeni± adresow± programu." # src/Catalog.c:803 #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" "Komponent ¶cie¿ki dostêpu przekracza %d znaków lub ca³a ¶cie¿ka przekracza %" "d znaków: %s." # src/Catalog.c:808 #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "Katalog nie istnieje: %s." # src/Catalog.c:813 src/Catalog.c:865 #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "Brak pamiêci do wykonania operacji." # src/Catalog.c:818 #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "Komponent ¶cie¿ki nie jest katalogiem: %s." # src/Catalog.c:823 #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "Znaleziono za du¿o linków symbolicznych podczas analizy ¶cie¿ki: %s." # src/Catalog.c:828 #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "Wyst±pi³ b³±d podczas zmiany katalogu na: %s." # src/Exploration.c:594 src/Exploration.c:650 src/Exploration.c:728 # src/Exploration.c:784 # src/Catalog.c:833 src/Catalog.c:875 #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "Nieznany b³±d" # src/Catalog.c:935 # src/Catalog.c:1110 #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" "Dysk nie zosta³ dodany\n" "B³±d : nie mogê przej¶æ do folderu nadrzêdnego" # src/Catalog.c:850 #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Program u¿ywa za du¿o deskryptorów plików." # src/Catalog.c:855 #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Za du¿o otwartych plików w systemie." # src/Catalog.c:860 #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "Katalog nie istnieje lub jego nazwa to pusty ci±g: %s." # src/Catalog.c:870 #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "Nastêpuj±ca nazwa nie jest katalogiem: %s." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" "Wyst±pi³ b³±d krytyczny podczas wyci±gania informacji o pliku %s%s%s.\n" "Zapisz twój katalog je¶li to mo¿liwe, wyjd¼ z GWhere i poinformuj o tym " "problemie zespó³ GWhere." # src/Catalog.c:926 # src/Catalog.c:1102 #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" "Dysk nie zosta³ dodany\n" "B³±d : nie mogê zamkn±æ bie¿±cego folderu." # src/main.c:47 #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "Praca pod kontrol± %s" # src/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Katalog za³adowany" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "B³±d ³adowania katalogu" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "Zapisz katalog" #: src/gwapplicationmanager.c:499 msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "" "Katalog jest niew³a¶ciwy lub nie istnieje. Proszê sprawdziæ ¶cie¿kê pliku." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "Zapisywanie katalogu" # src/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Katalog zapisany" # src/MenuFile.c:199 src/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "B³±d zapisywania katalogu" # src/NoteBookCatalog.c:114 src/NoteBookCatalog.c:221 # src/gui/NoteBookCatalog.c:113 src/gui/NoteBookCatalog.c:207 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Prawa" # src/NoteBookCatalog.c:119 src/NoteBookCatalog.c:222 # src/gui/NoteBookCatalog.c:118 src/gui/NoteBookCatalog.c:208 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "W³a¶ciciel" # src/NoteBookCatalog.c:124 src/NoteBookCatalog.c:223 # src/gui/NoteBookCatalog.c:123 src/gui/NoteBookCatalog.c:209 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "Grupa" # src/NoteBookCatalog.c:129 src/NoteBookCatalog.c:224 # src/NoteBookSearch.c:148 # src/gui/NoteBookCatalog.c:128 src/gui/NoteBookCatalog.c:210 # src/gui/NoteBookSearch.c:238 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "Wielko¶æ" # src/NoteBookCatalog.c:134 src/NoteBookCatalog.c:225 # src/gui/NoteBookCatalog.c:133 src/gui/NoteBookCatalog.c:211 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "Inode" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Data dostêpu" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Data modyfikacji" # src/Properties.c:1134 src/Properties.c:1135 src/Properties.c:1476 # src/Properties.c:1477 # src/gui/PropertiesBox.c:960 src/gui/PropertiesBox.c:961 # src/gui/PropertiesBox.c:1213 src/gui/PropertiesBox.c:1214 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "Utworzony" # src/NoteBookManagment.c:217 src/NoteBookManagmentCallBack.c:391 # src/gui/PropertiesBox.c:1161 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "Nazwa pliku" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "¦cie¿ka dostêpu" # src/NoteBookCatalog.c:187 # src/gui/NoteBookCatalog.c:254 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Archiwum nr" # src/NoteBookCatalog.c:188 # src/gui/NoteBookCatalog.c:255 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Typ" # src/NoteBookCatalog.c:189 # src/gui/NoteBookCatalog.c:256 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Nazwa Woluminu" # src/Properties.c:845 src/Properties.c:846 # src/gui/PropertiesBox.c:743 src/gui/PropertiesBox.c:744 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "Pojemno¶æ" # src/NoteBookCatalog.c:191 # src/gui/NoteBookCatalog.c:258 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "Wolne" # src/NoteBookCatalog.c:139 src/NoteBookCatalog.c:192 # src/NoteBookCatalog.c:226 src/NoteBookSearch.c:153 # src/gui/NoteBookCatalog.c:138 src/gui/NoteBookCatalog.c:212 # src/gui/NoteBookCatalog.c:259 src/gui/NoteBookSearch.c:241 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Data" # src/NoteBookManagmentCallBack.c:320 src/NoteBookManagmentCallBack.c:397 # src/gui/NoteBookManagmentCallBack.c:344 # src/gui/NoteBookManagmentCallBack.c:416 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Numer seryjny" # src/NoteBookSearch.c:143 # src/gui/NoteBookSearch.c:235 #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "¦cie¿ka" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "Pe³na" #: win32/config.h:288 msgid "Compact" msgstr "Minimalna" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (wymagany)" #: win32/config.h:290 msgid "Main engine application." msgstr "G³ówne pliki aplikacji." #: win32/config.h:291 msgid "GTK+ 2.6 RunTime (required)" msgstr "Biblioteki uruchomieniowe GTK+ 2.6 (wymagane)" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "Biblioteki dla rodowiska GUI." #: win32/config.h:293 msgid "Plugins" msgstr "Wtyczki" #: win32/config.h:294 msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "" "Wtyczki do automatycznego tworzenia opisów plików i importu/eksportu " "katalogów." #: win32/config.h:295 msgid "Languages Files" msgstr "Pliki Jêzykowe" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "Wszystkie pliki jêzykowe." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "Musisz odinstalowaæ ostatni± wersjê GWhere" #: win32/config.h:298 msgid "Installer already running" msgstr "Instalator jest ju¿ uruchomiony" #: win32/config.h:299 msgid "Install options" msgstr "Opcje instalacji" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "Jacy u¿ytkownicy mog± uruchomiæ GWhere?" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "Uprawnienia instalacji GWhere" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" "GWhere mo¿e byæ zainstalowany dla wszystkich u¿ytkowników lub tylko dla " "bie¿±cego u¿ytkownika: Wybierz opcjê" #: win32/config.h:303 msgid "All users|Current user" msgstr "Wszyscy u¿ytkownicy|Bie¿±cy u¿ytkownik" #: win32/config.h:304 msgid "All users" msgstr "Wszyscy u¿ytkownicy" gwhere-0.2.3/po/gwhere.pot0000644000175000017500000015240510506327603014073 0ustar bartbart# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-09-27 00:53+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "" #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "" #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "" #: src/tools/gwstring.c:149 #, c-format msgid "%.0f bytes" msgstr "" #: src/tools/gwstring.c:153 #, c-format msgid "%.2f Kb" msgstr "" #: src/tools/gwstring.c:157 #, c-format msgid "%.2f Mb" msgstr "" #: src/tools/gwstring.c:161 #, c-format msgid "%.2f Gb" msgstr "" #: src/tools/gwstring.c:166 #, c-format msgid "%.2f Tb" msgstr "" #: src/tools/gwstring.c:171 #, c-format msgid "%.2f Pb" msgstr "" #: src/tools/gwstring.c:176 #, c-format msgid "%.2f Hb" msgstr "" #: src/tools/gwstring.c:182 src/tools/gwstring.c:188 #, c-format msgid "%.2f Ib" msgstr "" #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:78 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "" #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "" #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "" #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "" #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "" #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "" #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "" #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "" #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "" #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "" #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "" #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "" #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "" #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "" #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "" #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "" #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "" #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "" #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "" #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "" #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "" #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "" #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "" #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "" #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "" #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "" #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "" #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "" #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "" #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "" #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "" #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "" #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "" #: src/gui/gwmenufile.c:199 msgid "Export" msgstr "" #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "" #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "" #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "" #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "" #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "" #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "" #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "" #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "" #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "" #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "" #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "" #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "" #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "" #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "" #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "" #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "" #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "" #: src/gui/gwmenufilecallback.c:1231 msgid "Catalog imported" msgstr "" #: src/gui/gwmenufilecallback.c:1233 msgid "Catalog is not imported" msgstr "" #: src/gui/gwmenufilecallback.c:1267 msgid "A catalog is already opened" msgstr "" #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 msgid "Export catalog to" msgstr "" #: src/gui/gwmenufilecallback.c:1291 msgid "Catalog exported" msgstr "" #: src/gui/gwmenufilecallback.c:1293 msgid "Catalog is not exported" msgstr "" #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "" #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "" #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "" #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "" #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "" #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "" #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "" #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "" #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "" #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "" #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "" #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "" #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "" #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "" #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "" #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "" #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "" #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "" #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "" #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "" #: src/gui/gwmenupopupcallback.c:121 msgid "Invalid filled catalog name" msgstr "" #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "" #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "" #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "" #: src/gui/gwmenupopupcallback.c:374 msgid "No new disk name was filled" msgstr "" #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "" #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "" #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "" #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "" #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "" #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "" #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "" #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "" #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "" #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "" #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "" #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "" #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "" #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "" #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "" #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "" #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "" #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "" #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "" #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "" #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "" #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "" #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "" #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "" #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "" #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "" #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "" #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "" #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "" #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "" #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "" #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "" #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "" #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "" #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "" #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "" #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "" #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "" #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "" #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "" #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "" #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "" #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "" #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "" #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "" #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "" #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "" #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "" #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "" #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "" #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "" #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "" #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "" #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "" #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "" #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "" #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:58 msgid "Search" msgstr "" #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "" #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "" #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "" #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "" #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "" #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "" #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "" #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "" #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "" #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "" #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "" #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "" #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "" #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "" #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "" #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "" #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "" #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "" #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "" #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "" #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "" #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "" #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "" #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "" #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "" #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "" #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr "" #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "" #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "" #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "" #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, c-format msgid "Total Files : %ld" msgstr "" #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "" #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, c-format msgid "Total Folders : %ld" msgstr "" #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "" #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "" #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "" #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "" #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "" #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "" #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "" #: src/gui/gwpropertiesbox.c:577 #, c-format msgid "Audio CD : %d" msgstr "" #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "" #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "" #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "" #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "" #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "" #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "" #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 msgid "Tape : " msgstr "" #: src/gui/gwpropertiesbox.c:649 #, c-format msgid "Tape : %d" msgstr "" #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "" #: src/gui/gwpropertiesbox.c:666 #, c-format msgid "Network : %d" msgstr "" #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 msgid "Jaz : " msgstr "" #: src/gui/gwpropertiesbox.c:683 #, c-format msgid "Jaz : %d" msgstr "" #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "" #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "" #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "" #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "" #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "" #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "" #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "" #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr "" #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "" #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "" #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "" #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "" #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "" #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "" #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "" #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "" #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "" #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "" #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "" #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "" #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "" #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "" #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "" #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "" #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "" #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "" #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "" #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "" #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "" #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "" #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "" #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "" #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "" #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "" #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "" #: src/gui/gwsettingscatalogfile.c:69 msgid "Catalog file" msgstr "" #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:120 msgid "Catalog compression level :" msgstr "" #: src/gui/gwsettingscatalogfile.c:135 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "" #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:143 msgid "Recents opened catalogs :" msgstr "" #: src/gui/gwsettingscatalogfile.c:158 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "" #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:165 msgid "Clear history" msgstr "" #: src/gui/gwsettingscatalogfile.c:169 msgid "Click here to clear the recents opened files history." msgstr "" #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:175 msgid "Autoload catalog" msgstr "" #: src/gui/gwsettingscatalogfile.c:180 msgid "Autoloads a default catalog when at starting." msgstr "" #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:187 msgid "Load last opened catalog file." msgstr "" #: src/gui/gwsettingscatalogfile.c:194 msgid "Load selected catalog file." msgstr "" #: src/gui/gwsettingscatalogfile.c:205 msgid "Enter the full catalog file path to load." msgstr "" #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:212 msgid "Select catalog" msgstr "" #: src/gui/gwsettingscatalogfile.c:218 msgid "Click here to browse and select the catalog file." msgstr "" #: src/gui/gwsettingscatalogfile.c:608 msgid "Select autoloaded catalog" msgstr "" #: src/gui/gwsettingsexplorer.c:57 msgid "Explorer" msgstr "" #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:108 src/gui/gwsettingssearch.c:110 msgid "Case sensitive sort." msgstr "" #: src/gui/gwsettingsexplorer.c:113 msgid "The result sort in explorer is case sensitive." msgstr "" #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:119 msgid "Result sort group by folder/file." msgstr "" #: src/gui/gwsettingsexplorer.c:124 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:130 src/gui/gwsettingssearch.c:132 msgid "Autoresize columns" msgstr "" #: src/gui/gwsettingsexplorer.c:135 src/gui/gwsettingssearch.c:137 msgid "Autoresize all explorer column." msgstr "" #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "" #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "" #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "" #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "" #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "" #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "" #: src/gui/gwsettingssearch.c:115 msgid "The result sort in search is case sensitive." msgstr "" #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:121 msgid "Result sort group by type." msgstr "" #: src/gui/gwsettingssearch.c:126 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:143 msgid "All key words must match" msgstr "" #: src/gui/gwsettingssearch.c:148 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "" #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "" #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "" #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "" #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "" #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "" #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "" #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "" #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "" #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "" #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "" #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "" #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "" #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "" #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "" #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "" #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "" #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "" #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "" #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "" #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "" #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "" #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr "" #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr "" #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr "" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr "" #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr "" #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr "" #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr "" #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr "" #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr "" #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr "" #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr "" #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "" #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "" #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "" #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "" #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "" #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "" #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "" #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "" #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "" #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "" #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "" #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "" #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "" #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "" #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "" #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "" #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "" #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "" #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "" #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "" #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "" #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "" #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "" #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "" #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "" #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "" #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "" #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "" #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "" #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "" #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "" #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "" #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "" #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "" #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "" #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "" #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "" #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "" #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "" #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "" #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "" #: src/gwapplicationmanager.c:499 msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "" #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "" #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "" #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "" #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "" #: win32/config.h:288 msgid "Compact" msgstr "" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "" #: win32/config.h:290 msgid "Main engine application." msgstr "" #: win32/config.h:291 msgid "GTK+ 2.6 RunTime (required)" msgstr "" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "" #: win32/config.h:293 msgid "Plugins" msgstr "" #: win32/config.h:294 msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "" #: win32/config.h:295 msgid "Languages Files" msgstr "" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "" #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "" #: win32/config.h:298 msgid "Installer already running" msgstr "" #: win32/config.h:299 msgid "Install options" msgstr "" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" #: win32/config.h:303 msgid "All users|Current user" msgstr "" #: win32/config.h:304 msgid "All users" msgstr "" gwhere-0.2.3/po/hu.gmo0000644000175000017500000010147510472436235013213 0ustar bartbartÞ•”¼ \Ð! Ñ!aß!$A"f" ƒ""¡" ´"*À"$ë"##%3#Y# b# o#z#‚#Š#’#š#¢#ª#²#1Ç#qù#7k$°£$T%[% a% m%y% }%Š% “% %·%0Ð% &+ &m8&4¦&JÛ&R&'y' ' Œ'š'ª'À'-Ñ' ÿ' ()(<(B( G( Q(]( d(Cr(¶(1Î())*%) P)\)k)€)ˆ) Ÿ)¬)¼)Ò)á)ý) **-* @*N*a* j*v*\‡*ä*nø*(g++ –+¤+1¾+(ð+5,5O,H…,DÎ,?-S- Y- g-,r-Ÿ-¯-·-Ó- ñ- ÿ- . . .*.9.>. R. \.i.|..“.§./½. í.Mú.H/N/_/o/ €/Š/r¢/0L%0r0…09•0@Ï031#D1h11“1¯1Ã1%Ù1&ÿ1)&2RP2£2Â2â2Iþ2\H3C¥3é3L4"P4$s4˜4¶4»4,Î4$û4 5)5.5 B5 L5Y5s5 „5‘5!¢5Ä5 Ê5 Ô5à5ç5 ý5 66$6 76 E6 P6^6 c6q6u6ˆ6‰7+š7?Æ7?8gF8G®8@ö879=9F9L9T9[9`9u9{9Pû9L:.T:ƒ:D”: Ù:ã:ó:;;:;V;f;};‘;–;[¯; << (<i6<  < «<¶<»<Ã< Ç<Ó<Ü<å<è<-ý<+=<=E=a=h=è= í= ú=> > > >8>>>G>EL>’> °>¼>Ë> Ó>Þ>ä>ê>??'?…;?Á?È? ×? ã? ï?!ý?@:@ A@K@h@q@0v@§@Ã@Ë@ Û@$è@ AA2A ;AEA LAVA hA vA ‚AA©A¸AxÈA]AB<ŸB ÜBKýBIC^C pCzC —C ¡C ®C¼C ÍCÛCóCüC DD&D +D5DMD2iD?œD>ÜD/E8KE8„E:½E,øEH%F5nF€¤F.%GTG,åG‹H£žH(BI%kI#‘I#µI%ÙIZÿI`ZJX»JK,K0FKJwKÂKÔKãKôKLL3L8L@L(PL yL‡LŽL-£LAÑL M!M *M5M =MGM WMcM rM|MœMõ M–NN¦N®NµN ½NÉNÏNÕNÚNÞNâNæNìN õNOOOO$O,O5O:OVO ^O lOÍzO HQ„TQ,ÙQR $R0RCR UR&`R)‡R ±R¾R*ÖRS S &S0S8S@S HSTS\SdSlS:ƒSr¾S.1TÀ`T!U)U1UJUZUbU tU•U©U!ÆU3èUV0/V`V>îV?-WTmW ÂWÌWÜW ÷WX! X2BX uX)X&©XÐX ÖX àX êXöXüX¤Y"·YHÚY(#ZLZ-eZ“Z ­ZºZ ÐZÚZîZ[[+[ @[a[s[‚[˜[°[Ã[ Ø[ â[ï[H\I\¿a\.!]P]W]o]-Ž]¼]EÓ]^X3^uŒ^K_N_T_ g_4u_ª_ ½_-Ç_ õ_ `$`6` <`H`O`X`^`n` ~`Œ` ¢`°`¸`Ò`:ï`*aoFa¶a¾aÖaîaþab^.bb:œb×bîb#ýb)!c5Kccc ¯c½c Ócàcùcd;8dktdàdúdeI*e/te4¤e#Ùe[ýe'Yf)f"«fÎf'Öf2þf%1gWg`ghg xg „g‘g¬g ¿gÊg3Ñgh h h"h(h8h ?hIh Xhfh€h—h±h¸hËhæhEiFjA\jGžj=æjH$k`mk6Îkl lll&l.l7lPlsVlVÊl!mC2m vm5m ·m ÃmÎmãm÷mn(nîs-tzƒ[z3ßzœ{ °{pÑ{uB|¸|Ö|ê|}}R4}Y‡}Dá} &~00~*a~0Œ~½~Ó~â~ ò~- LYošª² ÎAï1€E€ M€W€_€h€ w€ ‚€€%¡€Ç€Ì€âéò ú‚ ‚-‚=‚B‚Q‚V‚_‚ h‚ t‚‚‚­‚´‚½‚Å‚ ΂Û‚ì‚ ƒƒ'ƒ:wÁ“îÞ/+:”T,ûÊGíý¨-G. úc™ÿ§BçZfSu}é‚„¯€ë~B>t…›;w@25nÉÆFg1Xc˜n9©^mLzŸ8Ü` SÔ„KäM(üh$¿l{’6Š<ãOtrlNΊà ÷ZyDx]qeY¼Ð&»Ù!pK°fƒ2baJ•O/>Û¡À)¬Ä%ƒµôAy9_]·âE[‹³ž?LVß&‡¢iœÕ—²*ï£3áu­7H‰èþEÅ)шsv67+pHNx4=UP Œ×õ^d¾eØæÈ_; 0Ú…Œö$[(ÇU*`s-V\Žò1P–RXW‚jkÒù‹ r‡,šoJW"ÖC½FTAª<3 bvR’%}‘ |q=ÏI‰¤ †IËg5ìm{Y'º¦ð\!oÌ ´M?j”@ó¶¹Í®¸Dd."|åÃah4k«€ÓQQzC†#‘  ¥ÝŽøñꓱ#8i'0ˆ~ Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Empty disk Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A critical error occured when extracting file information of %s%s%s. Save your catalog if it is possible, exit GWhere and report this trouble to the GWhere project team please.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.Allow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Auto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog fileCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.Generals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?Info : Insufficient memory to complete the operation.Is running on %sKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : NewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :The disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.This Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Folders : Total Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: 0.1.3 Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2004-09-20 13:59+0200 Last-Translator: LAJOSHAZI Laszlo Gergely Language-Team: Hungarian MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 8bit hu> Last-Translators: Urbán Zoltán , LAJOSHÁZI László Gergely X-Generator: KBabel 0.9.6 Futtatja Lemez katalógus nyilvántartó program Alkotta: Sébastien LECACHEUR (nagybetûs a vezetékneve) zero@gwhere.org http://www.gwhere.org %s [ %s ], kapacitás : %s, szabad hely : %s %s [ %s ], összes lemez : %d %s, %s, %sKatalógus böngészõKatalógus kezelésUres lemez Mappa "%s", %s (%d fájl, %d al-mappa)Listázott elemek : %d (teljes méret : %s)Keresõ motor Kiválasztott elem : %dKiválasztott elem : %d (teljes méret : %s)Fájlrendszer tipusa : létrehozta: %.0f byte%.2f GB%.2f HB%.2f Ib%.2f Kbyte%.2f MB%.2f PB%.2f TB%lu darabot találtam!!%s kívül esik a futó program által lefoglalt címterületen.Egy mappa nevének hossza több, mint %d karakter, vagy a teljes elérési útvonal neve nagyobb, mint %d karakter : %sAz útvonal elõtét egy része nem egy mappa : %sSulyos hiba tortent az alabbi fajl informacioinak kinyeresekor: %s%s%s. Mentsd el a katalogusodat ha lehetseges, majd lepj ki a GWhere programbol es jelezd a hibat a GWhere project csapatnak! NévjegyNévjegyUtolsó hozzáférés dátumaElérési útvonalFelveszFelvesz / FrissítÚj lemez felvétele a katalógusbaÚj lemez hozzáadásaLemez hozzáadása folyamatbanMinden kulcs-szónak egyeznie kellA program magyar nyelvû használatát teszi lehetõvé.Hang engedélyezéseMegenged rövid hangjelzést bizonyos eseményeknélLehetõséget biztosít a kategóratulajdonságok frissítésére a kijelölt kategóriában. Kattints a Felvesz/ Frissít gombra a frissítés mentéséhez.Egy írási/olvasási hiba történt a köv. mappára váltás közben%sHiba lépett fel az üzenetküldésnél. Ellenõrizd a beállításokat!A kiválasztott kategóriát a lemezen található minden mappához, fájlhoz hozzárendeli.KatalógusAzonosító kulcsSorszáma a katalógusban : Csatolt file:Automatikus leíráskészítésKatalógus betöltése induláskor...Az alapértelmezett katalógus betöltése induláskor.AutomountMinden oszlop mérete szöveghez igazodhat.Oszlopok automatikus átméretezhetõségeBCC :Másolat :CD-Rom : CD-Rom : %dBezárKatalógusfa elrejtéseHa ezt bekapcsolod, akkor a beírt szó bárhol lehet a fájlnévben. Különben meg *-ozhatsz...Reguláris kifejezések használatáról bõvebben a dokumentációban olvashatsz.Nem lehet a file-t szerkeszteni!! A kategóriát nem lehet eltávolítani! Van ebbe a kategóriába sorolt elem.A levelezõ kliens nem tud adatot fogadniNem lehet adatot küldeniNem lehet keresni : nincs betöltött katalógusTeljes tárolókapacitás : BetûérzékenyBetûérzékeny rendezésKatalógusKatalógus leírás : Katalógus jellemzõkKatalógus név : Katalógus kategóriái : Katalógus bezáródottKatalógus fájl tömörítettsége : Katalógus leírásaKatalógus fájlKatalógus betöltõdöttKatalógus tulajdonságaiKatalógus elmentveKategóriák listája :KategóriaKategória : Kategória neve :Az itt felkínált változtatások teszik lehetõvé a program testreszabását.Kötetcímke változtatásaHa kivalasztod, akkor a kereseskor megadott kulcsszavak kozul mindnek benne kell lennie a talalatok kozt. Ha nem valasztod ki, akkor 1 kulcsszo egyezese eseten is kilistazza a talalt elemet. Válaszd ki csatolod e a katalógust, avagy sem.TörlésKatalógusok elfelejtéseKeresés eredménylistáját törliKattints ide a katalógusfájl kiválasztásához.A küldés megszakítása.Kattints ide a legutóbb megnyitott katalógusok listájának ürítéséhez.Üzenetküldéshez katt ide.Kattints erre a gombra a változtatások elmentéséhez (a beállítások panel nem záródik be)Ha elrontottad a beállításokat, és szeretnéd a legutolsó mentett állapotot használni, akkor kattints a Mégsem gombra!Kattints az erre a gombra a változtatások mentéshez és az ablak bezáráshozBezárKatalógus BezárásaFájl bezárásaKategória-tulajdonságok szerkesztése ablak bezárása.Katalógus bezárásaMinimálisA kapcsolatot a levelezõ kliens megszûntette Nem található a pixmap fájl : %sLétrehozva : Létrehozás dátumaDátumEltávolításLeírásLeírás :LemezLemez leírás : Lemez jellemzõkLemez neve : Lemez-statisztikák : Lemez leírásaLemezekLemezek a katalógusban : %d lemez van a katalógusban.Megjeleníti, hogy a kiválasztott lemez mount-olt vagy sem.Tulajdonságok megjelenítéseA kiválasztott adathordozo tulajdonságainak megjelenítése úgy mint szabad hely, összes hely, mountolt e, blablaKilépésKategóriák szerkesztéseKategóriák szerkesztéseLeírás készítésFile szerkesztéseLemez kiadása (ha lehetséges)Lemez kiadása (ha lehetséges - pl. CDROM); használatához az automount-ot is engedélyezni kell!Email címed : Keresõ mezõbe írt szavak mindegyikére kiírja a találatokatNevezd el a katalógustÍrd be a nevétIde írd be a másolat e-mail címét.*Ide írd be a titkos másolat e-mail címét.Ide írd be az e-mail címe(i)det , elérhetõsége(i)det.Ide írd be a levél tárgyát.Katalógus új neveÚj lemez neveÚj lemez kötetcímkéjeÚj fajl neveUsd be az uj mappa nevetÜsd be a lemez archive számát.Gépeld be a kategória leírását!Írd be a betöltendõ katalógusfájl teljes elérési útvonalát.Keresési szövegben megadhatók a "?" és "*" jelek is. A ? egy betût helyettesít, míg * tetszõleges szöveget.Írd be a katalógus nevét!Írd be a kategória nevét!Írd be a lemez nevét!Üsd be az új lemez nevét! Ezzel a névvel fog megjelenni a katalógusodban.Üsd be az új lemez listabeli azonosítókulcsát! Üsd be a kimenõ mail server port-ját (általában 25).Gépeld be az e-mail címed, pl a@b.cÍrd be az általad használt kimenõ mail server címét! Általában ez a cím mail.yourdomain.comHiba: aktuális mappa elérése sikertelenHiba: nem lehet a munka mappát megnyitni.Hiba a pixmap fájl töltésekor : %sBezárásKatalógusfa megjelenítése lemez szintigTömörített fájlok feltárása (.tar, .gz, .zip, ...)Lemez fa struktúrájának átvizsgálása.BöngészõFájlnévFájl leírása : Fájl adataiFájlméret : Fájl mérete : %s (%s byte)File meghatározásaFájlnév : EszközFájl tipusa : még nincs kész a program ezen része!!FájlokFloppy : Floppy : %dMappaMappa leírás : MappákMappa névMappa méret : Mappa leírásaSzabad tárolókapacitás : Szabad tárolókapacitásSzabad tárolókapacitás : TeljesTeljes adatterületFelhasználói felület (GUI)GWhere (nélkülözhetetlen)GWhere lehetõvé teszi a CD lemezeid és más mozgatható adathordozóid (hdd, floppy, Zip meghajtó, USB drive....) katalogizálását.A GWhere a lemezekrõl egy adatbázist készít, ami tartalmazza a fájlok neveit, majd késõbb ebben az adatbázisból a CD lemez érintése nélkül gyorsan megállapíthatod melyik lemezen van a keresett fájl.Általános beállításokAdd meg a kivalasztott adathordozo /dev-es elereset (device file)Megadja a szabad tárolókapacitását a választott lemeznek (ha mount-olt)Megadja a kiválasztott lemez szabad területét (ha mount-olt).Ha mountolt a lemez, akkor add meg a kiválasztott lemez gyártási számát!Add meg a kiválasztott adathordozo fajlrendszerenek tipusát! (ex : ext2, ext3, vfat, ntfs, ...).Add meg a kiválsztott lemez kötet nevét (ha mount-olt)CsoportCsoport : HD : HD : %dRejtettElrejtésFile mûveletek elrejtéseINodeHa a lemez rendelkezik kötetnévvel és nem adtál a katalogusnak nevet, akkor a lemez neve lesz az uj katalogus neve.Elmentsem amit az elõbb megpiszkáltál? Legközelebb az "Alkalmaz" gombot nyomogasd... Tulajdonságai : Nem áll rendelkezésre elég szabad memória a mûvelet befejezéséhez. %s % kész.Kijelölésekor minden fájl és mappa katalógusba kerül.KulcsszavasFordításokUtolsó hozzáférés : Utolsó módosítás : ...az utoljára használtat...a kiválasztottat : Katalógus betöltéseSikertelen katalógus betöltésHelye a lemezen : Levelezõ beállításokFõbb programrészek.Leírást készít a fájl jellemzõi ( fájl kiterjesztés, jpg esetén képpontok mérete, stb.) alapján HozzáadásMódosítás dátumaSikertelen Mount mûvelet. Ha a lemez nem mount-olt, akkor mountolja, majd unmount-olja, függetlenül attól hogy volt e elõzõleg mount-olva. (Mount muvelet teszi olvashatova a lemezt.)Mount -olt : Kibontás...NévNév :ÚjÚj katalógusÚj lemezÚj fájlNemNincs megnyitott katalógusNincs megnyitott katalógus : nem szerkeszthetõ kategória.Nem találtam ilyet.Nincs cimkeNem adtal meg uj fajl nevetNem adtal meg uj mappa nevetMég nincs megvalósítva!!! A tömörített fájlok tartalmát is katalogizálja, mintha a tömörített fájl mappa lenne.MegnyitKatalógus megnyitásaFájl megnyitásaBeállításokMás : Más : %dLevelezõ szerverTulajdonosTulaj : ÚtvonalLevélküldéshez a beállítások menüben állítsd be a levelezéshez szükséges információkat!Válassz egy katalógus nevet kérlek! Türelem rózsát teremkeresés folyamatban...PluginsTulajdonságokGyorsKilépésLegutóbb használt katalógusok : Reguláris kifejezésKategória eltávolításaEltávolítás a katalógusbólA kijelölt kategória eltávolítása a listából. A kategória csak akkor törölhetõ, ha nincsenek ebbe a kategóriába sorolt elemek.ÁtnevezésKatalógus átnevezéseLemez átnevezéseFajl átnevezéseMappa átnevezéseRendezés név szerintTípus szerinti rendezésJogokJogosultság : A grafikus felület megjelenítéséhez használt futtatókörnyezet.Mentés máskéntMentésGUI jellemzõk mentése, mint ablak mérete és helyeÁllapot elmentése kilépéskorMentés másként..Mentése más névenKatalógus mentéseKategóriabeállítások elmentése.Katalógus mentéseKatalógus mentése nem sikerült.KeresésBeállításokKeresésKeresés : Keresés a katalógusbanKeresés eredménye: Keresés fajtájaKeresés...induláskor betöltõdõ katalógusKatalógus kiválasztásaAdathordozo választása : Alapérték 3, ez aránylag gyors és jó hatásfokú tömörítést ad.Válaszd ki azt a lemezhez társítandó kategóriát (még ha TODO)Válaszd ki az adathordozot, ami lemezkent jelenik majd meg a katalogusodbanVálassz ki egy szekciót.A legutoljára megnyitott katalógusok közül max. ennyit jegyez meg. Alapértéke 5.Katalógus küldése levélbenFájl küldése e-mailben.Levél küldéseÜzenet küldése...Gyártási szám : Sorozatszám: Gyártási számGyártási szám : Server port :Kategória megadás alkönyvtárakra is vonatkozzonBeállításokVáltoztatások mentéseMutatFile mûveletek mutatásaMéretTárgy :A lemez hozzáadása befejezõdött.Nem lett hozzáadva a lemez Nem lett hozzáadva a lemez. Oka: felhasználói megszakítás.A lemez nem lett hozzáadva.A lemez nem lett hozzáadva.Hiba : nem lehet szülõmappára lépni.A lemez nem lett hozzáadva: nem sikerült az adathordozot becsatolni (mount-olni).A lemez nem lett hozzáadva: nincs becsatolva (mount-olva) eszközAz altalad beutott nevu fajl mar letezik az aktualis mappabanMar van ilyen nevu mappa az aktualis mappabanNincs ilyen mappa : %s%s mappa nem létezik vagy a neve üres strin %s ez a mappa név nem mappa.A böngészõben csoportosíthatók az elemek típus szerint is. Ha ezt engedélyezed, akkor minden elem mappa szerint lesz csoportosítva.A böngészõben látható lista rendezése betûérzékeny.Elem tipus szerint lehet csoportositani a rendezett listat. Ha ezt kivalasztod, akkor minden elem katalogus, lemez, mappa, file szerint lesz csoportositva. Betûérzékeny rendezés kereséskorA betûérzékeny keresésben megkülönbözteti a kis- és nagybetûs szót, ekkor "File.txt" nem egyezik "file.txt"-vel.Kiválasztható a keresés fajtája. Beállítható betûérzékeny keresés is. Használhatók joker karakterek a keresõmezõben.keresés kategórianevek közöttkeresés leírásokbankeresés lemez nevekbenkeresés filenevek közöttkeresés mappanevek közöttEzzel a beállítás ablakkal a program funkcióit és tulajdonságait lehet beállítani.Ezzel a beállítás ablakkal a program nehány funkcióját és tulajdonságát lehet beállítani.Ez az ablak arra való ,hogy katalógust küldjünk e-mail-en keresztülCímzett :Túl sok fálj-leírót használnak a futó programok.Túl sok fájl van már nyitva a rendszerben.Túl sok a szimbólikus link ezen az útvonalon :%sTeljes adatterület : Összes fájl : Összes mappa : Teljes szabad tárolókapacitás : Összes tárolókapacitás : Teljes használt adatterület : FájlrendszerFájlrendszer tipusa: Tipus : (mappa)Ide jön az üzenet szövege.Ismeretlen hibaFrissítFrissítés a katalógusban : Lemeznév generálás minta alapjánKötetcimke használata lemeznévként (ha lemez neve nincs kitoltve)Használt terület : Verzió Verzió : LáthatóKötet : Lemez cimke : Kötet neveKötet cimk : Joker karakteresEl szeretnéd menteni a katalógust? IgenNév mezõbe írva a : elõttieket behelyettesítõdnek a : utánival lemez név generalaskor: % : % %n : katalógusbeli sorszámot adja vissza%.Xn : X számjegyû szám (pl. %.4n helyére 0001, 0002,0003, ..., 0091 kerül) %l : lemez kötetcímkéje %t : fájlrendszer típusa %s : gyártási számZip : Zip : %d_Akciók_Alkalmaz_MégsemTeljes katalógusfa megjelenítéseKatalógus _fájlSúgóÚj létrehozása_Nem_Rendben_Rendben_Megnyitása_Beállítások_TulajdonságokLegutóbb használt megnyitása_TörölMenté_se_Küldés_Frissítnem elérhetõkategorizálatlanlemez hozzáadása megszakítvaismeretlenismeretlen csoportismeretlen tulajdonosgwhere-0.2.3/po/pt.gmo0000644000175000017500000011067010472436236013220 0ustar bartbartÞ•·Ô KŒ¸$ ¹$aÇ$$)%N% k%w%‰% œ%*¨%$Ó%ø%&%&A& J& W&b&j&r&z&‚&Š&’&š&1¯&á&qý&7o'°§'X(_( e( q(}( (Ž( —(¤(»(0Ô( )) &)+1)m])4Ë)J*RK*ž* ¦* ±*¿* Ï* Û*é*ÿ*-+ >+H+h+{++ †+ +œ+ £+C±+õ+1 ,?,S,*d, ,›,ª,¿,Ç, Þ,ë,û,- -<-P- a-n--—-¯-¾- Ñ-ß-ò- û-.\.u.n‰.(ø.!/ '/5/1O/(/5ª/5à/H0D_0?¤0ä0 ê0 ø0,101@1H1d1 ‚1 1ž1 £1 ¯1»1Ê1Ï1 ã1 í1ú1 22$282/N2 ~2M‹2Ù2ß2ð23 33r33¦3L¶3449&4@`43¡4#Õ4ù45$5@5T5%j5&5)·5Rá546S6s6I6\Ù6C67z7L”7"á7$8)8G8L8,_8$Œ8±8º8Á8Ó8Ø8 ì8 ö899 .9;9!L9n9 t9 ~9Š9‘9 §9 ³9¿9Î9 á9 ï9 ú9: ::7:;:N:pO;À;Ý;+î;?<?Z<gš<G=@J=‹=‘=š= =¨=¯=´=É=Ï=PO> >§>»>Ã>Ó>.í>?8?I?P?DY? ž?¨?¸?Ì?à?ÿ?@+@B@V@[@[t@ Ð@Û@ í@iû@ eA pA{A€A ˆA “A A ¤A°A¹AÂAÅA-ÚABB"B>BZBhxBáB æB óBýBC CC1C7C@CEEC‹C ©CµCÄCeÌC 2D=DCDIDcDvD†D…šD E'E 6E BE NE!\E~E™E  EªEÇEÐE0ÕEF"F*F :F$GFlF{F‘F šF¤F «FµF ÇF ÕF áFîFGGx'G] G<þG ;HK\H¨H½H ÏHÙH öH I II ,I:IRI[IlIqI…I ŠI”I œII¦I5ðI&J>J2ZJ?J>ÍJ/ K8œmÛmYûm0Un)†n&°n×nÜn(ôn*o HoSo\oso|o•o¬o#Ãoçoýop+.p Zp dp pp ~p‰p¤p½pÐpépq qq.q7qHqgqkqq•’r-(s Vs:dsEŸsEåse+tI‘tMÛt)u/u8u>uFuMuUutuŒzuJvRv[v pv~v“v.­v+Üvww#wX,w…w”w«w¿w Øw+ùw%x9xSxkxsxe‘x÷xþx yc y „y yy¢yªy ±y»y Ày Îy Ùyçyëy:zBz^z)oz'™z%Ázxçz`{f{u{„{‹{ ”{Ÿ{ »{È{Ø{Gà{)(|R|d|y|b| ä|ñ|ù| ÿ| }2}D}¨X}~ ~~+~=~-Q~~~ ¦~´~ Ñ~ß~Jç~)2 \i~3ÃÖ ô € € €"€7€O€ `€.m€œ€°€ˆÈ€]QD¯!ô]‚t‚Ž‚ ¨‚ µ‚ Ö‚à‚󂃃 *ƒ KƒXƒpƒxƒ•ƒƒ ¬ƒ ¸ƒTƃ7„S„j„;†„L„M…<]…3š…6Î…-†/3†&c†GІ8Ò†˜ ‡(¤‡©Í‡'wˆ‘Ÿˆ—1‰)ɉ#ó‰$Š)<Š(fŠ+Šb»Šo‹RŽ‹á‹9è‹4"ŒHWŒ Œ´ŒÊŒãŒûŒ /Pinv!Ь ¾É6ã\ŽwŽ‹Ž “ŽŽ ¥Ž¯ŽÅŽÔŽ2æŽ #AE3Y” ¤ ®¸ ÈÒÙßäèìó û ‘‘&‘/‘ 7‘ C‘Q‘%X‘ ~‘‹‘ž‘c9lÄrBEi)8f ±k[È´xkV3ÜI“*Ž£r~Å'w¡.”ß4×™Ÿ=îžt ‰¥7ygR`s·ZALž›¢,–|«ÖbÛz 'l#µ@&zÇDq<ñ·jsu䜤#ã£|ˆïÎýÊ)€¤7Ó^ÿF ê¯!—%hZ>dœ™.Xm(´ÌNóÑ0a®\³ÍŒEchKªSQ LØìHϦ«!]CËŸŠæŽ/ U•먗]ÚÝ‚g³T(þ9‡8­RT‚An²µ»5a"Д©ð6¹˜$u±{P¶;¿Cšàv…§piø€OÙå@Šo?É ©+0‹}-‘^‹†4m~š%‘§ õqF¦Y2 {„<ª•°â ²/ç;>G¯í¢¬÷Ã?Þb\ V1ÆpáÂ_½WYe6G$›ô5†ºÀÔ `NKSnI2[QyB… }o&Xƒ­U–Œ¾°„è‰-H_=˜*MMW¬f3¨+ü¡ûv,dòO“öJ‡¼¥wù"DP’újƒ:Á¸¶1 ÕetÒé®Jˆ:’x Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Empty disk Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A catalog is already openedA component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A critical error occured when extracting file information of %s%s%s. Save your catalog if it is possible, exit GWhere and report this trouble to the GWhere project team please.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.All usersAll users|Current userAllow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Audio CD : Audio CD : %dAuto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog exportedCatalog fileCatalog importedCatalog is not exportedCatalog is not importedCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerExportExport catalog toFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGTK+ 2.6 RunTime (required)GUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.GWhere can be installed for all users or only for current user. Select for which you want install GWhere please.GWhere install rights accessGenerals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?ImportImport catalog fromInfo : Install optionsInstaller already runningInsufficient memory to complete the operation.Invalid filled catalog nameIs running on %sJaz : Jaz : %dKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : Network : Network : %dNewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new disk name was filledNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPlugins for auto extraction of file descriptions and plugins for importation/exportation of catalogs.PropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :Tape : Tape : %dThe catalog is invalid or doesn't exists. Check your catalog path please.The current catalog is never be saved, cannot send itThe disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled disk name already exist in the current catalogThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.There is no available catalog pluginThis Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Files : %ldTotal Folders : Total Folders : %ldTotal Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : Which users can run GWhere ?WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberYou must uninstall your last version of GWhereZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: 0.1.3 Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2002-07-02 00:00GMT Last-Translator: Paulo ANDRE' Language-Team: portuguese MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Está a correr em Gestor de catálogos de media removivel Por Sébastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacidade : %s, livres: %s %s [ %s ], total de discos: %d %s, %s, %s Explorador do catálogo Gestão do catálogo Disco vazio Directoria "%s", %s (ficheiros %d, subdirectorias %d) Items listados : %d (tamanho total : %s) Motor de busca Item seleccionado : %d Item seleccionado : %d (tamanho total : %s) Tipo : compilado com %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) encontrados.%s fora do espaço de memória do processoJá existe um catálogo abertoUm componente do seguinte caminho excedeu %d caracters, ou o caminho inteiro excedeu %d caracters : %s.Um componente do prefixo não é uma directoria : %s.Ocorreu um erro crítico ao extrair informação de ficheiro de %s%s%s. Grave o seu catálogo se for possível, saia do GWhere e dê, por favor, conhecimento deste problema à equipa do projecto GWhere._SobreSobreData de acessoCaminho de acessoAdicionarAdicionar / ActualizarAdicionar discoAdicionar novo discoAdicionar disco está a funcionarTodas as palavras chave deverão corresponderTodos os ficheiros de linguagem para a tradução do programa.Todos os utilizadoresTodos os utilizadores|Utilizador actualAutorizar beepAutoriza a emissão de um pequeno beep em alguns eventosPermite actualizar as propriedades da categoria seleccionada. Clique no botão Adicionar / Actualizar para memorizar a actualização.Um erro de I/O ocorreu ao mudar para a directoria : %s.Ocorreu um erro durante o envio do email. Por favor confira os parâmetros.Aplicar a categoria seleccionada a todos os items no disco a adicionar (disco, directórios e ficheiros).ArquivoArquivo N#Arquivo N# : Ficheiro anexo :CD Audio : CD Audio : %dColocar descrição automaticamenteCarregar catálogo automaticamenteCarregar automaticamente ao iniciar um catálogo por omissãoAutomountAuto-redimensionar todas as colunas do exploradorAuto-redimensionar colunasBCC :CC :CD-Rom : CD-Rom : %d_FecharC_olapsar todosPoderá usar uma regular expression. Veja a documentação para mais informação.Não é possível editar este ficheiro!! Não é possível remover a categoria. Está de momento em uso por um item.Impossível receber dadosImpossível enviar dadosNão é possível iniciar pesquisa : nenhum catálogo foi abertoCapacidade : Case sensitiveOrdenação case sensitiveCatálogoDescrição do Catálogo : Informação sobre o CatálogoNome do Catálogo : Categoria do Catálogo : Catálogo encerradoNível de compressão do Catálogo : Descrição do catálogoCatálogo exportadoFicheiro de CatálogoCatálogo importadoO Catálogo não foi exportadoO Catálogo não foi importadoFicheiro de Catálogo carregado Propriedades do catálogoCatálogo guardadoLista de Categorias : CategoriaCategoria : Nome da Categoria : Altere aqui todas as propriedades disponíveis por forma a configurar o programa ao seu gosto.Alterar a etiqueta do volumeEscolha se todas as palavras chave ou apenas uma delas deve corresponder a um item para que esteja presente no resultado da procura.Escolha entre anexar ou não o ficheiro de catálogo.LimparApagar historialRemover todos os resultados da procuraClick aqui para procurar e seleccionar um ficheiro de catálogo.Click aqui para cancelar o envio do email.Click aqui para eliminar o historial de catálogos recentemente abertos.Click aqui para enviar um email (com um catálogo anexo).Click em Efectuar para efecturar as alterações (sem fechar a janela de Configuração.Click em Cancelar para cancelar as modificações e fechar a janela deConfiguração.Click em OK para efectuar as modificações e fechar a janela de ConfiguraçãoFecharFechar catálogoFechar ficheiroFechar a janela de edição das propriedades da categoria.A fechar catálogoCompactoLigação encerrada pelo cliente Não foi possível encontrar o ficheiro pixmap: %sCriado em : Date de criaçãoDataApagar discoDescriçãoDescrição : DiscoDescrição do Disco : Informação do DiscoNome do Disco : Estatísticas do Disco : Descrição do discoDiscosDiscos no catálogo : Discos no catálogo : %dMostrar se o suporte seleccionado está ou não montado.Monstrar informaçãoMostra informações acerca do suporte seleccionado tais como caminho, capacidade, espaço livre, etiqueta,..._SairEditar _categoriasEditar categoriasEditar descriçãoEditar ficheiroEjectar suporte se possívelEjectar o suporte se possível (CD-ROM...), mesmo se a drive estiver fechada. Isto apenas é possível caso o automount estiver activado!!Morada de email :Insira uma lista de palavras chave que deverão existir nos ficheiros para que estes correspondam.Introduza o nome do catálogoIntroduza o nome do discoIntroduza aqui o endereço de mail dos contactos copiados.Introduza aqui o endereço de email dos contactos copiados ocultos.Introduza aqui o endereço de email do(s) seu(s) contacto(s).Introduza aqui o destinatário do seu email.Introduza um nome para o novo catálogoIntroduza um nome para o novo discoIntroduza a etiqueta de volume do novo discoIntroduza o novo nome para o ficheiroIntroduza o novo nome para a directoriaIntroduza o número de arquivo deste disco.Introduza a descrição da categoria.Insira o caminho completo do ficheiro de catálogo a carregarInsira o padrão completo de wildcards. Este padrão poderá conter os caracteres "?" e "*".Introduza o nome do catálogo.Introduza o nome da categoria.Introduza o nome deste disco.Introduza o nome do novo disco. Esse nome aparecerá no seu catálogo.Introduza o número do novo disco. Este número poderá ajudá-lo na história do seu catálogo.Insira a porta do servidor de saída de email (normalmente 25).Insira o seu endereço de email.Insira o seu servidor de saída de email. Normalmente este endereço é mail.oseudominio.comErro : não é possível obter a directoria actual.Erro : não é possível obter a directoria.Erro ao carregar o ficheiro pixmap: %sSairExpandir apenas _discosExplorar arquivos (.tar, .gz, .zip, ...)Explorar a estrutura de árvore do suporte.ExploradorExportarExportar catálogo paraFicheiroDescrição do Ficheiro : Informação do FicheiroTamanho do Ficheiro : Tamanho do Ficheiro : %s (%s bytes)Descrição do ficheiroNome do Ficheiro : Nome do sistema de ficheirosTipo de ficheiro : ainda não implementado!!FicheirosDisquete : Disquete : %dDirectoriaDescrição da Directoria : Informação da DirectoriaNome do DirectoriaTamanho da Directoria : Descrição da directoriaEspaço Livre : Espaço livreEspaço livre : CompletoCapacidade TotalRunTime GTK+ 2.6 (obrigatório)GUIGWhere (mandatório)O GWhere permite gerir uma base de dados dos seus CDs ou outros tipos de media removível (discos rígidos, disquetes, drives ZIP, CD-ROM, etc...). Com o GWhere é fácil explorar os seus CDs ou fazer rápidas pesquisas sem a necessidade de inserir cada um dos seus CDs na drive.O GWhere pode ser instalado para todos os utilizadores ou apenas para o utilizador actual. Por favor seleccione para qual pretende instalar o GWhere.Acesso a permissões para instalação do GWhereOpções GeraisIndique o ficheiro de dispositivo do suporte seleccionado.Indique o espaço livre no suporte seleccionado (caso esteja montado).Indique o espaço total do suporte seleccionado (caso esteja montado).Indique o número de série do suporte seleccionado (caso esteja montado). Este é um número de fábrica.Indique o tipo do suporte seleccionado. (ex: ext2, ext3, vfat, ntfs, ...)Indique o nome de volume do suporte seleccionado (apenas se estiver montado).GrupoGrupo : HD : HD : %dOcultoOcultarEsconder operações em ficheiroINodeCaso não tenha inserido um nome para o disco e caso o suporte seleccionado tenha um nome de volume, esse nome será usado como nome do disco.Se não efectuar as alterações, perde-las-à. Deseja efectuar as alterações?ImportarImportar catálogo deInformação : Opções de InstalaçãoInstalador já em execuçãoMemória insuficiente para completar a operaçãoNome do catálogo incorrectamente preenchidoEstá a correr em %sJaz : Jaz : %dMantenha esta opção seleccionada para percorrer toda a informação de pastas e ficheiros.Palavras chaveFicheiros de LinguagemÚltimo acesso em : Ultima modificação em : Carregar último catálogo aberto.Carregar ficheiro de catálogo seleccionado.A carregar catálogoErro ao carregar catálogoLocalização no Disco : CorreioMotor principal da aplicação.Efectuar auto descrição do ficheiro (formato do ficheiro, tamanho da imagem para xmp ou jpg, etc...).GestãoData de modificaçãoMount falhou Monta o suporte caso ainda nao o tenha feito. E desmonta após mesmo se já montado antes da procura.Montado : Mover para...NomeNome : Rede :Rede : %dNovoNovo catálogoNovo discoNovo ficheiroNãoNenhum catálogo está abertoNenhum catálogo está aberto : impossível editar categoriasNenhum item correspondente.Nenhuma etiquetaNão especificou um novo nome para o discoNão especificou um nome para o ficheiroNão inseriu um nome para a directoriaAinda não implementado!! Explore todos os arquivos como se de directorias se tratassem. Arquivos estão como tar ou gzip.AbrirAbrir catálogoAbrir ficheiroOpçõesOutro : Outro : %dServidor de saída de email:ProprietárioProprietário : CaminhoPor favor configure as opções de email por forma a poder enviar emails.Por favor seleccione um nome de catálogo Por favor aguardePor favor aguarde...PluginsPlugins para extracção automática de descritores e plugins paraimportação/exportação de catálogos.PropriedadesRápido Sair Catálogos recentemente abertos :Expressão regularRemover categoriaRemover do catálogoRemover a categoria seleccionada a partir da lista de categorias. Estas categorias poderão apenas ser removidas caso nenhum item esteja a usar a categoria seleccionada.RenomearRenomear catálogoRenomear discoRenomear ficheiroRenomear directoriaResultados agrupados por directoria/ficheiro.Resultados agrupados por tipoDireitosPermissões : RunTime para o ambiente GUI._Guardar ComoGuardarGuardar as propriedades do interface tais como posição e tamanho da janelaGuardar propriedades do interface ao sairGuardar comoGravar como catálogoGuardar catálogoMemorizar alterações nas propriedades da categoria.A guardar catálogoFalha na gravação do catálogoA PesquisarConfiguraçãoProcurarProcurar : Procurar no catálogoResultado da procura : Tipo de PesquisaÀ procura...Seleccionar catálogo automaticamente carregadoSeleccione catálogoSeleccione o suporte : Seleccione o nível de compressão do catálogo. O valor por omissão é 3, sendo um valor razoável entre boa performance e tamanho reduzido.Seleccione a categoria a que pertence o disco a adicionar (mesmo se a opção estiver marcada).Seleccione o suporte que será adicionado como disco ao seu catálogo.Seleccione a secção a configurar.Seleccione o tamanho do historial de catálogos recentemente abertos. O valor por omissão é 5.Enviar catálogo por emailEnviar ficheiro por emailEnviar emailA enviar mail, Por favor aguardeSerial : Número de série N#Número de sérieNúmero de série : Porta do servidor :Definir categoria como recursivaConfiguraçãoConfiguração modificadaMostrarMostrar operação do ficheiroTamanhoDestinatário :Cassette : Cassette : %dO catálogo é inválido ou não existe. Verifique a localizacão do ficheiro, por favor.O catálogo actual nunca foi guardado, impossível enviarO disco foi adicionadoO disco não foi adicionado O disco não foi adicionado Adição cancelada pelo utilizadorO disco não foi adicionado Erro : não é possível fechar a directoria actual.O disco não foi adicionado Erro : não é possível subir para a directoria pai.O disco não foi adicionado : não é possível montar o suporteO disco nao foi adicionado : não há suporte montadoO nome especificado para o disco já existe no catálogoO nome especificado para o ficheiro já existeO nome especificado para a directoria já existeA seguinte directoria não existe : %s.A seguinte directoria não existe ou o seu nome é uma string vazia : %s.O nome da seguinte directoria não é uma directoria : %s.Os resultados no explorador podem ser agrupados por tipo de item. Se esta opção for seleccionada, os items serão agrupados por directorias e ficheiros .O resultado no explorar é case-sensitiveO resultado da procura pode ser agrupado por tipo de item. Se esta opção for seleccionada, todos os items serão agrupados por catálogos, discos, directorias e ficheiros.O resultado da procura é case-sensitiveA procura poderá ou não ser case sensitive. Sendo case sensitive "File.txt" não corresponde a "file.txt". Mas sendo case insensitive corresponde.A procura é case sensitive e suporta o wildcard "*". Exemplo : img*.bmp ou *.htmA procura por palavras chave aceita uma lista de palavras obrigatórias.A procura condiz com o nome de categoria.A procura condiz com as descrições.A procura condiz com o nome de discoA pesquisa condiz com o nome de ficheiro.A procura condiz com nome de directoria.Não existem plugins de catálogo disponíveisA caixa de Configuração permite-lhe configurar algumas funcionalidades e propriedades do programa.Esta janela de configuração permite-lhe configurar o programa. Algumas propriedades podem ser modificadas aqui.Esta janela permite-lhe enviar catálogos via email para um (ou mais dos contactos.Para :Demasiados descriptores de ficheiro em uso pelo processo.Demasiados ficheiros de momento em uso pelo sistema.Demasiados links simbólicos foram encontrados no seguinte caminho : %s .Capacidade Total : Total de Ficheiros : Total de Ficheiros : %ldTotal de Directorias : Total de Directorias : %ldTotal de Espaço Livre : Espaço Total de Armazenamento : Total de Espaço Usado : TipoTipo : Tipo : (directoria)Escreva aqui o texto do seu emailErro desconhecidoActualizarActualizar no catálogo : Utilizar um padrão avançado para gerar o nome do discoUsar nome de volume do suporte como nome do disco (apenas quando o nome do disco está vazio)Espaço Utilizado : Versão Versão : VisívelVolume : Etiqueta de Volume : Nome do volumeNome do Volume : Quais os utilizadores que podem executar o GWhere?WildcardsDeseja guardar o catálogo : SimPoderá preencher com tags extra para gerar um nome de disco com informação sobre o disco : - %% : % - %n : número do arquivo (poderá usar prefixo 0 : %.4n será 0001, 0002, 0003, ..., 0091, ... - %l : etiqueta de volume de suporte - %t : tipo de suporte - %s : número de sérieTerá de desinstalar a sua anterior versão do GWhereZip : Zip : %d_Acção_Efectuar_Cancelar_Expandir todos_Ficheiro_Ajuda_Novo_Não_OK_Ok_Abrir_Opções_Propriedades_Ficheiros recentes_Remover_Guardar_Enviar_Actualizarnenhuma drivenenhumOperação de adição de disco canceladadesconhecidogrupo desconhecidoproprietário desconhecidogwhere-0.2.3/po/Makefile.in.in0000644000175000017500000001530610023202521014517 0ustar bartbart# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # # This file file be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = $(prefix)/@DATADIRNAME@ localedir = $(datadir)/locale gnulocaledir = $(prefix)/share/locale gettextsrcdir = $(prefix)/share/gettext/po subdir = po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@ CC = @CC@ GENCAT = @GENCAT@ GMSGFMT = PATH=../src:$$PATH @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = PATH=../src:$$PATH @XGETTEXT@ MSGMERGE = PATH=../src:$$PATH msgmerge DEFS = @DEFS@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ INCLUDES = -I.. -I$(top_srcdir)/intl COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) SOURCES = cat-id-tbl.c POFILES = @POFILES@ GMOFILES = @GMOFILES@ DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \ stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES) POTFILES = \ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ INSTOBJEXT = @INSTOBJEXT@ .SUFFIXES: .SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat .c.o: $(COMPILE) $< .po.pox: $(MAKE) $(PACKAGE).pot $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox .po.mo: $(MSGFMT) -o $@ $< .po.gmo: file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && $(GENCAT) $@ $*.msg all: all-@USE_NLS@ all-yes: cat-id-tbl.c $(CATALOGS) all-no: $(srcdir)/$(PACKAGE).pot: $(POTFILES) $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ --add-comments --keyword=_ --keyword=N_ \ --files-from=$(srcdir)/POTFILES.in \ && test ! -f $(PACKAGE).po \ || ( rm -f $(srcdir)/$(PACKAGE).pot \ && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot ) $(srcdir)/cat-id-tbl.c: stamp-cat-id; @: $(srcdir)/stamp-cat-id: $(PACKAGE).pot rm -f cat-id-tbl.tmp sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \ | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \ rm cat-id-tbl.tmp; \ else \ echo cat-id-tbl.c changed; \ rm -f $(srcdir)/cat-id-tbl.c; \ mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \ fi cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all if test -r "$(MKINSTALLDIRS)"; then \ $(MKINSTALLDIRS) $(datadir); \ else \ $(SHELL) $(top_srcdir)/mkinstalldirs $(datadir); \ fi @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ case "$$cat" in \ *.gmo) destdir=$(gnulocaledir);; \ *) destdir=$(localedir);; \ esac; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ dir=$$destdir/$$lang/LC_MESSAGES; \ if test -r "$(MKINSTALLDIRS)"; then \ $(MKINSTALLDIRS) $$dir; \ else \ $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \ fi; \ if test -r $$cat; then \ $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \ else \ $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \ fi; \ if test -r $$cat.m; then \ $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ else \ if test -r $(srcdir)/$$cat.m ; then \ $(INSTALL_DATA) $(srcdir)/$$cat.m \ $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ else \ true; \ fi; \ fi; \ done if test "$(PACKAGE)" = "gettext"; then \ if test -r "$(MKINSTALLDIRS)"; then \ $(MKINSTALLDIRS) $(gettextsrcdir); \ else \ $(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ fi; \ $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ $(gettextsrcdir)/Makefile.in.in; \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ done rm -f $(gettextsrcdir)/po-Makefile.in.in check: all cat-id-tbl.o: ../intl/libgettext.h dvi info tags TAGS ID: mostlyclean: rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f $(GMOFILES) distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: update-po $(DISTFILES) dists="$(DISTFILES)"; \ for file in $$dists; do \ ln $(srcdir)/$$file $(distdir) 2> /dev/null \ || cp -p $(srcdir)/$$file $(distdir); \ done update-po: Makefile $(MAKE) $(PACKAGE).pot PATH=`pwd`/../src:$$PATH; \ cd $(srcdir); \ catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ mv $$lang.po $$lang.old.po; \ echo "$$lang:"; \ if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \ rm -f $$lang.old.po; \ else \ echo "msgmerge for $$cat failed!"; \ rm -f $$lang.po; \ mv $$lang.old.po $$lang.po; \ fi; \ done POTFILES: POTFILES.in ( if test 'x$(srcdir)' != 'x.'; then \ posrcprefix='$(top_srcdir)/'; \ else \ posrcprefix="../"; \ fi; \ rm -f $@-t $@ \ && (sed -e '/^#/d' -e '/^[ ]*$$/d' \ -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ | sed -e '$$s/\\$$//') > $@-t \ && chmod a-w $@-t \ && mv $@-t $@ ) Makefile: Makefile.in.in ../config.status POTFILES cd .. \ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gwhere-0.2.3/po/messages0000644000175000017500000011071210256616034013614 0ustar bartbartÞ•·Ô KŒ¸$ ¹$aÇ$$)%N% k%w%‰% œ%*¨%$Ó%ø%&%&A& J& W&b&j&r&z&‚&Š&’&š&1¯&á&qý&7o'°§'X(_( e( q(}( (Ž( —(¤(»(0Ô( )) &)+1)m])4Ë)J*RK*ž* ¦* ±*¿* Ï* Û*é*ÿ*-+ >+H+h+{++ †+ +œ+ £+C±+õ+1 ,?,S,*d, ,›,ª,¿,Ç, Þ,ë,û,- -<-P- a-n--—-¯-¾- Ñ-ß-ò- û-.\.u.n‰.(ø.!/ '/5/1O/(/5ª/5à/H0D_0?¤0ä0 ê0 ø0,101@1H1d1 ‚1 1ž1 £1 ¯1»1Ê1Ï1 ã1 í1ú1 22$282/N2 ~2M‹2Ù2ß2ð23 33r33¦3L¶3449&4@`43¡4#Õ4ù45$5@5T5%j5&5)·5Rá546S6s6I6\Ù6C67z7L”7"á7$8)8G8L8,_8$Œ8±8º8Á8Ó8Ø8 ì8 ö899 .9;9!L9n9 t9 ~9Š9‘9 §9 ³9¿9Î9 á9 ï9 ú9: ::7:;:N:pO;À;Ý;+î;?<?Z<gš<G=@J=‹=‘=š= =¨=¯=´=É=Ï=PO> >§>»>Ã>Ó>.í>?8?I?P?DY? ž?¨?¸?Ì?à?ÿ?@+@B@V@[@[t@ Ð@Û@ í@iû@ eA pA{A€A ˆA “A A ¤A°A¹AÂAÅA-ÚABB"B>BZBhxBáB æB óBýBC CC1C7C@CEEC‹C ©CµCÄCeÌC 2D=DCDIDcDvD†D…šD E'E 6E BE NE!\E~E™E  EªEÇEÐE0ÕEF"F*F :F$GFlF{F‘F šF¤F «FµF ÇF ÕF áFîFGGx'G] G<þG ;HK\H¨H½H ÏHÙH öH I II ,I:IRI[IlIqI…I ŠI”I œII¦I5ðI&J>J2ZJ?J>ÍJ/ K8b Sb ]bibg~bæbŒc(“c¼cÄc(Õc8þc37dFkd<²dZïdXJeQ£eõeüe f3fOf af lf2f ÀfÌfÞf äf ñf ýf gg)gAgUgkg€g‡gg3µg égkögbhhh{hh h¯h†ËhRi@di ¥iÆi?äiD$j:ij&¤j&Ëj#òj'k%>k'dk*Œk)·k1ák_l!sl$•lºlJØl`#mQ„m ÖmP÷m-Hn.vn)¥nÏnÕn0ën'o DoOoXolotooªo¼oÛoòop('pPp Ypgpwppœp¹pÎpæpýp qq ,q7qGqdqhqû{q‰wr%s's4:sBosB²s_õs@UtG–tÞtätítótûtu u)u’/u]Âu v)vAvHv"`v1ƒvµvÒvêvðvUùvOw^wqw„w!žwÀwàwòw x&x-xnIx¸xÀxÖxoçx Wy aylysy|yƒyŒy’y ¡y ­y»y¾y>Ýyz 5z*Bz&mz,”zqÁz3{9{ H{V{_{ g{q{ …{‘{ {S¥{+ù{%|7|L|hT| ½|É|Ð|"Ö|ù| }}‘0} Â}Ì}ß}ï}~3~.G~v~ ~‹~ ¥~²~Dº~(ÿ~ (5K7\”§ ÅÐÙàéÿ € &€"2€U€i€…|€\>_#žbÂ%‚@‚ Z‚$h‚ ‚ —‚¥‚µ‚ǂ݂ø‚ƒƒƒ:ƒAƒJƒ RƒK]ƒ5©ƒ߃øƒ<„GR„Dš„9ß„2…=L…>Š…@É…& †G1†:y†ª´†A_‡¹¡‡G[ˆœ£ˆÅ@‰-Š'4Š)\Š+†Š,²Š ߊ^‹d_‹UÄ‹Œ:Œ=XŒS–ŒêŒüŒ#5Ja€—œ£/´ä öŽ8ŽpUŽÆŽ׎ àŽëŽ óŽýŽ'%< blŒí-}«²»à ÌÖåîôûÿ‘‘ ‘ ‘$‘8‘@‘H‘ O‘ [‘e‘&m‘ ”‘ ‘²‘c9lÄrBEi)8f ±k[È´xkV3ÜI“*Ž£r~Å'w¡.”ß4×™Ÿ=îžt ‰¥7ygR`s·ZALž›¢,–|«ÖbÛz 'l#µ@&zÇDq<ñ·jsu䜤#ã£|ˆïÎýÊ)€¤7Ó^ÿF ê¯!—%hZ>dœ™.Xm(´ÌNóÑ0a®\³ÍŒEchKªSQ LØìHϦ«!]CËŸŠæŽ/ U•먗]ÚÝ‚g³T(þ9‡8­RT‚An²µ»5a"Д©ð6¹˜$u±{P¶;¿Cšàv…§piø€OÙå@Šo?É ©+0‹}-‘^‹†4m~š%‘§ õqF¦Y2 {„<ª•°â ²/ç;>G¯í¢¬÷Ã?Þb\ V1ÆpáÂ_½WYe6G$›ô5†ºÀÔ `NKSnI2[QyB… }o&Xƒ­U–Œ¾°„è‰-H_=˜*MMW¬f3¨+ü¡ûv,dòO“öJ‡¼¥wù"DP’újƒ:Á¸¶1 ÕetÒé®Jˆ:’x Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Empty disk Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A catalog is already openedA component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A critical error occured when extracting file information of %s%s%s. Save your catalog if it is possible, exit GWhere and report this trouble to the GWhere project team please.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.All usersAll users|Current userAllow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Audio CD : Audio CD : %dAuto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog exportedCatalog fileCatalog importedCatalog is not exportedCatalog is not importedCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerExportExport catalog toFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGTK+ 2.6 RunTime (required)GUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.GWhere can be installed for all users or only for current user. Select for which you want install GWhere please.GWhere install rights accessGenerals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?ImportImport catalog fromInfo : Install optionsInstaller already runningInsufficient memory to complete the operation.Invalid filled catalog nameIs running on %sJaz : Jaz : %dKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : Network : Network : %dNewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new disk name was filledNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPlugins for auto extraction of file descriptions and plugins for importation/exportation of catalogs.PropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :Tape : Tape : %dThe catalog is invalid or doesn't exists. Check your catalog path please.The current catalog is never be saved, cannot send itThe disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled disk name already exist in the current catalogThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.There is no available catalog pluginThis Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Files : %ldTotal Folders : Total Folders : %ldTotal Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : Which users can run GWhere ?WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberYou must uninstall your last version of GWhereZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: es POT-Creation-Date: 2005-06-01 23:07+0200 PO-Revision-Date: 2005-05-15 12:35+0200 Last-Translator: Victor G. Marimon Language-Team: es_ES MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 8bit X-Generator: KBabel 1.9.1 Está ejecutándose en Gestión de medios extraíbles por Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacidad : %s, libre : %s %s [ %s ], total discos : %d %s, %s, %s Explorador de catálogoGestión de catalogoDisco vacio Carpeta "%s", %s (ficheros %d, subcarpetas %d)Objetos listados: %d (tamaño total : %s)Motor de busqueda Artículo seleccionado : %d Objeto seleccionado : %d (tamaño total : %s) Tipo: construido con %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu objeto(s) encontrados.%s fuera del espacio de direcciones asignadas por el proceso.Ya hay un catálogo abiertoUn componente de la siguiente ruta excedió %d caracteres, o el nombre de una ruta entera excedió %d caracteres: %s.Un componente del prefijo de la ruta no es un directorio: %s.Un error critico ocurrió extrayendo la información del fichero de %s %s %s. Guarda tu catálogo si es posible, sal de GWhere y reporta este problema al equipo del proyecto GWhere, por favor.Acerca deAcerca deFecha de accesoRuta de accesoAñadirAñadir / ActualizarAñadir discoAñadir nuevo discoLa adición del disco está en cursoTodas las palabras clave deben coincidir.Todos los ficheros de idioma para la traduccion del programa.Todos los usuariosTodos los usuarios|Usuario actualPermite pitidosPermite emitir un pitido corto en algunos eventos.Permite actualizar las propiedades de categoría de la categoría seleccionada. Haz click en el botón Añadir / Actualizar para guardar los cambios.Un error de E/S ocurrió cuando se cambio el directorio a: %s.Ocurrió un error durante el envío del correo. Por favor comprueba tus parámetros.Aplica la categoría seleccionada a todos los ítems en el disco para añadir (disco, carpetas, ficheros).ArchivoFichero N#Archivo N# :Fichero adjunto:Audio CD :Audio CD : %dAutodescripción.Autocargar catálogoAutocarga un catálogo por defecto al inicio.AutomontarAutoajusta todas las columnas del explorador.Autoajusta columnasBCC:CC:CD-Rom : CD-Rom : %dCerrarC_ontraer todoPuede usar expresión regular. Ver documentación para mas información.No se puede editar este fichero!! No se puede quitar esta categoría. Está siendo usada por algún objeto.No se puede recibir datosNo se puede mandar datosNo se puede iniciar la busqueda : no se ha cargado catalogoCapacidad :Sensitivo a mayúsculasOrdenación sensitiva a mayúsculas.CatálogoDescripción de catálogo : Información catálogo :Nombre del Catalogo: Categorías de catálogo : Catálogo cerradoNivel de compresión del catálogo :Descripción del catálogoCatálogo exportadoArchivo de catálogoCatálogo importadoEl catálogo no fue exportadoCátalogo no importadoCatalogo cargadoPropiedades de catalogoCatálogo guardadoLista de categorías:CategoríaCategoría :Nombre de categoría:Cambia en este panel todas las propiedades disponibles a fin de configurar el programa como tú quieres.Cambiar la etiqueta del volumenElige si todas las palabras clave o sólo una de todas ellas deben coincidir con el item en orden para estar en el resultado de la búsqueda.Elige o no adjuntar el fichero catalogo.LimpiarBorrar HistorialLimpia todos los resultados de búsquedasHaz click aquí para desglosar y seleccionar el catálogo.Haz click aquí para cancelar el envío de un correo.Haz click para borrar el historial de ficheros abiertos recientemente.Haz click aquí para enviar un correo (con catalogo adjunto).Haz click en el botón Aplicar para aplicar los cambios (sin cerrar la ventana de ajustes).Haz click en el botón Cancelar para cancelar los cambios y cerrar la ventana de ajustes.Haz click en el botón OK para aplicar los cambios y cerrar la ventana de ajustes.CerrarCerrar catálogoCerrar ficheroCierra la ventana de propiedades de las categorías.Cerrando catálogoCompacto/aConexión cerrada por el cliente No se pudo encontrar el fichero mapa de pixels: %sCreado en: Fecha de creaciónFechaBorrar discoDescripciónDescripción:DiscoDescripción del disco : Información del disco :Nombre del disco : Estadísticas disco : Descripción de discoDiscosDiscos en catalogo : Discos en catálogo : %dMuestra si el medio seleccionado está montado o no.Muestra infoMuestra la información del medio seleccionado como punto de montaje, capacidad, espacio libre, etiqueta,...SalirEditar _categoríasEditar categoríasEditar descripciónEditar ficheroExpulsa medio si es posibleExpulsa el medio si es posible (CD-ROM,...) aun si la bandeja está cerrada. Esto está activo solamente si el automontaje está activo!!Dirección Email :Introduce una lista de palabras clave las cuales todas deben serIntroduce el nombre del catálogoIntroduce el nombre del discoIntroduce aquí la dirección de email de los contactos copiados.Introduce aquí la dirección email de los contactos ocultos copiados.Introduce aquí la dirección de email de tu(s) contacto(s).Introduce aquí el asunto de tu correo.Introduce el nuevo nombre del catalogoIntroduce el nuevo nombre del discoIntroduce la nueva etiqueta del volumenIntroduce el nuevo nombre del ficheroIntroduce el nuevo nombre de la carpetaIntroduce el numero del archivo del disco.Introduce la descripción de la categoría.Introduce la ruta completa del catálogo a cargar.Introduce el patrón de comodines completo. Este patrón puede contener los carácteres "?" y "*".Introduce el nombre del catálogo.Introduce el nombre de la categoría.Introduce en nombre del discoIntroduce el nombre del nuevo disco. Este nombre aparecerá en tu catálogo.Introduce el número del nuevo disco. Este número puede ayudarte con el historial de tu catálogo.Introduce el puerto del servidor del correo saliente ( el valor más común es 25).Introduce tu dirección de email.Introduce tu servidor saliente. Normalmente esta dirección es mail.tudominio.comError: no se puede obtener la carpeta actual.Error: no se puede ir a la carpeta de trabajo.Error cargando fichero mapa de pixels: %sSalirExpandir solo _discosExplorar archivo de ficheros (.tar,.gz,.zip,...)Explorar estructura de árbol del medio.ExploradorExportarExportar catálogo aFicheroDescripción del fichero : Información del fichero : Tamaño fichero : Tamaño fichero : %s (%s bytes)Descripción de ficheroNombre del fichero : Nombre del sistema de ficherosTipo Fichero: aun no está implementado!!FicherosDisquetera : Disquetera : %dCarpetaDescripción de la carpeta : Información de la carpeta : Nombre de la carpetaTamaño de la carpeta : Descripción de carpetaEspacio Libre : Espacio libreEspacio libre :Completo/aCapacidad TotalRunTime GTK+ 2.6 (requerido)GUIGWhere (requerido)GWhere permite manipular una base de datos de tus CDs y otros medios extraibles (discos duros, disquetes, Zips, CD-ROM, etc...) Con GWhere es fácil navegar en tus CDs o hacer búsquedas rápidas sin necesidad de introducir tus CDs en la unidad cada vez.GWhere puede ser instalado para todos los usuarios o solamente para el usuario actual. Por favor selecciona como quieres instalar GWhere.GWhere instala los permisos de accesoOpciones generalesDa el fichero de dispositivo del medio seleccionado.Da el espacio libre del medio seleccionado (sólo si está montado).Da el espacio total del medio seleccionado (sólo si está montado).Da el número de serie del medio seleccionado (sólo si está montado). Este número es de fábrica.Da el tipo del medio seleccionado (ej: ext2,ext3,vfat,ntfs,...).Da el nombre del volumen del medio seleccionado (sólo si está montado).GrupoGrupo : HD : HD : %dOcultosOcultoOculta operaciones de ficherosINodeSi tu no entraste nombre del disco y tu medio seleccionado tiene nombre de volumen, el nombre del volumen del medio sera como el nombre del disco.Si no necesitas aplicar los cambios perderás todos los cambios. ¿Quieres aplicar los cambios?ImportarImportar catálogo desdeInfo :Opciones de instalaciónEl instalador ya está en ejecuciónMemoria insuficiente para completar la operación.Nombre del catálogo inválidoEstá ejecutándose en %sJaz :Jaz : %dMantenga esta opción marcada para escanear toda la información de carpetas y archivosPalabras claveFicheros de idiomaUltimo acceso en :Última modificación en : Carga el último catálogo abierto.Carga el catálogo seleccionado.Cargando catalogoCarga de catálogo fallidaLocalización del disco : CorreoMotor aplicacion principal.Autodescripción del fichero (descripción del formato del fichero, tamaño de la imagen para xmp o jpg, etc...).GestiónFecha de modificaciónMontaje fallido Monta el medio si no estaba montado. Y desmonta despues el disco inclusive si estaba montado antes del escaneo.Montado :Mover a...NombreNombre :Red : Red : %dNuevoCatalogo nuevoNuevo discoFichero nuevoNoNo hay ningún catalogo abiertoNo hay ningún catalogo abierto : no se puede editar categoríasNingún objeto coincidió.Sin etiquetaNo se ingresó ningún nombre de disco nuevoNo se ingresó ningún nombre de ficheroNo se ingresó ningún nombre de carpeta nuevoAun no está implementado!! Explora todos los archivos, como si fuera un directorio. Los archivos son .tar o gzip.AbrirAbrir catalogoAbrir ficheroOpcionesOtro : Otro : %dServidor saliente :PropietarioPropietario : RutaPor favor, configura las opciones de correo en los ajustes a fin de enviar correos.Por favor selecciona un nombre de catalogo Por favor, esperePor favor, espera...PluginsPlugins para autoextracción de las descripciones de fichero y plugins para/importar y exportar catálogosPropiedadesRápidoSalirCatálogos abiertos recientemente :Expresión regularQuitar categoríaQuitar del catalogoQuita la categoría seleccionada de la lista de categorías. Estas categorías se pueden quitar sólo si no hay ningún objeto que use esta categoría.RenombrarRenombrar catalogoRenombrar discoRenombrar ficheroRenombrar carpetaGrupo de ordenación resultante por carpeta/fichero.Resultado del grupo de la ordenación por tipo.DerechosPermisos : Runtime para entorno GUI.Guardar comoGuardarGuardar las propiedades GUI como la posición de la ventana y tamaño.Guardar las propiedades del GUI al salirGuardar comoGuardar como catalogoGuardar catálogoGuardar los cambios de las propiedades de la categoría.Guardando catálogoFallado guardado del catálogoEscaneandoAjus_tesBuscarBuscar :Buscar en el catálogoResultado de la búsquedaBúsqueda tipoBuscando...Selecciona el catálogo autocargadoSelecciona catálogoSelecciona medio :Selecciona el nivel de compresión del catálogo. El valor por defecto es 3, es un buen valor entre alto rendimiento y tamaño reducido.Selecciona la categoría a aplicar al disco el cual sera añadido (si la opción está marcada).Selecciona el medio que sera añadido como disco a tu catálogo.Selecciona la sección a configurar.Selecciona el tamaño del historial de catálogos abiertos recientemente. El valor por defecto es 5.Enviar catálogo por correoEnviar fichero por correoEnviar correoEnviando correo, por favor espera...Serial : Nº serie N# :Número de serieNúmero de serie :Puerto del servidor :Ajusta categoría recursivaAjustesAjustes cambiadosMuestraMuestra operaciones de ficherosTamañoAsunto :Cinta :Cinta : %dEl catálogo es invalido o no existe. Revisa tu ruta de catálogo, por favor.El catálogo actual no fue guardado, no puede enviarseEl disco ha sido añadidoEl disco no ha sido añadido El disco no ha sido añadido Adición cancelada por el usuarioEl disco no ha sido añadido Error: no se pudo cerrar la carpeta actual.El disco no ha sido añadido Error: no se pudo ir a la carpeta padre.El disco no ha sido añadido : no se puede montar el medioEl disco no ha sido añadido : no hay medio montadoEl nombre del disco ingresado ya existe en el catálogo actualEl nombre del fichero ingresado ya existe en la carpeta actualEl nombre de la carpeta ingresado ya existe en la carpeta actualEl siguiente directorio no existe: %s.El siguiente directorio no existe, o el nombre es una cadena vacía: %s.El siguiente nombre de directorio no es un directorio: %s.El resultado de la ordenación en el explorador puede ser agrupado por tipo de item. Si esta opción esta marcada todos los items estarán agrupados por carpetas o ficheros.El resultado ordenado en el explorador es sensitivo a mayúsculas.El resultado de la ordenación en la búsqueda puede ser agrupado por tipo de item. Si esta opción esta marcada todos los items serán agrupados por catálogos, discos, carpetas y ficheros.El resultado de la ordenación en la búsqueda es sensitivo a mayúsculas.La busqueda puede ser o no sensitiva a mayúsculas. En sensitivo a mayúsculas "Fichero.txt" no coincide con "fichero.txt". Pero si no es sensitivo coinciden.La búsqueda puede ser sensitiva a las mayúsculas. La busqueda por comodin soporta carácter "* ". Ejemplo : img*.bmp o *.htm La búsqueda por palabras clave acepta una lista de palabras obligatorias.La busqueda coincide con nombre de categoría.La busqueda coincide con descripciones.La busqueda coincide con nombre de disco.La busqueda coincide con nombre de fichero.La busqueda coincide con nombres de carpeta.No hay ningún plugin de catálogoEsta ventana de ajustes permite configurar algunas funcionalidades y propiedades del programa.Esta ventana de ajustes permite configurar el programa. Algunas propiedades pueden modificarse aquí.Esta ventana te permite enviar un catálogo por correo a uno (o más) de tus contactos.A:Demasiados descriptores de ficheros en uso por el proceso.Actualmente están abiertos demasiados ficheros en el sistema.Demasiados enlaces simbólicos fueron encontrados resolviendo la siguiente ruta: %s.Capacidad Total :Total ficheros : Total ficheros : %ldTotal carpetas : Total carpetas : %ldEspacio libre total : Espacio total almacenamiento: Espacio total usado : TipoTipo :Tipo : (carpeta)Teclea aquí el texto para el mensaje de correo.Error desconocidoActualizarActualizado en catalogo : Usa un patrón avanzado para generar el nombre del disco.Utiliza el nombre del volumen del medio como nombre del disco (solamente cuando el nombre del disco esta vacio).Espacio Usado : Versión Versión : VisibleVolumen :Etiqueta del Volumen: Nombre del VolumenNombre del volumen :Que usuarios pueden ejecutar GWhere ?Comodines¿Quiere guardar el catalogo?: SiTu puedes rellenar pestañas extra para generar un nombre de disco con información de disco: - %% : % - %n : número archivo- (puedes usar prefijos prefijados por un 0) - %l : Etiqueta del disco - %t : tipo del disco - %s : número de serieDebes desinstalar tu última versión de GWhereZip : Zip : %d_Acción_Aplicar_Cancelar_Expandir todo_FicheroAyuda_Nuevo_No_OK_OkAbrir_Opciones_PropiedadesFicheros _recientesQuita_rGuardarEnviarAct_ualizarno unidadningunoLa adición del disco ha sido canceladadesconocidogrupo desconocidopropietario desconocidogwhere-0.2.3/po/pl.gmo0000644000175000017500000010521410472436236013206 0ustar bartbartÞ•·Ô KŒ¸$ ¹$aÇ$$)%N% k%w%‰% œ%*¨%$Ó%ø%&%&A& J& W&b&j&r&z&‚&Š&’&š&1¯&á&qý&7o'°§'X(_( e( q(}( (Ž( —(¤(»(0Ô( )) &)+1)m])4Ë)J*RK*ž* ¦* ±*¿* Ï* Û*é*ÿ*-+ >+H+h+{++ †+ +œ+ £+C±+õ+1 ,?,S,*d, ,›,ª,¿,Ç, Þ,ë,û,- -<-P- a-n--—-¯-¾- Ñ-ß-ò- û-.\.u.n‰.(ø.!/ '/5/1O/(/5ª/5à/H0D_0?¤0ä0 ê0 ø0,101@1H1d1 ‚1 1ž1 £1 ¯1»1Ê1Ï1 ã1 í1ú1 22$282/N2 ~2M‹2Ù2ß2ð23 33r33¦3L¶3449&4@`43¡4#Õ4ù45$5@5T5%j5&5)·5Rá546S6s6I6\Ù6C67z7L”7"á7$8)8G8L8,_8$Œ8±8º8Á8Ó8Ø8 ì8 ö899 .9;9!L9n9 t9 ~9Š9‘9 §9 ³9¿9Î9 á9 ï9 ú9: ::7:;:N:pO;À;Ý;+î;?<?Z<gš<G=@J=‹=‘=š= =¨=¯=´=É=Ï=PO> >§>»>Ã>Ó>.í>?8?I?P?DY? ž?¨?¸?Ì?à?ÿ?@+@B@V@[@[t@ Ð@Û@ í@iû@ eA pA{A€A ˆA “A A ¤A°A¹AÂAÅA-ÚABB"B>BZBhxBáB æB óBýBC CC1C7C@CEEC‹C ©CµCÄCeÌC 2D=DCDIDcDvD†D…šD E'E 6E BE NE!\E~E™E  EªEÇEÐE0ÕEF"F*F :F$GFlF{F‘F šF¤F «FµF ÇF ÕF áFîFGGx'G] G<þG ;HK\H¨H½H ÏHÙH öH I II ,I:IRI[IlIqI…I ŠI”I œII¦I5ðI&J>J2ZJ?J>ÍJ/ K8`X```q`‡`™`¯`À` Ý`ë` aa&aAa`asaˆa™a ¬a ¶aÃaZÖa1bŒIb&Öbýbc&c"=c.`cBc;ÒcId>Xd=—dÕdÝd íd*úd%e 5e#?ece €e e—e œe¦e«e³e ¸eÆeÙeèe üef f(f4EfzfiŽføfgg $g 0gAzE¼8€5;€,q€ž€°€Ä€6Þ€*š@/Û¶ ‚2‚µõ‚€«ƒ',„T„r„„®„΄1è„b…_}…Ý…*â…$ †D2† w†„†”†§†¹†Ά ׆ä†ô†ø†ÿ†‡ ,‡ :‡E‡6^‡$•‡º‡ʇ Ò‡܇ å‡ð‡ˆˆ'&ˆNˆTˆrˆávˆ*X‰ƒ‰Љ“‰ š‰¤‰¬‰½‰ÉʉЉÕ‰Ù‰݉å‰ ì‰ø‰ ŠŠŠ Š -Š9Š!>Š`ŠiŠxŠc9lÄrBEi)8f ±k[È´xkV3ÜI“*Ž£r~Å'w¡.”ß4×™Ÿ=îžt ‰¥7ygR`s·ZALž›¢,–|«ÖbÛz 'l#µ@&zÇDq<ñ·jsu䜤#ã£|ˆïÎýÊ)€¤7Ó^ÿF ê¯!—%hZ>dœ™.Xm(´ÌNóÑ0a®\³ÍŒEchKªSQ LØìHϦ«!]CËŸŠæŽ/ U•먗]ÚÝ‚g³T(þ9‡8­RT‚An²µ»5a"Д©ð6¹˜$u±{P¶;¿Cšàv…§piø€OÙå@Šo?É ©+0‹}-‘^‹†4m~š%‘§ õqF¦Y2 {„<ª•°â ²/ç;>G¯í¢¬÷Ã?Þb\ V1ÆpáÂ_½WYe6G$›ô5†ºÀÔ `NKSnI2[QyB… }o&Xƒ­U–Œ¾°„è‰-H_=˜*MMW¬f3¨+ü¡ûv,dòO“öJ‡¼¥wù"DP’újƒ:Á¸¶1 ÕetÒé®Jˆ:’x Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Empty disk Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A catalog is already openedA component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A critical error occured when extracting file information of %s%s%s. Save your catalog if it is possible, exit GWhere and report this trouble to the GWhere project team please.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.All usersAll users|Current userAllow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Audio CD : Audio CD : %dAuto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog exportedCatalog fileCatalog importedCatalog is not exportedCatalog is not importedCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerExportExport catalog toFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGTK+ 2.6 RunTime (required)GUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.GWhere can be installed for all users or only for current user. Select for which you want install GWhere please.GWhere install rights accessGenerals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?ImportImport catalog fromInfo : Install optionsInstaller already runningInsufficient memory to complete the operation.Invalid filled catalog nameIs running on %sJaz : Jaz : %dKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : Network : Network : %dNewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new disk name was filledNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPlugins for auto extraction of file descriptions and plugins for importation/exportation of catalogs.PropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :Tape : Tape : %dThe catalog is invalid or doesn't exists. Check your catalog path please.The current catalog is never be saved, cannot send itThe disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled disk name already exist in the current catalogThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.There is no available catalog pluginThis Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Files : %ldTotal Folders : Total Folders : %ldTotal Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : Which users can run GWhere ?WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberYou must uninstall your last version of GWhereZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: pl Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2005-05-19 12:45+0000 Last-Translator: Bogdan Modzelewski Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 8bit X-Generator: KBabel 1.9.1 Praca pod kontrol± System katalogowania no¶ników wymienialnych Autor: Sébastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], ³±cznie : %s, wolne : %s %s [ %s ], ilo¶æ dysków: %d %s, %s, %s Przegl±danie katalogu Zarz±dzanie katalogiemDysk pusty Folder "%s", %s (plików %d, podkatalogów %d) Wybrane Elementy: %d (wielko¶æ : %s) Wyszukiwanie Wybrany Element : %d Wybrany Element: %d (wielko¶æ : %s) Typ : utworzony z %.0f bajtów%.2f GB%.2f HB%.2f IB%.2f KB%.2f MB%.2f PB%.2f TB%lu znalezionych pozycji.%s poza zaalokowan± przestrzeni± adresow± programu.Katalog jest ju¿ otwartyKomponent ¶cie¿ki dostêpu przekracza %d znaków lub ca³a ¶cie¿ka przekracza %d znaków: %s.Komponent ¶cie¿ki nie jest katalogiem: %s.Wyst±pi³ b³±d krytyczny podczas wyci±gania informacji o pliku %s%s%s. Zapisz twój katalog je¶li to mo¿liwe, wyjd¼ z GWhere i poinformuj o tym problemie zespó³ GWhere._O programieO programieData dostêpu¦cie¿ka dostêpuDodajDodaj / UaktualnijDodaj dyskDodaj nowy dyskDodawanie dysku w tokuWszystkie s³owa kluczowe musz± pasowaæWszystkie pliki jêzykowe.Wszyscy u¿ytkownicyWszyscy u¿ytkownicy|Bie¿±cy u¿ytkownikW³±cz d¼wiêkiW³±cza krótki d¼wiêk przy wyst±pieniu niektórych zdarzeñ.Aktualizacja w³a¶ciwo¶ci wybranej kategorii. Kliknij na Dodaj / Uaktualnij, aby zapisaæ zmiany.Wyst±pi³ b³±d podczas zmiany katalogu na: %s.Podczas wysy³ania e-maila wyst±pi³ b³ad. Proszê sprawdziæ parametry.Zastosuj wybran± kategoriê do wszystkich elementów wybranego dysku (dysk, foldery, pliki).ArchiwumArchiwum nrArchiwum nr : Za³±cznik :Audio CD:Audio CD : %dAutomatyczne tworzenie opisówAutomatycznie wczytaj katalogAutomatycznie wczytaj domy¶lny katalog przy starcieAutomatyczne podmontowanieAutomatycznie zmieñ szeroko¶æ wszystkich kolumn.Automatycznie zmieñ szeroko¶æ kolumnBCC :CC :CD-ROM : CD-ROM : %d_Zamknij_Zwiñ wszystkieWykorzystaj wyra¿enia regularne. Wiêcej informacji znajduje siê w dokumentacji.Nie mogê edytowaæ tego pliku!!! Nie mogê usun±æ tej kategorii. Jest u¿ywana przez jaki¶ element.Nie mogê odebraæ danychNie mogê wys³aæ danychNie mogê zacz±æ przeszukiwania: nie za³adowano ¿adnego kataloguPojemno¶æ : Uwzglêdnij wielko¶æ literUwzglêdnij wielko¶æ literKatalogOpis katalogu : Informacje o kataloguNazwa Katalogu : Kategorie katalogu : Katalog usuniêtyPoziom kompresji katalogu : Opis kataloguKatalog wyeksportowanyPlik kataloguKatalog zaimportowanyKatalog nie wyeksportowanyKatalog nie jest zaimportowanyKatalog za³adowanyW³a¶ciwo¶ci kataloguKatalog zapisanyLista kategorii : KategoriaKategoria : Nazwa kategorii : Dokonaj zmian wszystkich dostêpnych w³a¶ciwo¶ci, aby skonfigurowaæ program tak jak chcesz.Zmieñ etykietê woluminuWybierz je¶li wszystkie s³owa kluczowe lub tylko jedno z nich musi pasowaæ do pozycji, aby mog³a siê ona znale¼æ w rezultatach wyszukiwania.Wybierz lub nie katalog do za³±czenia.Wyczy¶æWyczy¶æ historiêCzyszczenie rezultatów wyszukiwania : Kliknij tutaj, aby wybraæ katalog.Kliknij tutaj, aby anulowaæ wysy³anie e-maila.Kliknij tutaj, aby wyczy¶ciæ historiê ostatnio otwieranych plików.Kliknij tutaj, aby wys³aæ e-mail (z za³±czonym katalogiem).Kliknij Zastosuj, aby potwierdziæ zmiany (bez zamykania okna Ustawienia).Kliknij Anuluj, aby anulowaæ zmiany i zamkn±æ okno Ustawienia.Kliknij OK, aby potwierdziæ zmiany i zamkn±æ okno Ustawienia.ZamknijZamknij katalogZamknij plikZamknij okno edycji w³a¶ciwo¶ci kategorii.Zamknij katalogMinimalnaPo³±czenie zamkniête przez klienta Nie mogê znale¼æ obrazka: %sUtworzony : UtworzonyDataUsuñ dyskOpisOpis : DyskOpis Dysku : Informacje o dyskuNazwa Dysku : Statystyki Dysku : Opis dyskuDyskiIlo¶æ dysków w katalogu : Ilo¶æ dysków w katalogu : %dWy¶wietl informacje o podmontowaniu wybranego dysku.Wy¶wietl informacjeWy¶wietla informacje o wybranym urz±dzeniu (punkt podmontowania, pojemno¶æ, wolne miejsce, etykieta itd.)_Wyj¶cieEdycja _kategoriiEdycja kategoriiEdytuj opisEdytuj plikWysuñ dysk je¶li to mo¿liweWysuñ dysk je¶li to mo¿liwe (CD-ROM itp.), nawet je¶li tacka by³a zamkniêta. Opcja ta jest w³±czona tylko wtedy, gdy automatyczne montowanie jest w³±czone!!!Adres e-mail :Wprowad¼ listê s³ów kluczowych, które musz± byæ zawarte w pasuj±cych plikach.Wprowad¼ nazwê kataloguWprowad¼ nazwê dyskuWprowad¼ tutaj adresy e-mail, do których zostanie wys³ana kopia.Wprowad¼ tutaj adresy e-mail, do których zostanie wys³ana ukryta kopia.Wprowad¼ tutaj adresy e-mail Twoich znajomych.Wprowad¼ tutaj temat Twojego mailaWprowad¼ now± nazwê kataloguWprowad¼ now± nazwê dyskuWprowad¼ now± etykietê dyskuWprowad¼ now± nazwê plikuWprowad¼ now± nazwê folderuWprowad¼ numer dysku.Wprowad¼ opis kategorii.Wprowad¼ pe³n± ¶cie¿kê katalogu do wczytania.Wprowad¼ maskê. Maska mo¿e zawieraæ znaki "?" oraz "*" Wprowad¼ nazwê katalogu.Wprowad¼ nazwê kategorii.Wprowad¼ nazwê dysku.Wprowad¼ nazwê nowego dysku. Jest to nazwa, która pojawi siê w katalogu.Wprowad¼ numer nowego dysku. Pomo¿e Ci on przy historii Twojego katalogu.Wprowad¼ numer portu serwera (typowo 25).Wprowad¼ adres e-mail.Wprowad¼ adres swojego wychodz±cego serwera pocztowego. Typowo jest to mail.twojadomena.plB³±d : nie mogê otworzyæ bie¿±cego folderuB³±d: nie mogê przej¶æ do folderu roboczego.B³±d podczas ³adowania obrazka: %sWyjd¼Rozwiñ tylko _dyskiPrzegl±daj archiwa (.tar, .gz, .zip itp.)Przegl±danie struktury dysku w postaci drzewa.EksplorerEksportEksportuj katalog do_PlikOpis Pliku : Informacje o PlikuWielko¶æ Pliku : Wielko¶æ Pliku : %s (%s bajtów)Opis plikuNazwa pliku : Nazwa plikuTyp pliku : funkcja jeszcze nie zaimplementowana!!!PlikiDyskietka : Dyskietka : %dFolderOpis Folderu : Informacje o folderzeNazwa FolderuWielko¶æ Folderu : Opis folderuWolne : WolneWolne : Pe³naPojemno¶æBiblioteki uruchomieniowe GTK+ 2.6 (wymagane)GUIGWhere (wymagany)GWHere to program zarz±dzaj±cy baz± Twoich p³yt CD oraz innych mediów (takich jak twarde dyski, dyskietki, dyski Zip itp.). Dziêki GWhere w ³atwy sposób mo¿esz przegl±daæ Twoje p³yty CD i szybko znale¼æ potrzebny Ci plik bez konieczno¶ci ci±g³ego wsadzania p³yt do napêdu.GWhere mo¿e byæ zainstalowany dla wszystkich u¿ytkowników lub tylko dla bie¿±cego u¿ytkownika: Wybierz opcjêUprawnienia instalacji GWhereOpcje ogólnePodaj urz±dzenie dla wybranego medium.Podaj ilo¶æ wolnego miejsca na wybranym dysku (je¶li jest pod³±czony).Podaj pojemno¶æ wybranego dysku (je¶li jest Podaj numer seryjny wybranego dysku (je¶li jest podmontowany). Numer ten jest numerem wytwórcy dysku.Podaj typ wybranego dysku (ext2, ext3, vfat, ntfs, itd.)Podaj nazwê woluminu wybranego dysku (je¶li jest podmontowany).GrupaGrupa : HDD : HDD : %dUkrytyUkryjUkryj operacje na plikachInodeJe¶li nie wprowadzisz nazwy dysku to w przypadku, gdy urz±dzenie posiada nazwê wolumenu bêdzie ona u¿yta jako nazwa dysku.Je¶li nie zatwierdzisz zmian stracisz je. Czy chcesz je zatwierdziæ ?ImportImportuj katalog zInformacje : Opcje instalacjiInstalator jest ju¿ uruchomionyBrak pamiêci do wykonania operacji.B³êdna nazwa kataloguPraca pod kontrol± %sJazz : Jazz : %dW³±czenie opcji powoduje przeskanowanie wszystkich katalogów i plików.S³owa kluczowePliki JêzykoweOstatnia operacja : Modyfikacja : Wczytaj ostatnio otwierany katalog.Wczytaj wybrany katalog.Zapisz katalogB³±d ³adowania kataloguLokalizacja na Dysku : PocztaG³ówne pliki aplikacji.Utworzenie automatycznego opisu pliku (opis formatu pliku, wielko¶ci obrazka dla jpg itd.).Zarz±dzanieData modyfikacjiMontowanie siê nie powiod³o Podmontuj dysk, je¶l nie by³ oraz odmontuj dysk po zakoñczeniu operacji (nawet je¶li by³ podmontowany przed skanowaniem).Podmontowany : Przenie¶ Do...NazwaNazwa : ¦ieæ :¦ieæ : %dNowyNowy katalogNowy dyskNowy plikNie¯aden katalog nie jest otwarty¯aden katalog nie jest otwarty : nie mo¿na edytowaæ kategoriiBrak pasuj±cych pozycji.Brak etykietyNie podano nowej nazwy dyskuBrak plikuBrak folderaFunkcja jeszcze nie zaimplementowana!!! Traktuj archiwa jak katalogi.OtwórzOtwórz katalogOtwórz plikOpcjeInny : Inny : %dSerwer wychodz±cy :W³a¶cicielW³a¶ciciel : ¦cie¿kaProszê skonfigurowaæ opcje e-mail w ustawieniach.Proszê wybraæ nazwê katalogu Proszê czekaæProszê czekaæ...WtyczkiWtyczki do automatycznego tworzenia opisów plików i importu/eksportu katalogów.W³a¶ciwo¶ciSzybkieWyjd¼Ostatnio otwierane katalogiWyra¿enia regularneUsuñ kategoriêUsuñ z kataloguUsuniêcie wybranej kategorii z listy kategorii. Kategorie mog± zostaæ usuniête tylko wtedy, gdy ¿aden element z niej nie korzysta.Zmieñ nazwêZmieñ nazwê kataloguZmieñ nazwê dyskuZmieñ nazwê plikuZmieñ nazwê folderuWyniki sortowania grupy po katalogach/plikach.Rezultaty sortowania grupy po typie.PrawaPrawa : Biblioteki dla rodowiska GUI.Za_pisz jakoZapiszZapisz pozycjê i wielko¶æ okna.Zapisz zmiany w³a¶ciwo¶ci GUI przy wyj¶ciu.Zapisz jakoZapisz jako katalogZapisz katalogZapisz zmiany we w³a¶ciwo¶ciach kategorii.Zapisywanie kataloguB³±d zapisywania kataloguSkanowanieUs_tawieniaSzukajSzukaj : Przeszukaj katalogRezultaty wyszukiwania : Szukaj typuSzukanie...Wybierz katalog do automatycznego wczytaniaWybierz katalogWybierz dysk : Wybierz poziom kompresji katalogu. Domy¶ln± warto¶ci± jest 3, jest to dobrze dobrana warto¶æ pomiêdzy wysok± wydajno¶ci± i ma³± wielko¶ci± pliku.Wybierz kategoriê, która odnosi siê do dysku, który zostanie dodany.Wybierz dysk, który ma zostaæ dodany do katalogu.Wprowad¼ sekcjê do skonfigurowania.Wybierz wielko¶æ historii ostatnio otwieranych katalogów. Domy¶ln± warto¶ci± jest 5.Wy¶lij katalog poprzez e-mailWy¶lij plik poprzez e-mailWy¶lij e-mailWysy³anie e-maila, proszê czekaæ...Numer seryjny : Numer seryjny : Numer seryjnyNumer seryjny : Port serwera :Rekursywnie ustaw kategoriêUstawieniaUstawienia zosta³y zmienione.Poka¿Poka¿ operacje na plikachWielko¶æTemat :Ta¶ma : Ta¶ma : %dKatalog jest niew³a¶ciwy lub nie istnieje. Proszê sprawdziæ ¶cie¿kê pliku.Bie¿±cy katalog nie jest zapisywany, nie mogê go wys³aæDysk zosta³ dodanyDysk nie zosta³ dodany Dysk nie zosta³ dodany Operacja anulowana przez u¿ytkownikaDysk nie zosta³ dodany B³±d : nie mogê zamkn±æ bie¿±cego folderu.Dysk nie zosta³ dodany B³±d : nie mogê przej¶æ do folderu nadrzêdnegoDysk nie zosta³ dodany : nie mogê podmontowaæ urz±dzeniaDysk nie zosta³ dodany : brak podmontowanych urz±dzeñNazwa dysku ju¿ istnieje w bie¿±cym kataloguPlik ju¿ istniejeFolder ju¿ istniejeKatalog nie istnieje: %s.Katalog nie istnieje lub jego nazwa to pusty ci±g: %s.Nastêpuj±ca nazwa nie jest katalogiem: %s.Rezultaty sortowania mog± byæ pogrupowane po typie pozycji. Je¶li ta opcja jest w³±czona to wszystkie pozycje bêd± pogrupowane po katalogach lub plikach.Wyniki sortowania uwzglêdaniaj± wielko¶æ liter.Rezultaty sortowania w wyszukiwaniu mog± byæ pogrupowane po typie pozycji. Je¶li ta opcja jest w³±czona to wszystkie pozycje bêd± pogrupowane po katalogu, dysku, folderach i plikach.Rezultaty sortowania uwzglêdniaj± wielko¶æ znaków.Poszukiwanie uwzglêdnia lub nie uwzglêdnia wielko¶ci liter. W przypadku uwzglêdniania wielko¶ci liter "Plik.txt" nie znajdzie pliku "plik.txt", natomiast bez uwzglêdniania znajdzie.Poszukiwanie uwzglêdnia wielko¶æ liter i ob³uguje znak "*". Na przyk³ad: img*.bmp lub *.htm Uwzglêdnia te¿ listê wymaganych s³ówZnaleziono nastêpuj±ce nazwy kategorii.Znaleziono nastêpuj±ce opisy.Znaleziono nastêpuj±ce dyski.Znaleziono nastêpuj±ce pliki.Znaleziono nastêpuj±ce foldery.Brak katalogu z pluginamiOkno Ustawienia pozwala na konfiguracjê programu.To okno pozwala na konfiguracjê programu. Niektóre z w³a¶ciwo¶ci mog± zostaæ tutaj skonfigurowane.To okno pozwala Ci na wys³anie katalogu do jedego (lub wiêcej) Twoich znajomych poprzez e-mail.Do :Program u¿ywa za du¿o deskryptorów plików.Za du¿o otwartych plików w systemie.Znaleziono za du¿o linków symbolicznych podczas analizy ¶cie¿ki: %s.Pojemno¶æ : Ilo¶æ Plików : Ilo¶æ Plików : %ldIlo¶æ folderów : Ilo¶æ folderów : %ldWolne : Pojemno¶æ : Wykorzystane : TypTyp : Typ : (folder)Wpisz tutaj tekst wiadomo¶ci.Nieznany b³±dUaktualnijAktualizacja katalogu : U¿yj zaawansowanego wzoru do wygenerowania nazwy dyskuU¿yj nazwy wolumenu jako nazwê dyskuWykorzystane : Wersja Wersja : WidocznyWolumin : Etykieta Woluminu : Nazwa WoluminuNazwa Woluminu : Jacy u¿ytkownicy mog± uruchomiæ GWhere?MaskiCzy chcesz zapisaæ katalog: TakMo¿esz wype³niæ dodatkowe pola u¿ywane przy generowaniu nazwy dysku: - %% : % - %n : numer archiwum (mo¿esz u¿yæ prefiksu np. %.4n da 0001, 0002, 0003, ..., 0091 ... - %l : etykieta dysku - %t : typ dysku - %s : numer seryjnyMusisz odinstalowaæ ostatni± wersjê GWhereZip : Zip : %d_Akcja_Zastosuj_AnulujRozwiñ wszystkie_Plik_Pomoc_Nowy_Nie_OK_Ok_Otwórz_OpcjeW³a¶ciwo¶ciO_twierane pliki_UsuñZapi_szZapi_szAkt_ualizacjabrak napêdubrakdodawanie dysku zosta³o anulowanenieznananieznana grupanieznany w³a¶cicielgwhere-0.2.3/po/pt.po0000644000175000017500000032615310472436224013056 0ustar bartbart# GWhere Portuguese (pt_PT) translation file # Copyright (C) 2002 Free Software Foundation, Inc. # Paulo André , 2002, 2003, 2004, 2005. # # src/SearchEngine.c:320 msgid "" msgstr "" "Project-Id-Version: 0.1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2002-07-02 00:00GMT\n" "Last-Translator: Paulo ANDRE'\n" "Language-Team: portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "Impossível receber dados" #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "Ligação encerrada pelo cliente\n" #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "Impossível enviar dados" # src/tools/Calcul.c:43 # src/tools/Calcul.c:46 #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%.0f bytes" # src/tools/Calcul.c:46 # src/tools/Calcul.c:49 #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f Kb" # src/tools/Calcul.c:49 # src/tools/Calcul.c:52 #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f Mb" # src/tools/Calcul.c:52 # src/tools/Calcul.c:55 #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f Gb" # src/tools/Calcul.c:56 # src/tools/Calcul.c:59 #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f Tb" # src/tools/Calcul.c:60 # src/tools/Calcul.c:63 #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f Pb" # src/tools/Calcul.c:64 # src/tools/Calcul.c:67 #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f Hb" # src/tools/Calcul.c:69 src/tools/Calcul.c:74 # src/tools/Calcul.c:72 src/tools/Calcul.c:77 #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f Ib" # src/gui/CaptureBox.c:84 src/gui/DialogBox.c:59 src/gui/MsgBox.c:75 # src/gui/Properties.c:164 src/gui/TextBox.c:100 # src/gui/CaptureBox.c:96 src/gui/DialogBox.c:59 src/gui/MsgBox.c:75 # src/gui/PropertiesBox.c:189 src/gui/TextBox.c:107 #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "_OK" # src/gui/CaptureBox.c:92 src/gui/DialogBox.c:94 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:116 src/gui/DialogBox.c:94 # src/gui/ProgressBarBox.c:127 src/gui/ProgressBarBox.c:246 # src/gui/ProgressBarBox.c:504 src/gui/PropertiesBox.c:216 # src/gui/TextBox.c:122 #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "_Cancelar" # src/gui/Categories.c:58 src/gui/MenuPopup.c:98 # src/gui/CategoriesEditBox.c:88 src/gui/MenuPopup.c:99 #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Editar categorias" # src/gui/Categories.c:68 # src/gui/CategoriesEditBox.c:104 #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "Lista de Categorias : " # src/gui/Categories.c:99 src/gui/NoteBookCatalog.c:107 # src/gui/NoteBookCatalog.c:205 src/gui/NoteBookCatalog.c:252 # src/gui/NoteBookSearch.c:207 # src/gui/CategoriesEditBox.c:135 src/gui/NoteBookCatalog.c:108 # src/gui/NoteBookCatalog.c:206 src/gui/NoteBookCatalog.c:253 # src/gui/NoteBookSearch.c:229 #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "Nome" # src/gui/Categories.c:105 src/gui/NoteBookCatalog.c:147 # src/gui/NoteBookCatalog.c:213 src/gui/NoteBookCatalog.c:260 # src/gui/NoteBookSearch.c:163 src/gui/NoteBookSearch.c:237 # src/gui/CategoriesEditBox.c:141 src/gui/NoteBookCatalog.c:148 # src/gui/NoteBookCatalog.c:214 src/gui/NoteBookCatalog.c:261 # src/gui/NoteBookSearch.c:185 src/gui/NoteBookSearch.c:247 #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "Descrição" # src/gui/Categories.c:118 # src/gui/CategoriesEditBox.c:154 #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "_Actualizar" # src/gui/Categories.c:123 # src/gui/CategoriesEditBox.c:159 #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" "Permite actualizar as propriedades da categoria seleccionada. Clique no " "botão Adicionar / Actualizar para memorizar a actualização." # src/gui/Categories.c:127 # src/gui/CategoriesEditBox.c:163 #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "_Remover" # src/gui/Categories.c:132 # src/gui/CategoriesEditBox.c:168 #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" "Remover a categoria seleccionada a partir da lista de categorias. Estas " "categorias poderão apenas ser removidas caso nenhum item esteja a usar a " "categoria seleccionada." # src/gui/Categories.c:147 # src/gui/CategoriesEditBox.c:183 #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "Nome da Categoria : " # src/gui/Categories.c:157 # src/gui/CategoriesEditBox.c:193 #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "Introduza o nome da categoria." # src/gui/Categories.c:160 # src/gui/CategoriesEditBox.c:196 #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "Descrição : " # src/gui/Categories.c:183 # src/gui/CategoriesEditBox.c:219 #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "Introduza a descrição da categoria." # src/gui/Categories.c:196 # src/gui/CategoriesEditBox.c:232 #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "Adicionar / Actualizar" # src/gui/Categories.c:201 # src/gui/CategoriesEditBox.c:237 #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "Memorizar alterações nas propriedades da categoria." # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/CategoriesEditBox.c:243 src/gui/MenuPopup.c:58 # src/gui/MenuPopup.c:128 #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Fechar" # src/gui/Categories.c:212 # src/gui/CategoriesEditBox.c:248 #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Fechar a janela de edição das propriedades da categoria." # src/gui/ComboBoxCategories.c:105 src/gui/NoteBookManagmentCallBack.c:159 # src/gui/ComboBoxCategories.c:105 src/gui/NoteBookManagmentCallBack.c:203 #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "nenhum" # src/gui/Categories.c:297 # src/gui/CategoriesEditBox.c:368 #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "Remover categoria" # src/gui/Categories.c:297 # src/gui/CategoriesEditBox.c:368 #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "" "Não é possível remover a categoria. Está de momento em uso por um item." # src/gui/Categories.c:193 src/gui/Categories.c:395 src/gui/Categories.c:603 # src/gui/CategoriesEditBox.c:229 src/gui/CategoriesEditBox.c:526 # src/gui/CategoriesEditBox.c:849 #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "Adicionar" # src/gui/Categories.c:410 src/gui/Categories.c:623 # src/gui/CategoriesEditBox.c:553 src/gui/CategoriesEditBox.c:882 #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "Actualizar" # src/gui/DialogBox.c:77 # src/gui/DialogBox.c:77 #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "_Não" # src/gui/FileSelectionBox.c:64 # src/gui/FileSelectionBox.c:64 #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "Esconder operações em ficheiro" # src/gui/FileSelectionBox.c:64 # src/gui/FileSelectionBox.c:64 #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "Mostrar operação do ficheiro" # src/gui/MenuAction.c:41 # src/gui/MenuAction.c:41 #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "_Acção" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "_Expandir todos" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "Expandir apenas _discos" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "C_olapsar todos" # src/gui/MenuAction.c:54 # src/gui/MenuAction.c:54 #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "Editar _categorias" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "Nenhum catálogo está aberto : impossível editar categorias" # src/gui/MenuFile.c:48 # src/gui/MenuFile.c:48 #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "_Ficheiro" # src/gui/MenuFile.c:61 # src/gui/MenuFile.c:61 #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "_Novo" # src/gui/MenuFile.c:71 # src/gui/MenuFile.c:71 #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "_Abrir" # src/gui/MenuFile.c:81 # src/gui/MenuFile.c:81 #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "_Guardar" # src/gui/MenuFile.c:91 # src/gui/MenuFile.c:91 #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "_Guardar Como" # src/gui/MenuFile.c:101 # src/gui/MenuFile.c:101 #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "_Fechar" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "Importar" #: src/gui/gwmenufile.c:199 msgid "Export" msgstr "Exportar" # src/gui/MenuFile.c:118 # src/gui/MenuFile.c:118 #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "_Propriedades" # src/gui/MenuFileCallBack.c:73 # src/gui/MenuFileCallBack.c:82 #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "_Ficheiros recentes" # src/gui/MenuFile.c:135 # src/gui/MenuFile.c:135 #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "_Sair" # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:329 # src/gui/MenuFileCallBack.c:343 src/gui/MenuFileCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:148 src/gui/ToolBar.c:53 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 src/gui/ToolBar.c:70 #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Novo catálogo" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "Não existem plugins de catálogo disponíveis" # src/gui/MenuFileCallBack.c:51 src/gui/MenuFileCallBack.c:73 # src/gui/MenuFileCallBack.c:95 src/gui/MenuFileCallBack.c:186 # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:82 # src/gui/MenuFileCallBack.c:108 src/gui/MenuFileCallBack.c:223 #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "Deseja guardar o catálogo :\n" "\n" # src/gui/MenuFileCallBack.c:51 # src/gui/MenuFileCallBack.c:56 #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Novo ficheiro" # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:329 # src/gui/MenuFileCallBack.c:343 src/gui/MenuFileCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:148 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "Introduza o nome do catálogo" # src/gui/MenuFileCallBack.c:78 src/gui/MenuFileCallBack.c:411 # src/gui/MenuFileCallBack.c:425 src/gui/MenuFileCallBack.c:463 # src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "Abrir catálogo" # src/gui/MenuFileCallBack.c:73 # src/gui/MenuFileCallBack.c:82 #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "Abrir ficheiro" # src/gui/MenuFileCallBack.c:95 # src/gui/MenuFileCallBack.c:108 #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Fechar ficheiro" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "Nenhum catálogo está aberto" #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "Enviar ficheiro por email" #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "" "Por favor configure as opções de email por forma a poder enviar emails." # src/gui/MenuFileCallBack.c:146 src/gui/MenuFileCallBack.c:169 # src/gui/MenuFileCallBack.c:323 src/gui/MenuFileCallBack.c:405 # src/gui/MenuFileCallBack.c:486 src/gui/MenuFileCallBack.c:564 # src/gui/MenuFileCallBack.c:629 # src/gui/MenuFileCallBack.c:175 src/gui/MenuFileCallBack.c:202 # src/gui/MenuFileCallBack.c:406 src/gui/MenuFileCallBack.c:503 # src/gui/MenuFileCallBack.c:596 src/gui/MenuFileCallBack.c:686 # src/gui/MenuFileCallBack.c:763 #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "Gravar como catálogo" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "O catálogo actual nunca foi guardado, impossível enviar" # src/gui/StatusBar.c:220 # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr " Propriedades do catálogo" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "Guardar catálogo" # src/gui/MenuFileCallBack.c:186 # src/gui/MenuFileCallBack.c:223 #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "Sair " #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "Importar catálogo de" # src/gui/StatusBar.c:220 # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:1231 msgid "Catalog imported" msgstr "Catálogo importado" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:1233 msgid "Catalog is not imported" msgstr "O Catálogo não foi importado" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:1267 msgid "A catalog is already opened" msgstr "Já existe um catálogo aberto" # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:329 # src/gui/MenuFileCallBack.c:343 src/gui/MenuFileCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:148 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 msgid "Export catalog to" msgstr "Exportar catálogo para" # src/gui/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 #: src/gui/gwmenufilecallback.c:1291 msgid "Catalog exported" msgstr "Catálogo exportado" # src/gui/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 #: src/gui/gwmenufilecallback.c:1293 msgid "Catalog is not exported" msgstr "O Catálogo não foi exportado" # src/gui/MenuHelp.c:41 # src/gui/MenuHelp.c:41 #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "_Ajuda" # src/gui/MenuHelp.c:54 # src/gui/MenuHelp.c:54 #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "_Sobre" # src/gui/NoteBookManagment.c:277 # src/gui/NoteBookManagment.c:298 #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "_Opções" #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "Configuração" # src/gui/MenuPopup.c:37 src/gui/MenuPopup.c:107 # src/gui/MenuPopup.c:38 src/gui/MenuPopup.c:108 #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Novo" # src/gui/MenuPopup.c:42 src/gui/MenuPopup.c:112 # src/gui/MenuPopup.c:43 src/gui/MenuPopup.c:113 #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "Abrir" # src/gui/MenuPopup.c:47 src/gui/MenuPopup.c:117 # src/gui/MenuPopup.c:48 src/gui/MenuPopup.c:118 #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "Guardar" # src/gui/MenuPopup.c:52 src/gui/MenuPopup.c:122 # src/gui/MenuPopup.c:53 src/gui/MenuPopup.c:123 #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "Guardar como" # src/gui/MenuPopup.c:66 # src/gui/MenuPopup.c:67 #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "Sair" # src/gui/MenuPopup.c:83 src/gui/MenuPopup.c:158 # src/gui/MenuPopup.c:84 src/gui/MenuPopup.c:159 #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Renomear" # src/MenuPopupCallBack.c:124 src/MenuPopupCallBack.c:350 # src/MenuPopupCallBack.c:435 src/MenuPopupCallBack.c:564 # src/gui/MenuPopup.c:93 src/gui/MenuPopup.c:173 src/gui/MenuPopup.c:204 # src/gui/MenuPopup.c:238 # src/gui/MenuPopup.c:94 src/gui/MenuPopup.c:174 src/gui/MenuPopup.c:205 # src/gui/MenuPopup.c:240 src/gui/MenuPopupCallBack.c:129 # src/gui/MenuPopupCallBack.c:358 src/gui/MenuPopupCallBack.c:444 # src/gui/MenuPopupCallBack.c:574 #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Editar descrição" # src/gui/MenuPopup.c:136 src/gui/MenuPopup.c:182 src/gui/MenuPopup.c:218 # src/gui/MenuPopup.c:252 src/gui/Properties.c:85 # src/gui/MenuPopup.c:137 src/gui/MenuPopup.c:183 src/gui/MenuPopup.c:219 # src/gui/MenuPopup.c:254 src/gui/PropertiesBox.c:110 #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "Propriedades" # src/gui/MenuPopup.c:153 src/gui/MenuPopup.c:199 # src/gui/MenuPopup.c:154 src/gui/MenuPopup.c:200 #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "Mover para..." # src/gui/MenuPopup.c:163 # src/gui/MenuPopup.c:164 #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "Apagar disco" # src/MenuPopupCallBack.c:299 src/gui/MenuPopup.c:168 # src/gui/MenuPopup.c:169 src/gui/MenuPopupCallBack.c:306 #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "Alterar a etiqueta do volume" # src/gui/MenuPopup.c:209 src/gui/MenuPopup.c:243 # src/gui/MenuPopup.c:210 src/gui/MenuPopup.c:245 #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "Remover do catálogo" # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:261 #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "Editar ficheiro" # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:261 #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "Não é possível editar este ficheiro!!\n" # src/MenuPopupCallBack.c:56 # src/gui/MenuPopupCallBack.c:57 #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Renomear catálogo" # src/MenuPopupCallBack.c:56 # src/gui/MenuPopupCallBack.c:57 #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "Introduza um nome para o novo catálogo" # src/gui/NoteBookManagmentCallBack.c:165 # src/gui/NoteBookManagmentCallBack.c:213 #: src/gui/gwmenupopupcallback.c:121 msgid "Invalid filled catalog name" msgstr "Nome do catálogo incorrectamente preenchido" # src/MenuPopupCallBack.c:124 # src/gui/MenuPopupCallBack.c:129 #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "Descrição do catálogo" # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Renomear disco" # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "Introduza um nome para o novo disco" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "O nome especificado para o disco já existe no catálogo" #: src/gui/gwmenupopupcallback.c:374 msgid "No new disk name was filled" msgstr "Não especificou um novo nome para o disco" # src/MenuPopupCallBack.c:299 # src/gui/MenuPopupCallBack.c:306 #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "Introduza a etiqueta de volume do novo disco" # src/MenuPopupCallBack.c:350 # src/gui/MenuPopupCallBack.c:358 #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "Descrição do disco" # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "Renomear directoria" # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "Introduza o novo nome para a directoria" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "O nome especificado para a directoria já existe" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "Não inseriu um nome para a directoria" # src/MenuPopupCallBack.c:435 # src/gui/MenuPopupCallBack.c:444 #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "Descrição da directoria" # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "Renomear ficheiro" # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "Introduza o novo nome para o ficheiro" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "O nome especificado para o ficheiro já existe" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "Não especificou um nome para o ficheiro" # src/MenuPopupCallBack.c:564 # src/gui/MenuPopupCallBack.c:574 #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "Descrição do ficheiro" # src/gui/NoteBookCatalog.c:66 # src/gui/NoteBookCatalog.c:67 #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Arquivo" # src/gui/NoteBookCatalog.c:152 # src/gui/NoteBookCatalog.c:153 #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "Catálogo" # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:76 #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "A fechar catálogo" # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "Por favor aguarde..." # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Catálogo encerrado" # src/Exploration.c:599 src/Exploration.c:655 src/Exploration.c:733 # src/Exploration.c:789 # src/Exploration.c:620 src/Exploration.c:676 src/Exploration.c:757 # src/Exploration.c:813 #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "proprietário desconhecido" # src/Exploration.c:607 src/Exploration.c:663 src/Exploration.c:741 # src/Exploration.c:797 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "grupo desconhecido" # src/gui/NoteBookManagment.c:99 src/gui/NoteBookManagmentCallBack.c:165 # src/gui/NoteBookManagment.c:127 src/gui/NoteBookManagmentCallBack.c:213 #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Novo disco" # src/gui/NoteBookManagment.c:115 # src/gui/NoteBookManagment.c:139 #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "Seleccione o suporte que será adicionado como disco ao seu catálogo." # src/gui/NoteBookManagment.c:117 # src/gui/NoteBookManagment.c:142 #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "Seleccione o suporte : " # src/gui/NoteBookManagment.c:144 # src/gui/NoteBookManagment.c:167 #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "" "Introduza o número do novo disco. Este número poderá ajudá-lo na história do " "seu catálogo." # src/gui/NoteBookManagment.c:146 src/gui/Properties.c:717 # src/gui/NoteBookManagment.c:170 src/gui/PropertiesBox.c:653 #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Arquivo N# : " # src/gui/NoteBookManagment.c:161 # src/gui/NoteBookManagment.c:183 #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "Introduza o nome do novo disco. Esse nome aparecerá no seu catálogo." # src/gui/NoteBookManagment.c:163 # src/gui/NoteBookManagment.c:186 #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "Nome : " # src/gui/NoteBookManagment.c:179 src/gui/Properties.c:945 # src/gui/Properties.c:1288 src/gui/Properties.c:1646 # src/gui/NoteBookManagment.c:200 src/gui/PropertiesBox.c:811 # src/gui/PropertiesBox.c:1065 src/gui/PropertiesBox.c:1334 #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "Categoria : " # src/gui/NoteBookManagment.c:185 # src/gui/NoteBookManagment.c:206 #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "" "Seleccione a categoria a que pertence o disco a adicionar (mesmo se a opção " "estiver marcada)." # src/gui/NoteBookManagment.c:270 # src/gui/NoteBookManagment.c:289 #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "Indique o ficheiro de dispositivo do suporte seleccionado." # src/gui/NoteBookManagment.c:199 src/gui/NoteBookManagmentCallBack.c:300 # src/gui/NoteBookManagmentCallBack.c:341 # src/gui/NoteBookManagment.c:219 src/gui/NoteBookManagmentCallBack.c:332 # src/gui/NoteBookManagmentCallBack.c:376 #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Informação : " # src/gui/NoteBookManagment.c:210 # src/gui/NoteBookManagment.c:229 #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "" "Indique o tipo do suporte seleccionado. (ex: ext2, ext3, vfat, ntfs, ...)" # src/gui/NoteBookManagment.c:212 src/gui/NoteBookManagmentCallBack.c:302 # src/gui/NoteBookManagmentCallBack.c:356 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Tipo : " # src/gui/NoteBookManagment.c:222 # src/gui/NoteBookManagment.c:241 #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "Mostrar se o suporte seleccionado está ou não montado." # src/gui/NoteBookManagment.c:224 src/gui/NoteBookManagmentCallBack.c:304 # src/gui/NoteBookManagmentCallBack.c:361 # src/gui/NoteBookManagment.c:244 src/gui/NoteBookManagmentCallBack.c:338 # src/gui/NoteBookManagmentCallBack.c:395 #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "Montado : " # src/gui/NoteBookManagment.c:234 # src/gui/NoteBookManagment.c:253 #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "" "Indique o nome de volume do suporte seleccionado (apenas se estiver montado)." # src/gui/NoteBookManagment.c:236 src/gui/NoteBookManagmentCallBack.c:306 # src/gui/NoteBookManagment.c:256 src/gui/NoteBookManagmentCallBack.c:341 #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Volume : " # src/gui/NoteBookManagment.c:246 # src/gui/NoteBookManagment.c:265 #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "" "Indique o número de série do suporte seleccionado (caso esteja montado). " "Este é um número de fábrica." # src/gui/NoteBookManagment.c:248 # src/gui/NoteBookManagment.c:268 #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Número de série N#" # src/gui/NoteBookManagment.c:258 # src/gui/NoteBookManagment.c:277 #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "Indique o espaço total do suporte seleccionado (caso esteja montado)." # src/gui/NoteBookManagment.c:260 src/gui/NoteBookManagmentCallBack.c:310 # src/gui/NoteBookManagmentCallBack.c:386 # src/gui/NoteBookManagment.c:280 src/gui/NoteBookManagmentCallBack.c:347 # src/gui/NoteBookManagmentCallBack.c:420 #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "Capacidade : " # src/gui/NoteBookManagment.c:270 # src/gui/NoteBookManagment.c:289 #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "Indique o espaço livre no suporte seleccionado (caso esteja montado)." # src/gui/NoteBookManagment.c:272 src/gui/NoteBookManagmentCallBack.c:312 # src/gui/NoteBookManagmentCallBack.c:390 # src/gui/NoteBookManagment.c:292 src/gui/NoteBookManagmentCallBack.c:350 # src/gui/NoteBookManagmentCallBack.c:424 #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Espaço livre : " # src/gui/NoteBookManagment.c:277 # src/gui/NoteBookManagment.c:298 #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "Opções" # src/gui/NoteBookManagment.c:288 # src/gui/NoteBookManagment.c:307 #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "Monstrar informação" # src/gui/NoteBookManagment.c:295 # src/gui/NoteBookManagment.c:314 #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" "Mostra informações acerca do suporte seleccionado tais como caminho, " "capacidade, espaço livre, etiqueta,..." # src/gui/NoteBookManagment.c:297 # src/gui/NoteBookManagment.c:317 #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Automount" # src/gui/NoteBookManagment.c:304 # src/gui/NoteBookManagment.c:324 #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" "Monta o suporte caso ainda nao o tenha feito. E desmonta após mesmo se já " "montado antes da procura." # src/gui/Properties.c:706 # src/gui/PropertiesBox.c:645 #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "Explorar a estrutura de árvore do suporte." #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "" "Mantenha esta opção seleccionada para percorrer toda a informação de pastas " "e ficheiros." # src/gui/NoteBookManagment.c:306 # src/gui/NoteBookManagment.c:327 #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "Explorar arquivos (.tar, .gz, .zip, ...)" # src/gui/NoteBookManagment.c:313 # src/gui/NoteBookManagment.c:334 #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "Ainda não implementado!!\n" "Explore todos os arquivos como se de directorias se tratassem. Arquivos " "estão como tar ou gzip." # src/gui/NoteBookManagment.c:315 # src/gui/NoteBookManagment.c:337 #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "Ejectar suporte se possível" # src/gui/NoteBookManagment.c:322 # src/gui/NoteBookManagment.c:344 #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" "Ejectar o suporte se possível (CD-ROM...), mesmo se a drive estiver fechada. " "Isto apenas é possível caso o automount estiver activado!!" # src/gui/NoteBookManagment.c:324 # src/gui/NoteBookManagment.c:347 #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "Definir categoria como recursiva" # src/gui/NoteBookManagment.c:330 # src/gui/NoteBookManagment.c:353 #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "" "Aplicar a categoria seleccionada a todos os items no disco a adicionar " "(disco, directórios e ficheiros)." # src/gui/NoteBookManagment.c:332 # src/gui/NoteBookManagment.c:356 #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "Colocar descrição automaticamente" # src/gui/NoteBookManagment.c:337 # src/gui/NoteBookManagment.c:361 #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "" "Efectuar auto descrição do ficheiro (formato do ficheiro, tamanho da imagem " "para xmp ou jpg, etc...)." #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "Utilizar um padrão avançado para gerar o nome do disco" #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Poderá preencher com tags extra para gerar um nome de disco com informação " "sobre o disco :\n" "- %% : %\n" "- %n : número do arquivo (poderá usar prefixo 0 : %.4n será 0001, 0002, " "0003, ..., 0091, ...\n" "- %l : etiqueta de volume de suporte\n" "- %t : tipo de suporte\n" "- %s : número de série" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "" "Usar nome de volume do suporte como nome do disco (apenas quando o nome do " "disco está vazio)" #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" "Caso não tenha inserido um nome para o disco e caso o suporte seleccionado " "tenha um nome de volume, esse nome será usado como nome do disco." # src/Catalog.c:1009 src/Catalog.c:1122 # src/gui/NoteBookManagmentCallBack.c:119 # src/gui/NoteBookManagmentCallBack.c:130 # src/gui/NoteBookManagmentCallBack.c:165 # src/gui/NoteBookManagmentCallBack.c:249 # src/gui/NoteBookManagmentCallBack.c:492 # src/Catalog.c:1186 src/Catalog.c:1344 # src/gui/NoteBookManagmentCallBack.c:148 # src/gui/NoteBookManagmentCallBack.c:162 # src/gui/NoteBookManagmentCallBack.c:213 # src/gui/NoteBookManagmentCallBack.c:285 # src/gui/NoteBookManagmentCallBack.c:620 #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "Adicionar disco" # src/gui/NoteBookManagment.c:348 # src/gui/NoteBookManagment.c:397 #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Gestão" # src/gui/NoteBookManagmentCallBack.c:119 # src/gui/NoteBookManagmentCallBack.c:148 #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "O disco nao foi adicionado : não há suporte montado" # src/gui/NoteBookManagmentCallBack.c:130 # src/gui/NoteBookManagmentCallBack.c:162 #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "O disco não foi adicionado : não é possível montar o suporte" # src/gui/MenuPopup.c:88 src/gui/NoteBookManagmentCallBack.c:148 # src/gui/MenuPopup.c:89 src/gui/NoteBookManagmentCallBack.c:190 #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "Adicionar novo disco" # src/gui/NoteBookManagmentCallBack.c:165 # src/gui/NoteBookManagmentCallBack.c:213 #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "Introduza o nome do disco" # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "A Pesquisar" # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "Adicionar disco está a funcionar" # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "Por favor aguarde" # src/Catalog.c:641 src/gui/NoteBookManagmentCallBack.c:188 # src/gui/NoteBookManagmentCallBack.c:224 # src/Catalog.c:731 src/gui/NoteBookManagmentCallBack.c:245 #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "O disco foi adicionado" # src/gui/NoteBookManagmentCallBack.c:249 # src/gui/NoteBookManagmentCallBack.c:285 #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Mount falhou\n" # src/gui/NoteBookManagmentCallBack.c:308 # src/gui/NoteBookManagmentCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:344 # src/gui/NoteBookManagmentCallBack.c:416 #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Número de série : " # src/gui/NoteBookManagmentCallBack.c:341 # src/gui/NoteBookManagmentCallBack.c:353 # src/gui/NoteBookManagmentCallBack.c:373 # src/gui/NoteBookManagmentCallBack.c:377 # src/gui/NoteBookManagmentCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:386 # src/gui/NoteBookManagmentCallBack.c:390 # src/gui/NoteBookManagmentCallBack.c:376 # src/gui/NoteBookManagmentCallBack.c:387 # src/gui/NoteBookManagmentCallBack.c:407 # src/gui/NoteBookManagmentCallBack.c:411 # src/gui/NoteBookManagmentCallBack.c:416 # src/gui/NoteBookManagmentCallBack.c:420 # src/gui/NoteBookManagmentCallBack.c:424 #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "nenhuma drive" # src/Exploration.c:607 src/Exploration.c:663 src/Exploration.c:741 # src/Exploration.c:797 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "desconhecido" # src/gui/NoteBookManagmentCallBack.c:361 # src/gui/NoteBookManagmentCallBack.c:395 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Sim" # src/gui/NoteBookManagmentCallBack.c:361 # src/gui/NoteBookManagmentCallBack.c:395 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "Não" # src/gui/NoteBookManagmentCallBack.c:368 # src/gui/NoteBookManagmentCallBack.c:402 #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "Nenhuma etiqueta" # src/gui/NoteBookManagmentCallBack.c:377 # src/gui/NoteBookManagmentCallBack.c:411 #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Nome do Volume : " # src/gui/NoteBookManagmentCallBack.c:536 # src/gui/NoteBookManagmentCallBack.c:530 #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "Operação de adição de disco cancelada" # src/gui/NoteBookManagmentCallBack.c:492 # src/gui/NoteBookManagmentCallBack.c:620 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "Por favor seleccione um nome de catálogo\n" # src/gui/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:104 #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "Procurar : " # src/gui/NoteBookSearch.c:97 src/gui/NoteBookSearch.c:243 # src/gui/NoteBookSearch.c:116 src/gui/NoteBookSearch.c:273 #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "Procurar" # src/gui/NoteBookSearch.c:100 # src/gui/NoteBookSearch.c:121 #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "A procura é case sensitive e suporta o wildcard \"*\".\n" "Exemplo : img*.bmp ou *.htmA procura por palavras chave aceita uma lista de " "palavras obrigatórias." # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/CategoriesEditBox.c:243 src/gui/MenuPopup.c:58 # src/gui/MenuPopup.c:128 #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "Limpar" # src/gui/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:104 #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "Remover todos os resultados da procura" # src/gui/NoteBookSearch.c:107 # src/gui/NoteBookSearch.c:127 #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "Case sensitive" # src/gui/NoteBookSearch.c:112 # src/gui/NoteBookSearch.c:134 #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "A procura poderá ou não ser case sensitive.\n" "Sendo case sensitive \"File.txt\" não corresponde a \"file.txt\". Mas sendo " "case insensitive corresponde." # src/gui/NoteBookSearch.c:97 src/gui/NoteBookSearch.c:243 # src/gui/NoteBookSearch.c:116 src/gui/NoteBookSearch.c:273 #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "Tipo de Pesquisa" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "Palavras chave" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "" "Insira uma lista de palavras chave que deverão existir nos ficheiros para " "que estes correspondam." #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "Wildcards" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "" "Insira o padrão completo de wildcards. Este padrão poderá conter os " "caracteres \"?\" e \"*\"." # src/gui/NoteBookSearch.c:115 # src/gui/NoteBookSearch.c:137 #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "Expressão regular" # src/gui/NoteBookSearch.c:120 # src/gui/NoteBookSearch.c:144 #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "" "Poderá usar uma regular expression. Veja a documentação para mais informação." # src/gui/NoteBookSearch.c:130 # src/gui/NoteBookSearch.c:152 #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "Ficheiro" # src/gui/NoteBookSearch.c:136 # src/gui/NoteBookSearch.c:158 #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "A pesquisa condiz com o nome de ficheiro." # src/gui/NoteBookSearch.c:139 # src/gui/NoteBookSearch.c:161 #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "Directoria" # src/gui/NoteBookSearch.c:144 # src/gui/NoteBookSearch.c:166 #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "A procura condiz com nome de directoria." # src/gui/NoteBookSearch.c:147 src/gui/NoteBookSearch.c:212 # src/gui/NoteBookSearch.c:169 src/gui/NoteBookSearch.c:232 #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "Disco" # src/gui/NoteBookSearch.c:152 # src/gui/NoteBookSearch.c:174 #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "A procura condiz com o nome de disco" # src/gui/NoteBookCatalog.c:142 src/gui/NoteBookCatalog.c:212 # src/gui/NoteBookCatalog.c:259 src/gui/NoteBookSearch.c:155 # src/gui/NoteBookSearch.c:232 # src/gui/NoteBookCatalog.c:143 src/gui/NoteBookCatalog.c:213 # src/gui/NoteBookCatalog.c:260 src/gui/NoteBookSearch.c:177 # src/gui/NoteBookSearch.c:244 #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "Categoria" # src/gui/NoteBookSearch.c:160 # src/gui/NoteBookSearch.c:182 #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "A procura condiz com o nome de categoria." # src/gui/NoteBookSearch.c:168 # src/gui/NoteBookSearch.c:190 #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "A procura condiz com as descrições." # src/gui/MenuFileCallBack.c:78 src/gui/MenuFileCallBack.c:411 # src/gui/MenuFileCallBack.c:425 src/gui/MenuFileCallBack.c:463 # src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "Procurar no catálogo" #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "%lu item(s) encontrados." # src/gui/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:104 #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "Resultado da procura : " #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "Nenhum item correspondente." # src/gui/NoteBookSearchCallBack.c:87 # src/gui/NoteBookSearchCallBack.c:99 #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "À procura..." # src/gui/NoteBookSearchCallBack.c:87 # src/gui/NoteBookSearchCallBack.c:99 #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "Não é possível iniciar pesquisa : nenhum catálogo foi aberto" # src/gui/ProgressBarBox.c:185 src/gui/ProgressBarBox.c:215 #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "_Ok" # src/gui/Properties.c:286 # src/gui/PropertiesBox.c:335 #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "Introduza o nome do catálogo." # src/gui/Properties.c:332 # src/gui/PropertiesBox.c:366 #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "Versão : " # src/gui/Properties.c:331 # src/gui/PropertiesBox.c:365 #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "Versão " # src/gui/Properties.c:331 # src/gui/PropertiesBox.c:365 #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr " compilado com " # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/PropertiesBox.c:376 src/gui/PropertiesBox.c:377 #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "Discos no catálogo : " # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/PropertiesBox.c:376 src/gui/PropertiesBox.c:377 #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "Discos no catálogo : %d" # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/PropertiesBox.c:387 src/gui/PropertiesBox.c:388 # src/gui/PropertiesBox.c:717 src/gui/PropertiesBox.c:718 #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Total de Ficheiros : " # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/PropertiesBox.c:387 src/gui/PropertiesBox.c:388 # src/gui/PropertiesBox.c:717 src/gui/PropertiesBox.c:718 #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, c-format msgid "Total Files : %ld" msgstr "Total de Ficheiros : %ld" # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/PropertiesBox.c:398 src/gui/PropertiesBox.c:399 # src/gui/PropertiesBox.c:728 src/gui/PropertiesBox.c:729 #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "Total de Directorias : " # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/PropertiesBox.c:398 src/gui/PropertiesBox.c:399 # src/gui/PropertiesBox.c:728 src/gui/PropertiesBox.c:729 #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, c-format msgid "Total Folders : %ld" msgstr "Total de Directorias : %ld" # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/PropertiesBox.c:413 src/gui/PropertiesBox.c:414 # src/gui/PropertiesBox.c:1202 src/gui/PropertiesBox.c:1203 #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "Tamanho do Ficheiro : " # src/gui/Properties.c:417 src/gui/Properties.c:418 # src/gui/PropertiesBox.c:424 src/gui/PropertiesBox.c:425 #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Espaço Total de Armazenamento : " # src/gui/Properties.c:433 src/gui/Properties.c:434 # src/gui/PropertiesBox.c:435 src/gui/PropertiesBox.c:436 #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "Total de Espaço Usado : " # src/gui/Properties.c:449 src/gui/Properties.c:450 # src/gui/PropertiesBox.c:446 src/gui/PropertiesBox.c:447 #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "Total de Espaço Livre : " # src/gui/Properties.c:471 # src/gui/PropertiesBox.c:461 #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "Estatísticas do Disco : " # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/PropertiesBox.c:478 src/gui/PropertiesBox.c:479 #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "CD-Rom : " # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/PropertiesBox.c:478 src/gui/PropertiesBox.c:479 #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "CD-Rom : %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "CD Audio : " # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #: src/gui/gwpropertiesbox.c:577 #, c-format msgid "Audio CD : %d" msgstr "CD Audio : %d" # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "HD : " # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "HD : %d" # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/PropertiesBox.c:500 src/gui/PropertiesBox.c:501 #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "Disquete : " # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/PropertiesBox.c:500 src/gui/PropertiesBox.c:501 #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "Disquete : %d" # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/PropertiesBox.c:515 src/gui/PropertiesBox.c:516 #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip : " # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/PropertiesBox.c:515 src/gui/PropertiesBox.c:516 #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip : %d" # src/gui/NoteBookManagment.c:212 src/gui/NoteBookManagmentCallBack.c:302 # src/gui/NoteBookManagmentCallBack.c:356 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 msgid "Tape : " msgstr "Cassette : " # src/gui/NoteBookManagment.c:212 src/gui/NoteBookManagmentCallBack.c:302 # src/gui/NoteBookManagmentCallBack.c:356 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 #: src/gui/gwpropertiesbox.c:649 #, c-format msgid "Tape : %d" msgstr "Cassette : %d" #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "Rede :" # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 #: src/gui/gwpropertiesbox.c:666 #, c-format msgid "Network : %d" msgstr "Rede : %d" # src/gui/NoteBookManagment.c:163 # src/gui/NoteBookManagment.c:186 #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 msgid "Jaz : " msgstr "Jaz : " # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #: src/gui/gwpropertiesbox.c:683 #, c-format msgid "Jaz : %d" msgstr "Jaz : %d" # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "Outro : " # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "Outro : %d" # src/gui/Properties.c:589 # src/gui/PropertiesBox.c:541 #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Categoria do Catálogo : " # src/gui/Properties.c:610 # src/gui/PropertiesBox.c:557 #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "Descrição do Catálogo : " # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Informação sobre o Catálogo" # src/gui/Properties.c:706 # src/gui/PropertiesBox.c:645 #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "Introduza o nome deste disco." # src/gui/Properties.c:730 # src/gui/PropertiesBox.c:664 #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "Introduza o número de arquivo deste disco." # src/gui/NoteBookManagment.c:212 src/gui/NoteBookManagmentCallBack.c:302 # src/gui/NoteBookManagmentCallBack.c:356 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/PropertiesBox.c:685 #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr " Tipo : " # src/gui/Properties.c:775 src/gui/Properties.c:776 # src/gui/PropertiesBox.c:695 src/gui/PropertiesBox.c:696 #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "Serial : " # src/gui/Properties.c:791 src/gui/Properties.c:792 # src/gui/PropertiesBox.c:706 src/gui/PropertiesBox.c:707 #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "Etiqueta de Volume : " # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/PropertiesBox.c:743 src/gui/PropertiesBox.c:744 #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "Capacidade Total : " # src/gui/Properties.c:861 src/gui/Properties.c:862 # src/gui/PropertiesBox.c:754 src/gui/PropertiesBox.c:755 #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "Espaço Utilizado : " # src/gui/Properties.c:877 src/gui/Properties.c:878 # src/gui/PropertiesBox.c:765 src/gui/PropertiesBox.c:766 #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "Espaço Livre : " # src/gui/Properties.c:915 src/gui/Properties.c:916 # src/gui/PropertiesBox.c:790 src/gui/PropertiesBox.c:791 #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "Nome do Catálogo : " # src/gui/Properties.c:931 src/gui/Properties.c:932 # src/gui/PropertiesBox.c:801 src/gui/PropertiesBox.c:802 #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "Actualizar no catálogo : " # src/gui/Properties.c:967 # src/gui/PropertiesBox.c:828 #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "Descrição do Disco : " # src/gui/Properties.c:998 # src/gui/PropertiesBox.c:854 #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Informação do Disco" # src/gui/NoteBookCatalog.c:255 # src/gui/PropertiesBox.c:908 #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "Nome do Directoria" # src/gui/Properties.c:1104 # src/gui/PropertiesBox.c:940 #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Tipo : (directoria)" # src/gui/Properties.c:1118 src/gui/Properties.c:1119 # src/gui/PropertiesBox.c:949 src/gui/PropertiesBox.c:950 #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "Tamanho da Directoria : " # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/PropertiesBox.c:960 src/gui/PropertiesBox.c:961 # src/gui/PropertiesBox.c:1213 src/gui/PropertiesBox.c:1214 #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "Criado em : " # src/gui/Properties.c:1150 src/gui/Properties.c:1151 # src/gui/Properties.c:1492 src/gui/Properties.c:1493 # src/gui/PropertiesBox.c:971 src/gui/PropertiesBox.c:972 # src/gui/PropertiesBox.c:1224 src/gui/PropertiesBox.c:1225 #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "Ultima modificação em : " # src/gui/Properties.c:1166 src/gui/Properties.c:1167 # src/gui/Properties.c:1508 src/gui/Properties.c:1509 # src/gui/PropertiesBox.c:982 src/gui/PropertiesBox.c:983 # src/gui/PropertiesBox.c:1235 src/gui/PropertiesBox.c:1236 #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "Último acesso em : " # src/gui/Properties.c:1188 src/gui/Properties.c:1189 # src/gui/Properties.c:1530 src/gui/Properties.c:1531 # src/gui/PropertiesBox.c:997 src/gui/PropertiesBox.c:998 # src/gui/PropertiesBox.c:1250 src/gui/PropertiesBox.c:1251 #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Permissões : " # src/gui/Properties.c:1204 src/gui/Properties.c:1205 # src/gui/Properties.c:1546 src/gui/Properties.c:1547 # src/gui/PropertiesBox.c:1008 src/gui/PropertiesBox.c:1009 # src/gui/PropertiesBox.c:1261 src/gui/PropertiesBox.c:1262 #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "Proprietário : " # src/gui/Properties.c:1220 src/gui/Properties.c:1221 # src/gui/Properties.c:1562 src/gui/Properties.c:1563 # src/gui/PropertiesBox.c:1019 src/gui/PropertiesBox.c:1020 # src/gui/PropertiesBox.c:1272 src/gui/PropertiesBox.c:1273 #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "Grupo : " # src/gui/Properties.c:1258 src/gui/Properties.c:1259 # src/gui/Properties.c:1602 src/gui/Properties.c:1606 # src/gui/Properties.c:1609 # src/gui/PropertiesBox.c:1044 src/gui/PropertiesBox.c:1045 # src/gui/PropertiesBox.c:1299 src/gui/PropertiesBox.c:1303 # src/gui/PropertiesBox.c:1306 #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "Nome do Disco : " # src/gui/Properties.c:1274 src/gui/Properties.c:1275 # src/gui/Properties.c:1626 src/gui/Properties.c:1630 # src/gui/Properties.c:1633 # src/gui/PropertiesBox.c:1055 src/gui/PropertiesBox.c:1056 # src/gui/PropertiesBox.c:1318 src/gui/PropertiesBox.c:1322 # src/gui/PropertiesBox.c:1325 #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "Localização no Disco : " # src/gui/Properties.c:1310 # src/gui/PropertiesBox.c:1082 #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "Descrição da Directoria : " # src/gui/Properties.c:1341 # src/gui/PropertiesBox.c:1108 #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Informação da Directoria" # src/gui/NoteBookManagmentCallBack.c:377 # src/gui/PropertiesBox.c:1161 #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "Nome do Ficheiro : " # src/gui/Properties.c:1446 # src/gui/PropertiesBox.c:1193 #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Tipo de ficheiro : ainda não implementado!!" # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/PropertiesBox.c:413 src/gui/PropertiesBox.c:414 # src/gui/PropertiesBox.c:1202 src/gui/PropertiesBox.c:1203 #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "Tamanho do Ficheiro : %s (%s bytes)" # src/gui/Properties.c:1668 # src/gui/PropertiesBox.c:1351 #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "Descrição do Ficheiro : " # src/gui/Properties.c:1699 # src/gui/PropertiesBox.c:1377 #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Informação do Ficheiro" # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "Ficheiro de Catálogo" # src/gui/Properties.c:589 # src/gui/PropertiesBox.c:541 #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Nível de compressão do Catálogo : " #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "" "Seleccione o nível de compressão do catálogo. O valor por omissão é 3, sendo " "um valor razoável entre boa performance e tamanho reduzido." # src/MenuPopupCallBack.c:56 # src/gui/MenuPopupCallBack.c:57 #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Catálogos recentemente abertos :" #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "" "Seleccione o tamanho do historial de catálogos recentemente abertos. O valor " "por omissão é 5." #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "Apagar historial" #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "" "Click aqui para eliminar o historial de catálogos recentemente abertos." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Carregar catálogo automaticamente" #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "Carregar automaticamente ao iniciar um catálogo por omissão" # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1186 src/Catalog.c:1344 #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "Carregar último catálogo aberto." # src/gui/NoteBookManagmentCallBack.c:492 # src/gui/NoteBookManagmentCallBack.c:620 #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "Carregar ficheiro de catálogo seleccionado." #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "Insira o caminho completo do ficheiro de catálogo a carregar" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "Seleccione catálogo" #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "Click aqui para procurar e seleccionar um ficheiro de catálogo." # src/gui/MenuFileCallBack.c:146 src/gui/MenuFileCallBack.c:169 # src/gui/MenuFileCallBack.c:323 src/gui/MenuFileCallBack.c:405 # src/gui/MenuFileCallBack.c:486 src/gui/MenuFileCallBack.c:564 # src/gui/MenuFileCallBack.c:629 # src/gui/MenuFileCallBack.c:175 src/gui/MenuFileCallBack.c:202 # src/gui/MenuFileCallBack.c:406 src/gui/MenuFileCallBack.c:503 # src/gui/MenuFileCallBack.c:596 src/gui/MenuFileCallBack.c:686 # src/gui/MenuFileCallBack.c:763 #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "Seleccionar catálogo automaticamente carregado" #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "Explorador" # src/gui/NoteBookSearch.c:107 # src/gui/NoteBookSearch.c:127 #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "Ordenação case sensitive" #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "O resultado no explorar é case-sensitive" #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Resultados agrupados por directoria/ficheiro." #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" "Os resultados no explorador podem ser agrupados por tipo de item. Se esta " "opção for seleccionada, os items serão agrupados por directorias e " "ficheiros ." #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Auto-redimensionar colunas" #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "Auto-redimensionar todas as colunas do explorador" # src/gui/NoteBookSearch.c:147 src/gui/NoteBookSearch.c:212 # src/gui/NoteBookSearch.c:169 src/gui/NoteBookSearch.c:232 #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "Discos" #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "Visível" #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Ocultar" #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "Mostrar" #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "Oculto" # src/gui/NoteBookSearch.c:130 # src/gui/NoteBookSearch.c:152 #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Ficheiros" #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "O resultado da procura é case-sensitive" #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Resultados agrupados por tipo" #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" "O resultado da procura pode ser agrupado por tipo de item. Se esta opção for " "seleccionada, todos os items serão agrupados por catálogos, discos, " "directorias e ficheiros." #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "Todas as palavras chave deverão corresponder" #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" "Escolha se todas as palavras chave ou apenas uma delas deve corresponder a " "um item para que esteja presente no resultado da procura." # src/gui/MenuFileCallBack.c:186 # src/gui/MenuFileCallBack.c:223 #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "Rápido " #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "Opções Gerais" #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "GUI" # src/gui/Categories.c:201 # src/gui/CategoriesEditBox.c:237 #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "Guardar propriedades do interface ao sair" #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "" "Guardar as propriedades do interface tais como posição e tamanho da janela" #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "Autorizar beep" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "Autoriza a emissão de um pequeno beep em alguns eventos" #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Correio" #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "Morada de email :" #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "Insira o seu endereço de email." #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "Servidor de saída de email:" #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "" "Insira o seu servidor de saída de email. Normalmente este endereço é mail." "oseudominio.com" #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Porta do servidor :" #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "Insira a porta do servidor de saída de email (normalmente 25)." #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "" "A caixa de Configuração permite-lhe configurar algumas funcionalidades e " "propriedades do programa." #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "Configuração" #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "Seleccione a secção a configurar." #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "" "Altere aqui todas as propriedades disponíveis por forma a configurar o " "programa ao seu gosto." #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "" "Esta janela de configuração permite-lhe configurar o programa. Algumas " "propriedades podem ser modificadas aqui." #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "" "Click em OK para efectuar as modificações e fechar a janela de Configuração" #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "" "Click em Cancelar para cancelar as modificações e fechar a janela " "deConfiguração." #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "_Efectuar" #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "" "Click em Efectuar para efecturar as alterações (sem fechar a janela de " "Configuração." #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "Configuração modificada" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "" "Se não efectuar as alterações, perde-las-à. Deseja efectuar as alterações?" # src/gui/StatusBarCallBack.c:56 #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], total de discos: %d" # src/gui/StatusBar.c:203 # src/gui/StatusBarCallBack.c:57 src/gui/StatusBarCallBack.c:88 # src/gui/StatusBarCallBack.c:120 #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr " Items listados : %d (tamanho total : %s)" # src/gui/StatusBarCallBack.c:80 #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], capacidade : %s, livres: %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr " Disco vazio" # src/gui/StatusBar.c:203 # src/gui/StatusBarCallBack.c:84 src/gui/StatusBarCallBack.c:116 # src/gui/StatusBarCallBack.c:145 #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr " Item seleccionado : %d (tamanho total : %s)" # src/gui/StatusBarCallBack.c:112 #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr " Directoria \"%s\", %s (ficheiros %d, subdirectorias %d)" # src/gui/StatusBar.c:197 # src/gui/StatusBarCallBack.c:144 #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr " %s, %s, %s" # src/gui/StatusBar.c:225 src/gui/StatusBar.c:247 # src/gui/StatusBarCallBack.c:169 src/gui/StatusBarCallBack.c:193 #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr " Item seleccionado : %d" # src/gui/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr " Explorador do catálogo" # src/gui/StatusBar.c:242 # src/gui/StatusBarCallBack.c:192 #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr " Motor de busca" # src/gui/StatusBar.c:264 # src/gui/StatusBarCallBack.c:216 #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr " Gestão do catálogo" # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:76 #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Fechar catálogo" # src/gui/MenuFileCallBack.c:78 src/gui/MenuFileCallBack.c:411 # src/gui/MenuFileCallBack.c:425 src/gui/MenuFileCallBack.c:463 # src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "Enviar catálogo por email" # src/gui/MenuHelp.c:54 # src/gui/About.c:108 #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "Sobre" # src/gui/About.c:128 # src/gui/About.c:125 #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "Gestor de catálogos de media removivel\n" "Por Sébastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" # src/gui/About.c:129 # src/gui/About.c:126 #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" "O GWhere permite gerir uma base de dados dos seus CDs ou outros tipos de " "media removível (discos rígidos, disquetes, drives ZIP, CD-ROM, etc...). Com " "o GWhere é fácil explorar os seus CDs ou fazer rápidas pesquisas sem a " "necessidade de inserir cada um dos seus CDs na drive." #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Está a correr em " #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "" "Esta janela permite-lhe enviar catálogos via email para um (ou mais dos " "contactos." #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "Enviar email" #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "Para :" #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "CC :" #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "BCC :" #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "Destinatário :" #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "Introduza aqui o endereço de email do(s) seu(s) contacto(s)." #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "Introduza aqui o endereço de mail dos contactos copiados." #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "Introduza aqui o endereço de email dos contactos copiados ocultos." #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "Introduza aqui o destinatário do seu email." #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "Ficheiro anexo :" #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "Escolha entre anexar ou não o ficheiro de catálogo." #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "Escreva aqui o texto do seu email" # src/gui/MenuFile.c:81 # src/gui/MenuFile.c:81 #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "_Enviar" #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "Click aqui para enviar um email (com um catálogo anexo)." #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "Click aqui para cancelar o envio do email." # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "A enviar mail, Por favor aguarde" #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "" "Ocorreu um erro durante o envio do email. Por favor confira os parâmetros." # src/support.c:118 # src/support.c:120 #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Não foi possível encontrar o ficheiro pixmap: %s" # src/support.c:125 # src/support.c:127 #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "Erro ao carregar o ficheiro pixmap: %s" # src/Catalog.c:605 # src/Catalog.c:695 #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "Erro : não é possível obter a directoria actual." # src/Catalog.c:641 # src/Catalog.c:731 #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "Erro : não é possível obter a directoria." # src/Catalog.c:692 # src/Catalog.c:780 #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "O disco não foi adicionado\n" "Adição cancelada pelo utilizador" # src/Catalog.c:641 src/gui/NoteBookManagmentCallBack.c:188 # src/gui/NoteBookManagmentCallBack.c:224 # src/Catalog.c:798 src/Catalog.c:803 src/Catalog.c:808 src/Catalog.c:813 # src/Catalog.c:818 src/Catalog.c:823 src/Catalog.c:828 src/Catalog.c:833 # src/Catalog.c:850 src/Catalog.c:855 src/Catalog.c:860 src/Catalog.c:865 # src/Catalog.c:870 src/Catalog.c:875 #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "O disco não foi adicionado\n" # src/Catalog.c:798 #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "%s fora do espaço de memória do processo" # src/Catalog.c:803 #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" "Um componente do seguinte caminho excedeu %d caracters, ou o caminho inteiro " "excedeu %d caracters : %s." # src/Catalog.c:808 #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "A seguinte directoria não existe : %s." # src/Catalog.c:813 src/Catalog.c:865 #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "Memória insuficiente para completar a operação" # src/Catalog.c:818 #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "Um componente do prefixo não é uma directoria : %s." # src/Catalog.c:823 #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "" "Demasiados links simbólicos foram encontrados no seguinte caminho : %s ." # src/Catalog.c:828 #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "Um erro de I/O ocorreu ao mudar para a directoria : %s." # src/Exploration.c:599 src/Exploration.c:655 src/Exploration.c:733 # src/Exploration.c:789 # src/Catalog.c:833 src/Catalog.c:875 #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "Erro desconhecido" # src/Catalog.c:935 # src/Catalog.c:1110 #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" "O disco não foi adicionado\n" "Erro : não é possível subir para a directoria pai." # src/Catalog.c:850 #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Demasiados descriptores de ficheiro em uso pelo processo." # src/Catalog.c:855 #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Demasiados ficheiros de momento em uso pelo sistema." # src/Catalog.c:860 #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "" "A seguinte directoria não existe ou o seu nome é uma string vazia : %s." # src/Catalog.c:870 #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "O nome da seguinte directoria não é uma directoria : %s." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" "Ocorreu um erro crítico ao extrair informação de ficheiro de %s%s%s.\n" "Grave o seu catálogo se for possível, saia do GWhere e dê, por favor, " "conhecimento deste problema à equipa do projecto GWhere." # src/Catalog.c:926 # src/Catalog.c:1102 #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" "O disco não foi adicionado\n" "Erro : não é possível fechar a directoria actual." # src/main.c:47 #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "Está a correr em %s" # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Ficheiro de Catálogo carregado" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "Erro ao carregar catálogo" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "A carregar catálogo" #: src/gwapplicationmanager.c:499 msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "" "O catálogo é inválido ou não existe. Verifique a localizacão do ficheiro, " "por favor." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "A guardar catálogo" # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Catálogo guardado" # src/gui/MenuFileCallBack.c:78 src/gui/MenuFileCallBack.c:411 # src/gui/MenuFileCallBack.c:425 src/gui/MenuFileCallBack.c:463 # src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "Falha na gravação do catálogo" # src/gui/NoteBookCatalog.c:112 src/gui/NoteBookCatalog.c:206 # src/gui/NoteBookCatalog.c:113 src/gui/NoteBookCatalog.c:207 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Direitos" # src/gui/NoteBookCatalog.c:117 src/gui/NoteBookCatalog.c:207 # src/gui/NoteBookCatalog.c:118 src/gui/NoteBookCatalog.c:208 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "Proprietário" # src/gui/NoteBookCatalog.c:122 src/gui/NoteBookCatalog.c:208 # src/gui/NoteBookCatalog.c:123 src/gui/NoteBookCatalog.c:209 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "Grupo" # src/gui/NoteBookCatalog.c:127 src/gui/NoteBookCatalog.c:209 # src/gui/NoteBookSearch.c:222 # src/gui/NoteBookCatalog.c:128 src/gui/NoteBookCatalog.c:210 # src/gui/NoteBookSearch.c:238 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "Tamanho" # src/gui/NoteBookCatalog.c:132 src/gui/NoteBookCatalog.c:210 # src/gui/NoteBookCatalog.c:133 src/gui/NoteBookCatalog.c:211 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "INode" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Data de acesso" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Data de modificação" # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/PropertiesBox.c:960 src/gui/PropertiesBox.c:961 # src/gui/PropertiesBox.c:1213 src/gui/PropertiesBox.c:1214 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "Date de criação" # src/gui/NoteBookManagmentCallBack.c:377 # src/gui/PropertiesBox.c:1161 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "Nome do sistema de ficheiros" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "Caminho de acesso" # src/gui/NoteBookCatalog.c:253 # src/gui/NoteBookCatalog.c:254 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Arquivo N#" # src/gui/NoteBookCatalog.c:254 # src/gui/NoteBookCatalog.c:255 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Tipo" # src/gui/NoteBookCatalog.c:255 # src/gui/NoteBookCatalog.c:256 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Nome do volume" # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/PropertiesBox.c:743 src/gui/PropertiesBox.c:744 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "Capacidade Total" # src/gui/NoteBookCatalog.c:257 # src/gui/NoteBookCatalog.c:258 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "Espaço livre" # src/gui/NoteBookCatalog.c:137 src/gui/NoteBookCatalog.c:211 # src/gui/NoteBookCatalog.c:258 src/gui/NoteBookSearch.c:227 # src/gui/NoteBookCatalog.c:138 src/gui/NoteBookCatalog.c:212 # src/gui/NoteBookCatalog.c:259 src/gui/NoteBookSearch.c:241 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Data" # src/gui/NoteBookManagmentCallBack.c:308 # src/gui/NoteBookManagmentCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:344 # src/gui/NoteBookManagmentCallBack.c:416 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Número de série" # src/gui/NoteBookSearch.c:217 # src/gui/NoteBookSearch.c:235 #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "Caminho" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "Completo" #: win32/config.h:288 msgid "Compact" msgstr "Compacto" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (mandatório)" #: win32/config.h:290 msgid "Main engine application." msgstr "Motor principal da aplicação." #: win32/config.h:291 msgid "GTK+ 2.6 RunTime (required)" msgstr "RunTime GTK+ 2.6 (obrigatório)" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "RunTime para o ambiente GUI." #: win32/config.h:293 msgid "Plugins" msgstr "Plugins" #: win32/config.h:294 msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "" "Plugins para extracção automática de descritores e plugins paraimportação/" "exportação de catálogos." #: win32/config.h:295 msgid "Languages Files" msgstr "Ficheiros de Linguagem" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "Todos os ficheiros de linguagem para a tradução do programa." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "Terá de desinstalar a sua anterior versão do GWhere" #: win32/config.h:298 msgid "Installer already running" msgstr "Instalador já em execução" #: win32/config.h:299 msgid "Install options" msgstr "Opções de Instalação" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "Quais os utilizadores que podem executar o GWhere?" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "Acesso a permissões para instalação do GWhere" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" "O GWhere pode ser instalado para todos os utilizadores ou apenas para o " "utilizador actual. Por favor seleccione para qual pretende instalar o GWhere." #: win32/config.h:303 msgid "All users|Current user" msgstr "Todos os utilizadores|Utilizador actual" #: win32/config.h:304 msgid "All users" msgstr "Todos os utilizadores" #~ msgid "" #~ "The catalog file doesn't exists. Check your catalog file path please." #~ msgstr "" #~ "O ficheiro de catálogo não existe. Verifica a localizacão do ficheiro, " #~ "por favor." #~ msgid "" #~ "The catalog file to load doesn't have a good file extension. Only .ctg " #~ "files are allowed to be loaded." #~ msgstr "" #~ "O ficheiro do catálogo a carregar não parece ter uma extensão adequada. " #~ "Apenas ficheiros .ctg podem ser carregados." # src/Catalog.c:71 src/Catalog.c:79 src/Catalog.c:88 src/Catalog.c:126 # src/Catalog.c:135 src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:91 src/Catalog.c:102 src/Catalog.c:115 src/Catalog.c:134 # src/Catalog.c:183 src/Catalog.c:195 src/Catalog.c:270 src/Catalog.c:363 #~ msgid "Load file" #~ msgstr "Carregar ficheiro" # src/Catalog.c:71 # src/Catalog.c:91 src/Catalog.c:102 #~ msgid "Error : cannot open this file." #~ msgstr "Erro : não é possível abrir este ficheiro." # src/Catalog.c:79 # src/Catalog.c:115 #~ msgid "Error : cannot read the file version." #~ msgstr "Erro : não é possível ler a versão do ficheiro." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #~ msgid "Load catalog" #~ msgstr "Carregar catálogo" # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:119 src/Catalog.c:139 src/Catalog.c:1235 src/Catalog.c:1251 # src/Catalog.c:1276 src/Catalog.c:1292 src/Catalog.c:1315 src/Catalog.c:1330 #~ msgid "Error : cannot close file." #~ msgstr "Erro : não é possível encerrar ficheiro." # src/Catalog.c:88 # src/Catalog.c:134 #~ msgid "Error : it's not a GWhere file." #~ msgstr "Erro : não se trata de um ficheiro do GWhere." # src/Catalog.c:126 # src/Catalog.c:183 #~ msgid "Error : this GWhere version file is unknown." #~ msgstr "Erro : a versão do ficheiro GWhere é desconhecida." # src/Catalog.c:135 # src/Catalog.c:195 #~ msgid "Error : cannot close this file after loading." #~ msgstr "Erro : não é possível fechar este ficheiro após o carregamento." # src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:270 src/Catalog.c:363 #~ msgid "Error : during the loading of disk." #~ msgstr "Erro : durante o carregamento do disco." # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:1140 src/Catalog.c:1221 #~ msgid "Error : cannot create file." #~ msgstr "Erro : não é possível criar ficheiro." # src/Catalog.c:972 src/Catalog.c:1047 # src/Catalog.c:1149 src/Catalog.c:1231 #~ msgid "Error : cannot write file version." #~ msgstr "Erro : não é possível criar versão do ficheiro." # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1186 src/Catalog.c:1344 #~ msgid "Error : cannot close catalog file." #~ msgstr "Erro : não é possível criar ficheiro de catálogo." # src/Catalog.c:1354 #~ msgid "Elapsed time to save the catalog : %d secs" #~ msgstr "Tempo gasto para gravar o catálogo: %d secs" # src/gui/NoteBookManagment.c:197 # src/gui/NoteBookManagment.c:216 #~ msgid "" #~ "Give the device file of the selected disk. The device file is the one of " #~ "the /etc/fstab file." #~ msgstr "" #~ "Indique o nome do ficheiro de dispositivo do disco seleccionado. O nome " #~ "do device é o que consta do ficheiro /etc/fstab." # src/gui/NoteBookManagment.c:339 # src/gui/NoteBookManagment.c:364 #~ msgid "Scan disk" #~ msgstr "Pesquisar disco" # src/Exploration.c:607 src/Exploration.c:663 src/Exploration.c:741 # src/Exploration.c:797 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 #~ msgid "unkown" #~ msgstr "desconhecido" # src/Supermount.c:824 src/data/VirtualFileSystemStats.c:453 # src/data/VirtualFileSystemStats.c:470 # src/Supermount.c:831 src/data/VirtualFileSystemStats.c:418 #~ msgid "Not yet implemented" #~ msgstr "Ainda nao está implementado" # src/main.c:45 #~ msgid "Is running on GNU/Linux" #~ msgstr "Está a correr em GNU/Linux" # src/main.c:47 #~ msgid "Is running on FreeBSD" #~ msgstr "Está a correr em FreeBSD" # src/main.c:47 #~ msgid "Is running on OpenBSD" #~ msgstr "Está a correr em OpenBSD" # src/main.c:47 #~ msgid "Is running on NetBSD" #~ msgstr "Está a correr em NetBSD" # src/main.c:49 #~ msgid "Is running on MS Windows" #~ msgstr "Está a correr em MS Windows" # src/main.c:51 #~ msgid "Is running on unkown OS" #~ msgstr "Está a correr num SO desconhecido" # src/gui/CaptureBox.c:92 src/gui/DialogBox.c:94 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:116 src/gui/DialogBox.c:94 # src/gui/ProgressBarBox.c:127 src/gui/ProgressBarBox.c:246 # src/gui/ProgressBarBox.c:504 src/gui/PropertiesBox.c:216 # src/gui/TextBox.c:122 #~ msgid "Cancel" #~ msgstr "Cancelar" # src/gui/ProgressBarBox.c:217 src/gui/ProgressBarBox.c:294 # src/gui/ProgressBarBox.c:276 src/gui/ProgressBarBox.c:460 #~ msgid "Ok" #~ msgstr "Ok" # src/gui/NoteBookCatalog.c:256 # src/gui/NoteBookCatalog.c:257 #~ msgid "Total Size" #~ msgstr "Tamanho Total" # src/gui/StatusBar.c:269 # src/gui/StatusBarCallBack.c:217 #~ msgid " " #~ msgstr " " # src/main.c:40 # src/main.c:42 #~ msgid "%s %s is running in debug mode\n" #~ msgstr "%s %s está a correr em debug mode\n" # src/gui/Interface.c:56 #~ msgid "GWhere" #~ msgstr "GWhere" # src/Catalog.c:710 src/Catalog.c:730 #~ msgid "" #~ "The disk hasn't been added\n" #~ "Unknown error" #~ msgstr "" #~ "O disco não foi adicionado\n" #~ "Erro desconhecido" # src/Catalog.c:893 #~ msgid "" #~ "The disk hasn't been added\n" #~ "Error : cannot add dir to the disk." #~ msgstr "" #~ "O disco não foi adicionado\n" #~ "Erro : não é possível adicionar directoria ao disco." gwhere-0.2.3/po/POTFILES.in0000644000175000017500000000372210243231363013633 0ustar bartbart# List of source files containing translatable strings. src/db/gwdbcatalog.c src/db/gwdbcategory.c src/db/gwdbdisk.c src/db/gwdbfile.c src/data/gwscandiskinfo.c src/data/gwenginequicksearch.c src/data/gwuserquicksearch.c src/data/gwsettings.c src/data/gwvirtualfilesystemstats.c src/tools/gwencode.c src/tools/gwfile.c src/tools/gwfilesystem.c src/tools/gwmail.c src/tools/gwpropertiesfile.c src/tools/gwstring.c src/res/gwicons.c src/gui/gtktextarea.c src/gui/gwcapturebox.c src/gui/gwcategorieseditbox.c src/gui/gwcomboboxcategories.c src/gui/gwdialogbox.c src/gui/gwfileselectionbox.c src/gui/gwmenu.c src/gui/gwmenuaction.c src/gui/gwmenuactioncallback.c src/gui/gwmenufile.c src/gui/gwmenufilecallback.c src/gui/gwmenuhelp.c src/gui/gwmenuhelpcallback.c src/gui/gwmenuoptions.c src/gui/gwmenuoptionscallback.c src/gui/gwmenupopup.c src/gui/gwmenupopupcallback.c src/gui/gwmsgbox.c src/gui/gwnotebook.c src/gui/gwnotebookcallback.c src/gui/gwnotebookcatalog.c src/gui/gwnotebookcatalogcallback.c src/gui/gwnotebookmanagment.c src/gui/gwnotebookmanagmentcallback.c src/gui/gwnotebooksearch.c src/gui/gwnotebooksearchcallback.c src/gui/gwprogressbarbox.c src/gui/gwpropertiesbox.c src/gui/gwpropertiesboxcallback.c src/gui/gwsettingscatalogfile.c src/gui/gwsettingsexplorer.c src/gui/gwsettingsexplorerdisk.c src/gui/gwsettingsexplorerfile.c src/gui/gwsettingssearch.c src/gui/gwsettingsquicksearch.c src/gui/gwsettingsgeneral.c src/gui/gwsettingsgui.c src/gui/gwsettingsinterface.c src/gui/gwsettingsmail.c src/gui/gwsettingswindowbox.c src/gui/gwsettingswindowboxcallback.c src/gui/gwstatusbar.c src/gui/gwstatusbarcallback.c src/gui/gwtextbox.c src/gui/gwtoolbar.c src/gui/gwwindowboxabout.c src/gui/gwwindowboxmail.c src/gui/gwwindowboxmailcallback.c src/main.c src/gwsupport.c src/gwcatalogmanager.c src/gwhelper.c src/gwsearchengine.c src/gwsupermount.c src/gwapplicationmanager.c src/gwapplicationmanager.h src/gwguimanager.c src/gwpluginsmanager.c src/gwdevicemanager.c win32/config.h gwhere-0.2.3/po/ar.nsh0000644000175000017500000000353210255625705013203 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ;This file has been translated by Luis PARRAVICINI (mailto:luis@ktulu.com.ar) !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_SPANISHAR} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (requerido)" LangString DESC_SecCopyUI ${CURLANG} "Programa principal." LangString TITLE_SecCopyGTK ${CURLANG} "Librerías de GTK+ 2.6 (requerido)" LangString DESC_SecCopyGTK ${CURLANG} "Librerías para la interfaz gráfica de usuario." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Plugins" LangString DESC_SecCopyPLUGINS ${CURLANG} "Plugins para la extracción automática de las descripciones de archivos y plugins para la importacion/exportacion de catálogos." LangString TITLE_SecCopyLANG ${CURLANG} "Archivos de lenguaje" LangString DESC_SecCopyLANG ${CURLANG} "Todos los archivos de lenguajes para la traducción del programa." LangString UninstBefore ${CURLANG} "Debes desinstalar tu ultima version de $(^NameDA) instalada" LangString InstAlready ${CURLANG} "El instalador ya esta corriendo" LangString InstTypeFull ${CURLANG} "Completa" LangString InstTypeCompact ${CURLANG} "Compacta" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.es" LangString TITLE_SecAllUsersUI ${CURLANG} "Opciones de instalación" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Que usuarios pueden correr $(^NameDA)?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "Permisos de acceso de la instalacion de $(^NameDA)" LangString ASK_SecAllUsersUI ${CURLANG} "$(^NameDA) puede ser instalado para todos los usuarios o solamente para el usuario actual. Seleccione que tipo de instalación desea." LangString LIST_SecAllUsersUI ${CURLANG} "Todos los usuarios|Usuario actual" LangString STATE_SecAllUsersUI ${CURLANG} "Todos los usuarios" !verbose 4 gwhere-0.2.3/po/ar.po0000644000175000017500000036227310472436216013041 0ustar bartbart# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR , YEAR. # # src/SearchEngine.c:453 # src/SearchEngine.c:320 msgid "" msgstr "" "Project-Id-Version: 0.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2005-06-09 07:58:-0300\n" "Last-Translator: Luis Parravicini \n" "Language-Team: spanish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" # src/tools/gwmail.c:74 #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "No se pueden recibir datos" # src/tools/gwmail.c:80 #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "Conexión cerrada por el cliente\n" # src/tools/gwmail.c:109 #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "No se puede enviar datos" # src/tools/Calcul.c:46 # src/tools/gwstring.c:148 #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%.0f bytes" # src/tools/Calcul.c:49 # src/tools/gwstring.c:152 #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f Kb" # src/tools/Calcul.c:52 # src/tools/gwstring.c:156 #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f Mb" # src/tools/Calcul.c:55 # src/tools/gwstring.c:160 #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f Gb" # src/tools/Calcul.c:59 # src/tools/gwstring.c:165 #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f Tb" # src/tools/Calcul.c:63 # src/tools/gwstring.c:170 #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f Pb" # src/tools/Calcul.c:67 # src/tools/gwstring.c:175 #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f Hb" # src/tools/Calcul.c:72 src/tools/Calcul.c:77 # src/tools/gwstring.c:181 src/tools/gwstring.c:187 #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f Ib" # src/CaptureBox.c:84 src/MenuFile.c:291 src/MsgBox.c:71 src/Properties.c:164 # src/TextBox.c:100 # src/gui/CaptureBox.c:96 src/gui/DialogBox.c:59 src/gui/MsgBox.c:75 # src/gui/PropertiesBox.c:189 src/gui/TextBox.c:107 # src/gui/CaptureBox.c:101 src/gui/DialogBox.c:79 src/gui/MsgBox.c:76 # src/gui/PropertiesBox.c:193 src/gui/SettingsWindowBox.c:161 # src/gui/TextBox.c:112 #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "_OK" # src/CaptureBox.c:92 src/MenuFile.c:348 src/ProgressBarBox.c:115 # src/ProgressBarBox.c:187 src/ProgressBarBox.c:274 src/Properties.c:189 # src/TextBox.c:108 # src/gui/CaptureBox.c:116 src/gui/DialogBox.c:94 # src/gui/ProgressBarBox.c:127 src/gui/ProgressBarBox.c:246 # src/gui/ProgressBarBox.c:504 src/gui/PropertiesBox.c:216 # src/gui/TextBox.c:122 # src/gui/CaptureBox.c:126 src/gui/DialogBox.c:114 # src/gui/MailWindowBox.c:205 src/gui/ProgressBarBox.c:141 # src/gui/ProgressBarBox.c:564 src/gui/PropertiesBox.c:222 # src/gui/SettingsWindowBox.c:173 src/gui/TextBox.c:129 #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "_Cancelar" # src/Categories.c:58 src/MenuPopup.c:98 # src/gui/CategoriesEditBox.c:88 src/gui/MenuPopup.c:99 # src/gui/CategoriesEditBox.c:92 src/gui/MenuActionCallBack.c:54 # src/gui/MenuPopup.c:139 #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Editar categorías" # src/Categories.c:68 # src/gui/CategoriesEditBox.c:104 # src/gui/CategoriesEditBox.c:108 #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "Lista de categorías : " # src/Categories.c:99 src/NoteBookCatalog.c:109 src/NoteBookCatalog.c:186 # src/NoteBookCatalog.c:220 src/NoteBookSearch.c:133 # src/gui/CategoriesEditBox.c:135 src/gui/NoteBookCatalog.c:108 # src/gui/NoteBookCatalog.c:206 src/gui/NoteBookCatalog.c:253 # src/gui/NoteBookSearch.c:229 # src/ApplicationManager.h:156 src/ApplicationManager.h:288 # src/gui/CategoriesEditBox.c:135 src/gui/NoteBookSearch.c:265 #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "Nombre" # src/Categories.c:105 src/NoteBookCatalog.c:149 src/NoteBookCatalog.c:194 # src/NoteBookCatalog.c:228 src/NoteBookSearch.c:163 # src/gui/CategoriesEditBox.c:141 src/gui/NoteBookCatalog.c:148 # src/gui/NoteBookCatalog.c:214 src/gui/NoteBookCatalog.c:261 # src/gui/NoteBookSearch.c:185 src/gui/NoteBookSearch.c:247 # src/ApplicationManager.h:276 src/ApplicationManager.h:420 # src/gui/CategoriesEditBox.c:141 src/gui/NoteBookSearch.c:217 # src/gui/NoteBookSearch.c:295 #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "Descripción" # src/Categories.c:118 # src/gui/CategoriesEditBox.c:154 # src/gui/CategoriesEditBox.c:152 #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "_Actualizar" # src/Categories.c:123 # src/gui/CategoriesEditBox.c:159 # src/gui/CategoriesEditBox.c:160 #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" "Permite actualizar las propiedades de la categoría seleccionada. Clickea en " "el botón Agregar / Actualizar para guardar las actualizaciones." # src/Categories.c:127 # src/gui/CategoriesEditBox.c:163 # src/gui/CategoriesEditBox.c:167 #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "_Eliminar" # src/Categories.c:132 # src/gui/CategoriesEditBox.c:168 # src/gui/CategoriesEditBox.c:175 #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" "Elimina la categoría seleccionada de la lista de categorías. Las categorías " "pueden ser eliminadas solo si no hay ningún item que la utilice." # src/Categories.c:147 # src/gui/CategoriesEditBox.c:183 # src/gui/CategoriesEditBox.c:189 #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "Nombre de categoría : " # src/Categories.c:157 # src/gui/CategoriesEditBox.c:193 # src/gui/CategoriesEditBox.c:200 #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "Ingrese el nombre de la categoría." # src/Categories.c:160 # src/gui/CategoriesEditBox.c:196 # src/gui/CategoriesEditBox.c:205 #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "Descripción : " # src/Categories.c:183 # src/gui/CategoriesEditBox.c:219 # src/gui/CategoriesEditBox.c:227 #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "Ingrese la descripción de la categoría." # src/Categories.c:196 # src/gui/CategoriesEditBox.c:232 # src/gui/CategoriesEditBox.c:244 #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "Agregar / Actualizar" # src/Categories.c:201 # src/gui/CategoriesEditBox.c:237 # src/gui/CategoriesEditBox.c:251 #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "Guardar los cambios en la categoría." # src/Categories.c:207 src/MenuPopup.c:57 src/MenuPopup.c:127 # src/gui/CategoriesEditBox.c:243 src/gui/MenuPopup.c:58 # src/gui/MenuPopup.c:128 # src/gui/CategoriesEditBox.c:258 src/gui/MenuPopup.c:69 # src/gui/MenuPopup.c:170 #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Cerrar" # src/Categories.c:212 # src/gui/CategoriesEditBox.c:248 # src/gui/CategoriesEditBox.c:265 #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Cerrar la ventana de edición de propiedades de las categorías." # src/ComboBoxCategories.c:105 src/NoteBookManagmentCallBack.c:168 # src/gui/ComboBoxCategories.c:105 src/gui/NoteBookManagmentCallBack.c:203 # src/data/CatalogFileInfo.c:71 src/gui/NoteBookManagmentCallBack.c:212 #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "ninguna" # src/Categories.c:297 # src/gui/CategoriesEditBox.c:368 # src/gui/CategoriesEditBox.c:389 #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "Eliminar categoría" # src/Categories.c:297 # src/gui/CategoriesEditBox.c:368 # src/gui/CategoriesEditBox.c:389 #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "No se puede eliminar esta categorría. Es usada por un item." # src/Categories.c:193 src/Categories.c:395 src/Categories.c:603 # src/gui/CategoriesEditBox.c:229 src/gui/CategoriesEditBox.c:526 # src/gui/CategoriesEditBox.c:849 # src/gui/CategoriesEditBox.c:557 src/gui/CategoriesEditBox.c:935 #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "Agregar" # src/Categories.c:410 src/Categories.c:623 # src/gui/CategoriesEditBox.c:553 src/gui/CategoriesEditBox.c:882 # src/gui/CategoriesEditBox.c:584 src/gui/CategoriesEditBox.c:969 #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "Actualizar" # src/MenuFile.c:320 # src/gui/DialogBox.c:77 # src/gui/DialogBox.c:97 #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "_No" # src/MenuFile.c:213 src/MenuFile.c:423 # src/gui/FileSelectionBox.c:64 # src/gui/FileSelectionBox.c:72 #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "Ocultar las operaciones sobre los archivos" # src/MenuFile.c:428 # src/gui/FileSelectionBox.c:78 #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "Mostrar operaciones sobre los archivos" # src/Menu.c:148 # src/gui/MenuAction.c:41 # src/gui/MenuAction.c:53 #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "A_cción" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "_Expandir todo" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "Expandir solo los _discos" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "C_olapsar todo" # src/Menu.c:162 # src/gui/MenuAction.c:54 # src/gui/MenuAction.c:74 #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "_Editar categorías" # src/gui/MenuFileCallBack.c:142 # src/gui/MenuActionCallBack.c:54 #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "No hay catálogo abierto : no se puede editar las categorías" # src/Menu.c:50 # src/gui/MenuFile.c:48 # src/gui/MenuFile.c:79 #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "_Archivo" # src/Menu.c:64 # src/gui/MenuFile.c:61 # src/gui/MenuFile.c:100 #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "_Nuevo" # src/Menu.c:74 # src/gui/MenuFile.c:71 # src/gui/MenuFile.c:114 #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "_Abrir" # src/Menu.c:84 # src/gui/MenuFile.c:81 # src/gui/MenuFile.c:128 #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "_Guardar" # src/Menu.c:94 # src/gui/MenuFile.c:91 # src/gui/MenuFile.c:142 #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "G_uardar como" # src/Menu.c:104 # src/gui/MenuFile.c:101 # src/gui/MenuFile.c:156 #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "_Cerrar" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "Importar" # src/gui/SettingsExplorer.c:46 #: src/gui/gwmenufile.c:199 msgid "Export" msgstr "Exportar" # src/Menu.c:121 # src/gui/MenuFile.c:118 # src/gui/MenuFile.c:177 #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "_Propiedades" # src/MenuFile.c:272 # src/gui/MenuFileCallBack.c:82 # src/gui/MenuFile.c:198 #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "A_rchivos recientes" # src/Menu.c:138 # src/gui/MenuFile.c:135 # src/gui/MenuFile.c:221 #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "_Salir" # src/MenuFile.c:54 src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:156 # src/ToolBar.c:53 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 src/gui/ToolBar.c:70 # src/gui/MenuFileCallBack.c:80 src/gui/MenuFileCallBack.c:694 # src/gui/MenuFileCallBack.c:719 src/gui/MenuFileCallBack.c:768 # src/gui/NoteBookManagmentCallBack.c:199 src/gui/ToolBar.c:79 #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Nuevo catálogo" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "No hay disponible un plugin para los catálogos" # src/MenuFile.c:284 # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:82 # src/gui/MenuFileCallBack.c:108 src/gui/MenuFileCallBack.c:223 # src/gui/MenuFileCallBack.c:73 src/gui/MenuFileCallBack.c:110 # src/gui/MenuFileCallBack.c:150 src/gui/MenuFileCallBack.c:193 # src/gui/MenuFileCallBack.c:477 #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "¿Desea guardar el catálogo? :\n" "\n" # src/MenuFile.c:269 # src/gui/MenuFileCallBack.c:56 # src/gui/MenuFileCallBack.c:74 #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Nuevo archivo" # src/MenuFile.c:54 src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:156 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 # src/gui/MenuFileCallBack.c:80 src/gui/MenuFileCallBack.c:694 # src/gui/MenuFileCallBack.c:719 src/gui/MenuFileCallBack.c:768 # src/gui/NoteBookManagmentCallBack.c:199 #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "Ingrese el nombre del catálogo" # src/MenuFile.c:199 src/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 # src/gui/MenuFileCallBack.c:120 src/gui/MenuFileCallBack.c:810 # src/gui/MenuFileCallBack.c:832 src/gui/MenuFileCallBack.c:882 # src/gui/ToolBar.c:83 #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "Abrir catálogo" # src/MenuFile.c:272 # src/gui/MenuFileCallBack.c:82 # src/gui/MenuFileCallBack.c:109 #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "Abrir archivo" # src/MenuFile.c:275 # src/gui/MenuFileCallBack.c:108 # src/gui/MenuFileCallBack.c:151 #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Cerrar archivo" # src/gui/MenuFileCallBack.c:142 # src/gui/MenuFileCallBack.c:389 #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "No hay catálogo abierto" # src/gui/MenuFileCallBack.c:194 src/gui/MenuFileCallBack.c:208 #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "Enviar archivo por mail" # src/gui/MenuFileCallBack.c:208 #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "" "Por favor configurar las opciones de mail en las preferencias para poder " "enviar mails." # src/MenuFile.c:382 # src/gui/MenuFileCallBack.c:175 src/gui/MenuFileCallBack.c:202 # src/gui/MenuFileCallBack.c:406 src/gui/MenuFileCallBack.c:503 # src/gui/MenuFileCallBack.c:596 src/gui/MenuFileCallBack.c:686 # src/gui/MenuFileCallBack.c:763 # src/gui/MenuFileCallBack.c:248 src/gui/MenuFileCallBack.c:415 # src/gui/MenuFileCallBack.c:446 src/gui/MenuFileCallBack.c:688 # src/gui/MenuFileCallBack.c:803 src/gui/MenuFileCallBack.c:917 # src/gui/MenuFileCallBack.c:979 src/gui/MenuFileCallBack.c:1027 # src/gui/MenuFileCallBack.c:1147 #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "Guardar como catálogo" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "El catálogo actual no se guardó nunca, no puede enviarse" # src/StatusBar.c:220 # src/gui/MenuFileCallBack.c:142 # src/gui/MenuFileCallBack.c:389 #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "Propiedades del catálogo" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 # src/Catalog.c:1429 src/Catalog.c:1438 src/Catalog.c:1573 src/Catalog.c:1585 # src/Catalog.c:1589 src/Catalog.c:1626 src/Catalog.c:1677 src/Catalog.c:1704 # src/Catalog.c:1742 src/Catalog.c:1768 src/gui/ToolBar.c:87 #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "Guardar catálogo" # src/MenuFile.c:278 # src/gui/MenuFileCallBack.c:223 # src/gui/MenuFileCallBack.c:476 #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "Salir " #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "Importar catálogo de" # src/StatusBar.c:220 # src/gui/MenuFileCallBack.c:142 # src/gui/MenuFileCallBack.c:389 #: src/gui/gwmenufilecallback.c:1231 msgid "Catalog imported" msgstr "Catálogo importado" # src/gui/MenuFileCallBack.c:142 # src/gui/MenuFileCallBack.c:389 #: src/gui/gwmenufilecallback.c:1233 msgid "Catalog is not imported" msgstr "El catálogo no se importo" # src/gui/MenuFileCallBack.c:142 # src/gui/MenuFileCallBack.c:389 #: src/gui/gwmenufilecallback.c:1267 msgid "A catalog is already opened" msgstr "El catálogo ya está abierto" # src/MenuFile.c:54 src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:156 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 # src/gui/MenuFileCallBack.c:80 src/gui/MenuFileCallBack.c:694 # src/gui/MenuFileCallBack.c:719 src/gui/MenuFileCallBack.c:768 # src/gui/NoteBookManagmentCallBack.c:199 #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 msgid "Export catalog to" msgstr "Exportar catálogo a" # src/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 # src/gui/StatusBarCallBack.c:226 #: src/gui/gwmenufilecallback.c:1291 msgid "Catalog exported" msgstr "Catálogo exportado" # src/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 # src/gui/StatusBarCallBack.c:226 #: src/gui/gwmenufilecallback.c:1293 msgid "Catalog is not exported" msgstr "El catálogo no se exportó" # src/Menu.c:172 # src/gui/MenuHelp.c:41 # src/gui/MenuHelp.c:54 #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "Ay_uda" # src/Menu.c:187 # src/gui/MenuHelp.c:54 # src/gui/MenuHelp.c:76 #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "_Acerca" # src/NoteBookManagment.c:258 # src/gui/NoteBookManagment.c:298 # src/gui/MenuOptions.c:55 #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "_Opciones" # src/gui/MenuOptions.c:76 #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "Pre_ferencias" # src/MenuPopup.c:37 src/MenuPopup.c:107 # src/gui/MenuPopup.c:38 src/gui/MenuPopup.c:108 # src/gui/MenuPopup.c:45 src/gui/MenuPopup.c:146 #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Nuevo" # src/MenuPopup.c:42 src/MenuPopup.c:112 # src/gui/MenuPopup.c:43 src/gui/MenuPopup.c:113 # src/gui/MenuPopup.c:51 src/gui/MenuPopup.c:152 #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "Abrir" # src/MenuPopup.c:47 src/MenuPopup.c:117 # src/gui/MenuPopup.c:48 src/gui/MenuPopup.c:118 # src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:158 #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "Guardar" # src/MenuPopup.c:52 src/MenuPopup.c:122 # src/gui/MenuPopup.c:53 src/gui/MenuPopup.c:123 # src/gui/MenuPopup.c:63 src/gui/MenuPopup.c:164 #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "Guardar como" # src/MenuPopup.c:66 # src/gui/MenuPopup.c:67 # src/gui/MenuPopup.c:78 #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "Salir" # src/MenuPopup.c:83 src/MenuPopup.c:158 # src/gui/MenuPopup.c:84 src/gui/MenuPopup.c:159 # src/gui/MenuPopup.c:121 src/gui/MenuPopup.c:228 #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Renombrar" # src/MenuPopup.c:93 src/MenuPopup.c:173 src/MenuPopup.c:204 # src/MenuPopup.c:238 src/MenuPopupCallBack.c:123 src/MenuPopupCallBack.c:343 # src/MenuPopupCallBack.c:428 src/MenuPopupCallBack.c:546 # src/gui/MenuPopup.c:94 src/gui/MenuPopup.c:174 src/gui/MenuPopup.c:205 # src/gui/MenuPopup.c:240 src/gui/MenuPopupCallBack.c:129 # src/gui/MenuPopupCallBack.c:358 src/gui/MenuPopupCallBack.c:444 # src/gui/MenuPopupCallBack.c:574 # src/gui/MenuPopup.c:133 src/gui/MenuPopup.c:246 src/gui/MenuPopup.c:304 # src/gui/MenuPopup.c:365 src/gui/MenuPopupCallBack.c:189 # src/gui/MenuPopupCallBack.c:560 src/gui/MenuPopupCallBack.c:705 # src/gui/MenuPopupCallBack.c:900 #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Editar descripción" # src/MenuPopup.c:136 src/MenuPopup.c:182 src/MenuPopup.c:218 # src/MenuPopup.c:252 src/Properties.c:85 # src/gui/MenuPopup.c:137 src/gui/MenuPopup.c:183 src/gui/MenuPopup.c:219 # src/gui/MenuPopup.c:254 src/gui/PropertiesBox.c:110 # src/gui/MenuPopup.c:179 src/gui/MenuPopup.c:255 src/gui/MenuPopup.c:319 # src/gui/MenuPopup.c:380 src/gui/PropertiesBox.c:112 #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "Propiedades" # src/MenuPopup.c:153 src/MenuPopup.c:199 # src/gui/MenuPopup.c:154 src/gui/MenuPopup.c:200 # src/gui/MenuPopup.c:222 src/gui/MenuPopup.c:298 #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "Mover A..." # src/MenuPopup.c:163 # src/gui/MenuPopup.c:164 # src/gui/MenuPopup.c:234 #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "Borrar disco" # src/MenuPopup.c:168 src/MenuPopupCallBack.c:292 # src/gui/MenuPopup.c:169 src/gui/MenuPopupCallBack.c:306 # src/gui/MenuPopup.c:240 src/gui/MenuPopupCallBack.c:486 #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "Cambiar la etiqueta" # src/MenuPopup.c:209 src/MenuPopup.c:243 # src/gui/MenuPopup.c:210 src/gui/MenuPopup.c:245 # src/gui/MenuPopup.c:310 src/gui/MenuPopup.c:371 #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "Eliminar del catálogo" # src/MenuPopup.c:259 # src/gui/MenuPopup.c:261 # src/gui/MenuPopup.c:388 #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "Editar archivo" # src/MenuPopup.c:259 # src/gui/MenuPopup.c:261 # src/gui/MenuPopup.c:389 #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "No se puede editar este archivo!!\n" # src/MenuPopupCallBack.c:55 # src/gui/MenuPopupCallBack.c:57 # src/gui/MenuPopupCallBack.c:65 #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Renombrar catálogo" # src/MenuPopupCallBack.c:55 # src/gui/MenuPopupCallBack.c:57 # src/gui/MenuPopupCallBack.c:65 #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "Ingrese el nuevo nombre del catálogo" # src/NoteBookManagmentCallBack.c:174 # src/gui/NoteBookManagmentCallBack.c:213 # src/gui/NoteBookManagmentCallBack.c:223 #: src/gui/gwmenupopupcallback.c:121 msgid "Invalid filled catalog name" msgstr "El nombre de catálogo ingresado es inválido" # src/MenuPopupCallBack.c:123 # src/gui/MenuPopupCallBack.c:129 # src/gui/MenuPopupCallBack.c:189 #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "Descripción del catáolgo" # src/MenuPopupCallBack.c:218 # src/gui/MenuPopupCallBack.c:225 # src/gui/MenuPopupCallBack.c:361 #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Renombrar disco" # src/MenuPopupCallBack.c:218 # src/gui/MenuPopupCallBack.c:225 # src/gui/MenuPopupCallBack.c:361 #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "Ingrese nombre del nuevo disco" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "El nombre de disco ingresado ya existe en el catálogo actual" #: src/gui/gwmenupopupcallback.c:374 msgid "No new disk name was filled" msgstr "No se ingreso el nombre del nuevo catálogo" # src/MenuPopupCallBack.c:292 # src/gui/MenuPopupCallBack.c:306 # src/gui/MenuPopupCallBack.c:486 #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "Ingrese etiqueta del nuevo disco" # src/MenuPopupCallBack.c:343 # src/gui/MenuPopupCallBack.c:358 # src/gui/MenuPopupCallBack.c:560 #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "Descripción del disco" # src/MenuPopupCallBack.c:218 # src/gui/MenuPopupCallBack.c:225 # src/gui/MenuPopupCallBack.c:361 #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "Renombrar directorio" # src/MenuPopupCallBack.c:218 # src/gui/MenuPopupCallBack.c:225 # src/gui/MenuPopupCallBack.c:361 #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "Ingrese el nombre del nuevo directorio" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "El nombre de directorio ingresado ya existe en el directorio actual" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "No se ingreso el nombre del nuevo directorio" # src/MenuPopupCallBack.c:428 # src/gui/MenuPopupCallBack.c:444 # src/gui/MenuPopupCallBack.c:705 #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "Descripción del directorio" # src/MenuPopupCallBack.c:218 # src/gui/MenuPopupCallBack.c:225 # src/gui/MenuPopupCallBack.c:361 #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "Renombrar archivo" # src/MenuPopupCallBack.c:218 # src/gui/MenuPopupCallBack.c:225 # src/gui/MenuPopupCallBack.c:361 #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "Ingrese el nombre del nuevo archivo" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "El nombre de archivo ingresado ya existe en el directorio actual" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "No se ingreso el nombre del nuevo archivo" # src/MenuPopupCallBack.c:546 # src/gui/MenuPopupCallBack.c:574 # src/gui/MenuPopupCallBack.c:900 #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "Descripción del archivo" # src/NoteBookCatalog.c:67 # src/gui/NoteBookCatalog.c:67 # src/gui/NoteBookCatalog.c:88 #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Archivo" # src/NoteBookCatalog.c:154 # src/gui/NoteBookCatalog.c:153 # src/gui/NoteBookCatalog.c:162 #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "Catálogo" # src/ToolBar.c:59 # src/gui/ToolBar.c:76 # src/gui/NoteBookCatalog.c:655 #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "Cerrando catálogo" # src/gui/NoteBookManagmentCallBack.c:234 # src/ApplicationManager.c:456 src/gui/NoteBookCatalog.c:655 # src/gui/NoteBookSearchCallBack.c:93 #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "Por favor espere..." # src/Properties.c:641 # src/gui/PropertiesBox.c:583 # src/gui/SettingsCatalogFile.c:60 #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Catálogo cerrado" # src/Exploration.c:594 src/Exploration.c:650 src/Exploration.c:728 # src/Exploration.c:784 # src/Exploration.c:620 src/Exploration.c:676 src/Exploration.c:757 # src/Exploration.c:813 # src/gui/NoteBookCatalogCallBack.c:680 src/gui/NoteBookCatalogCallBack.c:753 # src/gui/NoteBookCatalogCallBack.c:850 src/gui/NoteBookCatalogCallBack.c:914 #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "dueño desconocido" # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 # src/gui/NoteBookCatalogCallBack.c:688 src/gui/NoteBookCatalogCallBack.c:761 # src/gui/NoteBookCatalogCallBack.c:858 src/gui/NoteBookCatalogCallBack.c:922 #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "grupo desconocido" # src/NoteBookManagment.c:80 src/NoteBookManagmentCallBack.c:174 # src/gui/NoteBookManagment.c:127 src/gui/NoteBookManagmentCallBack.c:213 # src/gui/NoteBookManagment.c:131 src/gui/NoteBookManagmentCallBack.c:223 #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Nuevo disco" # src/NoteBookManagment.c:96 # src/gui/NoteBookManagment.c:139 # src/gui/NoteBookManagment.c:145 #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "Seleccione el disco que será agregado como disco a tu catálogo." # src/NoteBookManagment.c:98 # src/gui/NoteBookManagment.c:142 # src/gui/NoteBookManagment.c:150 #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "Seleccione disco : " # src/NoteBookManagment.c:125 # src/gui/NoteBookManagment.c:167 # src/gui/NoteBookManagment.c:180 #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "" "Ingrese el número del nuevo disco. Este número puede ayudarte como un " "histórico del catálogo." # src/NoteBookManagment.c:127 src/Properties.c:717 # src/gui/NoteBookManagment.c:170 src/gui/PropertiesBox.c:653 # src/gui/NoteBookManagment.c:185 src/gui/PropertiesBox.c:761 #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Archivo N# : " # src/NoteBookManagment.c:142 # src/gui/NoteBookManagment.c:183 # src/gui/NoteBookManagment.c:200 #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "" "Ingrese el nombre del nuevo disco. Es el nombre el que aparecerá en el " "catálogo." # src/NoteBookManagment.c:144 # src/gui/NoteBookManagment.c:186 # src/gui/NoteBookManagment.c:205 #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "Nombre : " # src/NoteBookManagment.c:160 src/Properties.c:945 src/Properties.c:1288 # src/Properties.c:1646 # src/gui/NoteBookManagment.c:200 src/gui/PropertiesBox.c:811 # src/gui/PropertiesBox.c:1065 src/gui/PropertiesBox.c:1334 # src/gui/NoteBookManagment.c:223 src/gui/PropertiesBox.c:993 # src/gui/PropertiesBox.c:1324 src/gui/PropertiesBox.c:1670 #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "Categoría : " # src/NoteBookManagment.c:166 # src/gui/NoteBookManagment.c:206 # src/gui/NoteBookManagment.c:229 #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "" "Seleccione la categoría que será aplicada al disco que será agregado " "(incluso si la opción está seleccionada)." # src/NoteBookManagment.c:251 # src/gui/NoteBookManagment.c:289 # src/gui/NoteBookManagment.c:338 #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "Ingrese el nombre del dispositivo del medio seleccionado." # src/NoteBookManagment.c:180 src/NoteBookManagmentCallBack.c:312 # src/NoteBookManagmentCallBack.c:354 # src/gui/NoteBookManagment.c:219 src/gui/NoteBookManagmentCallBack.c:332 # src/gui/NoteBookManagmentCallBack.c:376 # src/gui/NoteBookManagment.c:246 src/gui/NoteBookManagmentCallBack.c:358 # src/gui/NoteBookManagmentCallBack.c:418 #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Info : " # src/NoteBookManagment.c:191 # src/gui/NoteBookManagment.c:229 # src/gui/NoteBookManagment.c:258 #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "" "Ingrese el sistema de archivos del los discos seleccionados (por ejemplo: " "ext2, ext3, vfat, ntfs, ...)." # src/NoteBookManagment.c:193 src/NoteBookManagmentCallBack.c:314 # src/NoteBookManagmentCallBack.c:368 src/Properties.c:759 # src/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 # src/gui/NoteBookManagment.c:263 src/gui/NoteBookManagmentCallBack.c:363 # src/gui/NoteBookManagmentCallBack.c:435 src/gui/PropertiesBox.c:802 #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Tipo : " # src/NoteBookManagment.c:203 # src/gui/NoteBookManagment.c:241 # src/gui/NoteBookManagment.c:274 #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "Mostrar si el disco seleccionado está montado o no." # src/NoteBookManagment.c:205 src/NoteBookManagmentCallBack.c:316 # src/NoteBookManagmentCallBack.c:374 # src/gui/NoteBookManagment.c:244 src/gui/NoteBookManagmentCallBack.c:338 # src/gui/NoteBookManagmentCallBack.c:395 # src/gui/NoteBookManagment.c:279 src/gui/NoteBookManagmentCallBack.c:368 # src/gui/NoteBookManagmentCallBack.c:444 #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "Montado : " # src/NoteBookManagment.c:215 # src/gui/NoteBookManagment.c:253 # src/gui/NoteBookManagment.c:290 #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "" "Ingrese el nombre del volumen del disco seleccionado (solo si está montado)." # src/NoteBookManagmentCallBack.c:318 # src/gui/NoteBookManagment.c:256 src/gui/NoteBookManagmentCallBack.c:341 # src/gui/NoteBookManagment.c:295 src/gui/NoteBookManagmentCallBack.c:373 #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Volumen : " # src/NoteBookManagment.c:227 # src/gui/NoteBookManagment.c:265 # src/gui/NoteBookManagment.c:306 #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "" "Ingrese el número de serie del disco seleccionado (solo si está montado). " "Este número es un número de fabricación." # src/NoteBookManagment.c:229 # src/gui/NoteBookManagment.c:268 # src/gui/NoteBookManagment.c:311 #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Número de serie : " # src/NoteBookManagment.c:239 # src/gui/NoteBookManagment.c:277 # src/gui/NoteBookManagment.c:322 #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "" "Ingrese el espacio total del disco seleccionado (solo si se encuentra " "montado)." # src/NoteBookManagment.c:241 src/NoteBookManagmentCallBack.c:322 # src/NoteBookManagmentCallBack.c:402 # src/gui/NoteBookManagment.c:280 src/gui/NoteBookManagmentCallBack.c:347 # src/gui/NoteBookManagmentCallBack.c:420 # src/gui/NoteBookManagment.c:327 src/gui/NoteBookManagmentCallBack.c:383 # src/gui/NoteBookManagmentCallBack.c:479 #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "Capacidad : " # src/NoteBookManagment.c:251 # src/gui/NoteBookManagment.c:289 # src/gui/NoteBookManagment.c:338 #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "" "Ingrese el espacio libre del disco seleccionado (solo si se encuentra " "montado)." # src/NoteBookManagment.c:253 src/NoteBookManagmentCallBack.c:324 # src/NoteBookManagmentCallBack.c:407 # src/gui/NoteBookManagment.c:292 src/gui/NoteBookManagmentCallBack.c:350 # src/gui/NoteBookManagmentCallBack.c:424 # src/gui/NoteBookManagment.c:343 src/gui/NoteBookManagmentCallBack.c:388 # src/gui/NoteBookManagmentCallBack.c:491 #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Espacio libre : " # src/NoteBookManagment.c:258 # src/gui/NoteBookManagment.c:298 # src/gui/NoteBookManagment.c:351 #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "Opciones" # src/NoteBookManagment.c:269 # src/gui/NoteBookManagment.c:307 # src/gui/NoteBookManagment.c:362 #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "Mostrar información" # src/NoteBookManagment.c:276 # src/gui/NoteBookManagment.c:314 # src/gui/NoteBookManagment.c:370 #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" "Muestra información del dispositivo seleccionado como ruta, capacidad, " "espacio libre, etiqueta,..." # src/NoteBookManagment.c:278 # src/gui/NoteBookManagment.c:317 # src/gui/NoteBookManagment.c:376 #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Automontar" # src/NoteBookManagment.c:285 # src/gui/NoteBookManagment.c:324 # src/gui/NoteBookManagment.c:384 #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" "Montar el disco solo si no lo estaba. Y desmontar luego el disco incluso si " "estaba montado antes de la exploración." # src/Properties.c:706 # src/gui/PropertiesBox.c:645 # src/gui/PropertiesBox.c:751 #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "Explorar la estructura del disco." #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "" "Mantene esta opcion seleccionada para escanear toda la informacion de " "directorios y archivos." # src/NoteBookManagment.c:287 # src/gui/NoteBookManagment.c:327 # src/gui/NoteBookManagment.c:390 #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "Explorar archivos comprimidos (.tar, .gz, .zip, ...)" # src/NoteBookManagment.c:294 # src/gui/NoteBookManagment.c:334 # src/gui/NoteBookManagment.c:398 #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "Todavía sin implementar!!\n" "Explorar todos los archivos comprimidos, como si fuera un directorio. Los " "archivos comprimidos son los archivos tar o gzip." # src/NoteBookManagment.c:296 # src/gui/NoteBookManagment.c:337 # src/gui/NoteBookManagment.c:403 #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "Expulsar disco si es posible" # src/NoteBookManagment.c:303 # src/gui/NoteBookManagment.c:344 # src/gui/NoteBookManagment.c:411 #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" "Expulsar el disco si es posible (CD-ROM...), incluso si la bandeja estaba " "cerrada. Esto está habilitado sólo si automontar está habilitado!!" # src/NoteBookManagment.c:305 # src/gui/NoteBookManagment.c:347 # src/gui/NoteBookManagment.c:416 #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "Setear la categoría recursivamente" # src/NoteBookManagment.c:311 # src/gui/NoteBookManagment.c:353 # src/gui/NoteBookManagment.c:424 #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "" "Aplicar la categoría seleccionada a todos los items en el disco a agregar " "(disco, directorios y archivos)." # src/NoteBookManagment.c:313 # src/gui/NoteBookManagment.c:356 # src/gui/NoteBookManagment.c:429 #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "Descripción automática" # src/NoteBookManagment.c:318 # src/gui/NoteBookManagment.c:361 # src/gui/NoteBookManagment.c:437 #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "" "Crear una descripción automaticamente del archivo (descripción del formato " "del archivo, tamaño de la imagen para xmp o jpg, etc...)." #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "Usar un patron avanzado para generar el nombre del disco" #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Podes completar tags extras para generar un nombre de disco con la " "informacion del disco\n" "- %% : %\n" "- %n : numero de archivo (se puede usar un prefijo para agregar ceros : %.4n " "da 0001, 0002, 0003, ..., 0091, ...\n" "- %l : etiqueta del disco\n" "- %t : tipo de disco\n" "- %s : numero de serie" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "" "Usar nombre del volumen como nombre del disco (solo cuando el nombre del " "disco esta vacio)" #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" "Si no ingresaste nombre de disco y si el dispositivo seleccionado tiene un " "nombre de volumen, el nombre del volumen sera aplicado como nombre de disco." # src/Catalog.c:1009 src/Catalog.c:1122 src/NoteBookManagmentCallBack.c:124 # src/NoteBookManagmentCallBack.c:136 src/NoteBookManagmentCallBack.c:174 # src/NoteBookManagmentCallBack.c:260 src/NoteBookManagmentCallBack.c:508 # src/Catalog.c:1186 src/Catalog.c:1344 # src/gui/NoteBookManagmentCallBack.c:148 # src/gui/NoteBookManagmentCallBack.c:162 # src/gui/NoteBookManagmentCallBack.c:213 # src/gui/NoteBookManagmentCallBack.c:285 # src/gui/NoteBookManagmentCallBack.c:620 # src/Catalog.c:1510 src/Catalog.c:1793 # src/gui/NoteBookManagmentCallBack.c:164 # src/gui/NoteBookManagmentCallBack.c:175 # src/gui/NoteBookManagmentCallBack.c:223 # src/gui/NoteBookManagmentCallBack.c:303 # src/gui/NoteBookManagmentCallBack.c:718 #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "Agregar disco" # src/NoteBookManagment.c:329 # src/gui/NoteBookManagment.c:397 # src/gui/NoteBookManagment.c:478 #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Administración" # src/NoteBookManagmentCallBack.c:124 # src/gui/NoteBookManagmentCallBack.c:148 # src/gui/NoteBookManagmentCallBack.c:164 #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "El disco no ha sido agregado : no hay un disco montado" # src/NoteBookManagmentCallBack.c:136 # src/gui/NoteBookManagmentCallBack.c:162 # src/gui/NoteBookManagmentCallBack.c:175 #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "El disco no ha sido agregado : no se puede montar el dispositivo" # src/MenuPopup.c:88 src/NoteBookManagmentCallBack.c:156 # src/gui/MenuPopup.c:89 src/gui/NoteBookManagmentCallBack.c:190 # src/gui/NoteBookManagmentCallBack.c:199 #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "Agregar nuevo disco" # src/NoteBookManagmentCallBack.c:174 # src/gui/NoteBookManagmentCallBack.c:213 # src/gui/NoteBookManagmentCallBack.c:223 #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "Ingrese nombre del disco" # src/gui/NoteBookManagmentCallBack.c:234 # src/gui/NoteBookManagmentCallBack.c:246 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "Escaneando" # src/gui/NoteBookManagmentCallBack.c:234 # src/gui/NoteBookManagmentCallBack.c:246 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "Agregando disco" # src/gui/NoteBookManagmentCallBack.c:234 # src/gui/NoteBookManagmentCallBack.c:246 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "Por favor espere" # src/Catalog.c:641 src/NoteBookManagmentCallBack.c:198 # src/NoteBookManagmentCallBack.c:235 # src/Catalog.c:731 src/gui/NoteBookManagmentCallBack.c:245 # src/Catalog.c:867 src/gui/NoteBookManagmentCallBack.c:257 #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "El disco ha sido agregado" # src/NoteBookManagmentCallBack.c:260 # src/gui/NoteBookManagmentCallBack.c:285 # src/gui/NoteBookManagmentCallBack.c:303 #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Error de montaje\n" # src/NoteBookManagmentCallBack.c:320 src/NoteBookManagmentCallBack.c:397 # src/gui/NoteBookManagmentCallBack.c:344 # src/gui/NoteBookManagmentCallBack.c:416 # src/gui/NoteBookManagmentCallBack.c:378 # src/gui/NoteBookManagmentCallBack.c:471 #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Número de serie : " # src/NoteBookManagmentCallBack.c:354 src/NoteBookManagmentCallBack.c:365 # src/NoteBookManagmentCallBack.c:387 src/NoteBookManagmentCallBack.c:391 # src/NoteBookManagmentCallBack.c:397 src/NoteBookManagmentCallBack.c:402 # src/NoteBookManagmentCallBack.c:407 # src/gui/NoteBookManagmentCallBack.c:376 # src/gui/NoteBookManagmentCallBack.c:387 # src/gui/NoteBookManagmentCallBack.c:407 # src/gui/NoteBookManagmentCallBack.c:411 # src/gui/NoteBookManagmentCallBack.c:416 # src/gui/NoteBookManagmentCallBack.c:420 # src/gui/NoteBookManagmentCallBack.c:424 # src/gui/NoteBookManagmentCallBack.c:418 # src/gui/NoteBookManagmentCallBack.c:432 # src/gui/NoteBookManagmentCallBack.c:459 # src/gui/NoteBookManagmentCallBack.c:463 # src/gui/NoteBookManagmentCallBack.c:471 # src/gui/NoteBookManagmentCallBack.c:479 # src/gui/NoteBookManagmentCallBack.c:491 #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "no hay disco" # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 # src/gui/NoteBookCatalogCallBack.c:688 src/gui/NoteBookCatalogCallBack.c:761 # src/gui/NoteBookCatalogCallBack.c:858 src/gui/NoteBookCatalogCallBack.c:922 #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "desconocido" # src/NoteBookManagmentCallBack.c:374 # src/gui/NoteBookManagmentCallBack.c:395 # src/gui/NoteBookManagmentCallBack.c:444 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Sí" # src/NoteBookManagmentCallBack.c:374 # src/gui/NoteBookManagmentCallBack.c:395 # src/gui/NoteBookManagmentCallBack.c:444 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "No" # src/NoteBookManagmentCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:402 # src/gui/NoteBookManagmentCallBack.c:454 #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "Sin etiqueta" # src/NoteBookManagment.c:217 src/NoteBookManagmentCallBack.c:391 # src/gui/NoteBookManagmentCallBack.c:411 # src/gui/NoteBookManagmentCallBack.c:463 #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Etiqueta de volumen : " # src/NoteBookManagmentCallBack.c:555 # src/gui/NoteBookManagmentCallBack.c:530 # src/gui/NoteBookManagmentCallBack.c:619 #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "se canceló la operación de agregar disco" # src/NoteBookManagmentCallBack.c:508 # src/gui/NoteBookManagmentCallBack.c:620 # src/gui/NoteBookManagmentCallBack.c:718 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "Por favor seleccione un nombre de catálogo\n" # src/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:104 # src/gui/NoteBookSearch.c:105 #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "Buscar : " # src/NoteBookSearch.c:71 src/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:116 src/gui/NoteBookSearch.c:273 # src/gui/NoteBookSearch.c:120 src/gui/NoteBookSearch.c:324 #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "Buscar" # src/NoteBookSearch.c:74 # src/gui/NoteBookSearch.c:121 # src/gui/NoteBookSearch.c:127 #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "La búsqueda puede ser sensitiva a las mayúsculas / minúsculas. Los comodines " "soportan el caracter \"*\".\n" "Ejemplo : img*.bmp o *.htm\n" "Las búsqueda de palabras clave acepta una lista de palabras obligatorias." # src/Categories.c:207 src/MenuPopup.c:57 src/MenuPopup.c:127 # src/gui/CategoriesEditBox.c:243 src/gui/MenuPopup.c:58 # src/gui/MenuPopup.c:128 # src/gui/CategoriesEditBox.c:258 src/gui/MenuPopup.c:69 # src/gui/MenuPopup.c:170 #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "Limpiar" # src/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:104 # src/gui/NoteBookSearchCallBack.c:98 src/gui/NoteBookSearchCallBack.c:106 #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "Limpia los resultados de la búsqueda" # src/NoteBookSearch.c:80 # src/gui/NoteBookSearch.c:127 # src/gui/NoteBookSearch.c:135 #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "Coincidir mayúsculas/minúsculas" # src/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:134 # src/gui/NoteBookSearch.c:144 #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "La búsqueda puede ser o no sensitiva a las mayúsculas / minúsculas.\n" "Cuando es sensitiva \"Archivo.txt\" no es igual a \"archivo.txt\". Pero " "cuando no lo es sí son iguales." # src/NoteBookSearch.c:71 src/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:116 src/gui/NoteBookSearch.c:273 # src/gui/NoteBookSearch.c:120 src/gui/NoteBookSearch.c:324 #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "Tipo de búsqueda" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "Palabras clave" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "" "Ingresa una lista de palabras clave que deben estar contenidas en los " "archivos matcheados." #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "Comodines" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "" "Ingresa todo el patron de comodines. Este patron puede contener los " "caracteres \"?\" y \"*\"." # src/NoteBookSearch.c:88 # src/gui/NoteBookSearch.c:137 # src/gui/NoteBookSearch.c:149 #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "Expresión regular" # src/NoteBookSearch.c:93 # src/gui/NoteBookSearch.c:144 # src/gui/NoteBookSearch.c:158 #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "" "Se pueden usar expresiones regulares. Leer la documentación para más " "información." # src/Menu.c:50 # src/gui/NoteBookSearch.c:152 # src/gui/NoteBookSearch.c:168 #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "Archivo" # src/gui/NoteBookSearch.c:158 # src/gui/NoteBookSearch.c:176 #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "La búsqueda se hace sobre los nombres de archivo." # src/Properties.c:1341 # src/gui/NoteBookSearch.c:161 # src/gui/NoteBookSearch.c:181 #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "Directorio" # src/gui/NoteBookSearch.c:166 # src/gui/NoteBookSearch.c:188 #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "La búsqueda se hace sobre los nombres de los directorios." # src/NoteBookSearch.c:138 # src/gui/NoteBookSearch.c:169 src/gui/NoteBookSearch.c:232 # src/gui/NoteBookSearch.c:193 src/gui/NoteBookSearch.c:270 #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "Disco" # src/gui/NoteBookSearch.c:174 # src/gui/NoteBookSearch.c:200 #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "La búsqueda se hace sobre los nombres de los discos." # src/NoteBookCatalog.c:144 src/NoteBookCatalog.c:193 # src/NoteBookCatalog.c:227 src/NoteBookSearch.c:158 # src/gui/NoteBookCatalog.c:143 src/gui/NoteBookCatalog.c:213 # src/gui/NoteBookCatalog.c:260 src/gui/NoteBookSearch.c:177 # src/gui/NoteBookSearch.c:244 # src/ApplicationManager.h:264 src/ApplicationManager.h:408 # src/gui/NoteBookSearch.c:205 src/gui/NoteBookSearch.c:290 #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "Categoría" # src/gui/NoteBookSearch.c:182 # src/gui/NoteBookSearch.c:212 #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "La búsqueda se hace sobre los nombres de las categorías." # src/gui/NoteBookSearch.c:190 # src/gui/NoteBookSearch.c:224 #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "La búsqueda se hace sobre las descripciones." # src/MenuFile.c:199 src/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 # src/gui/NoteBookSearchCallBack.c:93 #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "Buscar en el catálogo" # src/gui/NoteBookSearchCallBack.c:97 #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "%lu item(s) encontrados." # src/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:104 # src/gui/NoteBookSearchCallBack.c:98 src/gui/NoteBookSearchCallBack.c:106 #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "Resultados de la búsqueda" # src/gui/NoteBookSearchCallBack.c:106 #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "No se encontraron resultados." # src/NoteBookSearch.c:71 src/NoteBookSearch.c:169 # src/gui/NoteBookSearchCallBack.c:99 # src/gui/NoteBookSearchCallBack.c:114 #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "Buscando..." # src/gui/NoteBookSearchCallBack.c:99 # src/gui/NoteBookSearchCallBack.c:114 #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "No se puede comenzar la búsqueda: no se cargó ningún catálogo" # src/ProgressBarBox.c:185 src/ProgressBarBox.c:215 # src/gui/ProgressBarBox.c:516 #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "_Ok" # src/Properties.c:286 # src/gui/PropertiesBox.c:335 # src/gui/PropertiesBox.c:344 #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "Ingrese el nombre del catálogo." # src/Properties.c:332 # src/gui/PropertiesBox.c:366 # src/gui/PropertiesBox.c:376 #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "Versión : " # src/Properties.c:331 # src/gui/PropertiesBox.c:365 # src/gui/PropertiesBox.c:379 #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "Versión " # src/Properties.c:331 # src/gui/PropertiesBox.c:365 # src/gui/PropertiesBox.c:379 #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr " hecha con " # src/Properties.c:347 src/Properties.c:348 # src/gui/PropertiesBox.c:376 src/gui/PropertiesBox.c:377 # src/gui/PropertiesBox.c:392 #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "Discos en catálogo : " # src/Properties.c:347 src/Properties.c:348 # src/gui/PropertiesBox.c:376 src/gui/PropertiesBox.c:377 # src/gui/PropertiesBox.c:395 #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "Discos en el catálogo : %d" # src/Properties.c:363 src/Properties.c:364 src/Properties.c:807 # src/Properties.c:808 # src/gui/PropertiesBox.c:387 src/gui/PropertiesBox.c:388 # src/gui/PropertiesBox.c:717 src/gui/PropertiesBox.c:718 # src/gui/PropertiesBox.c:408 src/gui/PropertiesBox.c:847 #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Total de archivos : " # src/Properties.c:363 src/Properties.c:364 src/Properties.c:807 # src/Properties.c:808 # src/gui/PropertiesBox.c:387 src/gui/PropertiesBox.c:388 # src/gui/PropertiesBox.c:717 src/gui/PropertiesBox.c:718 # src/gui/PropertiesBox.c:411 src/gui/PropertiesBox.c:850 #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, c-format msgid "Total Files : %ld" msgstr "Cantidad de Archivos : %ld" # src/Properties.c:379 src/Properties.c:380 src/Properties.c:823 # src/Properties.c:824 # src/gui/PropertiesBox.c:398 src/gui/PropertiesBox.c:399 # src/gui/PropertiesBox.c:728 src/gui/PropertiesBox.c:729 # src/gui/PropertiesBox.c:424 src/gui/PropertiesBox.c:863 #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "Total de directorios : " # src/Properties.c:379 src/Properties.c:380 src/Properties.c:823 # src/Properties.c:824 # src/gui/PropertiesBox.c:398 src/gui/PropertiesBox.c:399 # src/gui/PropertiesBox.c:728 src/gui/PropertiesBox.c:729 # src/gui/PropertiesBox.c:427 src/gui/PropertiesBox.c:866 #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, c-format msgid "Total Folders : %ld" msgstr "Cantidad de directorios : %ld" # src/Properties.c:401 src/Properties.c:402 src/Properties.c:1460 # src/Properties.c:1461 # src/gui/PropertiesBox.c:413 src/gui/PropertiesBox.c:414 # src/gui/PropertiesBox.c:1202 src/gui/PropertiesBox.c:1203 # src/gui/PropertiesBox.c:444 src/gui/PropertiesBox.c:448 # src/gui/PropertiesBox.c:1476 #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "Tamaño del archivo : " # src/Properties.c:417 src/Properties.c:418 # src/gui/PropertiesBox.c:424 src/gui/PropertiesBox.c:425 # src/gui/PropertiesBox.c:465 src/gui/PropertiesBox.c:469 #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Espacio Total de Almacenamiento : " # src/Properties.c:433 src/Properties.c:434 # src/gui/PropertiesBox.c:435 src/gui/PropertiesBox.c:436 # src/gui/PropertiesBox.c:486 src/gui/PropertiesBox.c:490 #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "Espacio Total Usado : " # src/Properties.c:449 src/Properties.c:450 # src/gui/PropertiesBox.c:446 src/gui/PropertiesBox.c:447 # src/gui/PropertiesBox.c:507 src/gui/PropertiesBox.c:511 #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "Espacio Libre Total : " # src/Properties.c:471 # src/gui/PropertiesBox.c:461 # src/gui/PropertiesBox.c:532 #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "Estadísticas del Disco : " # src/Properties.c:497 src/Properties.c:498 # src/gui/PropertiesBox.c:478 src/gui/PropertiesBox.c:479 # src/gui/PropertiesBox.c:549 #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "CD-Rom : " # src/Properties.c:497 src/Properties.c:498 # src/gui/PropertiesBox.c:478 src/gui/PropertiesBox.c:479 # src/gui/PropertiesBox.c:552 #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "CD-Rom : %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "Audio CD : " # src/Properties.c:513 src/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 # src/gui/PropertiesBox.c:568 #: src/gui/gwpropertiesbox.c:577 #, c-format msgid "Audio CD : %d" msgstr "Audio CD : %d" # src/Properties.c:513 src/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 # src/gui/PropertiesBox.c:565 #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "HD : " # src/Properties.c:513 src/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 # src/gui/PropertiesBox.c:568 #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "HD : %d" # src/Properties.c:529 src/Properties.c:530 # src/gui/PropertiesBox.c:500 src/gui/PropertiesBox.c:501 # src/gui/PropertiesBox.c:581 #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "Diskette : " # src/Properties.c:529 src/Properties.c:530 # src/gui/PropertiesBox.c:500 src/gui/PropertiesBox.c:501 # src/gui/PropertiesBox.c:584 #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "Diskette : %d" # src/Properties.c:551 src/Properties.c:552 # src/gui/PropertiesBox.c:515 src/gui/PropertiesBox.c:516 # src/gui/PropertiesBox.c:601 #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip : " # src/Properties.c:551 src/Properties.c:552 # src/gui/PropertiesBox.c:515 src/gui/PropertiesBox.c:516 # src/gui/PropertiesBox.c:604 #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip : %d" # src/NoteBookManagment.c:193 src/NoteBookManagmentCallBack.c:314 # src/NoteBookManagmentCallBack.c:368 src/Properties.c:759 # src/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 # src/gui/NoteBookManagment.c:263 src/gui/NoteBookManagmentCallBack.c:363 # src/gui/NoteBookManagmentCallBack.c:435 src/gui/PropertiesBox.c:802 #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 msgid "Tape : " msgstr "Cinta : " # src/NoteBookManagment.c:193 src/NoteBookManagmentCallBack.c:314 # src/NoteBookManagmentCallBack.c:368 src/Properties.c:759 # src/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 # src/gui/NoteBookManagment.c:263 src/gui/NoteBookManagmentCallBack.c:363 # src/gui/NoteBookManagmentCallBack.c:435 src/gui/PropertiesBox.c:802 #: src/gui/gwpropertiesbox.c:649 #, c-format msgid "Tape : %d" msgstr "Cinta : " #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "Red : " # src/Properties.c:567 src/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 # src/gui/PropertiesBox.c:620 #: src/gui/gwpropertiesbox.c:666 #, c-format msgid "Network : %d" msgstr "Red : %d" # src/NoteBookManagment.c:144 # src/gui/NoteBookManagment.c:186 # src/gui/NoteBookManagment.c:205 #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 msgid "Jaz : " msgstr "Jaz : " # src/Properties.c:513 src/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 # src/gui/PropertiesBox.c:568 #: src/gui/gwpropertiesbox.c:683 #, c-format msgid "Jaz : %d" msgstr "Jaz : %d" # src/Properties.c:567 src/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 # src/gui/PropertiesBox.c:617 #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "Otro : " # src/Properties.c:567 src/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 # src/gui/PropertiesBox.c:620 #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "Otro : %d" # src/Properties.c:589 # src/gui/PropertiesBox.c:541 # src/gui/PropertiesBox.c:637 #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Categorías del catálogo : " # src/Properties.c:610 # src/gui/PropertiesBox.c:557 # src/gui/PropertiesBox.c:653 #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "Descripción del Catálogo : " # src/Properties.c:641 # src/gui/PropertiesBox.c:583 # src/gui/PropertiesBox.c:684 #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Información del Catálogo" # src/Properties.c:706 # src/gui/PropertiesBox.c:645 # src/gui/PropertiesBox.c:751 #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "Ingrese el nombre del disco." # src/Properties.c:730 # src/gui/PropertiesBox.c:664 # src/gui/PropertiesBox.c:777 #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "Ingrese el número de archivo del disco." # src/NoteBookManagment.c:193 src/NoteBookManagmentCallBack.c:314 # src/NoteBookManagmentCallBack.c:368 src/Properties.c:759 # src/Properties.c:760 # src/gui/PropertiesBox.c:685 # src/gui/PropertiesBox.c:799 #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr " Tipo : " # src/Properties.c:775 src/Properties.c:776 # src/gui/PropertiesBox.c:695 src/gui/PropertiesBox.c:696 # src/gui/PropertiesBox.c:815 src/gui/PropertiesBox.c:818 #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "N° de serie : " # src/Properties.c:791 src/Properties.c:792 # src/gui/PropertiesBox.c:706 src/gui/PropertiesBox.c:707 # src/gui/PropertiesBox.c:831 src/gui/PropertiesBox.c:834 #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "Etiqueta : " # src/Properties.c:845 src/Properties.c:846 # src/gui/PropertiesBox.c:743 src/gui/PropertiesBox.c:744 # src/gui/PropertiesBox.c:883 src/gui/PropertiesBox.c:887 #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "Capacidad total : " # src/Properties.c:861 src/Properties.c:862 # src/gui/PropertiesBox.c:754 src/gui/PropertiesBox.c:755 # src/gui/PropertiesBox.c:904 src/gui/PropertiesBox.c:908 #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "Espacio usado : " # src/Properties.c:877 src/Properties.c:878 # src/gui/PropertiesBox.c:765 src/gui/PropertiesBox.c:766 # src/gui/PropertiesBox.c:925 src/gui/PropertiesBox.c:929 #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "Espacio libre : " # src/Properties.c:915 src/Properties.c:916 # src/gui/PropertiesBox.c:790 src/gui/PropertiesBox.c:791 # src/gui/PropertiesBox.c:960 src/gui/PropertiesBox.c:963 #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "Nombre del Catálogo : " # src/Properties.c:931 src/Properties.c:932 # src/gui/PropertiesBox.c:801 src/gui/PropertiesBox.c:802 # src/gui/PropertiesBox.c:976 src/gui/PropertiesBox.c:980 #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "Actualizar en el catálogo : " # src/Properties.c:967 # src/gui/PropertiesBox.c:828 # src/gui/PropertiesBox.c:1010 #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "Descripción del Disco : " # src/Properties.c:998 # src/gui/PropertiesBox.c:854 # src/gui/PropertiesBox.c:1041 #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Información del Disco" # src/NoteBookCatalog.c:189 # src/gui/PropertiesBox.c:908 # src/gui/PropertiesBox.c:1098 #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "Nombre del Directorio" # src/Properties.c:1104 # src/gui/PropertiesBox.c:940 # src/gui/PropertiesBox.c:1134 #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Tipo : (directorio)" # src/Properties.c:1118 src/Properties.c:1119 # src/gui/PropertiesBox.c:949 src/gui/PropertiesBox.c:950 # src/gui/PropertiesBox.c:1145 src/gui/PropertiesBox.c:1149 #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "Tamaño del Directorio : " # src/Properties.c:1134 src/Properties.c:1135 src/Properties.c:1476 # src/Properties.c:1477 # src/gui/PropertiesBox.c:960 src/gui/PropertiesBox.c:961 # src/gui/PropertiesBox.c:1213 src/gui/PropertiesBox.c:1214 # src/gui/PropertiesBox.c:1166 src/gui/PropertiesBox.c:1170 # src/gui/PropertiesBox.c:1497 src/gui/PropertiesBox.c:1501 #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "Creado : " # src/Properties.c:1150 src/Properties.c:1151 src/Properties.c:1492 # src/Properties.c:1493 # src/gui/PropertiesBox.c:971 src/gui/PropertiesBox.c:972 # src/gui/PropertiesBox.c:1224 src/gui/PropertiesBox.c:1225 # src/gui/PropertiesBox.c:1184 src/gui/PropertiesBox.c:1188 # src/gui/PropertiesBox.c:1515 src/gui/PropertiesBox.c:1519 #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "Última modificación : " # src/Properties.c:1166 src/Properties.c:1167 src/Properties.c:1508 # src/Properties.c:1509 # src/gui/PropertiesBox.c:982 src/gui/PropertiesBox.c:983 # src/gui/PropertiesBox.c:1235 src/gui/PropertiesBox.c:1236 # src/gui/PropertiesBox.c:1202 src/gui/PropertiesBox.c:1206 # src/gui/PropertiesBox.c:1533 src/gui/PropertiesBox.c:1537 #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "Último acceso : " # src/Properties.c:1188 src/Properties.c:1189 src/Properties.c:1530 # src/Properties.c:1531 # src/gui/PropertiesBox.c:997 src/gui/PropertiesBox.c:998 # src/gui/PropertiesBox.c:1250 src/gui/PropertiesBox.c:1251 # src/gui/PropertiesBox.c:1224 src/gui/PropertiesBox.c:1227 # src/gui/PropertiesBox.c:1555 src/gui/PropertiesBox.c:1558 #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Permisos : " # src/Properties.c:1204 src/Properties.c:1205 src/Properties.c:1546 # src/Properties.c:1547 # src/gui/PropertiesBox.c:1008 src/gui/PropertiesBox.c:1009 # src/gui/PropertiesBox.c:1261 src/gui/PropertiesBox.c:1262 # src/gui/PropertiesBox.c:1240 src/gui/PropertiesBox.c:1243 # src/gui/PropertiesBox.c:1571 src/gui/PropertiesBox.c:1574 #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "Dueño : " # src/Properties.c:1220 src/Properties.c:1221 src/Properties.c:1562 # src/Properties.c:1563 # src/gui/PropertiesBox.c:1019 src/gui/PropertiesBox.c:1020 # src/gui/PropertiesBox.c:1272 src/gui/PropertiesBox.c:1273 # src/gui/PropertiesBox.c:1256 src/gui/PropertiesBox.c:1259 # src/gui/PropertiesBox.c:1587 src/gui/PropertiesBox.c:1590 #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "Grupo : " # src/Properties.c:1258 src/Properties.c:1259 src/Properties.c:1602 # src/Properties.c:1606 src/Properties.c:1609 # src/gui/PropertiesBox.c:1044 src/gui/PropertiesBox.c:1045 # src/gui/PropertiesBox.c:1299 src/gui/PropertiesBox.c:1303 # src/gui/PropertiesBox.c:1306 # src/gui/PropertiesBox.c:1286 src/gui/PropertiesBox.c:1291 # src/gui/PropertiesBox.c:1617 src/gui/PropertiesBox.c:1623 # src/gui/PropertiesBox.c:1627 #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "Nombre del disco : " # src/Properties.c:1274 src/Properties.c:1275 src/Properties.c:1626 # src/Properties.c:1630 src/Properties.c:1633 # src/gui/PropertiesBox.c:1055 src/gui/PropertiesBox.c:1056 # src/gui/PropertiesBox.c:1318 src/gui/PropertiesBox.c:1322 # src/gui/PropertiesBox.c:1325 # src/gui/PropertiesBox.c:1304 src/gui/PropertiesBox.c:1308 # src/gui/PropertiesBox.c:1642 src/gui/PropertiesBox.c:1648 # src/gui/PropertiesBox.c:1656 #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "Posición en el disco : " # src/Properties.c:1310 # src/gui/PropertiesBox.c:1082 # src/gui/PropertiesBox.c:1341 #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "Descripción del directorio : " # src/Properties.c:1341 # src/gui/PropertiesBox.c:1108 # src/gui/PropertiesBox.c:1372 #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Información de Directorio" # src/NoteBookManagment.c:217 src/NoteBookManagmentCallBack.c:391 # src/gui/PropertiesBox.c:1161 # src/gui/PropertiesBox.c:1429 #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "Nombre del archivo : " # src/Properties.c:1446 # src/gui/PropertiesBox.c:1193 # src/gui/PropertiesBox.c:1465 #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Tipo de archivo : todavía no ha sido implementado!!" # src/Properties.c:401 src/Properties.c:402 src/Properties.c:1460 # src/Properties.c:1461 # src/gui/PropertiesBox.c:413 src/gui/PropertiesBox.c:414 # src/gui/PropertiesBox.c:1202 src/gui/PropertiesBox.c:1203 # src/gui/PropertiesBox.c:1480 #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "Tamaño del archivo : %s (%s bytes)" # src/Properties.c:1668 # src/gui/PropertiesBox.c:1351 # src/gui/PropertiesBox.c:1687 #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "Descripción del Archivo : " # src/Properties.c:1699 # src/gui/PropertiesBox.c:1377 # src/gui/PropertiesBox.c:1718 #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Información del Archivo" # src/Properties.c:641 # src/gui/PropertiesBox.c:583 # src/gui/SettingsCatalogFile.c:60 #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "Archivo del catálogo" # src/Properties.c:589 # src/gui/PropertiesBox.c:541 # src/gui/SettingsCatalogFile.c:111 #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Nivel de compresión del catálogo :" # src/gui/SettingsCatalogFile.c:126 #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "" "Seleccione el nivel de compresión del catálogo. El valor por default es 3, " "es un buen valor entre gran performance y tamaño pequeño." # src/MenuPopupCallBack.c:55 # src/gui/MenuPopupCallBack.c:57 # src/gui/SettingsCatalogFile.c:134 #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Catálogos recientes :" # src/gui/SettingsCatalogFile.c:149 #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "" "Elija el tamaño de la lista de catálogos recientemente abiertos. El valor " "por default es 5." # src/gui/SettingsCatalogFile.c:156 #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "Borrar historial" # src/gui/SettingsCatalogFile.c:160 #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "" "Cliquee aquí para limpiar el historial de archivos recientemente abiertos." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 # src/gui/SettingsCatalogFile.c:166 #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Autocargar catálogo" # src/gui/SettingsCatalogFile.c:171 #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "Autocarga un catálogo por default cuando comienza." # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1186 src/Catalog.c:1344 # src/gui/SettingsCatalogFile.c:178 #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "Carga el último catálogo abierto." # src/NoteBookManagmentCallBack.c:508 # src/gui/NoteBookManagmentCallBack.c:620 # src/gui/SettingsCatalogFile.c:183 #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "Carga el catálogo seleccionado." # src/gui/SettingsCatalogFile.c:192 #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "Ingrese el path completo del archivo del catálogo a cargar." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 # src/gui/SettingsCatalogFile.c:199 #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "Seleccione catálogo" # src/gui/SettingsCatalogFile.c:205 #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "Cliquee aquí seleccionar un catálogo." # src/MenuFile.c:382 # src/gui/MenuFileCallBack.c:175 src/gui/MenuFileCallBack.c:202 # src/gui/MenuFileCallBack.c:406 src/gui/MenuFileCallBack.c:503 # src/gui/MenuFileCallBack.c:596 src/gui/MenuFileCallBack.c:686 # src/gui/MenuFileCallBack.c:763 # src/gui/SettingsCatalogFile.c:640 #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "Seleccione el catálogo a cargarse automáticamente" # src/gui/SettingsExplorer.c:46 #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "Explorador" # src/NoteBookSearch.c:80 # src/gui/NoteBookSearch.c:127 # src/gui/NoteBookSearch.c:135 #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "Ordenamiento sensitivo a mayúsculas/minúsculas." #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "" "El ordenamiento de los resultados en el explorador es sensitivo a mayusculas/" "minusculas." #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Ordenar resultados por directorio/archivo." #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" "Los resultados en el explorador pueden ser agrupados por tipo de item. Si " "esta opcion esta seleccionada todos los items seran agrupados por " "directorios y archivos." #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Cambiar automaticamente el ancho de las columnas" #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "Cambiar automaticamente todas las columnas del explorador." # src/NoteBookSearch.c:138 # src/gui/NoteBookSearch.c:169 src/gui/NoteBookSearch.c:232 # src/gui/SettingsExplorerDisk.c:51 #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "Discos" # src/gui/SettingsExplorerDisk.c:109 src/gui/SettingsExplorerFile.c:107 #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "Visible" # src/gui/SettingsExplorerDisk.c:117 src/gui/SettingsExplorerFile.c:115 #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Ocultar" # src/gui/SettingsExplorerDisk.c:122 src/gui/SettingsExplorerFile.c:120 #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "Mostrar" # src/gui/SettingsExplorerDisk.c:138 src/gui/SettingsExplorerFile.c:136 #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "Oculto" # src/Menu.c:50 # src/gui/NoteBookSearch.c:152 # src/gui/SettingsExplorerFile.c:49 #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Archivos" #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "" "El ordenamiento de los resultados es sensitivo a mayusculas/minusculas." #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Ordenar resultados por tipo." #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" "El resultado de la busqueda puede agruparse por tipo de item. Si esta opcion " "esta seleccionada todos los items seran agrupados por catalogs, discos, " "directorios y archivos." #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "Deben concordar todas las palabras claves" #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" "Elegir si todas las palabras clave o solo una de todas las palabras clave " "deben matchear con el item para que este se muestre como resultado." # src/MenuFile.c:278 # src/gui/MenuFileCallBack.c:223 # src/gui/MenuFileCallBack.c:476 #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "Rapido" # src/gui/SettingsGeneral.c:43 #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "Opciones generales" # src/gui/SettingsGui.c:50 #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "GUI" # src/Categories.c:201 # src/gui/CategoriesEditBox.c:237 # src/gui/SettingsGui.c:88 #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "Guardar las propiedades de la interfaz al salir." # src/gui/SettingsGui.c:93 #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "" "Guardar propiedades de la interfaz como posición y tamaño de la ventana." #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "Permitir el beep" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "Permite emitir un beep en algunos eventos." # src/gui/SettingsMail.c:85 #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Mail" # src/gui/SettingsMail.c:128 #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "Dirección de correo :" # src/gui/SettingsMail.c:138 #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "Ingrese su dirección de mail." # src/gui/SettingsMail.c:143 #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "Servidor de mail saliente :" # src/gui/SettingsMail.c:153 #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "" "Ingrese el servidor de mail saliente. Usualmente esta dirección es mail." "tudominio.com" # src/gui/SettingsMail.c:158 #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Puerto del servidor :" # src/gui/SettingsMail.c:168 #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "" "Ingrese el puerto del servidor de mail saliente (el valor más común es 25)." # src/gui/SettingsWindowBox.c:87 #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "" "Este diálogo de preferencias permite configurar algunas funcionalidades y " "propiedades del programa." # src/gui/SettingsWindowBox.c:90 src/gui/SettingsWindowBox.c:128 #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "Preferencias" # src/gui/SettingsWindowBox.c:124 #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "Seleccione la sección a configurar." # src/gui/SettingsWindowBox.c:138 #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "" "Cambie en este panel todas las propiedades disponibles para poder configurar " "el programa como quiera." # src/gui/SettingsWindowBox.c:149 #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "" "Este diálogo de preferencias permite configurar el programa. Algunas " "propiedades pueden ser modificadas aquí." # src/gui/SettingsWindowBox.c:168 #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "" "Cliquee sobre el botón de OK para aplicar los cambios y cerrar el diálogo de " "Preferencias." # src/gui/SettingsWindowBox.c:180 #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "" "Cliquee sobre el botón Cancelar para cancelar los cambios y cerrar el " "diálogo de Preferencias." # src/gui/SettingsWindowBox.c:185 #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "_Aplicar" # src/gui/SettingsWindowBox.c:192 #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "" "Cliquee en el botón de Aplicar para aplicar los cambios (sin cerrar el " "diálogo de Preferencias)." # src/gui/SettingsWindowBoxCallBack.c:91 #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "Preferencias cambiadas" # src/gui/SettingsWindowBoxCallBack.c:91 #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "" "Si no aplicas los cambios se perderán todos los cambios. ¿Desea aplicar los " "cambios?" # src/gui/StatusBarCallBack.c:56 # src/gui/StatusBarCallBack.c:58 #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], total de discos : %d" # src/StatusBar.c:203 # src/gui/StatusBarCallBack.c:57 src/gui/StatusBarCallBack.c:88 # src/gui/StatusBarCallBack.c:120 # src/gui/StatusBarCallBack.c:59 src/gui/StatusBarCallBack.c:112 # src/gui/StatusBarCallBack.c:161 #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr " Items listados : %d (tamaño total: %s)" # src/gui/StatusBarCallBack.c:80 # src/gui/StatusBarCallBack.c:90 #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], capacidad: %s, libre : %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr " Disco vacio" # src/StatusBar.c:203 # src/gui/StatusBarCallBack.c:84 src/gui/StatusBarCallBack.c:116 # src/gui/StatusBarCallBack.c:145 # src/gui/StatusBarCallBack.c:103 src/gui/StatusBarCallBack.c:152 # src/gui/StatusBarCallBack.c:198 #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr " Item seleccionado : %d (tamaño total: %s)" # src/gui/StatusBarCallBack.c:112 # src/gui/StatusBarCallBack.c:143 #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr " Directorio \"%s\", %s (%d archivos, %d subdirectorios)" # src/StatusBar.c:197 # src/gui/StatusBarCallBack.c:144 # src/gui/StatusBarCallBack.c:192 #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr " %s, %s, %s" # src/StatusBar.c:225 src/StatusBar.c:247 # src/gui/StatusBarCallBack.c:169 src/gui/StatusBarCallBack.c:193 # src/gui/StatusBarCallBack.c:225 src/gui/StatusBarCallBack.c:246 #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr " Item seleccionado : %d" # src/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 # src/gui/StatusBarCallBack.c:226 #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr " Explorador del catálogo" # src/StatusBar.c:242 # src/gui/StatusBarCallBack.c:192 # src/gui/StatusBarCallBack.c:247 #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr " Motor de búsqueda" # src/StatusBar.c:264 # src/gui/StatusBarCallBack.c:216 # src/gui/StatusBarCallBack.c:266 #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr " Administración del catálogo" # src/ToolBar.c:59 # src/gui/ToolBar.c:76 # src/gui/ToolBar.c:91 #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Cerrar catálogo" # src/MenuFile.c:199 src/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 # src/gui/ToolBar.c:95 #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "Enviar catálogo por mail" # src/Menu.c:187 # src/gui/About.c:108 # src/gui/gwwindowboxabout.c:118 #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "Acerca" # src/About.c:128 # src/gui/About.c:125 # src/gui/gwwindowboxabout.c:148 #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "Administración de catálogos de medios removibles\n" "Por Sébastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" # src/gui/About.c:126 # src/gui/gwwindowboxabout.c:149 #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" "GWhere permite administrar una base de datos de tus CDs y otros medios " "removibles (discos duros, diskettes, discos Zip, CD-ROMs, etc...). Con " "GWhere es fácil navegar tus CDs o realizar búsquedas sin la necesidad de " "insertar los CDs en la lectora de a uno por vez." #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Corriendo en " # src/gui/MailWindowBox.c:85 #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "" "Este diálogo te permite enviar el catálogo por mail a uno (o más) de tus " "contactos." # src/gui/MailWindowBox.c:88 src/gui/MailWindowBoxCallBack.c:60 # src/gui/MailWindowBoxCallBack.c:71 #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "Enviar mail" # src/gui/MailWindowBox.c:112 #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "A :" # src/gui/MailWindowBox.c:118 #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "CC :" # src/gui/MailWindowBox.c:124 #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "BCC :" # src/gui/MailWindowBox.c:130 #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "Tema :" # src/gui/MailWindowBox.c:140 #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "Ingrese la dirección de correo electrónico de tu(s) contacto(s)." # src/gui/MailWindowBox.c:148 #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "" "Ingrese aquí la dirección de correo electrónico de los contactos copiados." # src/gui/MailWindowBox.c:156 #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "" "Ingrese aquí la dirección de correo electrónico de los contactos copiados." # src/gui/MailWindowBox.c:164 #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "Ingrese aquí el objeto del mail." # src/gui/MailWindowBox.c:168 #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "Archivo adjuntado :" # src/gui/MailWindowBox.c:182 #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "Elija adjuntar o no el archivo del catálogo." # src/gui/MailWindowBox.c:197 #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "Tipee aquí el texto del mensje de mail." # src/Menu.c:84 # src/gui/MenuFile.c:81 # src/gui/MailWindowBox.c:217 #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "_Guardar" # src/gui/MailWindowBox.c:222 #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "Cliquee aquí para enviar un mail (con un catálogo adjuntado)." # src/gui/MailWindowBox.c:211 #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "Cliquee aquí para cancelar el envío del mail." # src/gui/NoteBookManagmentCallBack.c:234 # src/gui/MailWindowBoxCallBack.c:61 #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "Enviando mensaje, por favor espere..." # src/gui/MailWindowBoxCallBack.c:72 #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "" "Ocurrió un error durante el envío del mail. Por favor revise los parámetros." # src/support.c:118 # src/support.c:120 # src/support.c:126 #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "No se pudo encontrar el archivo pixmap: %s" # src/support.c:125 # src/support.c:127 # src/support.c:133 #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "Error cargando archivo pixmap: %s" # src/Catalog.c:605 # src/Catalog.c:695 # src/Catalog.c:829 #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "Error : no se puede obtener el directorio actual." # src/Catalog.c:641 # src/Catalog.c:731 # src/Catalog.c:867 #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "Error : no se puede ir al directorio actual." # src/Catalog.c:692 # src/Catalog.c:780 # src/Catalog.c:930 #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "El disco no ha sido agregado\n" "La operación de agregado fué cancelada por el usuario" # src/Catalog.c:641 src/NoteBookManagmentCallBack.c:198 # src/NoteBookManagmentCallBack.c:235 # src/Catalog.c:798 src/Catalog.c:803 src/Catalog.c:808 src/Catalog.c:813 # src/Catalog.c:818 src/Catalog.c:823 src/Catalog.c:828 src/Catalog.c:833 # src/Catalog.c:850 src/Catalog.c:855 src/Catalog.c:860 src/Catalog.c:865 # src/Catalog.c:870 src/Catalog.c:875 # src/Catalog.c:948 src/Catalog.c:953 src/Catalog.c:958 src/Catalog.c:963 # src/Catalog.c:968 src/Catalog.c:974 src/Catalog.c:979 src/Catalog.c:984 # src/Catalog.c:1005 src/Catalog.c:1010 src/Catalog.c:1015 src/Catalog.c:1020 # src/Catalog.c:1025 src/Catalog.c:1030 #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "El disco ha sido agregado\n" # src/Catalog.c:798 # src/Catalog.c:948 #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "%s fuera del espacio de direcciones del proceso." # src/Catalog.c:803 # src/Catalog.c:953 #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" "Un componente del siguiente nombre excedió los %d caracteres, o todo el " "nombre de directorio excedió los %d caracteres : %s." # src/Catalog.c:808 # src/Catalog.c:958 #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "El siguiente directorio no existe : %s." # src/Catalog.c:813 src/Catalog.c:865 # src/Catalog.c:963 src/Catalog.c:1020 #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "Memoria insuficiente para completar la operación." # src/Catalog.c:818 # src/Catalog.c:968 #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "Un componenete del path no es un directorio : %s." # src/Catalog.c:823 # src/Catalog.c:974 #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "" "Demasiados links simbólicos fueron encontrados cuando se resolvía el path : %" "s." # src/Catalog.c:828 # src/Catalog.c:979 #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "Ocurrió un error de I/O cambiando al directorio : %s." # src/Exploration.c:594 src/Exploration.c:650 src/Exploration.c:728 # src/Exploration.c:784 # src/Catalog.c:833 src/Catalog.c:875 # src/Catalog.c:984 src/Catalog.c:1030 #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "Dueño desconocido" # src/Catalog.c:935 # src/Catalog.c:1110 # src/Catalog.c:1391 #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" "El disco no ha sido agregado\n" "Error : no se puede ir al directorio padre." # src/Catalog.c:850 # src/Catalog.c:1005 #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Demasiados descriptores de archivos abiertos en uso por el proceso." # src/Catalog.c:855 # src/Catalog.c:1010 #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Demasiados archivos archivos actualmente en el sistema." # src/Catalog.c:860 # src/Catalog.c:1015 #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "El siguiente directorio no existe, o el nombre es vacío : %s." # src/Catalog.c:870 # src/Catalog.c:1025 #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "El siguiente nombre de directorio no es un directorio : %s." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" "Un error critico ocurrió mientras se estaba extrayendo información de %s%s%" "s.\n" "Guarde su catálogo si esto es posible, salga de GWhere y reporte este " "problema al equipo de GWhere por favor." # src/Catalog.c:926 # src/Catalog.c:1102 # src/Catalog.c:1383 #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" "El disco no ha sido agregado\n" "Error : no se puede cerrar el directorio actual." # src/main.c:47 # src/ApplicationManager.c:75 #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "Corriendo en %s" # src/Properties.c:641 # src/gui/PropertiesBox.c:583 # src/gui/SettingsCatalogFile.c:60 #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Catálogo cargado" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 # src/ApplicationManager.c:456 src/ApplicationManager.c:472 # src/ApplicationManager.c:479 #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "La carga del catálogo falló" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 # src/ApplicationManager.c:456 src/ApplicationManager.c:472 # src/ApplicationManager.c:479 #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "Cargar catálogo" # src/ApplicationManager.c:472 #: src/gwapplicationmanager.c:499 msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "" "El catálogo es inválido o no existe. Por favor revise el path del catálogo." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 # src/Catalog.c:1429 src/Catalog.c:1438 src/Catalog.c:1573 src/Catalog.c:1585 # src/Catalog.c:1589 src/Catalog.c:1626 src/Catalog.c:1677 src/Catalog.c:1704 # src/Catalog.c:1742 src/Catalog.c:1768 src/gui/ToolBar.c:87 #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "Guardando catálogo" # src/Properties.c:641 # src/gui/PropertiesBox.c:583 # src/gui/SettingsCatalogFile.c:60 #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Catálogo guardado" # src/MenuFile.c:199 src/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 # src/gui/ToolBar.c:95 #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "La grabación del catálogo falló" # src/NoteBookCatalog.c:114 src/NoteBookCatalog.c:221 # src/gui/NoteBookCatalog.c:113 src/gui/NoteBookCatalog.c:207 # src/ApplicationManager.h:168 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Permisos" # src/NoteBookCatalog.c:119 src/NoteBookCatalog.c:222 # src/gui/NoteBookCatalog.c:118 src/gui/NoteBookCatalog.c:208 # src/ApplicationManager.h:180 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "Dueño" # src/NoteBookCatalog.c:124 src/NoteBookCatalog.c:223 # src/gui/NoteBookCatalog.c:123 src/gui/NoteBookCatalog.c:209 # src/ApplicationManager.h:192 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "Grupo" # src/NoteBookCatalog.c:129 src/NoteBookCatalog.c:224 # src/NoteBookSearch.c:148 # src/gui/NoteBookCatalog.c:128 src/gui/NoteBookCatalog.c:210 # src/gui/NoteBookSearch.c:238 # src/ApplicationManager.h:204 src/gui/NoteBookSearch.c:280 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "Tamaño" # src/NoteBookCatalog.c:134 src/NoteBookCatalog.c:225 # src/gui/NoteBookCatalog.c:133 src/gui/NoteBookCatalog.c:211 # src/ApplicationManager.h:216 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "INodo" # src/ApplicationManager.h:228 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Fecha de acceso" # src/ApplicationManager.h:240 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Fecha de modificación" # src/Properties.c:1134 src/Properties.c:1135 src/Properties.c:1476 # src/Properties.c:1477 # src/gui/PropertiesBox.c:960 src/gui/PropertiesBox.c:961 # src/gui/PropertiesBox.c:1213 src/gui/PropertiesBox.c:1214 # src/ApplicationManager.h:252 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "Fecha de creación" # src/NoteBookManagment.c:217 src/NoteBookManagmentCallBack.c:391 # src/gui/PropertiesBox.c:1161 # src/ApplicationManager.h:300 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "Nombre del archivo" # src/ApplicationManager.h:312 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "Ruta de acceso" # src/NoteBookCatalog.c:187 # src/gui/NoteBookCatalog.c:254 # src/ApplicationManager.h:324 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Archivo N°" # src/NoteBookCatalog.c:188 # src/gui/NoteBookCatalog.c:255 # src/ApplicationManager.h:336 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Tipo" # src/NoteBookCatalog.c:189 # src/gui/NoteBookCatalog.c:256 # src/ApplicationManager.h:348 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Nombre del volumen" # src/Properties.c:845 src/Properties.c:846 # src/gui/PropertiesBox.c:743 src/gui/PropertiesBox.c:744 # src/ApplicationManager.h:360 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "Capacidad total" # src/NoteBookCatalog.c:191 # src/gui/NoteBookCatalog.c:258 # src/ApplicationManager.h:372 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "Espacio libre" # src/NoteBookCatalog.c:139 src/NoteBookCatalog.c:192 # src/NoteBookCatalog.c:226 src/NoteBookSearch.c:153 # src/gui/NoteBookCatalog.c:138 src/gui/NoteBookCatalog.c:212 # src/gui/NoteBookCatalog.c:259 src/gui/NoteBookSearch.c:241 # src/ApplicationManager.h:384 src/gui/NoteBookSearch.c:285 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Fecha" # src/NoteBookManagmentCallBack.c:320 src/NoteBookManagmentCallBack.c:397 # src/gui/NoteBookManagmentCallBack.c:344 # src/gui/NoteBookManagmentCallBack.c:416 # src/ApplicationManager.h:396 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Número de serie" # src/NoteBookSearch.c:143 # src/gui/NoteBookSearch.c:235 # src/gui/NoteBookSearch.c:275 #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "Ruta" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "Completa" #: win32/config.h:288 msgid "Compact" msgstr "Compacta" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (requerido)" #: win32/config.h:290 msgid "Main engine application." msgstr "Programa principal." #: win32/config.h:291 msgid "GTK+ 2.6 RunTime (required)" msgstr "Librerías de GTK+ 2.6 (requerido)" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "Librerías para la interfaz gráfica de usuario." #: win32/config.h:293 msgid "Plugins" msgstr "Plugins" #: win32/config.h:294 msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "" "Plugins para la extracción automática de las descripciones de archivos y " "plugins para la importacion/exportacion de catálogos." #: win32/config.h:295 msgid "Languages Files" msgstr "Archivos de lenguaje" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "Todos los archivos de lenguajes para la traducción del programa." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "Debes desinstalar tu ultima version de GWhere instalada" #: win32/config.h:298 msgid "Installer already running" msgstr "El instalador ya esta corriendo" # src/gui/SettingsGeneral.c:43 #: win32/config.h:299 msgid "Install options" msgstr "Opciones de instalación" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "Que usuarios pueden correr GWhere ?" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "Permisos de acceso de la instalacion de GWhere" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" "GWhere puede ser instalado para todos los usuarios o solamente para el " "usuario actual. Seleccione que tipo de instalación desea." #: win32/config.h:303 msgid "All users|Current user" msgstr "Todos los usuarios|Usuario actual" #: win32/config.h:304 msgid "All users" msgstr "Todos los usuarios" # src/ApplicationManager.c:472 #~ msgid "" #~ "The catalog file doesn't exists. Check your catalog file path please." #~ msgstr "" #~ "El archivo del catálogo no existe. Por favor revise el path del archivo." # src/ApplicationManager.c:479 #~ msgid "" #~ "The catalog file to load doesn't have a good file extension. Only .ctg " #~ "files are allowed to be loaded." #~ msgstr "" #~ "El archivo del catálogo no tiene una extensión conocida. Sólo son " #~ "permitidos los archivos con extensión .ctg." # src/Catalog.c:71 src/Catalog.c:79 src/Catalog.c:88 src/Catalog.c:126 # src/Catalog.c:135 src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:91 src/Catalog.c:102 src/Catalog.c:115 src/Catalog.c:134 # src/Catalog.c:183 src/Catalog.c:195 src/Catalog.c:270 src/Catalog.c:363 # src/Catalog.c:116 src/Catalog.c:132 src/Catalog.c:150 src/Catalog.c:174 # src/Catalog.c:232 src/Catalog.c:244 src/Catalog.c:329 src/Catalog.c:449 #~ msgid "Load file" #~ msgstr "Cargar archivo" # src/Catalog.c:71 # src/Catalog.c:91 src/Catalog.c:102 # src/Catalog.c:116 src/Catalog.c:132 #~ msgid "Error : cannot open this file." #~ msgstr "Error : no se puede abrir este archivo." # src/Catalog.c:79 # src/Catalog.c:115 # src/Catalog.c:150 #~ msgid "Error : cannot read the file version." #~ msgstr "Error : no se puede leer la versión del archivo." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 # src/Catalog.c:154 src/Catalog.c:179 #~ msgid "Load catalog" #~ msgstr "Cargar catálogo" # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:119 src/Catalog.c:139 src/Catalog.c:1235 src/Catalog.c:1251 # src/Catalog.c:1276 src/Catalog.c:1292 src/Catalog.c:1315 src/Catalog.c:1330 # src/Catalog.c:154 src/Catalog.c:179 src/Catalog.c:1589 src/Catalog.c:1626 # src/Catalog.c:1677 src/Catalog.c:1704 src/Catalog.c:1742 src/Catalog.c:1768 #~ msgid "Error : cannot close file." #~ msgstr "Error : no se puede cerrar el archivo." # src/Catalog.c:88 # src/Catalog.c:134 # src/Catalog.c:174 #~ msgid "Error : it's not a GWhere file." #~ msgstr "Error : no es un archivo de GWhere." # src/Catalog.c:126 # src/Catalog.c:183 # src/Catalog.c:232 #~ msgid "Error : this GWhere version file is unknown." #~ msgstr "Error : esta versión del archivo GWhere es desconocida." # src/Catalog.c:135 # src/Catalog.c:195 # src/Catalog.c:244 #~ msgid "Error : cannot close this file after loading." #~ msgstr "Error : no se puede cerrar este archivo después de haberse cargado." # src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:270 src/Catalog.c:363 # src/Catalog.c:329 src/Catalog.c:449 #~ msgid "Error : during the loading of disk." #~ msgstr "Error : durante la carga del disco." # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:1140 src/Catalog.c:1221 # src/Catalog.c:1429 src/Catalog.c:1573 #~ msgid "Error : cannot create file." #~ msgstr "Error : no se puede crear el archivo." # src/Catalog.c:972 src/Catalog.c:1047 # src/Catalog.c:1149 src/Catalog.c:1231 # src/Catalog.c:1438 src/Catalog.c:1585 #~ msgid "Error : cannot write file version." #~ msgstr "Error : no se puede escribir la versión del archivo." # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1186 src/Catalog.c:1344 # src/Catalog.c:1510 src/Catalog.c:1793 #~ msgid "Error : cannot close catalog file." #~ msgstr "Error : no se puede cerrar el archivo de catálogo." # src/Catalog.c:1354 # src/Catalog.c:1804 #~ msgid "Elapsed time to save the catalog : %d secs" #~ msgstr "Tiempo transcurrido guardando el catálogo : %d segs" # src/NoteBookManagment.c:178 # src/gui/NoteBookManagment.c:216 # src/gui/NoteBookManagment.c:241 #~ msgid "" #~ "Give the device file of the selected disk. The device file is the one of " #~ "the /etc/fstab file." #~ msgstr "" #~ "Ingrese el dispositivo del disco seleccionado. El dispositivo se " #~ "encuentra en una de las entradas del archivo /etc/fstab." # src/NoteBookManagment.c:320 # src/gui/NoteBookManagment.c:364 # src/gui/NoteBookManagment.c:442 #~ msgid "Scan disk" #~ msgstr "Explorar el disco" # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 # src/gui/NoteBookCatalogCallBack.c:688 src/gui/NoteBookCatalogCallBack.c:761 # src/gui/NoteBookCatalogCallBack.c:858 src/gui/NoteBookCatalogCallBack.c:922 #~ msgid "unkown" #~ msgstr "desconocido" gwhere-0.2.3/po/stamp-cat-id0000644000175000017500000000001210506327603014256 0ustar bartbarttimestamp gwhere-0.2.3/po/it.gmo0000644000175000017500000011207110472436235013205 0ustar bartbartÞ•·Ô KŒ¸$ ¹$aÇ$$)%N% k%w%‰% œ%*¨%$Ó%ø%&%&A& J& W&b&j&r&z&‚&Š&’&š&1¯&á&qý&7o'°§'X(_( e( q(}( (Ž( —(¤(»(0Ô( )) &)+1)m])4Ë)J*RK*ž* ¦* ±*¿* Ï* Û*é*ÿ*-+ >+H+h+{++ †+ +œ+ £+C±+õ+1 ,?,S,*d, ,›,ª,¿,Ç, Þ,ë,û,- -<-P- a-n--—-¯-¾- Ñ-ß-ò- û-.\.u.n‰.(ø.!/ '/5/1O/(/5ª/5à/H0D_0?¤0ä0 ê0 ø0,101@1H1d1 ‚1 1ž1 £1 ¯1»1Ê1Ï1 ã1 í1ú1 22$282/N2 ~2M‹2Ù2ß2ð23 33r33¦3L¶3449&4@`43¡4#Õ4ù45$5@5T5%j5&5)·5Rá546S6s6I6\Ù6C67z7L”7"á7$8)8G8L8,_8$Œ8±8º8Á8Ó8Ø8 ì8 ö899 .9;9!L9n9 t9 ~9Š9‘9 §9 ³9¿9Î9 á9 ï9 ú9: ::7:;:N:pO;À;Ý;+î;?<?Z<gš<G=@J=‹=‘=š= =¨=¯=´=É=Ï=PO> >§>»>Ã>Ó>.í>?8?I?P?DY? ž?¨?¸?Ì?à?ÿ?@+@B@V@[@[t@ Ð@Û@ í@iû@ eA pA{A€A ˆA “A A ¤A°A¹AÂAÅA-ÚABB"B>BZBhxBáB æB óBýBC CC1C7C@CEEC‹C ©CµCÄCeÌC 2D=DCDIDcDvD†D…šD E'E 6E BE NE!\E~E™E  EªEÇEÐE0ÕEF"F*F :F$GFlF{F‘F šF¤F «FµF ÇF ÕF áFîFGGx'G] G<þG ;HK\H¨H½H ÏHÙH öH I II ,I:IRI[IlIqI…I ŠI”I œII¦I5ðI&J>J2ZJ?J>ÍJ/ K8Y NYYYaYiYqYyYY‰Y‘YI¨YòY~ Z<ŠZ¼ÇZ„[Š[œ[«[¾[Ç[Û[ê[ÿ[)\<A\~\ \°\6À\…÷\:}]e¸]b^^ Š^–^¥^ µ^ Á^Ï^"æ^8 _ B_ P_q__”_ š_ ¤_°_ ·_iÄ_ .`;O`‹`¥`?Â` aa"a=aFaba|a‘a«a#»aßaôabb,bHbdbvb‰bšb ³b ½bÊbiÜbFc„ac-æcdd(1d1Zd*Œd@·dBød`;e[œeRøeKfRf bf@nf¯fÁfÊf"éf gg+g0g ?gKgZg`gyg“g¥gºgÌgÓgêg:h>hiVhÀhÅhØhëh i i|&i£iT·i j+j?GjJ‡j1Òj)k$.k!Sk&uk œk&½k,äk)lP;l_Œlìl" m/mILmk–mQn"TnYwn/Ñn/o+1o]obo0yo.ªoÙoáoéoýopp,p?p_p pp}p#’p¶p ¼p ÆpÒpÛpùp q#q:qOq `qnqqˆq˜qµq¹q:Ìq†sŽs s4±sHæsL/t†|t]uJau¬u ³u½uÃuËuÔuÝuýu“v`—vøvww$w:w2Tw%‡w­wÁwÈwbÑw 4xBxSxex xx™x¹xÎxëxy#ys,y y©yºy‡Ùy az lzyz~z†z Žz›z¡z °z ¼zÇz ÊzAëz-{J{,\{+‰{+µ{vá{X| ]| k|u|}| †|‘|  |­|½|ZÆ|*!}L}`}s}m{} é}ô}û}~ ~5~G~Š\~ç~ð~ /1#a… ˜µÄBÊ$ €2€A€Y€,h€•€ª€Ç€ Ø€æ€ì€õ€).=l³˜eL‚G²‚$ú‚_ƒƒœƒµƒ%ăêƒüƒ„„/„#I„ m„w„Œ„“„ ±„ ¼„Ç„ Ï„hÙ„@B…ƒ……A¼…Qþ…RP†B£†@æ†2'‡3Z‡8އ%LJJí‡*8ˆ–cˆNúˆ¨I‰5ò‰(ŠÍ.‹3ü‹20Œ/cŒ+“Œ2¿Œ1òŒV$f{Oâ2Ž/7Ž1gŽa™ŽûŽ /BX$p•ª¯·+Éõ;/`kÌ á ë÷ þ‘ ‘(‘&7‘^‘n‘‹‘Ž‘y«’%“,“5“=“ F“P“_“e“k“r“v“z“~“ƒ“ Œ“ ˜“¦“¯“ ¶“À“É“Ü“ä“ ” ” ”c9lÄrBEi)8f ±k[È´xkV3ÜI“*Ž£r~Å'w¡.”ß4×™Ÿ=îžt ‰¥7ygR`s·ZALž›¢,–|«ÖbÛz 'l#µ@&zÇDq<ñ·jsu䜤#ã£|ˆïÎýÊ)€¤7Ó^ÿF ê¯!—%hZ>dœ™.Xm(´ÌNóÑ0a®\³ÍŒEchKªSQ LØìHϦ«!]CËŸŠæŽ/ U•먗]ÚÝ‚g³T(þ9‡8­RT‚An²µ»5a"Д©ð6¹˜$u±{P¶;¿Cšàv…§piø€OÙå@Šo?É ©+0‹}-‘^‹†4m~š%‘§ õqF¦Y2 {„<ª•°â ²/ç;>G¯í¢¬÷Ã?Þb\ V1ÆpáÂ_½WYe6G$›ô5†ºÀÔ `NKSnI2[QyB… }o&Xƒ­U–Œ¾°„è‰-H_=˜*MMW¬f3¨+ü¡ûv,dòO“öJ‡¼¥wù"DP’újƒ:Á¸¶1 ÕetÒé®Jˆ:’x Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Empty disk Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A catalog is already openedA component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A critical error occured when extracting file information of %s%s%s. Save your catalog if it is possible, exit GWhere and report this trouble to the GWhere project team please.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.All usersAll users|Current userAllow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Audio CD : Audio CD : %dAuto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog exportedCatalog fileCatalog importedCatalog is not exportedCatalog is not importedCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerExportExport catalog toFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGTK+ 2.6 RunTime (required)GUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.GWhere can be installed for all users or only for current user. Select for which you want install GWhere please.GWhere install rights accessGenerals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?ImportImport catalog fromInfo : Install optionsInstaller already runningInsufficient memory to complete the operation.Invalid filled catalog nameIs running on %sJaz : Jaz : %dKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : Network : Network : %dNewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new disk name was filledNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPlugins for auto extraction of file descriptions and plugins for importation/exportation of catalogs.PropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :Tape : Tape : %dThe catalog is invalid or doesn't exists. Check your catalog path please.The current catalog is never be saved, cannot send itThe disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled disk name already exist in the current catalogThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.There is no available catalog pluginThis Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Files : %ldTotal Folders : Total Folders : %ldTotal Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : Which users can run GWhere ?WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberYou must uninstall your last version of GWhereZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: it Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2005-05-28 22:00+0200 Last-Translator: Michele Petrecca Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit X-Generator: KBabel 1.9.1 Gira sotto Gestione dei cataloghi per dispositivi removibili By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacità : %s, libero : %s %s [ %s ], dischi in totale : %d %s, %s, %s Esplora catalogo Gestione catalogoDisco vuotoCartella "%s", %s (files %d sottocartelle %d)Voci elencate : %d (dimensione totale : %s) Motore di ricercaVoce selezionata : %dVoce selezionata : %d (dimensione totale : %s) Tipo : realizzato con %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu voce(i) trovata(e)%s al di fuori dello spazio di indirizzamento di allocazione dei processiUn catalogo è già apertoUn componente del seguente nome del percorso eccede %d caratteri oppure un intero nome del percorso eccede i %d caratteri : %sUn componente nel percorso indicato non è una directory : %sUn errore critico è avvenuto durante l'estrazione delle informazioni del file %s%s%s. Salva il catalogo se è possibile, esci da GWhere e invia questo problema al team di GWhere per favore.AltroA proposito di...Data d'accessoPercorso d'accessoAggiungiAggiungi / AggiornaAggiungi discoAggiungi nuovo discoAggiunta disco in corsoTutte le parole chiavi devono eguagliarsiTutti i files di linguaggio per la traduzione del programma.Tutti gli utentiTutti gli utenti|Utente correnteNotifica sonoraConsenti notifica con un corto suono in alcuni eventi.Permetti l'aggiornamento delle proprietà della categoria selezionata. Clicca sul pulsante Aggiungi/Aggiorna per salvare le modifiche.Un errore di I/O è avvenuto nel cambiare directory in : %sUn errore è avvenuto durante la spedizione della posta. Per favore verifica i settaggi dei parametri.Applica la categoria selezionata a tutti le voci nel disco da aggiungere (disco, cartelle, files).ArchivioArchivio N#Archivio N# : File aggiunto :Audio CD : Audio CD : %dDescrizione automaticaCarica automaticamente il catalogoCarica il catalogo di default automaticamente all'avvio.AutomontaggioAutodimensiona tutta la colonna.Autodimensionamento colonneBCC : CC : CD-ROM : CD-ROM : %dChiudiRitrai tuttoC'è la possibilità di usare un'espressione regolare. Vedere la documentazione per ulteriori informazioni.Non posso editare questo file!! Non posso rimuovere questa categoria.-E' usata da una voce.Non posso ricevere i datiNon posso trasmettere i datiNon posso avviare la ricerca : nessun catalogo è stato caricatoCapacità : Maiuscole/minuscoleScegli Maiuscole/minuscoleCatalogoDescrizione del catalogo : Informazioni sul catalogoNome del catalogo : Categorie del catalogo : Catalogo chiusoLivello compressione del catalogo :Descrizione catalogoCatalogo esportatoFile del catalogoCatalogo importatoIl catalogo non è esportatoIl catalogo non è importatoCatalogo caricatoProprietà catalogoCatalogo salvatoLista delle categorie : CategoriaCategoria : Nome categoria : Cambia in questo pannello tutte le proprietà disponibili al fine di avere il programma come lo 'vuoi tu'.Cambia etichetta di volumeScegli se tutte le parole chiavi o solo una di esse devono eguagliarsi con la voce allo scopo di finire nel risultato della ricerca.Scegli di aggiungere o meno il file-catalogo.PulisciCancella cronistoriaPulisce tutti i risultati della ricerca.Clicca qui per leggere e selezionare un catalogo.Clicca qui per annullare l'invio di posta.Clicca qui per cancellare lo storico dei file aperti di recente.Clicca qui per spedire una e-mail (con un file-catalogo aggiunto).Clicca sul pulsante Applica per imporre i cambiamenti (senza chiudere la finestra di settaggio).Clicca sul pulsante Cancella per chiudere la finestra dei settaggi senza applicare i cambi.Clicca sul pulsante OK per applicare i cambi e chiudere la finestra dei parametri.ChiudiChiudi catalogoChiudi fileChiudi la finestra d'editazione delle proprietà delle categorie.Chiusura catalogoCompattoConnessione chiusa dal client Non ho trovato il file pixmap : %sCreato il : Data di creazioneDataCancella discoDescrizioneDescrizione : DiscoDescrizione del disco : Informazioni sul disco : Nome del disco : Statistiche disco : Descrizione discoDischiDischi nel catalogo : Dischi nel catalogo : %dVisualizza se il dispositivo selezionato è montato o meno.Visualizza informazioniVisualizza le informazioni sul dispositivo selezionato : percorso, spazio libero, etichetta di volume,...EsciEdita le categorieEdita le categorieEdita le descrizioniEdita fileEspella disco se possibileEspella il disco se possibile (CD-ROM...), anche se il vassoio era chiuso. Ciò è possibile solo se è abilitato l'automount!!Indirizzo e-mail : Inserisci un elenco di parole chiavi che potrebbero essere contenute nei nomi-files.Inserisci il nome del catalogoInserisci il nome del discoInserisci qui l'indirizzo e-mail dei contatti di posta copiati.Inserisci qui l'indirizzo e-mail dei contatti di posta copiati e nascosti.Inserisci qui l'indirizzo (gli indirizzi) e-mail.Inserisci qui l'oggetto della tua e-mail.Inserisci il nuovo nome del catalogoInserisci il nuovo nome del discoInserisci la nuova etichetta di volumeInserisci il nuovo nome del fileInserisci il nuovo nome della cartellaInserisci il numero dell'archivio del disco.Inserisci la descrizione della categoria.Inserisci il percorso completo del catalogo da caricare (compreso il nome file).Inserisci la stringa di caratteri jolly. Questa stringa puo contenere caratteri come "?" e "*".Inserisci il nome del catalogo.Inserisci il nome della categoria.Inserisci il nome del disco.Inserisci il nome del nuovo disco. Questo nome apparirà nel tuo catalogo.Inserisci il numero del nuovo disco. Questo numero può esserti d'aiuto per capire la 'storia' del catalogo.Inserisci il numero della porta d'uscita del server mail (la più comune è la 25).Inserisci il tuo indirizzo e-mail.Inserisci il tuo server mail. Solitamente questo indirizzo è del tipo mail.miodominio.comErrore : non posso aprire la cartella corrente.Errore : non posso andare a leggere la cartellaErrore nel caricamento del file pixmap : %sEsciEspandi solo i _dischiEsplora archivio dei files (.tar, .gz, .zip,...)Eplora ad albero la struttura del dispositivo.EsploraEsportaEsporta catalogo inFileDescrizione del file : Informazione fileDimensione file : DImensione file : %s (%s bytes)Descrizione fileNome file : Nome del file-systemTipo file : non ancora implementatoFilesFloppy : Floppy : %dCartellaDescrizione della cartella : Informazioni sulla cartellaNome cartellaDimensione cartella : Descrizione cartellaSpazio libero : Spazio liberoSpazio libero : CompletoCapacità totaleGTK+ 2.6 RunTime (richiesto)GUIGWhere (richiesto)Gwhere permette di creare e gestire un database dei tuoi CD e di altri dispositivi removibili come hard disk, floppy drive, Zip drive, CD-ROM, etc...). Con GWHERE è facile leggere i contenuti dei tuoi CD ed è anche possibile fare veloci ricerche senza alcuna necessità di inserire i CD in tuo possesso nel lettore.GWhere può essere installato per tutti gli utenti o solo per l'utente corrente. Seleziona, per favore, per chi vuoi installare GWhere.Diritti d'accessoOpzioni generaliFornisci il device file del dispositivo selezionato.Fornisci lo spazio libero del dispositivo selezionato (solo se montato).Fornisci lo spazio utilizzato del dispositivo selezionato (solo se montato).Fornisci il numero seriale del dispositivo selezionato (solo se montato). Questo numero è il numero di identificazione del produttore.Fornisci il tipo di filesystem del dispositivo selezionato (ex : ext2, ext3, vfat, ntfs, ...)Fornisci il nome del volume del dispositivo selezionato (solo se montato).GruppoGruppo : HD : HD : %dNascostoNascondiNascondi le operazioni sui fileINodeSe non hai inserito il nome del disco e se il dispositivo selezionato ha un'etichetta di volume, questa etichetta sarà applicata al nome del disco.Se non salvi i cambiamenti perderai tutti i parametri modificati. Vuoi applicare i cambiamenti?.ImportaImporta catalogo daInformazione : Opzioni installazioneInstallazione in corso...Memoria insufficiente per completare l'operazione.Nome del catalogo inserito non validoSta girando su : %sJaz : Jaz : %dMantieni questa opzione selezionata per esaminare tutte le informazioni sui file e sulle cartelle.Parole chiaviPacchetto LinguaUltimo accesso : Ultima modifica : Carica l'ultimo catalogo aperto.Carica il catalogo selezionato.Caricamento catalogoCaricamento catalogo fallitoPosizione nel disco : PostaPrincipale motore dell'applicazioneCrea una descrizione automatica del file(formato del file, dimensione immagine per il formato .xmp o .jpg, etc...).GestioneData di modificaMontaggio dispositivo fallito Monta il dispositivo se esso non è montato. Dopo la scansione il dispositivo verrà smontato anche se era montato prima della scansione.Montato : Sposta in...NomeNome : Rete : Network : %dNuovoNuovo catalogoNuovo discoNuovo fileNoNessun catalogo è stato caricatoNessun catalogo è stato caricato : non posso editare le categorieNessuna voce corrispondente.Nessuna etichettaNessun nome del nuovo disco è stato inseritoNessun nome del nuovo file è stato inseritoNessun nome della cartella è stato inseritoNon ancora implementato!! Esplora tutto l'archivio come se fosse una directory. Gli Archivi sono files 'tar' o 'gzip'.ApriApri catalogoApri fileOpzioniAltro : Altro : %dserver mail : ProprietarioProprietario : PercorsoPer favore configura le opzioni di posta nelle impostazioni prima di trasmettere l'e-mail.Per favore seleziona un nome del catalogo Attendere prego....Attendere prego...PluginsPlugins per l'estensione delle funzionalità (descrizione dei file e importazione/esportazione dei cataloghi).Proprietà VeloceEsci Cataloghi aperti di recente : Espressione regolareRimuovi categoriaRimuovi dal catalogoRimuovi la categoria selezionata dalla lista delle categorie. Questa categoria può essere rimossa solo se non c'è nessuna voce che la usa.RinominaRinomina catalogoRinomina discoRinomina fileRinomina cartellaGenere di gruppo risultato entro cartella/file.Genere di gruppo risultato in tipo.DirittiDiritti : RunTime for GUI environment.Salva con nomeSalvaSalva proprietà della GUI (posizione e dimensione della finestra).Salva proprietà della GUI all'uscitaSalva con nomeSalva catalogo con nomeSalva catalogoSalva le proprietà cambiate della categoria.Salvataggio catalogoSalvataggio catalogo fallitoAnalisi in corsoImpos_tazioniCercaCerca : Cerca nel catalogoRisultato ricercaCerca per tipoRicerca in corso...Seleziona catalogo da caricare automaticamenteSeleziona catalogoSeleziona dispositivo : Seleziona il livello di compressione del catalogo. Il valore preimpostato è 3, ed è un buon compromesso tra un'alta performance e una dimensione abbastannza ridotta del catalogo.Seleziona la categoria da applicare al disco la quale verrà aggiunta (anche se l'opzione è spuntata).Seleziona il dispositivo che verrà aggiunto come disco al tuo catalogo.Seleziona la sezione da configurare.Seleziona la dimensione aperta di recente nella storia dei cataloghi. Il valore di default è 5.Spedisci catalogo via e-mailSpedisci file via e-mailSpedisci postaInvio della posta, attendere prego...Numero seriale : Numero seriale : Numero serialeNumero seriale : Numero porta del server :Imposta ricorsivamente le categorieParametriParametri modificatiMostraMostra le operazioni sui fileDimensioneSoggetto :Tape : Tape : %dIl catalogo indicato non esiste oppure il nome non è corretto. Verifica il corretto percorso per favore.Il corrente catalogo non è stato salvato, non posso trasmetterloIl disco è stato aggiuntoIl disco non è stato aggiunto Il disco non e stato aggiunto L'aggiunta è annullata per l'utenteIl disco non è stato aggiunto Errore : impossibile chiudere la cartella corrente.Il disco non è stato aggiunto Errore : impossibile andare alla cartella genitrice.Il disco non è stato aggiunto : impossibile montare il dispositivoIl disco non è stato aggiunto : non ci sono dispositivi montati.Il nome del disco già esiste nel catalogo correnteIl nome del file già esiste nella cartella correnteIl nome della cartella già esiste nell'attuale posizioneLa directory seguente non esiste : %sLa seguente directory non esiste, oppure il nome è una stringa vuota : %s.Il nome seguente non è una directory : %s.Il risultato della ricerca può essere raggruppato in voci tipo. Se questa opzione viene scelta, tutte le voci saranno raggruppate per cartelle o file.Il risultato della ricerca è case sensitive (distinzione Maiuscole/minuscole).Il risultato della ricerca può essere raggruppato da voci tipo. Se questa opzione viene scelta tutto l'articolo sarà raggruppato da cataloghi, dischi, cartelle e files.Il risultato generato dalla ricerca è case sensitive.La ricerca può essere condotta o meno in maniera case-sensitive. Se si opta per il case sensitive occorre ricordare che "File.txt" è diverso da "file.txt". Se si opta per il non case-sensitive i due file corrisponderanno anche se il loro contenuto è differente.La ricerca distingue lettere maiuscole e minuscole (case sensitive) e supporta caratteri speciali "*". Esempio : *.img *.bmp o *.htm La ricerca della parola chiave accetta un elenco di parole obbligatorie.La ricerca trova le categorie con il nome indicato.La ricerca trova elementi comuni alla descrizione.La ricerca trova i dischi con il nome indicato.La ricerca trova file con il nome indicato.La ricerca trova le cartelle con il nome indicato.Non c'è nessun plugin disponibile per il catalogoQuesto riquadro consente di configurare alcune proprietà e funzionalità del programma.Questo riquadro permette di configurare il programma. Alcune proprietà potranno essere modificate qui.Questo box ti consente di spedire un catalogo via e-mail ad uno o più contatti.A : Eccessivi descrittori file in uso dal processo.Troppi files sono attualmente aperti nel sistema.Troppi collegamenti simbolici sono stati incontrati nella risoluzione del seguente percorso : %s.Capacià totale : Files totali : File totali : %ldCartelle totali : Cartelle totali : %ldSpazio libero totale : Spazio totale di immagazzinamento : Spazio utilizzato : TipoTipo : Tipo : (cartella)Scrivi qui il testo del messaggio di posta.Errore sconosciutoAggiornaAggiornamenti nel catalogo : Utilizza un modello avanzato per generare il nome del discoUsa il nome dell'etichetta di volume come nome disco (solo quando la casella nome disco è vuota)Spazio utilizzato : Versione Versione : MostraVolume : Etichetta volume : Nome volumeNome volume : Quali utenti possono lanciare GWhere ?Caratteri jollyVuoi salvare il catalogo : SiPuoi riempire etichette addizionali per generare un nome del disco con le info del disco : - %% : % - %n : numero archivio (puoi usare un prefisso preceduto dallo 0 : %.4n dai 0001, 0002, 0003, ..., 0091 ... - %l : etichetta di volume del disco - %t : tipo disco - %s : numero serialeE' installata una precedente versione di GWhere. Per installare la corrente versione devi prima disinstallare la vecchia.Zip : Zip : %d_Azione_Applica_Cancella_Espandi tutto_FileAiuto_Nuovo_No_OK_OkApri_Opzioni_Proprietà File _recenti_Rimuovi_Salva_SpedisciAggiornaNessuna perifericanessunaL'aggiunta disco è annullatasconosciutogruppo sconosciutoproprietario sconosciutogwhere-0.2.3/po/cs.po0000644000175000017500000020253610472436216013037 0ustar bartbartmsgid "" msgstr "" "Project-Id-Version: 0.1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2003-08-20 17:56+0200\n" "Last-Translator: Thomas Navara \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "Nemohu obdr¾et data" #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "Spojení ukonèeno klientem\n" #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "Nemohu odeslat data" #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%.0f bytù" #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f Kb" #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f MB" #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f GB" #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f TB" #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f PB" #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f HB" #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f IB" #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "_OK" #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "_Zru¹it" #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Editovat kategorie" #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "Seznam kategorií : " #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "Jméno" #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "Popis" #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "_Aktualizovat" #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" "Umo¾nuje aktualizovat vlastnosti oznaèené kategorie. Kliknìte na Pøidat/" "Aktualizovat pro ulo¾ení zmìn." #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "_Odstranit" #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" "Odstraní zvolenou kategorii ze seznamu. Kategorie mù¾e být odstranìna pouze " "kdy¾ není pou¾ívána." #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "Jméno kategorie : " #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "Jméno kategorie." #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "Popis : " #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "Vlo¾te popis kategorie." #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "Pøidat / Aktualizovat" #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "Ulo¾it vlastnosti kategorie." #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Zavøít" #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Zavøít okno s nastavením kategorií." #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "¾ádný" #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "Odstranit kategorii" #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "Kategorie je pou¾ívána, nemohu ji odstranit" #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "Pøidat" #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "Aktualizovat" #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "_Ne" #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "Skrýt operace se soubory" #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "Ukázat akce se soubory" #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "_Akce" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "_Rozvinout v¹e" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "Rozvinout _disky" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "Svinout v¹e" #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "Editovat _kategorie" #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "®ádný katalog není otevøený : nemohu editovat kategorie" #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "Soubor" #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "_Nový" #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "_Otevøít" #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "_Ulo¾it" #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "Ulo¾it _jako" #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "_Zavøít" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "" #: src/gui/gwmenufile.c:199 msgid "Export" msgstr "Exportovat" #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "_Vlastnosti" #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "N_aposledy otevøené" #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "_Konec" #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Nový katalog" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "" #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "Chcete ulo¾it katalog :\n" "\n" #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Nový soubor" #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "Vlo¾te jméno katalogu" #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "Otevøít katalog" #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "Otevøít soubor" #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Zavøít soubor" #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "Není otevøen katalog" #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "Poslat soubor e-mailem" #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "Prosím nastavte v nastavení parametry pro odesílání e-mailù." #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "Ulo¾it jako katalog" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "" #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "Vlastnosti katalogu" #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "Ulo¾it katalog" #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "Konec " #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "" #: src/gui/gwmenufilecallback.c:1231 msgid "Catalog imported" msgstr "Katalog importován" #: src/gui/gwmenufilecallback.c:1233 msgid "Catalog is not imported" msgstr "Katalog nebyl importován" #: src/gui/gwmenufilecallback.c:1267 msgid "A catalog is already opened" msgstr "Katalog je ji¾ otevøen" #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 msgid "Export catalog to" msgstr "Exportovat katalog do" #: src/gui/gwmenufilecallback.c:1291 msgid "Catalog exported" msgstr "Katalog exportován" #: src/gui/gwmenufilecallback.c:1293 msgid "Catalog is not exported" msgstr "Katalog nebyl exportován" #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "_Pomoc" #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "_O programu" #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "_Mo¾nosti" #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "_Nastavení" #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Nový" #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "Otevøít" #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "Ulo¾it" #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "Ulo¾it jako" #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "Konec" #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Pøejmenovat" #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Zmìnit popis" #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "Vlastnosti" #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "Vejít..." #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "Smazat disk" #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "Zmìnit jméno svazku" #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "Odstranit z katalogu" #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "Editovat soubor" #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "Nemohu editovat tento soubor!!\n" #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Pøejmenovat katalog" #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "Vlo¾te nové jméno pro katalog" #: src/gui/gwmenupopupcallback.c:121 msgid "Invalid filled catalog name" msgstr "Vyplnìno ¹patné jméno katalogu" #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "Popis katalogu" #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Pøejmenovat disk" #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "Vlo¾te nové jméno disku" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "V aktuálním katalog ji¾ je disk tohoto jména" #: src/gui/gwmenupopupcallback.c:374 msgid "No new disk name was filled" msgstr "Nebylo vyplnìno jméno nového disku" #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "Vlo¾te nové jméno svazku" #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "Popis disku" #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "Pøejmenovat slo¾ku" #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "Vlo¾te nové jméno slo¾ky" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "Zadabá slo¾ka ji¾ existuje" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "Nevyplnìno jméno slo¾ky" #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "Popis adresáøe" #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "Pøejmenovat soubor" #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "Vlo¾te nové jméno souboru" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "Tento soubor v adresáøi ji¾ existuje" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "Nevyplnìno jméno souboru" #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "Popis souboru" #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Archív" #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "Katalog" #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "Zavøít katalog" #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "Prosím poèkejte..." #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Katalog zavøen." #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "neznámý vlastník" #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "neznámá skupina" #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Nový disk" #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "Zvolte médium pro vlo¾ení do katalogu jako disk." #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "Vyberte médium : " #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "Vlo¾te èíslo nového disku. Pomáhá udr¾et pøehled o katalogu." #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Archív è. : " #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "Vlo¾te jméno nového disku - tak se bude zobrazovat v katalogu" #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "Jméno : " #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "Kategorie : " #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "" "Vyberte kategorii, do které bude disk pøidán (i kdy¾ je volba za¹krtnuta)." #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "Vlo¾te jméno zaøízení zvoleného média." #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Info : " #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "Vlo¾te typ zvoleného média (napø. ext2, ext3, vfat, ntfs,...)." #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Typ : " #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "Zobrazuje jestli je médium pøipojeno nebo ne." #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "Pøipojen : " #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "Jméno svazku zvoleného média (je-li pøipojen)." #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Svazek : " #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "Sériové èíslo média (je-li pøipojen). Je to výrobní èíslo." #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Sériové èíslo : " #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "Kapacita média (je-li pøipojen)." #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "Kapacita : " #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "Volné místo na médiu (je-li pøipojen)." #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Volné : " #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "Volby" #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "Zobrazit informace" #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" "Zobrazí informace o zvoleném zaøízení - bod pøipojení, kapacitu, volné " "místo, popis,..." #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Automatické pøipojování" #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" "Pøipojí médium pokud nebyl, odpojí ho po skenování (i pokud byl pøedtím " "pøipojen)." #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "Prozkoumá strukturu disku." #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "Pøi zak¹rtnutí prohlí¾í v¹echny adresáøe a informace o souborech." #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "Prohledávat archivy (.tar, .gz, .zip,...)" #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "Funkce není implementována!!\n" "Prochází archivy jako by to byly adresáøe." #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "Vysune médium, je-li to mo¾né." #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" "Vysune médium (CD-ROM, zip,...) i pokud jsou zavøena dvíøka. Je to mo¾né " "pouzeje-li zapnut automount !" #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "Nastavit kategorii rekuzivnì" #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "Nastaví zvolenou kategorii v¹em polo¾kám disku (adresáøe)." #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "Automatický popis" #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "Automatické vytvoøení popisu (formát souboru, velikost obrázku,...)" #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "Pou¾ít pokroèilé vzorky pro generování jména disku" #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Mù¾ete pøidat dal¹í tagy pro vygenerování jména disku z informací o disku: \n" "- %% : %\n" "- %n : èíslo archivu (mù¾ete pou¾ít poèet èíslic pro doplnìní 0 : %.4n give " "0001, 0002, 0003, ..., 0091, ...\n" "- %l : jméno média\n" "- %t : typ média\n" "- %s : sériové èíslo" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "Pou¾ít jméno média jako jméno disku" #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" "Pokud nezadáte jméno disku a médium bude obsahovat jméno svazku,pou¾ije se " "to jako jméno disku." #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "Pøidat disk" #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Správa" #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "Disk nebyl pøidán : nejsou pøipojená média" #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "Disk nebyl pøidán : není mo¾né pøipojit zaøízení" #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "Pøidat nový disk" #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "Vlo¾te jméno disku" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "Naèítám" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "Naèítá se disk" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "Prosím poèkejte" #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "Disk byl pøidán" #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Pøipojení selhalo\n" #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Sériové èíslo : " #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "¾ádný disk" #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "neznámá" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Ano" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "Ne" #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "®ádné jméno" #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Jméno svazku : " #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "pøidávání disku zru¹eno" #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "Prosím zvolte jméno katalogu\n" #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "Hledat : " #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "Hledat" # #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "Vyhledávání mù¾e být citlivé na velikost znakù. Hledaná slova podporují znaky" "\"*\".\n" "Napøíklad: img*.bmp lub *.htm\n" "Hledání klíèových slov pøijímá seznam povinných slov." # #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "Smazat" # #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "Smazat výsledky hledání" #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "Rozli¹ovat velikost písmen" #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "Vyhledávání mù¾e/nemusí rozli¹ovat malá/velká písmena.\n" "V pøípadì zapnuté citlivosti \"Soubor.txt\" není \"soubor.txt\", pøi " "vypnutém rozli¹ování je nalezen." # #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "Typ hledání" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "Klíèová slova" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "Vlo¾te klíèová slova, která musí být obsa¾ena v souborech." #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "Zástupné znaky" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "" "Vlo¾te celé jméno souboru vèetnì zástupných znakù.Vzorek mù¾e obsahovat " "znaky \"?\" and \"*\" " # #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "Regulární výrazy" #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "Umo¾nuje pou¾ívat regulární výrazu. Více najdete v dokumentaci." #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "Soubor" #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "Hledat v jménech souborù." #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "Adresáø" #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "Hledat v jménech adresáøù." #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "Disk" #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "Hledat v jmenéch diskù." #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "Kategorie" #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "Hledat v kategorie." #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "Hledat v popisech." #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "Hledat v katalogu" #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "nalezeno %lu polo¾ek." #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "Výsledky hledání" #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "®ádné polo¾ky nenalezeny." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "Hledám..." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "Nemohu zaèít hledat : není otevøen ¾ádný katalog" #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "_Ok" #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "Vlo¾te jméno katalogu." #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "Verze : " #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "Verze : " #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr " sestaveno s " #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "Diskù v katalogu : " #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "Diskù v katalogu : %d" #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Souborù : " #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, c-format msgid "Total Files : %ld" msgstr "Souborù : %d" #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "Adresáøù : " #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, c-format msgid "Total Folders : %ld" msgstr "Adresáøù : %d" #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "Soubory : " #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Kapacita : " #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "Obsazeno : " #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "Volné : " #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "Statistika : " #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "CD-ROM : " #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "CD-ROM : %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "" #: src/gui/gwpropertiesbox.c:577 #, c-format msgid "Audio CD : %d" msgstr "Audio CD : %d" #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "HDD : " #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "HDD : %d" #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "Disketa : " #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "Disket : %d" #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip : " #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip : %d" #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 msgid "Tape : " msgstr "Páska : " #: src/gui/gwpropertiesbox.c:649 #, c-format msgid "Tape : %d" msgstr "Páska : " #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "" #: src/gui/gwpropertiesbox.c:666 #, c-format msgid "Network : %d" msgstr "Sí» : %d" #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 msgid "Jaz : " msgstr "Jaz : " #: src/gui/gwpropertiesbox.c:683 #, c-format msgid "Jaz : %d" msgstr "Jaz : %d" #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "Jiné : " #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "Jiné : %d" #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Kategorie katalogu : " #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "Popis katalogu : " #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Informace o katalogu" #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "Vlo¾te jméno disku." #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "Vlo¾te èíslo disku." #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr " Typ : " #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "Sériové èíslo : " #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "Jméno svazku : " #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "Kapacita : " #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "Obsazeno : " #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "Volné : " #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "Jméno katalogu : " #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "Aktualizace : " #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "Popis disku : " #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Informace o disku" #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "Jméno adresáøe" #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Typ : (adresáø)" #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "Velikost : " #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "Vytvoøen : " #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "Zmìnìn : " #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "Poslední pøístup : " #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Práva : " #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "Vlastník : " #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "Skupina : " #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "Jméno disku : " #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "Cesta : " #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "Popis adresáøe : " #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Informace o slo¾ce" #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "Jméno souboru : " #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Typ souboru : funkce není implementována!!" #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "Velikost : %s (%ld bajtù)" #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "Popis souboru : " #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Informace o souboru" #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "Soubor katalogu" #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Úroveò komprese katalogu :" #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "" "Zvolte úroveò komprese souboru. Bì¾nì je 3, co¾ je kompromis rychlosti a " "velikosti." #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Naposled otevøené soubory :" #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "Zvolte velikost historie otevøených souborù. Bì¾nì je 5." #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "Vyèistit historii" #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "Kliknìte pro otevøení historie naposled otevøených souborù." #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Automaticky nahrát katalog" #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "Automaticky nahraje katalog pøi spu¹tìní." #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "Nahrát naposled otevøený soubor." #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "Nahrát zvolený katalog." #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "Vlo¾te celou sestu k souboru." #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "Zvolit katalog" #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "Kliknìte pro zvolení souboru katalogu." #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "Zvolit automaticky nahrávaný katalog" #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "Prùzkumník" # #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "Rozli¹ovat velikost písmen" #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "Výsledek seøazený v prohlí¾eèi je citlivý na velikost znakù." #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Výsledek seøazený podle adresáøe/souboru." #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" "Výsledek seøazený v prohlí¾eèi mù¾e být ve skupinách podle typu objektu." "Pokud je tato volba za¹krtnuta, v¹echny objekty budou seskupeny podle " "adresáøù nebo souborù." #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Mìnit velikost sloupcù automaticky" #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "Automaticky mìní velikost sloupcù." #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "Disky" #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "Viditelný" #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Schovat" #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "Ukázat" #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "Schovaný" #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Soubory" #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "Výsledek øazení pøi hledání je citlivý na velikost znakù." #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Výsledky seøazené podle typu." #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" "Výsledek mù¾e být seøazen podle typu objektu. Pokud je tato volba za¹krtnuta " "v¹echny objekty budou seøazeny podle kategorií, diskù, adresáøù a souborù." #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "V¹echna klíèová slova musí souhlasit" #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" "Zvolte, jestli musí souhlasit v¹echna klíèová slova nebo staèí pouze jedno " "aby byl výsledek nalezen." # #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "Rychle" #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "V¹eobecné nastavení" #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "GUI" #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "Ulo¾it vlastnosti GUI pøi odchodu." #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "Ulo¾í prostøedí (velikosti a pozice oken)." #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "Povolit zvuk" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "Povolit krátké pípnutí pøi nìkterých událostech." #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Po¹ta" #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "E-mailová adresa :" #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "Vlo¾te svoji e-mail adresu." #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "Server pro odchozí po¹tu :" #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "" "Vlo¾te adresu Va¹eho SMTP serveru pro odchozí po¹tu. Napø. smtp.example.com" #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Port serveru :" #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "Vlo¾te èíslo portu SMTP serveru (typicky 25)." #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "Toto okno umo¾nuje nastavit nìkteré funkce a vlastnosti programu." #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "Nastavení" #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "Zvolte sekci nastavení." #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "Pou¾ijte panely k nastavení programu podle va¹ich pøedstav." #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "Toto okno umo¾nuje nastavit nìkteré vlastnosti programu." #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "Kliknìte na OK pro ulo¾ení zmìn a zavøení okna." #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "Kliknìte na Zru¹it pro zavøení okna (bez ukládání zmìn)." #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "_Pou¾ij" #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "Kliknìte na Pou¾ij pro pou¾ití zmìn (bez zavøení okna)." #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "Nastavení zmìnìno" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "Pokud neulo¾íte zmìny, pøijdete o nì. Chcete ulo¾it zmìny ?" #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], celkem diskù: %d" #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr " Vybrané objekty: %d (velikost : %s)" #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], kapacita : %s, volné : %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr "" #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr " Zvolený objekt: %d (celkem : %s)" #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr " Adresáø \"%s\", %s (souborù %d, slo¾ek %d)" #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr " %s, %s, %s" #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr " Zvolený objekt : %d" #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr " Prùzkum katalogu" #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr " Vyhledávání" #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr " Správa katalogu" #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Zavøít katalog" #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "Poslat katalog e-mailem" #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "O programu" # #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "Správa katalogu výmìnných médií\n" "Od Sébastiena LECACHEURa\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" "GWhere slou¾í k uchování obsahu CD a dal¹ích médií(HDD, floppy, zip,...). " "Potom mù¾ete procházet databázia vyhledávat soubory bez nutnosti vlo¾it CD " "do mechaniky." #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Bì¾í na " #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "Toto okno umo¾nuje poslat katalog e-mailem." #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "Poslat e-mail" #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "Pro :" #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "CC :" #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "BCC :" #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "Pøedmìt :" #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "Adresát(i)." #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "Adresát(i) kopií." #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "Adresát(i) skrytých kopií." #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "Nadpis e-mailu" #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "Pøíloha :" #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "Zvolte katalog pro pøipojení k e-mailu." #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "Text zprávy." #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "_Poslat" #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "Kliknìte pro odeslání e-mailu (s pøilo¾eným katalogem)." #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "Kliknìte pro zru¹ení e-mailu." #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "Odesílám e-mail, poèkejte..." #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "Bìhem odesílání do¹lo k chybì. Prosím, zkotrolujte nastavení." #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Nemohu najít obrázek: %s" #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "Nemohu nahrát obrázek: %s" #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "Chyba : nemohu otevøít aktuální adresáø." #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "Chyba: nemohu vejít do pracovního adresáøe." #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "Disk nebyl pøidán\n" "Operace zru¹ena u¾ivatelem" #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "Disk nebyl pøidán\n" #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "%s mimo alokovaný adresní prostor programu." #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" "Komponenta následující cesty pøekroèila %d znakù nebocelá cesta pøekroèila %" "d znakù : %s." #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "Následující adresáø neexistuje: %s." #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "Nedostatek pamìti pro dokonèení operace." #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "Komponenta prefixu cesty není adresáø: %s." #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "Pøíli¹ mnoho symbolických odkazù pøi rozli¹ování cesty: %s." #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "Chyba I/O pøi zmìnì adresáøe do : %s." #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "Neznámá chyba" #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" "Disk nebyl pøidán\n" "Chyba : nemohu pøejít do nadøazeného adresáøe." #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Pøíli¹ mnoho souborù otevøených procesem." #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Pøíli¹ mnoho otevøených souborù v systému." #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "Adresáø neexistuje nebo jeho jméno je prázdný øetìzec : %s." #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "Následující jméno není adresár : %s." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" "Disk nebyl pøidán\n" "Chyba : není mo¾né opustit aktuální adresáø." #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "Bì¾í pod %s" #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Katalog naèten" #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "Chyba pøi otvírání katalogu" #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "Otevírám katalog" #: src/gwapplicationmanager.c:499 msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "Soubor katalogu neexistuje, zkontrolujte prosím cestu k souboru." #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "Ukládám katalog" #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Katalog ulo¾en" #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "Chyba pøi ukládání katalogu" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Práva" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "Vlastník" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "Skupina" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "Velikost" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "INode" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Poslední pøístup" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Zmìna" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "Vytvoøen" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "Jméno systému souboru" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "Cesta" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Archív è." #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Typ" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Jméno svazku" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "Kapacita" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "Volné" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Datum" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Sériové èíslo" #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "Cesta" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "Plný" #: win32/config.h:288 msgid "Compact" msgstr "Kompaktní" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (vy¾adován)" #: win32/config.h:290 msgid "Main engine application." msgstr "Aplikace." #: win32/config.h:291 #, fuzzy msgid "GTK+ 2.6 RunTime (required)" msgstr "GTK+ 2.0 knihovny (vy¾adovány)" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "Knihovny pro GUI prostøedí." #: win32/config.h:293 msgid "Plugins" msgstr "Pluginy" #: win32/config.h:294 #, fuzzy msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "Pluginy pro extrakci informací ze souborù." #: win32/config.h:295 msgid "Languages Files" msgstr "Jazyky prostøedí" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "V¹ecny jazykové soubory pro pøeklad." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "" #: win32/config.h:298 msgid "Installer already running" msgstr "" #: win32/config.h:299 #, fuzzy msgid "Install options" msgstr "V¹eobecné nastavení" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" #: win32/config.h:303 msgid "All users|Current user" msgstr "" #: win32/config.h:304 msgid "All users" msgstr "" #~ msgid "" #~ "The catalog file doesn't exists. Check your catalog file path please." #~ msgstr "Soubor katalogu neexistuje, zkontrolujte prosím cestu k souboru." #~ msgid "" #~ "The catalog file to load doesn't have a good file extension. Only .ctg " #~ "files are allowed to be loaded." #~ msgstr "Soubor katalogu má ¹patnou pøíponu,mohu naèíst jen .ctg soubory." #~ msgid "Load file" #~ msgstr "Nahrát soubor" #~ msgid "Error : cannot open this file." #~ msgstr "Chyba : nemohu otevøít soubor" #~ msgid "Error : cannot read the file version." #~ msgstr "Chyba : nemohu pøeèíst verzi souboru" #~ msgid "Load catalog" #~ msgstr "Nahrát katalog" #~ msgid "Error : cannot close file." #~ msgstr "Chyba : nemohu zavøít soubor." #~ msgid "Error : it's not a GWhere file." #~ msgstr "Chyba: soubor není ve formátu GWhere." #~ msgid "Error : this GWhere version file is unknown." #~ msgstr "Chyba : neznámá verze souboru GWhere." #~ msgid "Error : cannot close this file after loading." #~ msgstr "Chyba: nemohu zavøít soubor po otevøení." #~ msgid "Error : during the loading of disk." #~ msgstr "Chyba : bìhem nahrávání disku." #~ msgid "Error : cannot create file." #~ msgstr "Chyba : není mo¾né vytvoøit soubor." #~ msgid "Error : cannot write file version." #~ msgstr "Chyba : není mo¾né zapsat verzi souboru." #~ msgid "Error : cannot close catalog file." #~ msgstr "Chyba : není mo¾né zavøít katalog." #~ msgid "Elapsed time to save the catalog : %d secs" #~ msgstr "Vypr¹el èas pro ulo¾ení katalogu : %d sec" #~ msgid "" #~ "Give the device file of the selected disk. The device file is the one of " #~ "the /etc/fstab file." #~ msgstr "Jméno zaøízení disku (jeden ze /etc/fstab)." #~ msgid "Scan disk" #~ msgstr "Naèíst disk" #~ msgid "unkown" #~ msgstr "neznámá" gwhere-0.2.3/po/cs-windows-1250.gmo0000644000175000017500000007654610472436234015272 0ustar bartbartÞ•¥D 3l8# 9#aG#$©#Î# ë#÷# $*$$G$l${$%$µ$ ¾$ Ë$Ö$Þ$æ$î$ö$þ$%%1#%U%qq%7ã%&"& (& 4&@& D&Q& Z&g&~&0—& È&+Ó&mÿ&4m'J¢'Rí'@( H( S(a( q((•(-¦( Ô(Þ(þ()) ) &)2) 9)CG)‹)1£)Õ)é)*ú) %*1*@*U*]* t**‘*§*¶*Ò*æ* ÷*++-+E+T+ g+u+ˆ+ ‘++\®+ ,n,(Ž,·, ½,Ë,1å,(-5@-5v-H¬-Dõ-?:.z. €. Ž.,™.Æ.Ö.Þ.ú. / &/4/ 9/ E/Q/`/e/ y/ ƒ//£/´/º/Î//ä/ 0M!0o0u0†0–0 §0±0rÉ0<1LL1™1¬19¼1@ö1372#k22¦2º2Ö2ê2%3&&3)M3Rw3Ê3é3 4I%4\o4CÌ45L*5"w5$š5¿5Ý5â5,õ5$"6G6P6W6i6n6 ‚6 Œ6™6³6 Ä6Ñ6!â67 7 7 7'7 =7 I7U7d7 w7 …7 7ž7 £7±7µ7È7É8+Ú8?9?F9g†9Gî9@6:w:}:†:Œ:”:›: :µ:»:P;;Œ;.”;Ã;ß;ð;÷;D< E<O<_<s<‡<¦<Â<Ò<é<ý<=[= w=‚= ”=i¢= > >">'> /><> @>L>U>^>a>-v>¤>µ>¾>Ú>ö>h?}? ‚? ?™?¡? ª?µ?Í?Ó?Ü?Eá?'@ E@Q@`@ h@s@y@@™@¬@¼@…Ð@VA]A lA xA „A!’A´AÏA ÖAàAýAB0 BCMCx]C]ÖC<4D qDK’DÞDóD EE ,E 6E CEQE bEpEˆE‘E¢E§E»E ÀEÊE ÒEIÜE&F>F2ZF?F>ÍF/ G8’g.Ñgh hhh#h,h4hMh_Sh;³hïh(÷h i ?iKiRiA[i i«i¼i Ði Úiûij$j@jIj OjCYjj¤jªjR½j kk%k+k4k=k Bk Ok Ykekhk7}kµk Ïk"ÛkþklG/lwlllžl¤l ¬l¶lÑl Úlæl<ìl)mGmWmjm rm}m„m‹m§m¸mÌm`ám BnNnbnsn†n)™nÃnánçnðn oo* o"Ko nozoŽooºoÊoæo îoùo p pp -p 9p$CphpwpS‰pJÝp0(qYq8qqªqÂq Ùqçqrr &r4rErTr qr{rr”r«r ´r¾rÇr@Ðrs!s,4s>as@ s0ás*t,=t$jtt#ªt;Ît$ u¤/u<Ôu—v9©v˜ãv¥|w"x6xIxax{xA–x8Øx+y=y)Cy*my;˜y Ôy ày ëy øy zz z 'z3z7z>z Nz [z izvz2…z#¸z Üzèzñz úz {{ {+{;{J{d{úh{c|j|s|y||‰|˜|Ÿ|¦|¬|°|´|¸| Á| Ë|×| ë|ö|þ| } }}%}=}E}U}'z¢‡i¾u7NÇBˆ–\ƒc8C­JÙžZ…°dJP³Uqàƒs$$‹,Ó-µMÏeÜKD8ˆ¸eg‰‹¡^[ ÕåbÀ FWp¥0^¹˜dÛïkš(n.X’ûöŒVf/[=ŒLI®F%p•%Âc×ów`áø£G tvÈ<ÌŠç+ Iêh¯<msh&†ÿ‡¶:•X"x“{¼z S–ùY´âN™¤"·¬o 0VbR“oÞ¨œ€éÁ!Ä#—Ô§Z*‘&¡œ¥÷l}Wv?Ö6ŸîtYM>õBQS2w*-iË!ÆqЛ±ã(¤Oúf#~kÝ}61GC—)4/Ÿž;U9 ß› ]nOä½\5|¿¦ ª‰”ë>mHÚ13HÃ…’aÍ2 `ŽŽ4†9ü_»E?L«'jTñxaº5,¢˜)yÒKŠ_ærÅþTA ‘;„©ò£RØíEšQÉÎP€3è+gôl²y:{. ‚@7|ý@‚]ju Ê=ìÑ™r” ~A„Dð Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A catalog is already openedA component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.Allow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Audio CD : %dAuto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog exportedCatalog fileCatalog importedCatalog is not exportedCatalog is not importedCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerExportExport catalog toFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.Generals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?Info : Insufficient memory to complete the operation.Invalid filled catalog nameIs running on %sJaz : Jaz : %dKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : Network : %dNewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new disk name was filledNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :Tape : Tape : %dThe catalog is invalid or doesn't exists. Check your catalog path please.The disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled disk name already exist in the current catalogThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.This Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Files : %ldTotal Folders : Total Folders : %ldTotal Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: 0.1.3 Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2003-08-20 17:56+0200 Last-Translator: Thomas Navara Language-Team: Czech MIME-Version: 1.0 Content-Type: text/plain; charset=windows-1250 Content-Transfer-Encoding: 8bit Bìží na Správa katalogu výmìnných médií Od Sébastiena LECACHEURa zero@gwhere.org http://www.gwhere.org %s [ %s ], kapacita : %s, volné : %s %s [ %s ], celkem diskù: %d %s, %s, %s Prùzkum katalogu Správa katalogu Adresáø "%s", %s (souborù %d, složek %d) Vybrané objekty: %d (velikost : %s) Vyhledávání Zvolený objekt : %d Zvolený objekt: %d (celkem : %s) Typ : sestaveno s %.0f bytù%.2f GB%.2f HB%.2f IB%.2f Kb%.2f MB%.2f PB%.2f TBnalezeno %lu položek.%s mimo alokovaný adresní prostor programu.Katalog je již otevøenKomponenta následující cesty pøekroèila %d znakù nebocelá cesta pøekroèila %d znakù : %s.Komponenta prefixu cesty není adresáø: %s._O programuO programuPoslední pøístupCestaPøidatPøidat / AktualizovatPøidat diskPøidat nový diskNaèítá se diskVšechna klíèová slova musí souhlasitVšecny jazykové soubory pro pøeklad.Povolit zvukPovolit krátké pípnutí pøi nìkterých událostech.Umožnuje aktualizovat vlastnosti oznaèené kategorie. Kliknìte na Pøidat/Aktualizovat pro uložení zmìn.Chyba I/O pøi zmìnì adresáøe do : %s.Bìhem odesílání došlo k chybì. Prosím, zkotrolujte nastavení.Nastaví zvolenou kategorii všem položkám disku (adresáøe).ArchívArchív è.Archív è. : Pøíloha :Audio CD : %dAutomatický popisAutomaticky nahrát katalogAutomaticky nahraje katalog pøi spuštìní.Automatické pøipojováníAutomaticky mìní velikost sloupcù.Mìnit velikost sloupcù automatickyBCC :CC :CD-ROM : CD-ROM : %d_ZavøítSvinout všeUmožnuje používat regulární výrazu. Více najdete v dokumentaci.Nemohu editovat tento soubor!! Kategorie je používána, nemohu ji odstranitNemohu obdržet dataNemohu odeslat dataNemohu zaèít hledat : není otevøen žádný katalogKapacita : Rozlišovat velikost písmenRozlišovat velikost písmenKatalogPopis katalogu : Informace o kataloguJméno katalogu : Kategorie katalogu : Katalog zavøen.Úroveò komprese katalogu :Popis kataloguKatalog exportovánSoubor kataloguKatalog importovánKatalog nebyl exportovánKatalog nebyl importovánKatalog naètenVlastnosti kataloguKatalog uloženSeznam kategorií : KategorieKategorie : Jméno kategorie : Použijte panely k nastavení programu podle vašich pøedstav.Zmìnit jméno svazkuZvolte, jestli musí souhlasit všechna klíèová slova nebo staèí pouze jedno aby byl výsledek nalezen.Zvolte katalog pro pøipojení k e-mailu.SmazatVyèistit historiiSmazat výsledky hledáníKliknìte pro zvolení souboru katalogu.Kliknìte pro zrušení e-mailu.Kliknìte pro otevøení historie naposled otevøených souborù.Kliknìte pro odeslání e-mailu (s pøiloženým katalogem).Kliknìte na Použij pro použití zmìn (bez zavøení okna).Kliknìte na Zrušit pro zavøení okna (bez ukládání zmìn).Kliknìte na OK pro uložení zmìn a zavøení okna.ZavøítZavøít katalogZavøít souborZavøít okno s nastavením kategorií.Zavøít katalogKompaktníSpojení ukonèeno klientem Nemohu najít obrázek: %sVytvoøen : VytvoøenDatumSmazat diskPopisPopis : DiskPopis disku : Informace o diskuJméno disku : Statistika : Popis diskuDiskyDiskù v katalogu : Diskù v katalogu : %dZobrazuje jestli je médium pøipojeno nebo ne.Zobrazit informaceZobrazí informace o zvoleném zaøízení - bod pøipojení, kapacitu, volné místo, popis,..._KonecEditovat _kategorieEditovat kategorieZmìnit popisEditovat souborVysune médium, je-li to možné.Vysune médium (CD-ROM, zip,...) i pokud jsou zavøena dvíøka. Je to možné pouzeje-li zapnut automount !E-mailová adresa :Vložte klíèová slova, která musí být obsažena v souborech.Vložte jméno kataloguVložte jméno diskuAdresát(i) kopií.Adresát(i) skrytých kopií.Adresát(i).Nadpis e-mailuVložte nové jméno pro katalogVložte nové jméno diskuVložte nové jméno svazkuVložte nové jméno souboruVložte nové jméno složkyVložte èíslo disku.Vložte popis kategorie.Vložte celou sestu k souboru.Vložte celé jméno souboru vèetnì zástupných znakù.Vzorek mùže obsahovat znaky "?" and "*" Vložte jméno katalogu.Jméno kategorie.Vložte jméno disku.Vložte jméno nového disku - tak se bude zobrazovat v kataloguVložte èíslo nového disku. Pomáhá udržet pøehled o katalogu.Vložte èíslo portu SMTP serveru (typicky 25).Vložte svoji e-mail adresu.Vložte adresu Vašeho SMTP serveru pro odchozí poštu. Napø. smtp.example.comChyba : nemohu otevøít aktuální adresáø.Chyba: nemohu vejít do pracovního adresáøe.Nemohu nahrát obrázek: %sKonecRozvinout _diskyProhledávat archivy (.tar, .gz, .zip,...)Prozkoumá strukturu disku.PrùzkumníkExportovatExportovat katalog doSouborPopis souboru : Informace o souboruSoubory : Velikost : %s (%ld bajtù)Popis souboruJméno souboru : Jméno systému souboruTyp souboru : funkce není implementována!!SouboryDisketa : Disket : %dAdresáøPopis adresáøe : Informace o složceJméno adresáøeVelikost : Popis adresáøeVolné : VolnéVolné : PlnýKapacitaGUIGWhere (vyžadován)GWhere slouží k uchování obsahu CD a dalších médií(HDD, floppy, zip,...). Potom mùžete procházet databázia vyhledávat soubory bez nutnosti vložit CD do mechaniky.Všeobecné nastaveníVložte jméno zaøízení zvoleného média.Volné místo na médiu (je-li pøipojen).Kapacita média (je-li pøipojen).Sériové èíslo média (je-li pøipojen). Je to výrobní èíslo.Vložte typ zvoleného média (napø. ext2, ext3, vfat, ntfs,...).Jméno svazku zvoleného média (je-li pøipojen).SkupinaSkupina : HDD : HDD : %dSchovanýSchovatSkrýt operace se souboryINodePokud nezadáte jméno disku a médium bude obsahovat jméno svazku,použije se to jako jméno disku.Pokud neuložíte zmìny, pøijdete o nì. Chcete uložit zmìny ?Info : Nedostatek pamìti pro dokonèení operace.Vyplnìno špatné jméno kataloguBìží pod %sJaz : Jaz : %dPøi zakšrtnutí prohlíží všechny adresáøe a informace o souborech.Klíèová slovaJazyky prostøedíPoslední pøístup : Zmìnìn : Nahrát naposled otevøený soubor.Nahrát zvolený katalog.Otevírám katalogChyba pøi otvírání kataloguCesta : PoštaAplikace.Automatické vytvoøení popisu (formát souboru, velikost obrázku,...)SprávaZmìnaPøipojení selhalo Pøipojí médium pokud nebyl, odpojí ho po skenování (i pokud byl pøedtím pøipojen).Pøipojen : Vejít...JménoJméno : Sí : %dNovýNový katalogNový diskNový souborNeNení otevøen katalogŽádný katalog není otevøený : nemohu editovat kategorieŽádné položky nenalezeny.Žádné jménoNebylo vyplnìno jméno nového diskuNevyplnìno jméno souboruNevyplnìno jméno složkyFunkce není implementována!! Prochází archivy jako by to byly adresáøe.OtevøítOtevøít katalogOtevøít souborVolbyJiné : Jiné : %dServer pro odchozí poštu :VlastníkVlastník : CestaProsím nastavte v nastavení parametry pro odesílání e-mailù.Prosím zvolte jméno katalogu Prosím poèkejteProsím poèkejte...PluginyVlastnostiRychleKonec Naposled otevøené soubory :Regulární výrazyOdstranit kategoriiOdstranit z kataloguOdstraní zvolenou kategorii ze seznamu. Kategorie mùže být odstranìna pouze když není používána.PøejmenovatPøejmenovat katalogPøejmenovat diskPøejmenovat souborPøejmenovat složkuVýsledek seøazený podle adresáøe/souboru.Výsledky seøazené podle typu.PrávaPráva : Knihovny pro GUI prostøedí.Uložit _jakoUložitUloží prostøedí (velikosti a pozice oken).Uložit vlastnosti GUI pøi odchodu.Uložit jakoUložit jako katalogUložit katalogUložit vlastnosti kategorie.Ukládám katalogChyba pøi ukládání kataloguNaèítám_NastaveníHledatHledat : Hledat v kataloguVýsledky hledáníTyp hledáníHledám...Zvolit automaticky nahrávaný katalogZvolit katalogVyberte médium : Zvolte úroveò komprese souboru. Bìžnì je 3, což je kompromis rychlosti a velikosti.Vyberte kategorii, do které bude disk pøidán (i když je volba zaškrtnuta).Zvolte médium pro vložení do katalogu jako disk.Zvolte sekci nastavení.Zvolte velikost historie otevøených souborù. Bìžnì je 5.Poslat katalog e-mailemPoslat soubor e-mailemPoslat e-mailOdesílám e-mail, poèkejte...Sériové èíslo : Sériové èíslo : Sériové èísloSériové èíslo : Port serveru :Nastavit kategorii rekuzivnìNastaveníNastavení zmìnìnoUkázatUkázat akce se souboryVelikostPøedmìt :Páska : Páska : Soubor katalogu neexistuje, zkontrolujte prosím cestu k souboru.Disk byl pøidánDisk nebyl pøidán Disk nebyl pøidán Operace zrušena uživatelemDisk nebyl pøidán Chyba : není možné opustit aktuální adresáø.Disk nebyl pøidán Chyba : nemohu pøejít do nadøazeného adresáøe.Disk nebyl pøidán : není možné pøipojit zaøízeníDisk nebyl pøidán : nejsou pøipojená médiaV aktuálním katalog již je disk tohoto jménaTento soubor v adresáøi již existujeZadabá složka již existujeNásledující adresáø neexistuje: %s.Adresáø neexistuje nebo jeho jméno je prázdný øetìzec : %s.Následující jméno není adresár : %s.Výsledek seøazený v prohlížeèi mùže být ve skupinách podle typu objektu.Pokud je tato volba zaškrtnuta, všechny objekty budou seskupeny podle adresáøù nebo souborù.Výsledek seøazený v prohlížeèi je citlivý na velikost znakù.Výsledek mùže být seøazen podle typu objektu. Pokud je tato volba zaškrtnuta všechny objekty budou seøazeny podle kategorií, diskù, adresáøù a souborù.Výsledek øazení pøi hledání je citlivý na velikost znakù.Vyhledávání mùže/nemusí rozlišovat malá/velká písmena. V pøípadì zapnuté citlivosti "Soubor.txt" není "soubor.txt", pøi vypnutém rozlišování je nalezen.Vyhledávání mùže být citlivé na velikost znakù. Hledaná slova podporují znaky"*". Napøíklad: img*.bmp lub *.htm Hledání klíèových slov pøijímá seznam povinných slov.Hledat v kategorie.Hledat v popisech.Hledat v jmenéch diskù.Hledat v jménech souborù.Hledat v jménech adresáøù.Toto okno umožnuje nastavit nìkteré funkce a vlastnosti programu.Toto okno umožnuje nastavit nìkteré vlastnosti programu.Toto okno umožnuje poslat katalog e-mailem.Pro :Pøíliš mnoho souborù otevøených procesem.Pøíliš mnoho otevøených souborù v systému.Pøíliš mnoho symbolických odkazù pøi rozlišování cesty: %s.Kapacita : Souborù : Souborù : %dAdresáøù : Adresáøù : %dVolné : Kapacita : Obsazeno : TypTyp : Typ : (adresáø)Text zprávy.Neznámá chybaAktualizovatAktualizace : Použít pokroèilé vzorky pro generování jména diskuPoužít jméno média jako jméno diskuObsazeno : Verze : Verze : ViditelnýSvazek : Jméno svazku : Jméno svazkuJméno svazku : Zástupné znakyChcete uložit katalog : AnoMùžete pøidat další tagy pro vygenerování jména disku z informací o disku: - %% : % - %n : èíslo archivu (mùžete použít poèet èíslic pro doplnìní 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : jméno média - %t : typ média - %s : sériové èísloZip : Zip : %d_Akce_Použij_Zrušit_Rozvinout všeSoubor_Pomoc_Nový_Ne_OK_Ok_Otevøít_Možnosti_VlastnostiN_aposledy otevøené_Odstranit_Uložit_Poslat_Aktualizovatžádný diskžádnýpøidávání disku zrušenoneznámáneznámá skupinaneznámý vlastníkgwhere-0.2.3/po/fr.po0000644000175000017500000043053410472436220013035 0ustar bartbart# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # First Author: Sébastien LECACHEUR , 2000. # # msgid "" msgstr "" "Project-Id-Version: 0.1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2001-09-27 00:12GMT\n" "Last-Translator: Sébastien LECACHEUR \n" "Language-Team: french \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "Ne peut pas recevoir de données" #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "Connexion fermée par le client\n" #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "Ne peut pas envoyer de données" # src/tools/Calcul.c:41 # src/tools/Calcul.c:46 #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%.0f octets" # src/tools/Calcul.c:44 # src/tools/Calcul.c:49 #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f Ko" # src/tools/Calcul.c:47 # src/tools/Calcul.c:52 #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f Mo" # src/tools/Calcul.c:50 # src/tools/Calcul.c:55 #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f Go" # src/tools/Calcul.c:54 # src/tools/Calcul.c:59 #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f To" # src/tools/Calcul.c:58 # src/tools/Calcul.c:63 #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f Po" # src/tools/Calcul.c:62 # src/tools/Calcul.c:67 #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f Ho" # src/tools/Calcul.c:67 src/tools/Calcul.c:72 # src/tools/Calcul.c:72 src/tools/Calcul.c:77 #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f Io" # src/gui/CaptureBox.c:84 src/gui/MenuFile.c:291 src/gui/MsgBox.c:71 # src/gui/Properties.c:164 src/gui/TextBox.c:100 # src/gui/CaptureBox.c:84 src/gui/MenuFile.c:291 src/gui/MsgBox.c:71 # src/gui/Properties.c:164 src/gui/TextBox.c:100 # src/gui/CaptureBox.c:84 src/gui/DialogBox.c:59 src/gui/MsgBox.c:75 # src/gui/Properties.c:164 src/gui/TextBox.c:100 # src/gui/CaptureBox.c:96 src/gui/DialogBox.c:59 src/gui/MsgBox.c:75 # src/gui/PropertiesBox.c:189 src/gui/TextBox.c:107 #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "_OK" # src/gui/CaptureBox.c:92 src/gui/MenuFile.c:348 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:92 src/gui/MenuFile.c:348 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:92 src/gui/DialogBox.c:94 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:116 src/gui/DialogBox.c:94 # src/gui/ProgressBarBox.c:127 src/gui/ProgressBarBox.c:246 # src/gui/ProgressBarBox.c:504 src/gui/PropertiesBox.c:216 # src/gui/TextBox.c:122 #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "_Annuler" # src/gui/Categories.c:58 src/gui/MenuPopup.c:98 # src/gui/Categories.c:58 src/gui/MenuPopup.c:98 # src/gui/Categories.c:58 src/gui/MenuPopup.c:98 # src/gui/CategoriesEditBox.c:88 src/gui/MenuPopup.c:99 #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Editer les catégories" # src/gui/Categories.c:68 # src/gui/Categories.c:68 # src/gui/Categories.c:68 # src/gui/CategoriesEditBox.c:104 #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "Liste des catégories : " # src/gui/Categories.c:99 src/gui/NoteBookCatalog.c:109 # src/gui/NoteBookCatalog.c:186 src/gui/NoteBookCatalog.c:220 # src/gui/NoteBookSearch.c:133 # src/gui/Categories.c:99 src/gui/NoteBookCatalog.c:109 # src/gui/NoteBookCatalog.c:186 src/gui/NoteBookCatalog.c:220 # src/gui/NoteBookSearch.c:133 # src/gui/Categories.c:99 src/gui/NoteBookCatalog.c:107 # src/gui/NoteBookCatalog.c:205 src/gui/NoteBookCatalog.c:252 # src/gui/NoteBookSearch.c:207 # src/gui/CategoriesEditBox.c:135 src/gui/NoteBookCatalog.c:108 # src/gui/NoteBookCatalog.c:206 src/gui/NoteBookCatalog.c:253 # src/gui/NoteBookSearch.c:229 #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "Nom" # src/gui/Categories.c:105 src/gui/NoteBookCatalog.c:149 # src/gui/NoteBookCatalog.c:194 src/gui/NoteBookCatalog.c:228 # src/gui/NoteBookSearch.c:163 # src/gui/Categories.c:105 src/gui/NoteBookCatalog.c:149 # src/gui/NoteBookCatalog.c:194 src/gui/NoteBookCatalog.c:228 # src/gui/NoteBookSearch.c:163 # src/gui/Categories.c:105 src/gui/NoteBookCatalog.c:147 # src/gui/NoteBookCatalog.c:213 src/gui/NoteBookCatalog.c:260 # src/gui/NoteBookSearch.c:163 src/gui/NoteBookSearch.c:237 # src/gui/CategoriesEditBox.c:141 src/gui/NoteBookCatalog.c:148 # src/gui/NoteBookCatalog.c:214 src/gui/NoteBookCatalog.c:261 # src/gui/NoteBookSearch.c:185 src/gui/NoteBookSearch.c:247 #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "Description" # src/gui/Categories.c:118 # src/gui/Categories.c:118 # src/gui/Categories.c:118 # src/gui/CategoriesEditBox.c:154 #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "Mise à jo_ur" # src/gui/Categories.c:123 # src/gui/Categories.c:123 # src/gui/Categories.c:123 # src/gui/CategoriesEditBox.c:159 #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" "Autorise la mise à jour des propriétés de la catégories sélectionnée. " "Cliquer sur le bouton Ajouter / Mise à jour pour sauver les modifications." # src/gui/Categories.c:127 # src/gui/Categories.c:127 # src/gui/Categories.c:127 # src/gui/CategoriesEditBox.c:163 #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "Supp_rimer" # src/gui/Categories.c:132 # src/gui/Categories.c:132 # src/gui/Categories.c:132 # src/gui/CategoriesEditBox.c:168 #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" "Supprime la catégorie sélectionnée de la liste des catégories. Cette " "catégories peut être supprimer seulement si il n'y a aucun élément qui " "l'utilise." # src/gui/Categories.c:147 # src/gui/Categories.c:147 # src/gui/Categories.c:147 # src/gui/CategoriesEditBox.c:183 #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "Nom de la catégorie : " # src/gui/Categories.c:157 # src/gui/Categories.c:157 # src/gui/Categories.c:157 # src/gui/CategoriesEditBox.c:193 #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "Entrer le nom de la catégorie" # src/gui/Categories.c:160 # src/gui/Categories.c:160 # src/gui/Categories.c:160 # src/gui/CategoriesEditBox.c:196 #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "Description : " # src/gui/Categories.c:183 # src/gui/Categories.c:183 # src/gui/Categories.c:183 # src/gui/CategoriesEditBox.c:219 #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "Entrer la description de la catégorie." # src/gui/Categories.c:196 # src/gui/Categories.c:196 # src/gui/Categories.c:196 # src/gui/CategoriesEditBox.c:232 #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "Ajouter / Mise à jour" # src/gui/Categories.c:201 # src/gui/Categories.c:201 # src/gui/Categories.c:201 # src/gui/CategoriesEditBox.c:237 #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "Sauver les modifications des propriétés de la catégorie." # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/CategoriesEditBox.c:243 src/gui/MenuPopup.c:58 # src/gui/MenuPopup.c:128 #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Fermer" # src/gui/Categories.c:212 # src/gui/Categories.c:212 # src/gui/Categories.c:212 # src/gui/CategoriesEditBox.c:248 #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Ferme la fenêtre d'édition des propriétés des catégories." # src/NoteBookManagmentCallBack.c:169 src/gui/ComboBoxCategories.c:105 # src/NoteBookManagmentCallBack.c:169 src/gui/ComboBoxCategories.c:105 # src/gui/ComboBoxCategories.c:105 src/gui/NoteBookManagmentCallBack.c:159 # src/gui/ComboBoxCategories.c:105 src/gui/NoteBookManagmentCallBack.c:203 #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "aucun" # src/gui/Categories.c:297 # src/gui/Categories.c:297 # src/gui/Categories.c:297 # src/gui/CategoriesEditBox.c:368 #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "Supprimer la catégorie" # src/gui/Categories.c:297 # src/gui/Categories.c:297 # src/gui/Categories.c:297 # src/gui/CategoriesEditBox.c:368 #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "" "Ne peut pas supprimer cette catégories. Elle est utilisée par un élément." # src/gui/Categories.c:193 src/gui/Categories.c:395 src/gui/Categories.c:603 # src/gui/Categories.c:193 src/gui/Categories.c:395 src/gui/Categories.c:603 # src/gui/Categories.c:193 src/gui/Categories.c:395 src/gui/Categories.c:603 # src/gui/CategoriesEditBox.c:229 src/gui/CategoriesEditBox.c:526 # src/gui/CategoriesEditBox.c:849 #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "Ajouter" # src/gui/Categories.c:410 src/gui/Categories.c:623 # src/gui/Categories.c:410 src/gui/Categories.c:623 # src/gui/Categories.c:410 src/gui/Categories.c:623 # src/gui/CategoriesEditBox.c:553 src/gui/CategoriesEditBox.c:882 #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "Mise à jour" # src/gui/MenuFile.c:320 # src/gui/MenuFile.c:320 # src/gui/DialogBox.c:77 # src/gui/DialogBox.c:77 #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "_Non" # src/gui/MenuFile.c:213 src/gui/MenuFile.c:423 # src/gui/MenuFile.c:213 src/gui/MenuFile.c:423 # src/gui/FileSelectionBox.c:64 # src/gui/FileSelectionBox.c:64 #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "Cacher les opérations sur les fichiers" # src/gui/MenuFile.c:428 # src/gui/MenuFile.c:428 #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "Montrer les opérations sur les fichiers" # src/gui/Menu.c:148 # src/gui/Menu.c:148 # src/gui/MenuAction.c:41 # src/gui/MenuAction.c:41 #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "_Action" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "_Etendre tout" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "Etendre seulement les _disques" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "Rabattre t_out" # src/gui/Menu.c:162 # src/gui/Menu.c:162 # src/gui/MenuAction.c:54 # src/gui/MenuAction.c:54 #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "Edition des catégories" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "Aucun catalogue ouvert : ne peut pas éditer les catégories" # src/gui/Menu.c:50 # src/gui/Menu.c:50 # src/gui/MenuFile.c:48 # src/gui/MenuFile.c:48 #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "_Fichier" # src/gui/Menu.c:64 # src/gui/Menu.c:64 # src/gui/MenuFile.c:61 # src/gui/MenuFile.c:61 #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "_Nouveau" # src/gui/Menu.c:74 # src/gui/Menu.c:74 # src/gui/MenuFile.c:71 # src/gui/MenuFile.c:71 #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "_Ouvrir" # src/gui/Menu.c:84 # src/gui/Menu.c:84 # src/gui/MenuFile.c:81 # src/gui/MenuFile.c:81 #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "Enregi_strer" # src/gui/Menu.c:94 # src/gui/Menu.c:94 # src/gui/MenuFile.c:91 # src/gui/MenuFile.c:91 #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "_Enregistrer sous" # src/gui/Menu.c:104 # src/gui/Menu.c:104 # src/gui/MenuFile.c:101 # src/gui/MenuFile.c:101 #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "Fermer" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "Importation" #: src/gui/gwmenufile.c:199 msgid "Export" msgstr "Exportation" # src/gui/Menu.c:121 # src/gui/Menu.c:121 # src/gui/MenuFile.c:118 # src/gui/MenuFile.c:118 #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "_Propriétés" # src/gui/MenuFile.c:272 # src/gui/MenuFile.c:272 # src/gui/MenuFileCallBack.c:73 # src/gui/MenuFileCallBack.c:82 #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "Fichiers _récents" # src/gui/Menu.c:138 # src/gui/Menu.c:138 # src/gui/MenuFile.c:135 # src/gui/MenuFile.c:135 #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "Quitter" # src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:157 # src/gui/MenuFile.c:54 src/gui/ToolBar.c:53 # src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:157 # src/gui/MenuFile.c:54 src/gui/ToolBar.c:53 # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:329 # src/gui/MenuFileCallBack.c:343 src/gui/MenuFileCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:148 src/gui/ToolBar.c:53 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 src/gui/ToolBar.c:70 #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Nouveau catalogue" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "Aucun plugin de catalogue disponible" # src/gui/MenuFile.c:284 # src/gui/MenuFile.c:284 # src/gui/MenuFileCallBack.c:51 src/gui/MenuFileCallBack.c:73 # src/gui/MenuFileCallBack.c:95 src/gui/MenuFileCallBack.c:186 # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:82 # src/gui/MenuFileCallBack.c:108 src/gui/MenuFileCallBack.c:223 #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "Voulez-vous enregistrer le catalogue :\n" "\n" # src/gui/MenuFile.c:269 # src/gui/MenuFile.c:269 # src/gui/MenuFileCallBack.c:51 # src/gui/MenuFileCallBack.c:56 #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Nouveau fichier" # src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:157 # src/gui/MenuFile.c:54 # src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:157 # src/gui/MenuFile.c:54 # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:329 # src/gui/MenuFileCallBack.c:343 src/gui/MenuFileCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:148 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "Entrer le nom du catalogue" # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:78 src/gui/MenuFileCallBack.c:411 # src/gui/MenuFileCallBack.c:425 src/gui/MenuFileCallBack.c:463 # src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "Ouvrir le catalogue" # src/gui/MenuFile.c:272 # src/gui/MenuFile.c:272 # src/gui/MenuFileCallBack.c:73 # src/gui/MenuFileCallBack.c:82 #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "Ouvrir un fichier" # src/gui/MenuFile.c:275 # src/gui/MenuFile.c:275 # src/gui/MenuFileCallBack.c:95 # src/gui/MenuFileCallBack.c:108 #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Fermer le fichier" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "Aucun catalogue ouvert" #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "Envoyer le fichier par mail" #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "" "Configurez les options des mails dans les paramétrages pour pouvoir envoyer " "des mails s'il vous plait." # src/gui/MenuFile.c:382 # src/gui/MenuFile.c:382 # src/gui/MenuFileCallBack.c:146 src/gui/MenuFileCallBack.c:169 # src/gui/MenuFileCallBack.c:323 src/gui/MenuFileCallBack.c:405 # src/gui/MenuFileCallBack.c:486 src/gui/MenuFileCallBack.c:564 # src/gui/MenuFileCallBack.c:629 # src/gui/MenuFileCallBack.c:175 src/gui/MenuFileCallBack.c:202 # src/gui/MenuFileCallBack.c:406 src/gui/MenuFileCallBack.c:503 # src/gui/MenuFileCallBack.c:596 src/gui/MenuFileCallBack.c:686 # src/gui/MenuFileCallBack.c:763 #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "Enregistrer sous le catalogue" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "" "Le catalogue courant n'a jamais été enregistré, impossible de l'envoyer" # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "Propriétés du catalogue" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "Enregistrer le catalogue" # src/gui/MenuFile.c:278 # src/gui/MenuFile.c:278 # src/gui/MenuFileCallBack.c:186 # src/gui/MenuFileCallBack.c:223 #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "Quitter " #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "Importer le catalogue à partir" # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:1231 msgid "Catalog imported" msgstr "Catalogue importé" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:1233 msgid "Catalog is not imported" msgstr "Le catalogue n'est pas importé" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:1267 msgid "A catalog is already opened" msgstr "Un catalogue est déja ouvert" # src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:157 # src/gui/MenuFile.c:54 # src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:157 # src/gui/MenuFile.c:54 # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:329 # src/gui/MenuFileCallBack.c:343 src/gui/MenuFileCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:148 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 msgid "Export catalog to" msgstr "Exporter le catalogue vers" # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 #: src/gui/gwmenufilecallback.c:1291 msgid "Catalog exported" msgstr "Catalogue exporté" # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 #: src/gui/gwmenufilecallback.c:1293 msgid "Catalog is not exported" msgstr "Le catalogue n'est pas exporté" # src/gui/Menu.c:172 # src/gui/Menu.c:172 # src/gui/MenuHelp.c:41 # src/gui/MenuHelp.c:41 #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "Aide" # src/gui/Menu.c:187 # src/gui/Menu.c:187 # src/gui/MenuHelp.c:54 # src/gui/MenuHelp.c:54 #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "A propos" # src/gui/NoteBookManagment.c:257 # src/gui/NoteBookManagment.c:257 # src/gui/NoteBookManagment.c:277 # src/gui/NoteBookManagment.c:298 #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "_Options" #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "Paramé_trage" # src/gui/MenuPopup.c:37 src/gui/MenuPopup.c:107 # src/gui/MenuPopup.c:37 src/gui/MenuPopup.c:107 # src/gui/MenuPopup.c:37 src/gui/MenuPopup.c:107 # src/gui/MenuPopup.c:38 src/gui/MenuPopup.c:108 #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Nouveau" # src/gui/MenuPopup.c:42 src/gui/MenuPopup.c:112 # src/gui/MenuPopup.c:42 src/gui/MenuPopup.c:112 # src/gui/MenuPopup.c:42 src/gui/MenuPopup.c:112 # src/gui/MenuPopup.c:43 src/gui/MenuPopup.c:113 #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "Ouvrir" # src/gui/MenuPopup.c:47 src/gui/MenuPopup.c:117 # src/gui/MenuPopup.c:47 src/gui/MenuPopup.c:117 # src/gui/MenuPopup.c:47 src/gui/MenuPopup.c:117 # src/gui/MenuPopup.c:48 src/gui/MenuPopup.c:118 #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "Enregistrer" # src/gui/MenuPopup.c:52 src/gui/MenuPopup.c:122 # src/gui/MenuPopup.c:52 src/gui/MenuPopup.c:122 # src/gui/MenuPopup.c:52 src/gui/MenuPopup.c:122 # src/gui/MenuPopup.c:53 src/gui/MenuPopup.c:123 #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "Enregistrer sous" # src/gui/MenuPopup.c:66 # src/gui/MenuPopup.c:66 # src/gui/MenuPopup.c:66 # src/gui/MenuPopup.c:67 #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "Quitter" # src/gui/MenuPopup.c:83 src/gui/MenuPopup.c:158 # src/gui/MenuPopup.c:83 src/gui/MenuPopup.c:158 # src/gui/MenuPopup.c:83 src/gui/MenuPopup.c:158 # src/gui/MenuPopup.c:84 src/gui/MenuPopup.c:159 #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Renommer" # src/MenuPopupCallBack.c:123 src/MenuPopupCallBack.c:343 # src/MenuPopupCallBack.c:428 src/MenuPopupCallBack.c:546 # src/gui/MenuPopup.c:93 src/gui/MenuPopup.c:173 src/gui/MenuPopup.c:204 # src/gui/MenuPopup.c:238 # src/MenuPopupCallBack.c:123 src/MenuPopupCallBack.c:343 # src/MenuPopupCallBack.c:428 src/MenuPopupCallBack.c:546 # src/gui/MenuPopup.c:93 src/gui/MenuPopup.c:173 src/gui/MenuPopup.c:204 # src/gui/MenuPopup.c:238 # src/MenuPopupCallBack.c:124 src/MenuPopupCallBack.c:350 # src/MenuPopupCallBack.c:435 src/MenuPopupCallBack.c:564 # src/gui/MenuPopup.c:93 src/gui/MenuPopup.c:173 src/gui/MenuPopup.c:204 # src/gui/MenuPopup.c:238 # src/gui/MenuPopup.c:94 src/gui/MenuPopup.c:174 src/gui/MenuPopup.c:205 # src/gui/MenuPopup.c:240 src/gui/MenuPopupCallBack.c:129 # src/gui/MenuPopupCallBack.c:358 src/gui/MenuPopupCallBack.c:444 # src/gui/MenuPopupCallBack.c:574 #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Editer la description" # src/gui/MenuPopup.c:136 src/gui/MenuPopup.c:182 src/gui/MenuPopup.c:218 # src/gui/MenuPopup.c:252 src/gui/Properties.c:85 # src/gui/MenuPopup.c:136 src/gui/MenuPopup.c:182 src/gui/MenuPopup.c:218 # src/gui/MenuPopup.c:252 src/gui/Properties.c:85 # src/gui/MenuPopup.c:136 src/gui/MenuPopup.c:182 src/gui/MenuPopup.c:218 # src/gui/MenuPopup.c:252 src/gui/Properties.c:85 # src/gui/MenuPopup.c:137 src/gui/MenuPopup.c:183 src/gui/MenuPopup.c:219 # src/gui/MenuPopup.c:254 src/gui/PropertiesBox.c:110 #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "Propriétés" # src/gui/MenuPopup.c:153 src/gui/MenuPopup.c:199 # src/gui/MenuPopup.c:153 src/gui/MenuPopup.c:199 # src/gui/MenuPopup.c:153 src/gui/MenuPopup.c:199 # src/gui/MenuPopup.c:154 src/gui/MenuPopup.c:200 #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "Se déplacer vers..." # src/gui/MenuPopup.c:163 # src/gui/MenuPopup.c:163 # src/gui/MenuPopup.c:163 # src/gui/MenuPopup.c:164 #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "Effacer le disque" # src/MenuPopupCallBack.c:292 src/gui/MenuPopup.c:168 # src/MenuPopupCallBack.c:292 src/gui/MenuPopup.c:168 # src/MenuPopupCallBack.c:299 src/gui/MenuPopup.c:168 # src/gui/MenuPopup.c:169 src/gui/MenuPopupCallBack.c:306 #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "Changer le nom de volume" # src/gui/MenuPopup.c:209 src/gui/MenuPopup.c:243 # src/gui/MenuPopup.c:209 src/gui/MenuPopup.c:243 # src/gui/MenuPopup.c:209 src/gui/MenuPopup.c:243 # src/gui/MenuPopup.c:210 src/gui/MenuPopup.c:245 #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "Supprimer du catalogue" # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:261 #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "Edition du fichier" # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:261 #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "Ne peut pas éditer ce fichier!!\n" # src/MenuPopupCallBack.c:55 # src/MenuPopupCallBack.c:55 # src/MenuPopupCallBack.c:56 # src/gui/MenuPopupCallBack.c:57 #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Renommer le catalogue" # src/MenuPopupCallBack.c:55 # src/MenuPopupCallBack.c:55 # src/MenuPopupCallBack.c:56 # src/gui/MenuPopupCallBack.c:57 #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "Entrer le nouveau nom du catalogue" # src/NoteBookManagmentCallBack.c:175 # src/NoteBookManagmentCallBack.c:175 # src/gui/NoteBookManagmentCallBack.c:165 # src/gui/NoteBookManagmentCallBack.c:213 #: src/gui/gwmenupopupcallback.c:121 msgid "Invalid filled catalog name" msgstr "Le nom de catalog saisi est invalide" # src/MenuPopupCallBack.c:123 # src/MenuPopupCallBack.c:123 # src/MenuPopupCallBack.c:124 # src/gui/MenuPopupCallBack.c:129 #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "Description du catalogue" # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Renommer le disque" # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "Entrer le nouveau nom du disque" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "Le nom de disque saisi existe déja dans le catalogue courant" #: src/gui/gwmenupopupcallback.c:374 msgid "No new disk name was filled" msgstr "Aucun nouveau nom de disque n'a été saisi" # src/MenuPopupCallBack.c:292 # src/MenuPopupCallBack.c:292 # src/MenuPopupCallBack.c:299 # src/gui/MenuPopupCallBack.c:306 #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "entrer le nouveau nom de volume du disque" # src/MenuPopupCallBack.c:343 # src/MenuPopupCallBack.c:343 # src/MenuPopupCallBack.c:350 # src/gui/MenuPopupCallBack.c:358 #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "Description du disque" # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "Renommer le répertoire" # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "Entrer le nouveau nom de répertoire" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "Le nom de répertoire saisi existe déja dans le répertoire courant" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "Aucun nouveau nom de répertoire n'a été saisi" # src/MenuPopupCallBack.c:428 # src/MenuPopupCallBack.c:428 # src/MenuPopupCallBack.c:435 # src/gui/MenuPopupCallBack.c:444 #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "Description du répertoire" # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "Renommer le fichier" # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "Entrer le nouveau nom de fichier" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "Le nom de fichier saisi existe déja dans le répertoire courant" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "Aucun nouveau nom de fichier n'a été saisi" # src/MenuPopupCallBack.c:546 # src/MenuPopupCallBack.c:546 # src/MenuPopupCallBack.c:564 # src/gui/MenuPopupCallBack.c:574 #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "Description du fichier" # src/gui/NoteBookCatalog.c:67 # src/gui/NoteBookCatalog.c:67 # src/gui/NoteBookCatalog.c:66 # src/gui/NoteBookCatalog.c:67 #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Archive" # src/gui/NoteBookCatalog.c:154 # src/gui/NoteBookCatalog.c:154 # src/gui/NoteBookCatalog.c:152 # src/gui/NoteBookCatalog.c:153 #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "Catalogue" # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:76 #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "Ferme le catalogue" # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "Veuillez patienter..." # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Catalogue fermé" # src/Exploration.c:594 src/Exploration.c:650 src/Exploration.c:728 # src/Exploration.c:784 # src/Exploration.c:594 src/Exploration.c:650 src/Exploration.c:728 # src/Exploration.c:784 # src/Exploration.c:599 src/Exploration.c:655 src/Exploration.c:733 # src/Exploration.c:789 # src/Exploration.c:620 src/Exploration.c:676 src/Exploration.c:757 # src/Exploration.c:813 #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "propriétaire inconnu" # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:607 src/Exploration.c:663 src/Exploration.c:741 # src/Exploration.c:797 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "groupe inconnu" # src/NoteBookManagmentCallBack.c:175 src/gui/NoteBookManagment.c:79 # src/NoteBookManagmentCallBack.c:175 src/gui/NoteBookManagment.c:79 # src/gui/NoteBookManagment.c:99 src/gui/NoteBookManagmentCallBack.c:165 # src/gui/NoteBookManagment.c:127 src/gui/NoteBookManagmentCallBack.c:213 #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Nouveau disque" # src/gui/NoteBookManagment.c:95 # src/gui/NoteBookManagment.c:95 # src/gui/NoteBookManagment.c:115 # src/gui/NoteBookManagment.c:139 #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "Selectionner le media qui va être ajouter dans le catalogue" # src/gui/NoteBookManagment.c:97 # src/gui/NoteBookManagment.c:97 # src/gui/NoteBookManagment.c:117 # src/gui/NoteBookManagment.c:142 #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "Selectionner le media : " # src/gui/NoteBookManagment.c:124 # src/gui/NoteBookManagment.c:124 # src/gui/NoteBookManagment.c:144 # src/gui/NoteBookManagment.c:167 #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "" "Entrer le nombre du nouveau disque. Ce numbre peut aider à faire un " "historique du catalogue." # src/gui/NoteBookManagment.c:126 src/gui/Properties.c:717 # src/gui/NoteBookManagment.c:126 src/gui/Properties.c:717 # src/gui/NoteBookManagment.c:146 src/gui/Properties.c:717 # src/gui/NoteBookManagment.c:170 src/gui/PropertiesBox.c:653 #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Numéro d'archive : " # src/gui/NoteBookManagment.c:141 # src/gui/NoteBookManagment.c:141 # src/gui/NoteBookManagment.c:161 # src/gui/NoteBookManagment.c:183 #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "Entrer le nom du nouveau disque. Ce nom apparaîtra dans le catalogue." # src/gui/NoteBookManagment.c:143 # src/gui/NoteBookManagment.c:143 # src/gui/NoteBookManagment.c:163 # src/gui/NoteBookManagment.c:186 #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "Nom : " # src/gui/NoteBookManagment.c:159 src/gui/Properties.c:945 # src/gui/Properties.c:1288 src/gui/Properties.c:1646 # src/gui/NoteBookManagment.c:159 src/gui/Properties.c:945 # src/gui/Properties.c:1288 src/gui/Properties.c:1646 # src/gui/NoteBookManagment.c:179 src/gui/Properties.c:945 # src/gui/Properties.c:1288 src/gui/Properties.c:1646 # src/gui/NoteBookManagment.c:200 src/gui/PropertiesBox.c:811 # src/gui/PropertiesBox.c:1065 src/gui/PropertiesBox.c:1334 #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "Catégorie : " # src/gui/NoteBookManagment.c:165 # src/gui/NoteBookManagment.c:165 # src/gui/NoteBookManagment.c:185 # src/gui/NoteBookManagment.c:206 #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "" "Selectionner la catégorie qui sera appliquée au disque qui sera ajouté (sauf " "si l'option n'est pas cochée." # src/gui/NoteBookManagment.c:250 # src/gui/NoteBookManagment.c:250 # src/gui/NoteBookManagment.c:270 # src/gui/NoteBookManagment.c:289 #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "Donne le fichier de périphérique du media sélectionné." # src/NoteBookManagmentCallBack.c:313 src/NoteBookManagmentCallBack.c:355 # src/gui/NoteBookManagment.c:179 # src/NoteBookManagmentCallBack.c:313 src/NoteBookManagmentCallBack.c:355 # src/gui/NoteBookManagment.c:179 # src/gui/NoteBookManagment.c:199 src/gui/NoteBookManagmentCallBack.c:300 # src/gui/NoteBookManagmentCallBack.c:341 # src/gui/NoteBookManagment.c:219 src/gui/NoteBookManagmentCallBack.c:332 # src/gui/NoteBookManagmentCallBack.c:376 #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Information : " # src/gui/NoteBookManagment.c:190 # src/gui/NoteBookManagment.c:190 # src/gui/NoteBookManagment.c:210 # src/gui/NoteBookManagment.c:229 #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "Donne le type du media sélectionné (ex : ext2, ext3, vfat, ntfs, ...)." # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:212 src/gui/NoteBookManagmentCallBack.c:302 # src/gui/NoteBookManagmentCallBack.c:356 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Type : " # src/gui/NoteBookManagment.c:202 # src/gui/NoteBookManagment.c:202 # src/gui/NoteBookManagment.c:222 # src/gui/NoteBookManagment.c:241 #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "Affiche si le media sélectionné est mounté ou non." # src/NoteBookManagmentCallBack.c:317 src/NoteBookManagmentCallBack.c:375 # src/gui/NoteBookManagment.c:204 # src/NoteBookManagmentCallBack.c:317 src/NoteBookManagmentCallBack.c:375 # src/gui/NoteBookManagment.c:204 # src/gui/NoteBookManagment.c:224 src/gui/NoteBookManagmentCallBack.c:304 # src/gui/NoteBookManagmentCallBack.c:361 # src/gui/NoteBookManagment.c:244 src/gui/NoteBookManagmentCallBack.c:338 # src/gui/NoteBookManagmentCallBack.c:395 #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "Monté : " # src/gui/NoteBookManagment.c:214 # src/gui/NoteBookManagment.c:214 # src/gui/NoteBookManagment.c:234 # src/gui/NoteBookManagment.c:253 #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "" "Donne le nom de volume du media sélectionné (seulement si il est monté)." # src/NoteBookManagmentCallBack.c:319 # src/NoteBookManagmentCallBack.c:319 # src/gui/NoteBookManagment.c:236 src/gui/NoteBookManagmentCallBack.c:306 # src/gui/NoteBookManagment.c:256 src/gui/NoteBookManagmentCallBack.c:341 #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Nom de volume : " # src/gui/NoteBookManagment.c:226 # src/gui/NoteBookManagment.c:226 # src/gui/NoteBookManagment.c:246 # src/gui/NoteBookManagment.c:265 #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "" "Donne le numéro de série du media sélectionné (seulement si il est monté). " "Ce numéro est le numéro de fabrication." # src/gui/NoteBookManagment.c:228 # src/gui/NoteBookManagment.c:228 # src/gui/NoteBookManagment.c:248 # src/gui/NoteBookManagment.c:268 #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Numéro de série : " # src/gui/NoteBookManagment.c:238 # src/gui/NoteBookManagment.c:238 # src/gui/NoteBookManagment.c:258 # src/gui/NoteBookManagment.c:277 #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "" "Donne l'espace utilisé du media sélectionné (seulement si il est monté)." # src/NoteBookManagmentCallBack.c:323 src/NoteBookManagmentCallBack.c:403 # src/gui/NoteBookManagment.c:240 # src/NoteBookManagmentCallBack.c:323 src/NoteBookManagmentCallBack.c:403 # src/gui/NoteBookManagment.c:240 # src/gui/NoteBookManagment.c:260 src/gui/NoteBookManagmentCallBack.c:310 # src/gui/NoteBookManagmentCallBack.c:386 # src/gui/NoteBookManagment.c:280 src/gui/NoteBookManagmentCallBack.c:347 # src/gui/NoteBookManagmentCallBack.c:420 #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "Capacité : " # src/gui/NoteBookManagment.c:250 # src/gui/NoteBookManagment.c:250 # src/gui/NoteBookManagment.c:270 # src/gui/NoteBookManagment.c:289 #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "Donne l'espace libre du media sélectionné (seulement si il est monté)." # src/NoteBookManagmentCallBack.c:325 src/NoteBookManagmentCallBack.c:408 # src/gui/NoteBookManagment.c:252 # src/NoteBookManagmentCallBack.c:325 src/NoteBookManagmentCallBack.c:408 # src/gui/NoteBookManagment.c:252 # src/gui/NoteBookManagment.c:272 src/gui/NoteBookManagmentCallBack.c:312 # src/gui/NoteBookManagmentCallBack.c:390 # src/gui/NoteBookManagment.c:292 src/gui/NoteBookManagmentCallBack.c:350 # src/gui/NoteBookManagmentCallBack.c:424 #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Espace libre : " # src/gui/NoteBookManagment.c:257 # src/gui/NoteBookManagment.c:257 # src/gui/NoteBookManagment.c:277 # src/gui/NoteBookManagment.c:298 #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "Options" # src/gui/NoteBookManagment.c:268 # src/gui/NoteBookManagment.c:268 # src/gui/NoteBookManagment.c:288 # src/gui/NoteBookManagment.c:307 #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "Afficher les informations" # src/gui/NoteBookManagment.c:275 # src/gui/NoteBookManagment.c:275 # src/gui/NoteBookManagment.c:295 # src/gui/NoteBookManagment.c:314 #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" "Afficher les informations du media séléctionné comme le chemin, la capacité, " "l'espace libre, le nom de volume,..." # src/gui/NoteBookManagment.c:277 # src/gui/NoteBookManagment.c:277 # src/gui/NoteBookManagment.c:297 # src/gui/NoteBookManagment.c:317 #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Automontage" # src/gui/NoteBookManagment.c:284 # src/gui/NoteBookManagment.c:284 # src/gui/NoteBookManagment.c:304 # src/gui/NoteBookManagment.c:324 #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" "Monter le media si il n'est pas monté. Et le démonter après sauf si il était " "déjà monté avant le scan." # src/gui/Properties.c:706 # src/gui/Properties.c:706 # src/gui/Properties.c:706 # src/gui/PropertiesBox.c:645 #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "Explorer l'arborescence du media." #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "" "Garder cette option cochée pour scanner les informations de tous les " "répertoires et fichiers." # src/gui/NoteBookManagment.c:286 # src/gui/NoteBookManagment.c:286 # src/gui/NoteBookManagment.c:306 # src/gui/NoteBookManagment.c:327 #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "Explorer les fichiers archives (.tar, .gz, .zip, ...)" # src/gui/NoteBookManagment.c:293 # src/gui/NoteBookManagment.c:293 # src/gui/NoteBookManagment.c:313 # src/gui/NoteBookManagment.c:334 #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "Pas encore implementé!!\n" "Explore toutes les archives, comme si c'était des répertoires. Les archives " "sont des fichiers tarrés ou gzippés." # src/gui/NoteBookManagment.c:295 # src/gui/NoteBookManagment.c:295 # src/gui/NoteBookManagment.c:315 # src/gui/NoteBookManagment.c:337 #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "Ejecter le media si possible" # src/gui/NoteBookManagment.c:302 # src/gui/NoteBookManagment.c:302 # src/gui/NoteBookManagment.c:322 # src/gui/NoteBookManagment.c:344 #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" "Ejecter le media si possible (CD-ROM...), sauf si le tiroir est fermé. Ceci " "est actif seulement si l'automontage est activé!!" # src/gui/NoteBookManagment.c:304 # src/gui/NoteBookManagment.c:304 # src/gui/NoteBookManagment.c:324 # src/gui/NoteBookManagment.c:347 #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "Mettre la categorie recursivement" # src/gui/NoteBookManagment.c:310 # src/gui/NoteBookManagment.c:310 # src/gui/NoteBookManagment.c:330 # src/gui/NoteBookManagment.c:353 #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "" "Appliquer la catégorie sélectionné à tous les éléments du disque à ajouter " "(disque, répertoires et fichiers)." # src/gui/NoteBookManagment.c:312 # src/gui/NoteBookManagment.c:312 # src/gui/NoteBookManagment.c:332 # src/gui/NoteBookManagment.c:356 #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "Description automatique" # src/gui/NoteBookManagment.c:317 # src/gui/NoteBookManagment.c:317 # src/gui/NoteBookManagment.c:337 # src/gui/NoteBookManagment.c:361 #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "" "Fait une description automatique du fichier (description du format du " "fichier, taille de l'image pour un xmp ou jpg, etc...)." #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "Utiliser un patron avancé pour générer le nom de disque" #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Vous pouvez saisir des tags spéciaux pour générer un nom de disque à partir " "des informations du disque :\n" "- %% : %\n" "- %n : numéro d'archive (possibilité d'utiliser un préfix pour préfixer par " "des 0 : %.4n donne 0001, 0002, 0003, ..., 0091, ...\n" "- %l : nom de volume du media\n" "- %t : type du media\n" "- %s : numéro de série" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "" "Utiliser le nom de volume du media comme nom de disque (seulement quand le " "nom de disque est vide)" #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" "Si vous ne saisisez pas de nom de disque et que votre media sélectionné " "possède un nom de volume, le nom de volume du media sera utilisé comme nom " "de disque" # src/Catalog.c:1009 src/Catalog.c:1122 src/NoteBookManagmentCallBack.c:125 # src/NoteBookManagmentCallBack.c:137 src/NoteBookManagmentCallBack.c:175 # src/NoteBookManagmentCallBack.c:261 src/NoteBookManagmentCallBack.c:509 # src/Catalog.c:1009 src/Catalog.c:1122 src/NoteBookManagmentCallBack.c:125 # src/NoteBookManagmentCallBack.c:137 src/NoteBookManagmentCallBack.c:175 # src/NoteBookManagmentCallBack.c:261 src/NoteBookManagmentCallBack.c:509 # src/Catalog.c:1009 src/Catalog.c:1122 # src/gui/NoteBookManagmentCallBack.c:119 # src/gui/NoteBookManagmentCallBack.c:130 # src/gui/NoteBookManagmentCallBack.c:165 # src/gui/NoteBookManagmentCallBack.c:249 # src/gui/NoteBookManagmentCallBack.c:492 # src/Catalog.c:1186 src/Catalog.c:1344 # src/gui/NoteBookManagmentCallBack.c:148 # src/gui/NoteBookManagmentCallBack.c:162 # src/gui/NoteBookManagmentCallBack.c:213 # src/gui/NoteBookManagmentCallBack.c:285 # src/gui/NoteBookManagmentCallBack.c:620 #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "Ajouter un disque" # src/gui/NoteBookManagment.c:328 # src/gui/NoteBookManagment.c:328 # src/gui/NoteBookManagment.c:348 # src/gui/NoteBookManagment.c:397 #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Gestion" # src/NoteBookManagmentCallBack.c:125 # src/NoteBookManagmentCallBack.c:125 # src/gui/NoteBookManagmentCallBack.c:119 # src/gui/NoteBookManagmentCallBack.c:148 #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "Le disque n'a pas été ajouté : il n'y a pas de media monté" # src/NoteBookManagmentCallBack.c:137 # src/NoteBookManagmentCallBack.c:137 # src/gui/NoteBookManagmentCallBack.c:130 # src/gui/NoteBookManagmentCallBack.c:162 #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "Le disque n'a pas été ajouté : impossible de monter le media" # src/NoteBookManagmentCallBack.c:157 src/gui/MenuPopup.c:88 # src/NoteBookManagmentCallBack.c:157 src/gui/MenuPopup.c:88 # src/gui/MenuPopup.c:88 src/gui/NoteBookManagmentCallBack.c:148 # src/gui/MenuPopup.c:89 src/gui/NoteBookManagmentCallBack.c:190 #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "Ajouter un nouveau disque" # src/NoteBookManagmentCallBack.c:175 # src/NoteBookManagmentCallBack.c:175 # src/gui/NoteBookManagmentCallBack.c:165 # src/gui/NoteBookManagmentCallBack.c:213 #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "Entrer le nom du disque" # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "Analyse en cours" # src/NoteBookManagmentCallBack.c:556 # src/NoteBookManagmentCallBack.c:556 # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "L'ajout du disque est en cours" # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "Veuillez patienter" # src/Catalog.c:641 src/NoteBookManagmentCallBack.c:199 # src/NoteBookManagmentCallBack.c:236 # src/Catalog.c:641 src/NoteBookManagmentCallBack.c:199 # src/NoteBookManagmentCallBack.c:236 # src/Catalog.c:641 src/gui/NoteBookManagmentCallBack.c:188 # src/gui/NoteBookManagmentCallBack.c:224 # src/Catalog.c:731 src/gui/NoteBookManagmentCallBack.c:245 #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "Le disque a été ajouté" # src/NoteBookManagmentCallBack.c:261 # src/NoteBookManagmentCallBack.c:261 # src/gui/NoteBookManagmentCallBack.c:249 # src/gui/NoteBookManagmentCallBack.c:285 #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Echec du montage\n" # src/NoteBookManagmentCallBack.c:321 src/NoteBookManagmentCallBack.c:398 # src/NoteBookManagmentCallBack.c:321 src/NoteBookManagmentCallBack.c:398 # src/gui/NoteBookManagmentCallBack.c:308 # src/gui/NoteBookManagmentCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:344 # src/gui/NoteBookManagmentCallBack.c:416 #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Numéro de série : " # src/NoteBookManagmentCallBack.c:355 src/NoteBookManagmentCallBack.c:366 # src/NoteBookManagmentCallBack.c:388 src/NoteBookManagmentCallBack.c:392 # src/NoteBookManagmentCallBack.c:398 src/NoteBookManagmentCallBack.c:403 # src/NoteBookManagmentCallBack.c:408 # src/NoteBookManagmentCallBack.c:355 src/NoteBookManagmentCallBack.c:366 # src/NoteBookManagmentCallBack.c:388 src/NoteBookManagmentCallBack.c:392 # src/NoteBookManagmentCallBack.c:398 src/NoteBookManagmentCallBack.c:403 # src/NoteBookManagmentCallBack.c:408 # src/gui/NoteBookManagmentCallBack.c:341 # src/gui/NoteBookManagmentCallBack.c:353 # src/gui/NoteBookManagmentCallBack.c:373 # src/gui/NoteBookManagmentCallBack.c:377 # src/gui/NoteBookManagmentCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:386 # src/gui/NoteBookManagmentCallBack.c:390 # src/gui/NoteBookManagmentCallBack.c:376 # src/gui/NoteBookManagmentCallBack.c:387 # src/gui/NoteBookManagmentCallBack.c:407 # src/gui/NoteBookManagmentCallBack.c:411 # src/gui/NoteBookManagmentCallBack.c:416 # src/gui/NoteBookManagmentCallBack.c:420 # src/gui/NoteBookManagmentCallBack.c:424 #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "pas de périphérique" # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:607 src/Exploration.c:663 src/Exploration.c:741 # src/Exploration.c:797 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "inconnu" # src/NoteBookManagmentCallBack.c:375 # src/NoteBookManagmentCallBack.c:375 # src/gui/NoteBookManagmentCallBack.c:361 # src/gui/NoteBookManagmentCallBack.c:395 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Oui" # src/NoteBookManagmentCallBack.c:375 # src/NoteBookManagmentCallBack.c:375 # src/gui/NoteBookManagmentCallBack.c:361 # src/gui/NoteBookManagmentCallBack.c:395 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "Non" # src/NoteBookManagmentCallBack.c:383 # src/NoteBookManagmentCallBack.c:383 # src/gui/NoteBookManagmentCallBack.c:368 # src/gui/NoteBookManagmentCallBack.c:402 #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "Pas de label" # src/NoteBookManagmentCallBack.c:392 src/gui/NoteBookManagment.c:216 # src/NoteBookManagmentCallBack.c:392 src/gui/NoteBookManagment.c:216 # src/gui/NoteBookManagmentCallBack.c:377 # src/gui/NoteBookManagmentCallBack.c:411 #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Nom de volume : " # src/NoteBookManagmentCallBack.c:556 # src/NoteBookManagmentCallBack.c:556 # src/gui/NoteBookManagmentCallBack.c:536 # src/gui/NoteBookManagmentCallBack.c:530 #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "l'ajout du disque est annulé" # src/NoteBookManagmentCallBack.c:509 # src/NoteBookManagmentCallBack.c:509 # src/gui/NoteBookManagmentCallBack.c:492 # src/gui/NoteBookManagmentCallBack.c:620 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "Entrer le nouveau nom du catalogue\n" # src/gui/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:104 #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "Rechercher : " # src/gui/NoteBookSearch.c:71 src/gui/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:71 src/gui/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:97 src/gui/NoteBookSearch.c:243 # src/gui/NoteBookSearch.c:116 src/gui/NoteBookSearch.c:273 #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "Recherche" # src/gui/NoteBookSearch.c:74 # src/gui/NoteBookSearch.c:74 # src/gui/NoteBookSearch.c:100 # src/gui/NoteBookSearch.c:121 #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "La recherche peut être sensible à la case. La recheche par wildcards " "supporte les caractères \"*\".\n" "Exemple : img*.bmp or *.htm\n" "La recherche par mots clé accepte une liste de mots obligatoires." # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/CategoriesEditBox.c:243 src/gui/MenuPopup.c:58 # src/gui/MenuPopup.c:128 #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "Effacer" # src/gui/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:104 #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "Efface tous les résultats de la recherche" # src/gui/NoteBookSearch.c:80 # src/gui/NoteBookSearch.c:80 # src/gui/NoteBookSearch.c:107 # src/gui/NoteBookSearch.c:127 #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "Casse sensible" # src/gui/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:112 # src/gui/NoteBookSearch.c:134 #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "La casse de la recherche peut être ou non sensible.\n" "En casse sensible \"File.txt\" ne correspond pas avec \"file.txt\". Mais " "sans casse sensible il correspond." # src/gui/NoteBookSearch.c:71 src/gui/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:71 src/gui/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:97 src/gui/NoteBookSearch.c:243 # src/gui/NoteBookSearch.c:116 src/gui/NoteBookSearch.c:273 #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "Type de recherche" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "Mots clé" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "" "Entrer une liste de mots clé qui devront tous être compris dans les fichiers " "trouvés." #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "Wildcards" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "" "Entrer le patron de type wildcards complet. Ce patron peut contenir les " "caractères \"?\" and \"*\" " # src/gui/NoteBookSearch.c:88 # src/gui/NoteBookSearch.c:88 # src/gui/NoteBookSearch.c:115 # src/gui/NoteBookSearch.c:137 #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "Expression régulière" # src/gui/NoteBookSearch.c:93 # src/gui/NoteBookSearch.c:93 # src/gui/NoteBookSearch.c:120 # src/gui/NoteBookSearch.c:144 #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "" "Possibilité d'utiliser les expressions régulières. Voir la documentation " "pour plus d'informations." # src/gui/Menu.c:50 # src/gui/Menu.c:50 # src/gui/NoteBookSearch.c:130 # src/gui/NoteBookSearch.c:152 #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "Fichier" # src/gui/NoteBookSearch.c:136 # src/gui/NoteBookSearch.c:158 #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "La recherche vérifie les noms de fichiers." # src/gui/Properties.c:1341 # src/gui/Properties.c:1341 # src/gui/NoteBookSearch.c:139 # src/gui/NoteBookSearch.c:161 #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "Répertoire" # src/gui/NoteBookSearch.c:144 # src/gui/NoteBookSearch.c:166 #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "La recherche vérifie les noms de répertoires." # src/gui/NoteBookSearch.c:138 # src/gui/NoteBookSearch.c:138 # src/gui/NoteBookSearch.c:147 src/gui/NoteBookSearch.c:212 # src/gui/NoteBookSearch.c:169 src/gui/NoteBookSearch.c:232 #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "Disque" # src/gui/NoteBookSearch.c:152 # src/gui/NoteBookSearch.c:174 #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "La recherche vérifie les noms de disques." # src/gui/NoteBookCatalog.c:144 src/gui/NoteBookCatalog.c:193 # src/gui/NoteBookCatalog.c:227 src/gui/NoteBookSearch.c:158 # src/gui/NoteBookCatalog.c:144 src/gui/NoteBookCatalog.c:193 # src/gui/NoteBookCatalog.c:227 src/gui/NoteBookSearch.c:158 # src/gui/NoteBookCatalog.c:142 src/gui/NoteBookCatalog.c:212 # src/gui/NoteBookCatalog.c:259 src/gui/NoteBookSearch.c:155 # src/gui/NoteBookSearch.c:232 # src/gui/NoteBookCatalog.c:143 src/gui/NoteBookCatalog.c:213 # src/gui/NoteBookCatalog.c:260 src/gui/NoteBookSearch.c:177 # src/gui/NoteBookSearch.c:244 #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "Catégorie" # src/gui/NoteBookSearch.c:160 # src/gui/NoteBookSearch.c:182 #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "La recherche vérifie les noms de catégories." # src/gui/NoteBookSearch.c:168 # src/gui/NoteBookSearch.c:190 #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "La recherche vérifie les descriptions." # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:78 src/gui/MenuFileCallBack.c:411 # src/gui/MenuFileCallBack.c:425 src/gui/MenuFileCallBack.c:463 # src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "Chercher dans le catalogue" #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "%lu élément(s) trouvé(s)." # src/gui/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:104 #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "Résultat de la recherche" #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "Aucun élément ne correspond." # src/gui/NoteBookSearch.c:71 src/gui/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:71 src/gui/NoteBookSearch.c:169 # src/gui/NoteBookSearchCallBack.c:87 # src/gui/NoteBookSearchCallBack.c:99 #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "Recherche..." # src/gui/NoteBookSearchCallBack.c:87 # src/gui/NoteBookSearchCallBack.c:99 #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "Ne peut pas lancer la recherche : aucun catalogue n'est chargé" # src/gui/ProgressBarBox.c:185 src/gui/ProgressBarBox.c:215 # src/gui/ProgressBarBox.c:185 src/gui/ProgressBarBox.c:215 # src/gui/ProgressBarBox.c:185 src/gui/ProgressBarBox.c:215 #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "_Ok" # src/gui/Properties.c:286 # src/gui/Properties.c:286 # src/gui/Properties.c:286 # src/gui/PropertiesBox.c:335 #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "Entrer le nom du catalogue." # src/gui/Properties.c:332 # src/gui/Properties.c:332 # src/gui/Properties.c:332 # src/gui/PropertiesBox.c:366 #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "Version : " # src/gui/Properties.c:331 # src/gui/Properties.c:331 # src/gui/Properties.c:331 # src/gui/PropertiesBox.c:365 #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "Version " # src/gui/Properties.c:331 # src/gui/Properties.c:331 # src/gui/Properties.c:331 # src/gui/PropertiesBox.c:365 #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr " construit avec " # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/PropertiesBox.c:376 src/gui/PropertiesBox.c:377 #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "Disques dans le catalogue : " # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/PropertiesBox.c:376 src/gui/PropertiesBox.c:377 #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "Disques dans le catalogue : %d" # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/PropertiesBox.c:387 src/gui/PropertiesBox.c:388 # src/gui/PropertiesBox.c:717 src/gui/PropertiesBox.c:718 #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Total des fichiers : " # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/PropertiesBox.c:387 src/gui/PropertiesBox.c:388 # src/gui/PropertiesBox.c:717 src/gui/PropertiesBox.c:718 #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, c-format msgid "Total Files : %ld" msgstr "Total des fichiers : %ld" # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/PropertiesBox.c:398 src/gui/PropertiesBox.c:399 # src/gui/PropertiesBox.c:728 src/gui/PropertiesBox.c:729 #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "total des répertoires : " # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/PropertiesBox.c:398 src/gui/PropertiesBox.c:399 # src/gui/PropertiesBox.c:728 src/gui/PropertiesBox.c:729 #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, c-format msgid "Total Folders : %ld" msgstr "Total des répertoires : %ld" # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/PropertiesBox.c:413 src/gui/PropertiesBox.c:414 # src/gui/PropertiesBox.c:1202 src/gui/PropertiesBox.c:1203 #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "Taille du fichier : " # src/gui/Properties.c:417 src/gui/Properties.c:418 # src/gui/Properties.c:417 src/gui/Properties.c:418 # src/gui/Properties.c:417 src/gui/Properties.c:418 # src/gui/PropertiesBox.c:424 src/gui/PropertiesBox.c:425 #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Capacité totale : " # src/gui/Properties.c:433 src/gui/Properties.c:434 # src/gui/Properties.c:433 src/gui/Properties.c:434 # src/gui/Properties.c:433 src/gui/Properties.c:434 # src/gui/PropertiesBox.c:435 src/gui/PropertiesBox.c:436 #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "Espace total utilisé : " # src/gui/Properties.c:449 src/gui/Properties.c:450 # src/gui/Properties.c:449 src/gui/Properties.c:450 # src/gui/Properties.c:449 src/gui/Properties.c:450 # src/gui/PropertiesBox.c:446 src/gui/PropertiesBox.c:447 #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "Espace total libre : " # src/gui/Properties.c:471 # src/gui/Properties.c:471 # src/gui/Properties.c:471 # src/gui/PropertiesBox.c:461 #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "Statistiques des disques" # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/PropertiesBox.c:478 src/gui/PropertiesBox.c:479 #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "CD-Rom : " # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/PropertiesBox.c:478 src/gui/PropertiesBox.c:479 #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "CD-Rom : %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "CD Audio : " # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #: src/gui/gwpropertiesbox.c:577 #, c-format msgid "Audio CD : %d" msgstr "CD Audio : %d" # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "DD : " # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "DD : %d" # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/PropertiesBox.c:500 src/gui/PropertiesBox.c:501 #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "Disquette : " # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/PropertiesBox.c:500 src/gui/PropertiesBox.c:501 #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "Disquette : %d" # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/PropertiesBox.c:515 src/gui/PropertiesBox.c:516 #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip : " # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/PropertiesBox.c:515 src/gui/PropertiesBox.c:516 #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip : %d" # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:212 src/gui/NoteBookManagmentCallBack.c:302 # src/gui/NoteBookManagmentCallBack.c:356 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 msgid "Tape : " msgstr "Bande : " # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:212 src/gui/NoteBookManagmentCallBack.c:302 # src/gui/NoteBookManagmentCallBack.c:356 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 #: src/gui/gwpropertiesbox.c:649 #, c-format msgid "Tape : %d" msgstr "Bande : %d" #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "Réseau : " # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 #: src/gui/gwpropertiesbox.c:666 #, c-format msgid "Network : %d" msgstr "Réseau : %d" # src/gui/NoteBookManagment.c:143 # src/gui/NoteBookManagment.c:143 # src/gui/NoteBookManagment.c:163 # src/gui/NoteBookManagment.c:186 #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 msgid "Jaz : " msgstr "Jaz : " # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #: src/gui/gwpropertiesbox.c:683 #, c-format msgid "Jaz : %d" msgstr "Jaz : %d" # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "Autre : " # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "Autre : %d" # src/gui/Properties.c:589 # src/gui/Properties.c:589 # src/gui/Properties.c:589 # src/gui/PropertiesBox.c:541 #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Catégories du catalogue : " # src/gui/Properties.c:610 # src/gui/Properties.c:610 # src/gui/Properties.c:610 # src/gui/PropertiesBox.c:557 #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "Description du catalogue : " # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Information du catalogue" # src/gui/Properties.c:706 # src/gui/Properties.c:706 # src/gui/Properties.c:706 # src/gui/PropertiesBox.c:645 #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "Entrer le nom du disque." # src/gui/Properties.c:730 # src/gui/Properties.c:730 # src/gui/Properties.c:730 # src/gui/PropertiesBox.c:664 #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "Entrer le numéro d'archive du disque." # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:212 src/gui/NoteBookManagmentCallBack.c:302 # src/gui/NoteBookManagmentCallBack.c:356 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/PropertiesBox.c:685 #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr " Type : " # src/gui/Properties.c:775 src/gui/Properties.c:776 # src/gui/Properties.c:775 src/gui/Properties.c:776 # src/gui/Properties.c:775 src/gui/Properties.c:776 # src/gui/PropertiesBox.c:695 src/gui/PropertiesBox.c:696 #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "Numéro de série : " # src/gui/Properties.c:791 src/gui/Properties.c:792 # src/gui/Properties.c:791 src/gui/Properties.c:792 # src/gui/Properties.c:791 src/gui/Properties.c:792 # src/gui/PropertiesBox.c:706 src/gui/PropertiesBox.c:707 #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "Nom de volume : " # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/PropertiesBox.c:743 src/gui/PropertiesBox.c:744 #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "Capacité totale : " # src/gui/Properties.c:861 src/gui/Properties.c:862 # src/gui/Properties.c:861 src/gui/Properties.c:862 # src/gui/Properties.c:861 src/gui/Properties.c:862 # src/gui/PropertiesBox.c:754 src/gui/PropertiesBox.c:755 #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "Espace utilisé : " # src/gui/Properties.c:877 src/gui/Properties.c:878 # src/gui/Properties.c:877 src/gui/Properties.c:878 # src/gui/Properties.c:877 src/gui/Properties.c:878 # src/gui/PropertiesBox.c:765 src/gui/PropertiesBox.c:766 #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "Espace libre : " # src/gui/Properties.c:915 src/gui/Properties.c:916 # src/gui/Properties.c:915 src/gui/Properties.c:916 # src/gui/Properties.c:915 src/gui/Properties.c:916 # src/gui/PropertiesBox.c:790 src/gui/PropertiesBox.c:791 #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "Nom du catalogue : " # src/gui/Properties.c:931 src/gui/Properties.c:932 # src/gui/Properties.c:931 src/gui/Properties.c:932 # src/gui/Properties.c:931 src/gui/Properties.c:932 # src/gui/PropertiesBox.c:801 src/gui/PropertiesBox.c:802 #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "Mise à jour du catalogue : " # src/gui/Properties.c:967 # src/gui/Properties.c:967 # src/gui/Properties.c:967 # src/gui/PropertiesBox.c:828 #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "Description du disque : " # src/gui/Properties.c:998 # src/gui/Properties.c:998 # src/gui/Properties.c:998 # src/gui/PropertiesBox.c:854 #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Information du disque" # src/gui/NoteBookCatalog.c:189 # src/gui/NoteBookCatalog.c:189 # src/gui/NoteBookCatalog.c:255 # src/gui/PropertiesBox.c:908 #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "Nom du répertoire" # src/gui/Properties.c:1104 # src/gui/Properties.c:1104 # src/gui/Properties.c:1104 # src/gui/PropertiesBox.c:940 #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Type : (répertoire)" # src/gui/Properties.c:1118 src/gui/Properties.c:1119 # src/gui/Properties.c:1118 src/gui/Properties.c:1119 # src/gui/Properties.c:1118 src/gui/Properties.c:1119 # src/gui/PropertiesBox.c:949 src/gui/PropertiesBox.c:950 #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "Taille du répertoire : " # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/PropertiesBox.c:960 src/gui/PropertiesBox.c:961 # src/gui/PropertiesBox.c:1213 src/gui/PropertiesBox.c:1214 #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "Créé le : " # src/gui/Properties.c:1150 src/gui/Properties.c:1151 # src/gui/Properties.c:1492 src/gui/Properties.c:1493 # src/gui/Properties.c:1150 src/gui/Properties.c:1151 # src/gui/Properties.c:1492 src/gui/Properties.c:1493 # src/gui/Properties.c:1150 src/gui/Properties.c:1151 # src/gui/Properties.c:1492 src/gui/Properties.c:1493 # src/gui/PropertiesBox.c:971 src/gui/PropertiesBox.c:972 # src/gui/PropertiesBox.c:1224 src/gui/PropertiesBox.c:1225 #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "Modifié le : " # src/gui/Properties.c:1166 src/gui/Properties.c:1167 # src/gui/Properties.c:1508 src/gui/Properties.c:1509 # src/gui/Properties.c:1166 src/gui/Properties.c:1167 # src/gui/Properties.c:1508 src/gui/Properties.c:1509 # src/gui/Properties.c:1166 src/gui/Properties.c:1167 # src/gui/Properties.c:1508 src/gui/Properties.c:1509 # src/gui/PropertiesBox.c:982 src/gui/PropertiesBox.c:983 # src/gui/PropertiesBox.c:1235 src/gui/PropertiesBox.c:1236 #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "Accédé le : " # src/gui/Properties.c:1188 src/gui/Properties.c:1189 # src/gui/Properties.c:1530 src/gui/Properties.c:1531 # src/gui/Properties.c:1188 src/gui/Properties.c:1189 # src/gui/Properties.c:1530 src/gui/Properties.c:1531 # src/gui/Properties.c:1188 src/gui/Properties.c:1189 # src/gui/Properties.c:1530 src/gui/Properties.c:1531 # src/gui/PropertiesBox.c:997 src/gui/PropertiesBox.c:998 # src/gui/PropertiesBox.c:1250 src/gui/PropertiesBox.c:1251 #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Droits : " # src/gui/Properties.c:1204 src/gui/Properties.c:1205 # src/gui/Properties.c:1546 src/gui/Properties.c:1547 # src/gui/Properties.c:1204 src/gui/Properties.c:1205 # src/gui/Properties.c:1546 src/gui/Properties.c:1547 # src/gui/Properties.c:1204 src/gui/Properties.c:1205 # src/gui/Properties.c:1546 src/gui/Properties.c:1547 # src/gui/PropertiesBox.c:1008 src/gui/PropertiesBox.c:1009 # src/gui/PropertiesBox.c:1261 src/gui/PropertiesBox.c:1262 #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "Propriétaire : " # src/gui/Properties.c:1220 src/gui/Properties.c:1221 # src/gui/Properties.c:1562 src/gui/Properties.c:1563 # src/gui/Properties.c:1220 src/gui/Properties.c:1221 # src/gui/Properties.c:1562 src/gui/Properties.c:1563 # src/gui/Properties.c:1220 src/gui/Properties.c:1221 # src/gui/Properties.c:1562 src/gui/Properties.c:1563 # src/gui/PropertiesBox.c:1019 src/gui/PropertiesBox.c:1020 # src/gui/PropertiesBox.c:1272 src/gui/PropertiesBox.c:1273 #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "Groupe : " # src/gui/Properties.c:1258 src/gui/Properties.c:1259 # src/gui/Properties.c:1602 src/gui/Properties.c:1606 # src/gui/Properties.c:1609 # src/gui/Properties.c:1258 src/gui/Properties.c:1259 # src/gui/Properties.c:1602 src/gui/Properties.c:1606 # src/gui/Properties.c:1609 # src/gui/Properties.c:1258 src/gui/Properties.c:1259 # src/gui/Properties.c:1602 src/gui/Properties.c:1606 # src/gui/Properties.c:1609 # src/gui/PropertiesBox.c:1044 src/gui/PropertiesBox.c:1045 # src/gui/PropertiesBox.c:1299 src/gui/PropertiesBox.c:1303 # src/gui/PropertiesBox.c:1306 #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "Nom du disque : " # src/gui/Properties.c:1274 src/gui/Properties.c:1275 # src/gui/Properties.c:1626 src/gui/Properties.c:1630 # src/gui/Properties.c:1633 # src/gui/Properties.c:1274 src/gui/Properties.c:1275 # src/gui/Properties.c:1626 src/gui/Properties.c:1630 # src/gui/Properties.c:1633 # src/gui/Properties.c:1274 src/gui/Properties.c:1275 # src/gui/Properties.c:1626 src/gui/Properties.c:1630 # src/gui/Properties.c:1633 # src/gui/PropertiesBox.c:1055 src/gui/PropertiesBox.c:1056 # src/gui/PropertiesBox.c:1318 src/gui/PropertiesBox.c:1322 # src/gui/PropertiesBox.c:1325 #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "Chemin sur le disque : " # src/gui/Properties.c:1310 # src/gui/Properties.c:1310 # src/gui/Properties.c:1310 # src/gui/PropertiesBox.c:1082 #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "Description du répertoire : " # src/gui/Properties.c:1341 # src/gui/Properties.c:1341 # src/gui/Properties.c:1341 # src/gui/PropertiesBox.c:1108 #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Information du répertoire" # src/NoteBookManagmentCallBack.c:392 src/gui/NoteBookManagment.c:216 # src/NoteBookManagmentCallBack.c:392 src/gui/NoteBookManagment.c:216 # src/gui/NoteBookManagmentCallBack.c:377 # src/gui/PropertiesBox.c:1161 #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "Nom du fichier : " # src/gui/Properties.c:1446 # src/gui/Properties.c:1446 # src/gui/Properties.c:1446 # src/gui/PropertiesBox.c:1193 #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Type de fichier : pas encore implémenté!!" # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/PropertiesBox.c:413 src/gui/PropertiesBox.c:414 # src/gui/PropertiesBox.c:1202 src/gui/PropertiesBox.c:1203 #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "Taille du fichier : %s (%s bytes)" # src/gui/Properties.c:1668 # src/gui/Properties.c:1668 # src/gui/Properties.c:1668 # src/gui/PropertiesBox.c:1351 #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "Description du fichier : " # src/gui/Properties.c:1699 # src/gui/Properties.c:1699 # src/gui/Properties.c:1699 # src/gui/PropertiesBox.c:1377 #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Information du fichier" # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "Fichier de catalogue" # src/gui/Properties.c:589 # src/gui/Properties.c:589 # src/gui/Properties.c:589 # src/gui/PropertiesBox.c:541 #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Niveau de compression des catalogues :" #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "" "Selectionner le niveau de compression du catalogue. La valeur par défaut est " "3, c'est une bonne valeur pour avoir à la fois une bonne performance et un " "catalogue de petite taille." # src/MenuPopupCallBack.c:55 # src/MenuPopupCallBack.c:55 # src/MenuPopupCallBack.c:56 # src/gui/MenuPopupCallBack.c:57 #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Catalogues récemment ouverts :" #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "" "Selectionner la taille de l'historique des catalogues récemment ouverts. La " "valeur par défaut est 5." #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "Effacer l'historique" #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "Cliquez ici pour effacer l'historique des fichiers ouverts récemment." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Charger automatiquement le catalogue" #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "Charge le catalogue par défaut au chargement de l'application." # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1186 src/Catalog.c:1344 #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "Charger le dernier fichier de catalogue ouvert." # src/NoteBookManagmentCallBack.c:509 # src/NoteBookManagmentCallBack.c:509 # src/gui/NoteBookManagmentCallBack.c:492 # src/gui/NoteBookManagmentCallBack.c:620 #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "Charger le fichier de catalogue sélectionné." #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "Saisir le chemin complet du catalogue à charger." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "Selectionner le catalogue" #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "Cliquer ici pour parcourir et sélectionner le ficheir de catalogue." # src/gui/MenuFile.c:382 # src/gui/MenuFile.c:382 # src/gui/MenuFileCallBack.c:146 src/gui/MenuFileCallBack.c:169 # src/gui/MenuFileCallBack.c:323 src/gui/MenuFileCallBack.c:405 # src/gui/MenuFileCallBack.c:486 src/gui/MenuFileCallBack.c:564 # src/gui/MenuFileCallBack.c:629 # src/gui/MenuFileCallBack.c:175 src/gui/MenuFileCallBack.c:202 # src/gui/MenuFileCallBack.c:406 src/gui/MenuFileCallBack.c:503 # src/gui/MenuFileCallBack.c:596 src/gui/MenuFileCallBack.c:686 # src/gui/MenuFileCallBack.c:763 #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "Selectionner le catalogue à charger automatiquement" #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "Explorateur" # src/gui/NoteBookSearch.c:80 # src/gui/NoteBookSearch.c:80 # src/gui/NoteBookSearch.c:107 # src/gui/NoteBookSearch.c:127 #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "Tri sensible à la casse" #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "Le tri des éléments dans l'explorateur est sensible à la casse." #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Le tri des éléments groupe par répertoires/fichiers." #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" "Le tri des éléments dans l'explorateur peut grouper les éléments par type. " "Si cette option est cochée tous les éléments seront groupés par répertoires " "ou fichiers." #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Redimensionnement automatique des colonnes" #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "Redimensionne automatiquement les colonnes de l'explorateur." # src/gui/NoteBookSearch.c:138 # src/gui/NoteBookSearch.c:138 # src/gui/NoteBookSearch.c:147 src/gui/NoteBookSearch.c:212 # src/gui/NoteBookSearch.c:169 src/gui/NoteBookSearch.c:232 #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "Disques" #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "Visible" #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Cacher" #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "Afficher" #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "Caché" # src/gui/Menu.c:50 # src/gui/Menu.c:50 # src/gui/NoteBookSearch.c:130 # src/gui/NoteBookSearch.c:152 #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Fichiers" #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "Le tri du résultat de la recherche est sensible à la casse." #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Le tri du résultat de la recherche groupe par type." #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" "Le tri du résultat de la recherche peut être groupé par le type des éléments " "trouvés. Si cette option est cochée tous les éléments seront groupés par " "catalogues, disques, répertoires et fichiers." #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "Tous les mots clé doivent correspondre." #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" "Choisir si tous les mots clé ou seulement un parmis la liste doivent " "correspondre avec l'élément pour qu'il soit afficher dans le résultat de la " "recherche." # src/gui/MenuFile.c:278 # src/gui/MenuFile.c:278 # src/gui/MenuFileCallBack.c:186 # src/gui/MenuFileCallBack.c:223 #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "Rapide" #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "Options générales" #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "IHM" # src/gui/Categories.c:201 # src/gui/Categories.c:201 # src/gui/Categories.c:201 # src/gui/CategoriesEditBox.c:237 #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "Enregistrer les propriétés de l'IHM en quittant." #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "" "Enregistre les propriétés de l'IHM comme la position et la taille de la " "fenêtre." #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "Autorise les bips" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "Autorise l'émission d'un court bip lors de certains d'événements." #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Mail" #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "Adresse email :" #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "Saisir votre adresse email" #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "Serveur de mail sortant :" #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "" "Saisir votre serveur de mail sortant. Souvent cette adresse est mail." "votredomaine.com" #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Port du serveur :" #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "" "Saisir le port du serveur de mail sortant (la valeur la plus commune est 25)." #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "" "Cette boite de paramétrage permet de configurer quelques fonctionnalités et " "propriétés du programme." #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "Paramètres" #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "Sélectionnez la section à configurer." #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "" "Changez dans ce panneau toutes les propriétés disponibles pour configurer le " "programme comme vous le souhaitez." #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "" "Cette boite de paramétrage permet de configurer le programme. Certaines " "propriétes peuvent être modifiées ici." #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "" "Cliquez sur le bouton OK pour appliquer les changements et fermer la fenêtre " "de paramétrage." #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "" "Cliquez sur le bouton Annuler pour annuler les changements et fermer la " "fenêtre de paramètrage." #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "_Appliquer" #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "" "Cliquez sur le bouton Appliquer pour appliquer les changements (sans fermer " "la fenêtre de paramétrage)." #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "Paramètres modifiés" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "" "Si vous n'appliquez pas vos modifications tous vos changements seront " "perdus. Voulez-vous appliquer les modifications?" # src/gui/StatusBarCallBack.c:56 #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], total des disques : %d" # src/gui/StatusBar.c:203 # src/gui/StatusBar.c:203 # src/gui/StatusBar.c:203 # src/gui/StatusBarCallBack.c:57 src/gui/StatusBarCallBack.c:88 # src/gui/StatusBarCallBack.c:120 #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr " Eléments sélectionnés : %d (taille totale : %s)" # src/gui/StatusBarCallBack.c:80 #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], capacité : %s, libre : %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr "Disque vide" # src/gui/StatusBar.c:203 # src/gui/StatusBar.c:203 # src/gui/StatusBar.c:203 # src/gui/StatusBarCallBack.c:84 src/gui/StatusBarCallBack.c:116 # src/gui/StatusBarCallBack.c:145 #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr " Elément sélectionnés : %d (taille totale : %s)" # src/gui/StatusBarCallBack.c:112 #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr " Répertoire \"%s\", %s (fichiers %d, sous-répertoires %d)" # src/gui/StatusBar.c:197 # src/gui/StatusBar.c:197 # src/gui/StatusBar.c:197 # src/gui/StatusBarCallBack.c:144 #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr "%s, %s, %s" # src/gui/StatusBar.c:225 src/gui/StatusBar.c:247 # src/gui/StatusBar.c:225 src/gui/StatusBar.c:247 # src/gui/StatusBar.c:225 src/gui/StatusBar.c:247 # src/gui/StatusBarCallBack.c:169 src/gui/StatusBarCallBack.c:193 #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr " Elément sélectionné : %d" # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr " Explorateur de catalogue" # src/gui/StatusBar.c:242 # src/gui/StatusBar.c:242 # src/gui/StatusBar.c:242 # src/gui/StatusBarCallBack.c:192 #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr " Moteur de recherche" # src/gui/StatusBar.c:264 # src/gui/StatusBar.c:264 # src/gui/StatusBar.c:264 # src/gui/StatusBarCallBack.c:216 #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr " Gestion du catalogue" # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:76 #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Fermer catalogue" # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:78 src/gui/MenuFileCallBack.c:411 # src/gui/MenuFileCallBack.c:425 src/gui/MenuFileCallBack.c:463 # src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "Envoi du catalogue par mail" # src/gui/Menu.c:187 # src/gui/Menu.c:187 # src/gui/MenuHelp.c:54 # src/gui/About.c:108 #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "A propos" # src/gui/About.c:128 # src/gui/About.c:128 # src/gui/About.c:128 # src/gui/About.c:125 #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "Gestionnaire de catalogues de media amovibles\n" "Par Sébastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" # src/gui/About.c:129 # src/gui/About.c:126 #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" "GWhere permet de gérer une base de données de vos CD et autres media " "amovibles (disques durs, disquettes, disquettes Zip, CD-ROM, etc...). Avec " "GWhere il est facile de parcourir vos CDs ou de faire une recherche rapide " "sans avoir besoin d'insérer vos CDs dans le lecteur à chaque fois." #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Tourne sous " #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "" "Cette fenêtre vous permet d'envoyer un catalogue par mail à l'un (ou plus) " "de vos contacts." #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "Envoi le mail" #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "A :" #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "CC :" #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "CCI :" #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "Sujet :" #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "Entrez ici l'adresse email de votre (vos) contact(s)." #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "Entrez ici l'adresse email de vos contacts en copie." #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "Entrez ici l'adresse email de vos contacts en copie cachée." #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "Entrez ici l'objet de votre mail." #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "Fichier attaché :" #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "Choisissez d'attacher ou non le fichier du catalogue." #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "Saisissez ici le texte de votre message." # src/gui/Menu.c:84 # src/gui/Menu.c:84 # src/gui/MenuFile.c:81 # src/gui/MenuFile.c:81 #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "Envoyer" #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "" "Cliquez ici pour envoyer le mail (avec un fichier du catalogue attaché)." #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "Cliquez ici pour annuler l'envoi du mail." # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "Envoi du mail, veuillez patienter..." #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "" "Une erreur est survenue pendant l'envoi du mail. Vérifiez vos paramètres " "s'il vous plait." # src/support.c:118 # src/support.c:118 # src/support.c:118 # src/support.c:120 #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Ne peut pas trouvé le fichier pixmap: %s" # src/support.c:125 # src/support.c:125 # src/support.c:125 # src/support.c:127 #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "Erreur pendant le chargement du fichier pixmap: %s" # src/Catalog.c:605 # src/Catalog.c:605 # src/Catalog.c:605 # src/Catalog.c:695 #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "Erreur : ne peut pas ouvrir ce fichier." # src/Catalog.c:641 # src/Catalog.c:641 # src/Catalog.c:641 # src/Catalog.c:731 #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "Erreur : ne peut pas entrer dans ce répertoire." # src/Catalog.c:692 # src/Catalog.c:692 # src/Catalog.c:692 # src/Catalog.c:780 #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "Le disque n'a pas pu être ajouté\n" "L'ajout est annulé par l'utilisateur" # src/Catalog.c:641 src/NoteBookManagmentCallBack.c:199 # src/NoteBookManagmentCallBack.c:236 # src/Catalog.c:641 src/NoteBookManagmentCallBack.c:199 # src/NoteBookManagmentCallBack.c:236 # src/Catalog.c:641 src/gui/NoteBookManagmentCallBack.c:188 # src/gui/NoteBookManagmentCallBack.c:224 # src/Catalog.c:798 src/Catalog.c:803 src/Catalog.c:808 src/Catalog.c:813 # src/Catalog.c:818 src/Catalog.c:823 src/Catalog.c:828 src/Catalog.c:833 # src/Catalog.c:850 src/Catalog.c:855 src/Catalog.c:860 src/Catalog.c:865 # src/Catalog.c:870 src/Catalog.c:875 #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "Le disque n'a pas été ajouté\n" # src/Catalog.c:798 #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "%s est en dehors de l'espace d'allocation mémoire du processus." # src/Catalog.c:803 #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" "Un composant du chemin suivant dépasse les %d caractères, ou le nom du " "chemin entier dépasse les %d caractères : %s." # src/Catalog.c:808 #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "Le répertoire suivant n'existe pas : %s." # src/Catalog.c:813 src/Catalog.c:865 #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "Pas assez de mémoire pour accomplir l'opération." # src/Catalog.c:818 #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "Un composant du prefix du xhemin n'est pas un répertoire : %s." # src/Catalog.c:823 #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "" "Trop de liens symboliques ont été rencontrés pour résoudre le chemin " "suivant : %s." # src/Catalog.c:828 #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "" "Une erreur d'E/S a été rencontrée en changement de répertoire vers : %s." # src/Exploration.c:594 src/Exploration.c:650 src/Exploration.c:728 # src/Exploration.c:784 # src/Exploration.c:594 src/Exploration.c:650 src/Exploration.c:728 # src/Exploration.c:784 # src/Exploration.c:599 src/Exploration.c:655 src/Exploration.c:733 # src/Exploration.c:789 # src/Catalog.c:833 src/Catalog.c:875 #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "Propriétaire inconnu" # src/Catalog.c:935 # src/Catalog.c:935 # src/Catalog.c:935 # src/Catalog.c:1110 #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" "Le disque n'a pas été ajouté\n" "Erreur : impossible d'aller dans le répertoire parent." # src/Catalog.c:850 #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Trop de descripteurs de fichers sont utilisés par le processus." # src/Catalog.c:855 #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Trop de fichiers sont actuellement ouverts dans le système." # src/Catalog.c:860 #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "Le répertoire suivant n'existe pas ou le nom est une chaîne vide : %s." # src/Catalog.c:870 #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "Le nom de répertoire suivant n'est pas un répertoire : %s." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" "Une erreur critique a été rencontrée lors de l'extraction des informations " "du fichier %s%s%s.\n" " Enregistrez votre catalogue si possible, quittez GWhere and rapportez " "l'anomalie à l'équipe du projet GWhere s'il vous plait." # src/Catalog.c:926 # src/Catalog.c:926 # src/Catalog.c:926 # src/Catalog.c:1102 #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" "Le disque n'a pas été ajouté\n" "Erreur : impossible de fermer le répertoire." # src/main.c:47 #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "Tourne sur %s" # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Catalogue chargé" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "Chargement du catalogue échoué" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "Charge le catalogue" #: src/gwapplicationmanager.c:499 msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "" "Le catalogue est invalide ou n'existe pas. Veuillez vérifier le chemin du " "catalogue." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "Enregistrement du catalogue" # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Catalogue enregistré" # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:78 src/gui/MenuFileCallBack.c:411 # src/gui/MenuFileCallBack.c:425 src/gui/MenuFileCallBack.c:463 # src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "Enregistrement du catalogue échoué" # src/gui/NoteBookCatalog.c:114 src/gui/NoteBookCatalog.c:221 # src/gui/NoteBookCatalog.c:114 src/gui/NoteBookCatalog.c:221 # src/gui/NoteBookCatalog.c:112 src/gui/NoteBookCatalog.c:206 # src/gui/NoteBookCatalog.c:113 src/gui/NoteBookCatalog.c:207 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Droits" # src/gui/NoteBookCatalog.c:119 src/gui/NoteBookCatalog.c:222 # src/gui/NoteBookCatalog.c:119 src/gui/NoteBookCatalog.c:222 # src/gui/NoteBookCatalog.c:117 src/gui/NoteBookCatalog.c:207 # src/gui/NoteBookCatalog.c:118 src/gui/NoteBookCatalog.c:208 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "Propriétaire" # src/gui/NoteBookCatalog.c:124 src/gui/NoteBookCatalog.c:223 # src/gui/NoteBookCatalog.c:124 src/gui/NoteBookCatalog.c:223 # src/gui/NoteBookCatalog.c:122 src/gui/NoteBookCatalog.c:208 # src/gui/NoteBookCatalog.c:123 src/gui/NoteBookCatalog.c:209 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "Groupe" # src/gui/NoteBookCatalog.c:129 src/gui/NoteBookCatalog.c:224 # src/gui/NoteBookSearch.c:148 # src/gui/NoteBookCatalog.c:129 src/gui/NoteBookCatalog.c:224 # src/gui/NoteBookSearch.c:148 # src/gui/NoteBookCatalog.c:127 src/gui/NoteBookCatalog.c:209 # src/gui/NoteBookSearch.c:222 # src/gui/NoteBookCatalog.c:128 src/gui/NoteBookCatalog.c:210 # src/gui/NoteBookSearch.c:238 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "Taille" # src/gui/NoteBookCatalog.c:134 src/gui/NoteBookCatalog.c:225 # src/gui/NoteBookCatalog.c:134 src/gui/NoteBookCatalog.c:225 # src/gui/NoteBookCatalog.c:132 src/gui/NoteBookCatalog.c:210 # src/gui/NoteBookCatalog.c:133 src/gui/NoteBookCatalog.c:211 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "Inoeud" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Date d'accès" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Date de modification" # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/PropertiesBox.c:960 src/gui/PropertiesBox.c:961 # src/gui/PropertiesBox.c:1213 src/gui/PropertiesBox.c:1214 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "Date de création" # src/NoteBookManagmentCallBack.c:392 src/gui/NoteBookManagment.c:216 # src/NoteBookManagmentCallBack.c:392 src/gui/NoteBookManagment.c:216 # src/gui/NoteBookManagmentCallBack.c:377 # src/gui/PropertiesBox.c:1161 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "Nom du système de fichier" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "Chemin d'accès" # src/gui/NoteBookCatalog.c:187 # src/gui/NoteBookCatalog.c:187 # src/gui/NoteBookCatalog.c:253 # src/gui/NoteBookCatalog.c:254 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Numéro d'archive" # src/gui/NoteBookCatalog.c:188 # src/gui/NoteBookCatalog.c:188 # src/gui/NoteBookCatalog.c:254 # src/gui/NoteBookCatalog.c:255 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Type" # src/gui/NoteBookCatalog.c:189 # src/gui/NoteBookCatalog.c:189 # src/gui/NoteBookCatalog.c:255 # src/gui/NoteBookCatalog.c:256 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Nom de volume" # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/PropertiesBox.c:743 src/gui/PropertiesBox.c:744 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "Capacité totale" # src/gui/NoteBookCatalog.c:191 # src/gui/NoteBookCatalog.c:191 # src/gui/NoteBookCatalog.c:257 # src/gui/NoteBookCatalog.c:258 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "Espace libre" # src/gui/NoteBookCatalog.c:139 src/gui/NoteBookCatalog.c:192 # src/gui/NoteBookCatalog.c:226 src/gui/NoteBookSearch.c:153 # src/gui/NoteBookCatalog.c:139 src/gui/NoteBookCatalog.c:192 # src/gui/NoteBookCatalog.c:226 src/gui/NoteBookSearch.c:153 # src/gui/NoteBookCatalog.c:137 src/gui/NoteBookCatalog.c:211 # src/gui/NoteBookCatalog.c:258 src/gui/NoteBookSearch.c:227 # src/gui/NoteBookCatalog.c:138 src/gui/NoteBookCatalog.c:212 # src/gui/NoteBookCatalog.c:259 src/gui/NoteBookSearch.c:241 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Date" # src/NoteBookManagmentCallBack.c:321 src/NoteBookManagmentCallBack.c:398 # src/NoteBookManagmentCallBack.c:321 src/NoteBookManagmentCallBack.c:398 # src/gui/NoteBookManagmentCallBack.c:308 # src/gui/NoteBookManagmentCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:344 # src/gui/NoteBookManagmentCallBack.c:416 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Numéro de série" # src/gui/NoteBookSearch.c:143 # src/gui/NoteBookSearch.c:143 # src/gui/NoteBookSearch.c:217 # src/gui/NoteBookSearch.c:235 #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "Chemin" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "Complète" #: win32/config.h:288 msgid "Compact" msgstr "Compacte" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (nécessaire)" #: win32/config.h:290 msgid "Main engine application." msgstr "Moteur principal de l'application." #: win32/config.h:291 msgid "GTK+ 2.6 RunTime (required)" msgstr "GTK+ 2.6 RunTime (nécessaire)" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "Machine d'exécution pour l'environnement de l'IHM." #: win32/config.h:293 msgid "Plugins" msgstr "Plugins" #: win32/config.h:294 msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "" "Modules pour l'extraction automatique des descriptions des fichiers and pour " "l'importation/exportation de catalogues." #: win32/config.h:295 msgid "Languages Files" msgstr "Fichiers des langages" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "Tous les fichiers des langages pour la traduction du programme." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "Vous devez désinstaller la version précédente de GWhere" #: win32/config.h:298 msgid "Installer already running" msgstr "Le programme d'installation est déjà lancé" #: win32/config.h:299 msgid "Install options" msgstr "Options d'installation" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "Quels sont les utilisateurs qui peuvent lancer GWhere ?" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "Droits d'accès de l'installation de GWhere" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" "GWhere peut être installé pour tous les utilisateurs ou seulement pour " "l'utilisateur courant. Sélectionnez pour qui vous voulez installer GWhere " "s'il vous plait." #: win32/config.h:303 msgid "All users|Current user" msgstr "Tous les utilisateurs|L'utilisateur courant" #: win32/config.h:304 msgid "All users" msgstr "Tous les utilisateurs" #~ msgid "" #~ "The catalog file doesn't exists. Check your catalog file path please." #~ msgstr "" #~ "Le fichier du catalogue n'existe pas. Veuillez vérifier le chemin du " #~ "fichier." #~ msgid "" #~ "The catalog file to load doesn't have a good file extension. Only .ctg " #~ "files are allowed to be loaded." #~ msgstr "" #~ "Le fichier du catalog à charger n'a pas la bonne extension de fichier. " #~ "Seulement les fichiers .ctg peuvent être chargés." # src/Catalog.c:71 src/Catalog.c:79 src/Catalog.c:88 src/Catalog.c:126 # src/Catalog.c:135 src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:71 src/Catalog.c:79 src/Catalog.c:88 src/Catalog.c:126 # src/Catalog.c:135 src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:71 src/Catalog.c:79 src/Catalog.c:88 src/Catalog.c:126 # src/Catalog.c:135 src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:91 src/Catalog.c:102 src/Catalog.c:115 src/Catalog.c:134 # src/Catalog.c:183 src/Catalog.c:195 src/Catalog.c:270 src/Catalog.c:363 #~ msgid "Load file" #~ msgstr "Enregistrer le fichier" # src/Catalog.c:71 # src/Catalog.c:71 # src/Catalog.c:71 # src/Catalog.c:91 src/Catalog.c:102 #~ msgid "Error : cannot open this file." #~ msgstr "Erreur : ne peut pas ouvrir ce fichier." # src/Catalog.c:79 # src/Catalog.c:79 # src/Catalog.c:79 # src/Catalog.c:115 #~ msgid "Error : cannot read the file version." #~ msgstr "Erreur : ne peut pas lire la version du fichier." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #~ msgid "Load catalog" #~ msgstr "Charger le catalogue" # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:119 src/Catalog.c:139 src/Catalog.c:1235 src/Catalog.c:1251 # src/Catalog.c:1276 src/Catalog.c:1292 src/Catalog.c:1315 src/Catalog.c:1330 #~ msgid "Error : cannot close file." #~ msgstr "Erreur : ne peut pas fermer le fichier." # src/Catalog.c:88 # src/Catalog.c:88 # src/Catalog.c:88 # src/Catalog.c:134 #~ msgid "Error : it's not a GWhere file." #~ msgstr "Erreur : ce n'est pas un fichier GWhere." # src/Catalog.c:126 # src/Catalog.c:126 # src/Catalog.c:126 # src/Catalog.c:183 #~ msgid "Error : this GWhere version file is unknown." #~ msgstr "Erreur : cette version de fichier GWhere est inconnue." # src/Catalog.c:135 # src/Catalog.c:135 # src/Catalog.c:135 # src/Catalog.c:195 #~ msgid "Error : cannot close this file after loading." #~ msgstr "Erreur : ne peut pas fermer le fichier après le chargement." # src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:270 src/Catalog.c:363 #~ msgid "Error : during the loading of disk." #~ msgstr "Erreur : pendant the chargement du disque." # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:1140 src/Catalog.c:1221 #~ msgid "Error : cannot create file." #~ msgstr "Erreur : ne peut pas créer le fichier." # src/Catalog.c:972 src/Catalog.c:1047 # src/Catalog.c:972 src/Catalog.c:1047 # src/Catalog.c:972 src/Catalog.c:1047 # src/Catalog.c:1149 src/Catalog.c:1231 #~ msgid "Error : cannot write file version." #~ msgstr "Erreur : ne peut pas lire la version du fichier." # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1186 src/Catalog.c:1344 #~ msgid "Error : cannot close catalog file." #~ msgstr "Erreur : ne peut pas fermer le fichier du catalogue." # src/Catalog.c:1354 #~ msgid "Elapsed time to save the catalog : %d secs" #~ msgstr "Temps passé pour enregistrer le catalogue : %d secs" # src/gui/NoteBookManagment.c:177 # src/gui/NoteBookManagment.c:177 # src/gui/NoteBookManagment.c:197 # src/gui/NoteBookManagment.c:216 #~ msgid "" #~ "Give the device file of the selected disk. The device file is the one of " #~ "the /etc/fstab file." #~ msgstr "" #~ "Donne le fichier système du périphérique du disque sélectionné. Le " #~ "fichier système fait parti du fichier /etc/fstab." # src/gui/NoteBookManagment.c:319 # src/gui/NoteBookManagment.c:319 # src/gui/NoteBookManagment.c:339 # src/gui/NoteBookManagment.c:364 #~ msgid "Scan disk" #~ msgstr "Scanner le disque" # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:607 src/Exploration.c:663 src/Exploration.c:741 # src/Exploration.c:797 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 #~ msgid "unkown" #~ msgstr "inconnu" # src/Supermount.c:824 src/data/VirtualFileSystemStats.c:443 # src/data/VirtualFileSystemStats.c:459 # src/Supermount.c:824 src/data/VirtualFileSystemStats.c:443 # src/data/VirtualFileSystemStats.c:459 # src/Supermount.c:824 src/data/VirtualFileSystemStats.c:453 # src/data/VirtualFileSystemStats.c:470 # src/Supermount.c:831 src/data/VirtualFileSystemStats.c:418 #~ msgid "Not yet implemented" #~ msgstr "Pas encore implementé" # src/main.c:45 #~ msgid "Is running on GNU/Linux" #~ msgstr "Tourne sur GNU/Linux" # src/main.c:47 #~ msgid "Is running on FreeBSD" #~ msgstr "Tourne sur FreeBSD" # src/main.c:47 #~ msgid "Is running on OpenBSD" #~ msgstr "Tourne sur OpenBSD" # src/main.c:47 #~ msgid "Is running on NetBSD" #~ msgstr "Tourne sur NetBSD" # src/main.c:49 #~ msgid "Is running on MS Windows" #~ msgstr "Tourne sur MS Windows" # src/main.c:51 #~ msgid "Is running on unkown OS" #~ msgstr "Tourne sur un SE inconnu" # src/gui/CaptureBox.c:92 src/gui/MenuFile.c:348 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:92 src/gui/MenuFile.c:348 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:92 src/gui/DialogBox.c:94 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:116 src/gui/DialogBox.c:94 # src/gui/ProgressBarBox.c:127 src/gui/ProgressBarBox.c:246 # src/gui/ProgressBarBox.c:504 src/gui/PropertiesBox.c:216 # src/gui/TextBox.c:122 #~ msgid "Cancel" #~ msgstr "Annuler" # src/gui/ProgressBarBox.c:217 src/gui/ProgressBarBox.c:294 # src/gui/ProgressBarBox.c:217 src/gui/ProgressBarBox.c:294 # src/gui/ProgressBarBox.c:217 src/gui/ProgressBarBox.c:294 # src/gui/ProgressBarBox.c:276 src/gui/ProgressBarBox.c:460 #~ msgid "Ok" #~ msgstr "Ok" # src/gui/NoteBookCatalog.c:190 # src/gui/NoteBookCatalog.c:190 # src/gui/NoteBookCatalog.c:256 # src/gui/NoteBookCatalog.c:257 #~ msgid "Total Size" #~ msgstr "Taille totale" # src/gui/StatusBar.c:269 # src/gui/StatusBar.c:269 # src/gui/StatusBar.c:269 # src/gui/StatusBarCallBack.c:217 #~ msgid " " #~ msgstr " " # src/main.c:40 # src/main.c:42 #~ msgid "%s %s is running in debug mode\n" #~ msgstr "%s %s est lancé en mode de debugage\n" # src/gui/Interface.c:56 # src/gui/Interface.c:56 # src/gui/Interface.c:56 #~ msgid "GWhere" #~ msgstr "GWhere" # src/Catalog.c:710 src/Catalog.c:730 # src/Catalog.c:710 src/Catalog.c:730 # src/Catalog.c:710 src/Catalog.c:730 #~ msgid "" #~ "The disk hasn't been added\n" #~ "Unknown error" #~ msgstr "" #~ "Le disque n'a pas pu être ajouté\n" #~ "Erreur inconnue" # src/Catalog.c:893 # src/Catalog.c:893 # src/Catalog.c:893 #~ msgid "" #~ "The disk hasn't been added\n" #~ "Error : cannot add dir to the disk." #~ msgstr "" #~ "Le disque n'a pas été ajouté\n" #~ "Erreur : impossible d'ajouter le répertoire au disque." # src/gui/MenuFile.c:266 # src/gui/MenuFile.c:266 #~ msgid "Save file" #~ msgstr "Enregistrer le fichier" #~ msgid "Not yet implemeted" #~ msgstr "Pas encore implementé" #~ msgid "An error occured, the disk hasn't been added" #~ msgstr "Une erreur est survenue, le disque n'a pas pu être ajouté" #~ msgid "Error : cannot add dir to the disk." #~ msgstr "Erreur : ne peut pas ajouter le répertoire au catalogue." #~ msgid "Error : cannot list files of \"%s\" folder." #~ msgstr "Erreur : ne peut pas lister les fichiers du répertoire \"%s\"." #~ msgid "Error : cannot close current folder." #~ msgstr "Erreur : ne peut pas fermer le répertoire courant." #~ msgid "Error : cannot go to parent folder." #~ msgstr "Erreur : ne peut pas entrer dans le répertoire parent." #~ msgid "" #~ "Please wait\n" #~ "Scanning disk..." #~ msgstr "" #~ "Veuillez patienter\n" #~ "Analyse le disque..." #~ msgid "Not yet implemeted!!" #~ msgstr "Pas encore implémenté!!" #~ msgid "Enter catalogue name" #~ msgstr "Entrer le nom du catalogue" #~ msgid "Add New Disk Image" #~ msgstr "Ajouter un nouveau disque" #~ msgid "Edit Description" #~ msgstr "Editer la description" #~ msgid "Edit Categories" #~ msgstr "Editer les catégories" #~ msgid "Change Volume Label" #~ msgstr "Changer le nom de volume" #~ msgid "Auto Mount On\n" #~ msgstr "Montage automatique activé\n" #~ msgid "Auto Mount Off\n" #~ msgstr "Montage automatique désactivé\n" #~ msgid "Explorer archive On\n" #~ msgstr "Explorer les archives activé\n" #~ msgid "Explorer Archive Off\n" #~ msgstr "Explorer les archives désactivé\n" gwhere-0.2.3/po/it.po0000644000175000017500000021214710472436222013042 0ustar bartbart# translation of it.po to # translation of it.po to # translation of it.po to # translation of it.po to # translation of it.po to # translation of it-0.1.6.po to # translation of it-0.1.6.po to # translation of it.po to # translation of it.po to # translation of it.po to # translation of last-it.po to # translation of last-it.po to # translation of it.po to # translation of it.po to # translation of it.po to # translation of new.it.po to # translation of it.po to # translation of it.po to # translation of gwhere.po to # Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. # , 2003 # , 2003 # , 2003 # , 2003 # , 2003 # , 2003 # , 2003 # , 2003 # , 2003 # , 2003 # , 2003 # , 2004. # , 2004. # , 2004. # , 2004. # , 2004. # , 2004. # , 2004. # , 2004. # , 2004. # , 2004. # , 2004. # Michele Petrecca , 2005. # msgid "" msgstr "" "Project-Id-Version: it\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2005-05-28 22:00+0200\n" "Last-Translator: Michele Petrecca\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.9.1\n" #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "Non posso ricevere i dati" #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "Connessione chiusa dal client\n" #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "Non posso trasmettere i dati" #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%.0f bytes" #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f Kb" #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f Mb" #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f Gb" #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f Tb" #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f Pb" #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f Hb" #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f Ib" #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "_OK" #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "_Cancella" #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Edita le categorie" #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "Lista delle categorie : " #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "Nome" #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "Descrizione" #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "Aggiorna" #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" "Permetti l'aggiornamento delle proprietà della categoria selezionata. Clicca " "sul pulsante Aggiungi/Aggiorna per salvare le modifiche." #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "_Rimuovi" #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" "Rimuovi la categoria selezionata dalla lista delle categorie. Questa " "categoria può essere rimossa solo se non c'è nessuna voce che la usa." #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "Nome categoria : " #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "Inserisci il nome della categoria." #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "Descrizione : " #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "Inserisci la descrizione della categoria." #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "Aggiungi / Aggiorna" #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "Salva le proprietà cambiate della categoria." #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Chiudi" #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Chiudi la finestra d'editazione delle proprietà delle categorie." #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "nessuna" #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "Rimuovi categoria" #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "Non posso rimuovere questa categoria.-E' usata da una voce." #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "Aggiungi" #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "Aggiorna" #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "_No" #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "Nascondi le operazioni sui file" #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "Mostra le operazioni sui file" #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "_Azione" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "_Espandi tutto" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "Espandi solo i _dischi" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "Ritrai tutto" #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "Edita le categorie" #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "Nessun catalogo è stato caricato : non posso editare le categorie" #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "_File" #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "_Nuovo" #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "Apri" #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "_Salva" #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "Salva con nome" #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "Chiudi" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "Importa" #: src/gui/gwmenufile.c:199 msgid "Export" msgstr "Esporta" #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "_Proprietà " #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "File _recenti" #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "Esci" #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Nuovo catalogo" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "Non c'è nessun plugin disponibile per il catalogo" #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "Vuoi salvare il catalogo :\n" "\n" #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Nuovo file" #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "Inserisci il nome del catalogo" #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "Apri catalogo" #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "Apri file" #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Chiudi file" #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "Nessun catalogo è stato caricato" #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "Spedisci file via e-mail" #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "" "Per favore configura le opzioni di posta nelle impostazioni prima di " "trasmettere l'e-mail." #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "Salva catalogo con nome" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "Il corrente catalogo non è stato salvato, non posso trasmetterlo" #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "Proprietà catalogo" #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "Salva catalogo" #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "Esci " #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "Importa catalogo da" #: src/gui/gwmenufilecallback.c:1231 msgid "Catalog imported" msgstr "Catalogo importato" #: src/gui/gwmenufilecallback.c:1233 msgid "Catalog is not imported" msgstr "Il catalogo non è importato" #: src/gui/gwmenufilecallback.c:1267 msgid "A catalog is already opened" msgstr "Un catalogo è già aperto" #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 msgid "Export catalog to" msgstr "Esporta catalogo in" #: src/gui/gwmenufilecallback.c:1291 msgid "Catalog exported" msgstr "Catalogo esportato" #: src/gui/gwmenufilecallback.c:1293 msgid "Catalog is not exported" msgstr "Il catalogo non è esportato" #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "Aiuto" #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "Altro" #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "_Opzioni" #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "Impos_tazioni" #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Nuovo" #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "Apri" #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "Salva" #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "Salva con nome" #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "Esci" #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Rinomina" #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Edita le descrizioni" #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "Proprietà " #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "Sposta in..." #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "Cancella disco" #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "Cambia etichetta di volume" #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "Rimuovi dal catalogo" #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "Edita file" #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "Non posso editare questo file!!\n" #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Rinomina catalogo" #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "Inserisci il nuovo nome del catalogo" #: src/gui/gwmenupopupcallback.c:121 msgid "Invalid filled catalog name" msgstr "Nome del catalogo inserito non valido" #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "Descrizione catalogo" #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Rinomina disco" #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "Inserisci il nuovo nome del disco" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "Il nome del disco già esiste nel catalogo corrente" #: src/gui/gwmenupopupcallback.c:374 msgid "No new disk name was filled" msgstr "Nessun nome del nuovo disco è stato inserito" #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "Inserisci la nuova etichetta di volume" #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "Descrizione disco" #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "Rinomina cartella" #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "Inserisci il nuovo nome della cartella" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "Il nome della cartella già esiste nell'attuale posizione" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "Nessun nome della cartella è stato inserito" #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "Descrizione cartella" #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "Rinomina file" #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "Inserisci il nuovo nome del file" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "Il nome del file già esiste nella cartella corrente" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "Nessun nome del nuovo file è stato inserito" #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "Descrizione file" #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Archivio" #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "Catalogo" #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "Chiusura catalogo" #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "Attendere prego..." #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Catalogo chiuso" #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "proprietario sconosciuto" #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "gruppo sconosciuto" #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Nuovo disco" #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "" "Seleziona il dispositivo che verrà aggiunto come disco al tuo catalogo." #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "Seleziona dispositivo : " #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "" "Inserisci il numero del nuovo disco. Questo numero può esserti d'aiuto per " "capire la 'storia' del catalogo." #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Archivio N# : " #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "" "Inserisci il nome del nuovo disco. Questo nome apparirà nel tuo catalogo." #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "Nome : " #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "Categoria : " #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "" "Seleziona la categoria da applicare al disco la quale verrà aggiunta (anche " "se l'opzione è spuntata)." #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "Fornisci il device file del dispositivo selezionato." #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Informazione : " #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "" "Fornisci il tipo di filesystem del dispositivo selezionato (ex : ext2, ext3, " "vfat, ntfs, ...)" #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Tipo : " #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "Visualizza se il dispositivo selezionato è montato o meno." #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "Montato : " #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "" "Fornisci il nome del volume del dispositivo selezionato (solo se montato)." #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Volume : " #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "" "Fornisci il numero seriale del dispositivo selezionato (solo se montato). " "Questo numero è il numero di identificazione del produttore." #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Numero seriale : " #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "" "Fornisci lo spazio utilizzato del dispositivo selezionato (solo se montato)." #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "Capacità : " #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "" "Fornisci lo spazio libero del dispositivo selezionato (solo se montato)." #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Spazio libero : " #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "Opzioni" #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "Visualizza informazioni" #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" "Visualizza le informazioni sul dispositivo selezionato : percorso, spazio " "libero, etichetta di volume,..." #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Automontaggio" #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" "Monta il dispositivo se esso non è montato. Dopo la scansione il dispositivo " "verrà smontato anche se era montato prima della scansione." #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "Eplora ad albero la struttura del dispositivo." #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "" "Mantieni questa opzione selezionata per esaminare tutte le informazioni sui " "file e sulle cartelle." #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "Esplora archivio dei files (.tar, .gz, .zip,...)" #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "Non ancora implementato!!\n" "Esplora tutto l'archivio come se fosse una directory. Gli Archivi sono files " "'tar' o 'gzip'." #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "Espella disco se possibile" #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" "Espella il disco se possibile (CD-ROM...), anche se il vassoio era chiuso. " "Ciò è possibile solo se è abilitato l'automount!!" #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "Imposta ricorsivamente le categorie" #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "" "Applica la categoria selezionata a tutti le voci nel disco da aggiungere " "(disco, cartelle, files)." #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "Descrizione automatica" #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "" "Crea una descrizione automatica del file(formato del file, dimensione " "immagine per il formato .xmp o .jpg, etc...)." #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "Utilizza un modello avanzato per generare il nome del disco" #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Puoi riempire etichette addizionali per generare un nome del disco con le " "info del disco :\n" "- %% : %\n" "- %n : numero archivio (puoi usare un prefisso preceduto dallo 0 : %.4n dai " "0001, 0002, 0003, ..., 0091 ...\n" "- %l : etichetta di volume del disco\n" "- %t : tipo disco\n" "- %s : numero seriale" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "" "Usa il nome dell'etichetta di volume come nome disco (solo quando la casella " "nome disco è vuota)" #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" "Se non hai inserito il nome del disco e se il dispositivo selezionato ha " "un'etichetta di volume, questa etichetta sarà applicata al nome del disco." #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "Aggiungi disco" #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Gestione" #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "Il disco non è stato aggiunto : non ci sono dispositivi montati." #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "Il disco non è stato aggiunto : impossibile montare il dispositivo" #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "Aggiungi nuovo disco" #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "Inserisci il nome del disco" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "Analisi in corso" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "Aggiunta disco in corso" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "Attendere prego...." #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "Il disco è stato aggiunto" #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Montaggio dispositivo fallito\n" #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Numero seriale : " #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "Nessuna periferica" #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "sconosciuto" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Si" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "No" #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "Nessuna etichetta" #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Nome volume : " #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "L'aggiunta disco è annullata" #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "Per favore seleziona un nome del catalogo\n" #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "Cerca : " #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "Cerca" #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "La ricerca distingue lettere maiuscole e minuscole (case sensitive) e " "supporta caratteri speciali \"*\".\n" "Esempio : *.img *.bmp o *.htm\n" "La ricerca della parola chiave accetta un elenco di parole obbligatorie." #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "Pulisci" #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "Pulisce tutti i risultati della ricerca." #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "Maiuscole/minuscole" #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "La ricerca può essere condotta o meno in maniera case-sensitive. Se si opta " "per il case sensitive occorre ricordare che \"File.txt\" è diverso da \"file." "txt\". Se si opta per il non case-sensitive i due file corrisponderanno " "anche se il loro contenuto è differente." #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "Cerca per tipo" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "Parole chiavi" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "" "Inserisci un elenco di parole chiavi che potrebbero essere contenute nei " "nomi-files." #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "Caratteri jolly" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "" "Inserisci la stringa di caratteri jolly. Questa stringa puo contenere " "caratteri come \"?\" e \"*\"." #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "Espressione regolare" #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "" "C'è la possibilità di usare un'espressione regolare. Vedere la " "documentazione per ulteriori informazioni." #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "File" #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "La ricerca trova file con il nome indicato." #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "Cartella" #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "La ricerca trova le cartelle con il nome indicato." #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "Disco" #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "La ricerca trova i dischi con il nome indicato." #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "Categoria" #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "La ricerca trova le categorie con il nome indicato." #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "La ricerca trova elementi comuni alla descrizione." #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "Cerca nel catalogo" #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "%lu voce(i) trovata(e)" #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "Risultato ricerca" #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "Nessuna voce corrispondente." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "Ricerca in corso..." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "Non posso avviare la ricerca : nessun catalogo è stato caricato" #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "_Ok" #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "Inserisci il nome del catalogo." #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "Versione : " #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "Versione " #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr "realizzato con " #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "Dischi nel catalogo : " #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "Dischi nel catalogo : %d" #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Files totali : " #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, c-format msgid "Total Files : %ld" msgstr "File totali : %ld" #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "Cartelle totali : " #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, c-format msgid "Total Folders : %ld" msgstr "Cartelle totali : %ld" #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "Dimensione file : " #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Spazio totale di immagazzinamento : " #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "Spazio utilizzato : " #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "Spazio libero totale : " #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "Statistiche disco : " #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "CD-ROM : " #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "CD-ROM : %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "Audio CD : " #: src/gui/gwpropertiesbox.c:577 #, c-format msgid "Audio CD : %d" msgstr "Audio CD : %d" #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "HD : " #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "HD : %d" #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "Floppy : " #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "Floppy : %d" #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip : " #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip : %d" #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 msgid "Tape : " msgstr "Tape : " #: src/gui/gwpropertiesbox.c:649 #, c-format msgid "Tape : %d" msgstr "Tape : %d" #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "Rete : " #: src/gui/gwpropertiesbox.c:666 #, c-format msgid "Network : %d" msgstr "Network : %d" #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 msgid "Jaz : " msgstr "Jaz : " #: src/gui/gwpropertiesbox.c:683 #, c-format msgid "Jaz : %d" msgstr "Jaz : %d" #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "Altro : " #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "Altro : %d" #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Categorie del catalogo : " #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "Descrizione del catalogo : " #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Informazioni sul catalogo" #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "Inserisci il nome del disco." #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "Inserisci il numero dell'archivio del disco." #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr " Tipo : " #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "Numero seriale : " #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "Etichetta volume : " #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "Capacià totale : " #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "Spazio utilizzato : " #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "Spazio libero : " #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "Nome del catalogo : " #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "Aggiornamenti nel catalogo : " #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "Descrizione del disco : " #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Informazioni sul disco : " #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "Nome cartella" #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Tipo : (cartella)" #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "Dimensione cartella : " #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "Creato il : " #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "Ultima modifica : " #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "Ultimo accesso : " #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Diritti : " #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "Proprietario : " #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "Gruppo : " #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "Nome del disco : " #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "Posizione nel disco : " #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "Descrizione della cartella : " #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Informazioni sulla cartella" #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "Nome file : " #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Tipo file : non ancora implementato" #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "DImensione file : %s (%s bytes)" #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "Descrizione del file : " #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Informazione file" #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "File del catalogo" #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Livello compressione del catalogo :" #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "" "Seleziona il livello di compressione del catalogo. Il valore preimpostato è " "3, ed è un buon compromesso tra un'alta performance e una dimensione " "abbastannza ridotta del catalogo." #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Cataloghi aperti di recente : " #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "" "Seleziona la dimensione aperta di recente nella storia dei cataloghi. Il " "valore di default è 5." #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "Cancella cronistoria" #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "Clicca qui per cancellare lo storico dei file aperti di recente." #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Carica automaticamente il catalogo" #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "Carica il catalogo di default automaticamente all'avvio." #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "Carica l'ultimo catalogo aperto." #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "Carica il catalogo selezionato." #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "" "Inserisci il percorso completo del catalogo da caricare (compreso il nome " "file)." #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "Seleziona catalogo" #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "Clicca qui per leggere e selezionare un catalogo." #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "Seleziona catalogo da caricare automaticamente" #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "Esplora" #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "Scegli Maiuscole/minuscole" #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "" "Il risultato della ricerca è case sensitive (distinzione Maiuscole/" "minuscole)." #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Genere di gruppo risultato entro cartella/file." #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" "Il risultato della ricerca può essere raggruppato in voci tipo. Se questa " "opzione viene scelta, tutte le voci saranno raggruppate per cartelle o file." #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Autodimensionamento colonne" #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "Autodimensiona tutta la colonna." #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "Dischi" #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "Mostra" #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Nascondi" #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "Mostra" #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "Nascosto" #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Files" #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "Il risultato generato dalla ricerca è case sensitive." #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Genere di gruppo risultato in tipo." #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" "Il risultato della ricerca può essere raggruppato da voci tipo. Se questa " "opzione viene scelta tutto l'articolo sarà raggruppato da cataloghi, dischi, " "cartelle e files." #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "Tutte le parole chiavi devono eguagliarsi" #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" "Scegli se tutte le parole chiavi o solo una di esse devono eguagliarsi con " "la voce allo scopo di finire nel risultato della ricerca." #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "Veloce" #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "Opzioni generali" #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "GUI" #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "Salva proprietà della GUI all'uscita" #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "Salva proprietà della GUI (posizione e dimensione della finestra)." #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "Notifica sonora" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "Consenti notifica con un corto suono in alcuni eventi." #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Posta" #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "Indirizzo e-mail : " #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "Inserisci il tuo indirizzo e-mail." #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "server mail : " #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "" "Inserisci il tuo server mail. Solitamente questo indirizzo è del tipo mail." "miodominio.com" #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Numero porta del server :" #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "" "Inserisci il numero della porta d'uscita del server mail (la più comune è la " "25)." #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "" "Questo riquadro consente di configurare alcune proprietà e funzionalità del " "programma." #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "Parametri" #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "Seleziona la sezione da configurare." #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "" "Cambia in questo pannello tutte le proprietà disponibili al fine di avere il " "programma come lo 'vuoi tu'." #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "" "Questo riquadro permette di configurare il programma. Alcune proprietà " "potranno essere modificate qui." #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "" "Clicca sul pulsante OK per applicare i cambi e chiudere la finestra dei " "parametri." #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "" "Clicca sul pulsante Cancella per chiudere la finestra dei settaggi senza " "applicare i cambi." #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "_Applica" #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "" "Clicca sul pulsante Applica per imporre i cambiamenti (senza chiudere la " "finestra di settaggio)." #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "Parametri modificati" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "" "Se non salvi i cambiamenti perderai tutti i parametri modificati. Vuoi " "applicare i cambiamenti?." #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], dischi in totale : %d" #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr "Voci elencate : %d (dimensione totale : %s)" #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], capacità : %s, libero : %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr "Disco vuoto" #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr "Voce selezionata : %d (dimensione totale : %s)" #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr "Cartella \"%s\", %s (files %d sottocartelle %d)" #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr " %s, %s, %s" #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr "Voce selezionata : %d" #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr " Esplora catalogo" #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr " Motore di ricerca" #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr " Gestione catalogo" #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Chiudi catalogo" #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "Spedisci catalogo via e-mail" #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "A proposito di..." #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "Gestione dei cataloghi per dispositivi removibili\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" "Gwhere permette di creare e gestire un database dei tuoi CD e di altri " "dispositivi removibili come hard disk, floppy drive, Zip drive, CD-ROM, " "etc...). Con GWHERE è facile leggere i contenuti dei tuoi CD ed è anche " "possibile fare veloci ricerche senza alcuna necessità di inserire i CD in " "tuo possesso nel lettore." #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Gira sotto " #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "" "Questo box ti consente di spedire un catalogo via e-mail ad uno o più " "contatti." #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "Spedisci posta" #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "A : " #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "CC : " #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "BCC : " #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "Soggetto :" #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "Inserisci qui l'indirizzo (gli indirizzi) e-mail." #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "Inserisci qui l'indirizzo e-mail dei contatti di posta copiati." #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "" "Inserisci qui l'indirizzo e-mail dei contatti di posta copiati e nascosti." #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "Inserisci qui l'oggetto della tua e-mail." #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "File aggiunto :" #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "Scegli di aggiungere o meno il file-catalogo." #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "Scrivi qui il testo del messaggio di posta." #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "_Spedisci" #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "Clicca qui per spedire una e-mail (con un file-catalogo aggiunto)." #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "Clicca qui per annullare l'invio di posta." #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "Invio della posta, attendere prego..." #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "" "Un errore è avvenuto durante la spedizione della posta. Per favore verifica " "i settaggi dei parametri." #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Non ho trovato il file pixmap : %s" #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "Errore nel caricamento del file pixmap : %s" #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "Errore : non posso aprire la cartella corrente." #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "Errore : non posso andare a leggere la cartella" #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "Il disco non e stato aggiunto\n" "L'aggiunta è annullata per l'utente" #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "Il disco non è stato aggiunto\n" #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "" "%s al di fuori dello spazio di indirizzamento di allocazione dei processi" #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" "Un componente del seguente nome del percorso eccede %d caratteri oppure un " "intero nome del percorso eccede i %d caratteri : %s" #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "La directory seguente non esiste : %s" #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "Memoria insufficiente per completare l'operazione." #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "Un componente nel percorso indicato non è una directory : %s" #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "" "Troppi collegamenti simbolici sono stati incontrati nella risoluzione del " "seguente percorso : %s." #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "Un errore di I/O è avvenuto nel cambiare directory in : %s" #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "Errore sconosciuto" #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" "Il disco non è stato aggiunto\n" "Errore : impossibile andare alla cartella genitrice." #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Eccessivi descrittori file in uso dal processo." #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Troppi files sono attualmente aperti nel sistema." #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "" "La seguente directory non esiste, oppure il nome è una stringa vuota : %s." #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "Il nome seguente non è una directory : %s." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" "Un errore critico è avvenuto durante l'estrazione delle informazioni del " "file %s%s%s.\n" "Salva il catalogo se è possibile, esci da GWhere e invia questo problema al " "team di GWhere per favore." #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" "Il disco non è stato aggiunto\n" "Errore : impossibile chiudere la cartella corrente." #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "Sta girando su : %s" #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Catalogo caricato" #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "Caricamento catalogo fallito" #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "Caricamento catalogo" #: src/gwapplicationmanager.c:499 msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "" "Il catalogo indicato non esiste oppure il nome non è corretto. Verifica il " "corretto percorso per favore." #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "Salvataggio catalogo" #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Catalogo salvato" #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "Salvataggio catalogo fallito" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Diritti" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "Proprietario" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "Gruppo" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "Dimensione" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "INode" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Data d'accesso" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Data di modifica" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "Data di creazione" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "Nome del file-system" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "Percorso d'accesso" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Archivio N#" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Tipo" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Nome volume" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "Capacità totale" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "Spazio libero" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Data" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Numero seriale" #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "Percorso" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "Completo" #: win32/config.h:288 msgid "Compact" msgstr "Compatto" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (richiesto)" #: win32/config.h:290 msgid "Main engine application." msgstr "Principale motore dell'applicazione" #: win32/config.h:291 msgid "GTK+ 2.6 RunTime (required)" msgstr "GTK+ 2.6 RunTime (richiesto)" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "RunTime for GUI environment." #: win32/config.h:293 msgid "Plugins" msgstr "Plugins" #: win32/config.h:294 msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "" "Plugins per l'estensione delle funzionalità (descrizione dei file e " "importazione/esportazione dei cataloghi)." #: win32/config.h:295 msgid "Languages Files" msgstr "Pacchetto Lingua" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "Tutti i files di linguaggio per la traduzione del programma." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "" "E' installata una precedente versione di GWhere. Per installare la corrente " "versione devi prima disinstallare la vecchia." #: win32/config.h:298 msgid "Installer already running" msgstr "Installazione in corso..." #: win32/config.h:299 msgid "Install options" msgstr "Opzioni installazione" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "Quali utenti possono lanciare GWhere ?" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "Diritti d'accesso" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" "GWhere può essere installato per tutti gli utenti o solo per l'utente " "corrente. Seleziona, per favore, per chi vuoi installare GWhere." #: win32/config.h:303 msgid "All users|Current user" msgstr "Tutti gli utenti|Utente corrente" #: win32/config.h:304 msgid "All users" msgstr "Tutti gli utenti" gwhere-0.2.3/po/cs-windows-1250.po0000644000175000017500000020237510472436217015116 0ustar bartbartmsgid "" msgstr "" "Project-Id-Version: 0.1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2003-08-20 17:56+0200\n" "Last-Translator: Thomas Navara \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=windows-1250\n" "Content-Transfer-Encoding: 8bit\n" #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "Nemohu obdržet data" #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "Spojení ukonèeno klientem\n" #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "Nemohu odeslat data" #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%.0f bytù" #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f Kb" #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f MB" #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f GB" #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f TB" #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f PB" #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f HB" #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f IB" #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "_OK" #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "_Zrušit" #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Editovat kategorie" #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "Seznam kategorií : " #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "Jméno" #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "Popis" #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "_Aktualizovat" #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "Umožnuje aktualizovat vlastnosti oznaèené kategorie. Kliknìte na Pøidat/Aktualizovat pro uložení zmìn." #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "_Odstranit" #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "Odstraní zvolenou kategorii ze seznamu. Kategorie mùže být odstranìna pouze když není používána." #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "Jméno kategorie : " #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "Jméno kategorie." #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "Popis : " #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "Vložte popis kategorie." #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "Pøidat / Aktualizovat" #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "Uložit vlastnosti kategorie." #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Zavøít" #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Zavøít okno s nastavením kategorií." #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "žádný" #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "Odstranit kategorii" #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "Kategorie je používána, nemohu ji odstranit" #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "Pøidat" #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "Aktualizovat" #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "_Ne" #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "Skrýt operace se soubory" #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "Ukázat akce se soubory" #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "_Akce" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "_Rozvinout vše" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "Rozvinout _disky" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "Svinout vše" #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "Editovat _kategorie" #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "Žádný katalog není otevøený : nemohu editovat kategorie" #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "Soubor" #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "_Nový" #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "_Otevøít" #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "_Uložit" #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "Uložit _jako" #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "_Zavøít" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "" #: src/gui/gwmenufile.c:199 msgid "Export" msgstr "Exportovat" #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "_Vlastnosti" #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "N_aposledy otevøené" #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "_Konec" #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Nový katalog" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "" #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "Chcete uložit katalog :\n" "\n" #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Nový soubor" #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "Vložte jméno katalogu" #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "Otevøít katalog" #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "Otevøít soubor" #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Zavøít soubor" #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "Není otevøen katalog" #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "Poslat soubor e-mailem" #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "Prosím nastavte v nastavení parametry pro odesílání e-mailù." #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "Uložit jako katalog" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "" #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "Vlastnosti katalogu" #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "Uložit katalog" #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "Konec " #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "" #: src/gui/gwmenufilecallback.c:1231 msgid "Catalog imported" msgstr "Katalog importován" #: src/gui/gwmenufilecallback.c:1233 msgid "Catalog is not imported" msgstr "Katalog nebyl importován" #: src/gui/gwmenufilecallback.c:1267 msgid "A catalog is already opened" msgstr "Katalog je již otevøen" #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 msgid "Export catalog to" msgstr "Exportovat katalog do" #: src/gui/gwmenufilecallback.c:1291 msgid "Catalog exported" msgstr "Katalog exportován" #: src/gui/gwmenufilecallback.c:1293 msgid "Catalog is not exported" msgstr "Katalog nebyl exportován" #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "_Pomoc" #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "_O programu" #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "_Možnosti" #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "_Nastavení" #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Nový" #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "Otevøít" #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "Uložit" #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "Uložit jako" #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "Konec" #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Pøejmenovat" #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Zmìnit popis" #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "Vlastnosti" #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "Vejít..." #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "Smazat disk" #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "Zmìnit jméno svazku" #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "Odstranit z katalogu" #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "Editovat soubor" #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "Nemohu editovat tento soubor!!\n" #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Pøejmenovat katalog" #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "Vložte nové jméno pro katalog" #: src/gui/gwmenupopupcallback.c:121 msgid "Invalid filled catalog name" msgstr "Vyplnìno špatné jméno katalogu" #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "Popis katalogu" #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Pøejmenovat disk" #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "Vložte nové jméno disku" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "V aktuálním katalog již je disk tohoto jména" #: src/gui/gwmenupopupcallback.c:374 msgid "No new disk name was filled" msgstr "Nebylo vyplnìno jméno nového disku" #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "Vložte nové jméno svazku" #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "Popis disku" #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "Pøejmenovat složku" #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "Vložte nové jméno složky" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "Zadabá složka již existuje" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "Nevyplnìno jméno složky" #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "Popis adresáøe" #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "Pøejmenovat soubor" #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "Vložte nové jméno souboru" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "Tento soubor v adresáøi již existuje" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "Nevyplnìno jméno souboru" #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "Popis souboru" #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Archív" #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "Katalog" #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "Zavøít katalog" #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "Prosím poèkejte..." #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Katalog zavøen." #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "neznámý vlastník" #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "neznámá skupina" #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Nový disk" #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "Zvolte médium pro vložení do katalogu jako disk." #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "Vyberte médium : " #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "Vložte èíslo nového disku. Pomáhá udržet pøehled o katalogu." #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Archív è. : " #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "Vložte jméno nového disku - tak se bude zobrazovat v katalogu" #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "Jméno : " #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "Kategorie : " #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "Vyberte kategorii, do které bude disk pøidán (i když je volba zaškrtnuta)." #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "Vložte jméno zaøízení zvoleného média." #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Info : " #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "Vložte typ zvoleného média (napø. ext2, ext3, vfat, ntfs,...)." #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Typ : " #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "Zobrazuje jestli je médium pøipojeno nebo ne." #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "Pøipojen : " #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "Jméno svazku zvoleného média (je-li pøipojen)." #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Svazek : " #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "Sériové èíslo média (je-li pøipojen). Je to výrobní èíslo." #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Sériové èíslo : " #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "Kapacita média (je-li pøipojen)." #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "Kapacita : " #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "Volné místo na médiu (je-li pøipojen)." #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Volné : " #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "Volby" #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "Zobrazit informace" #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "Zobrazí informace o zvoleném zaøízení - bod pøipojení, kapacitu, volné místo, popis,..." #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Automatické pøipojování" #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "Pøipojí médium pokud nebyl, odpojí ho po skenování (i pokud byl pøedtím pøipojen)." #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "Prozkoumá strukturu disku." #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "Pøi zakšrtnutí prohlíží všechny adresáøe a informace o souborech." #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "Prohledávat archivy (.tar, .gz, .zip,...)" #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "Funkce není implementována!!\n" "Prochází archivy jako by to byly adresáøe." #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "Vysune médium, je-li to možné." #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "Vysune médium (CD-ROM, zip,...) i pokud jsou zavøena dvíøka. Je to možné pouzeje-li zapnut automount !" #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "Nastavit kategorii rekuzivnì" #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "Nastaví zvolenou kategorii všem položkám disku (adresáøe)." #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "Automatický popis" #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "Automatické vytvoøení popisu (formát souboru, velikost obrázku,...)" #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "Použít pokroèilé vzorky pro generování jména disku" #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Mùžete pøidat další tagy pro vygenerování jména disku z informací o disku: \n" "- %% : %\n" "- %n : èíslo archivu (mùžete použít poèet èíslic pro doplnìní 0 : %.4n give 0001, 0002, 0003, ..., 0091, ...\n" "- %l : jméno média\n" "- %t : typ média\n" "- %s : sériové èíslo" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "Použít jméno média jako jméno disku" #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "Pokud nezadáte jméno disku a médium bude obsahovat jméno svazku,použije se to jako jméno disku." #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "Pøidat disk" #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Správa" #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "Disk nebyl pøidán : nejsou pøipojená média" #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "Disk nebyl pøidán : není možné pøipojit zaøízení" #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "Pøidat nový disk" #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "Vložte jméno disku" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "Naèítám" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "Naèítá se disk" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "Prosím poèkejte" #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "Disk byl pøidán" #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Pøipojení selhalo\n" #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Sériové èíslo : " #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "žádný disk" #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "neznámá" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Ano" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "Ne" #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "Žádné jméno" #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Jméno svazku : " #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "pøidávání disku zrušeno" #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "Prosím zvolte jméno katalogu\n" #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "Hledat : " #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "Hledat" # #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "Vyhledávání mùže být citlivé na velikost znakù. Hledaná slova podporují znaky\"*\".\n" "Napøíklad: img*.bmp lub *.htm\n" "Hledání klíèových slov pøijímá seznam povinných slov." # #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "Smazat" # #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "Smazat výsledky hledání" #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "Rozlišovat velikost písmen" #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "Vyhledávání mùže/nemusí rozlišovat malá/velká písmena.\n" "V pøípadì zapnuté citlivosti \"Soubor.txt\" není \"soubor.txt\", pøi vypnutém rozlišování je nalezen." # #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "Typ hledání" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "Klíèová slova" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "Vložte klíèová slova, která musí být obsažena v souborech." #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "Zástupné znaky" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "Vložte celé jméno souboru vèetnì zástupných znakù.Vzorek mùže obsahovat znaky \"?\" and \"*\" " # #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "Regulární výrazy" #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "Umožnuje používat regulární výrazu. Více najdete v dokumentaci." #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "Soubor" #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "Hledat v jménech souborù." #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "Adresáø" #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "Hledat v jménech adresáøù." #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "Disk" #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "Hledat v jmenéch diskù." #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "Kategorie" #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "Hledat v kategorie." #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "Hledat v popisech." #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "Hledat v katalogu" #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "nalezeno %lu položek." #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "Výsledky hledání" #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "Žádné položky nenalezeny." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "Hledám..." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "Nemohu zaèít hledat : není otevøen žádný katalog" #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "_Ok" #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "Vložte jméno katalogu." #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "Verze : " #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "Verze : " #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr " sestaveno s " #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "Diskù v katalogu : " #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "Diskù v katalogu : %d" #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Souborù : " #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, c-format msgid "Total Files : %ld" msgstr "Souborù : %d" #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "Adresáøù : " #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, c-format msgid "Total Folders : %ld" msgstr "Adresáøù : %d" #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "Soubory : " #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Kapacita : " #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "Obsazeno : " #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "Volné : " #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "Statistika : " #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "CD-ROM : " #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "CD-ROM : %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "" #: src/gui/gwpropertiesbox.c:577 #, c-format msgid "Audio CD : %d" msgstr "Audio CD : %d" #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "HDD : " #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "HDD : %d" #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "Disketa : " #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "Disket : %d" #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip : " #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip : %d" #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 msgid "Tape : " msgstr "Páska : " #: src/gui/gwpropertiesbox.c:649 #, c-format msgid "Tape : %d" msgstr "Páska : " #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "" #: src/gui/gwpropertiesbox.c:666 #, c-format msgid "Network : %d" msgstr "Sí : %d" #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 msgid "Jaz : " msgstr "Jaz : " #: src/gui/gwpropertiesbox.c:683 #, c-format msgid "Jaz : %d" msgstr "Jaz : %d" #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "Jiné : " #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "Jiné : %d" #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Kategorie katalogu : " #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "Popis katalogu : " #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Informace o katalogu" #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "Vložte jméno disku." #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "Vložte èíslo disku." #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr " Typ : " #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "Sériové èíslo : " #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "Jméno svazku : " #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "Kapacita : " #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "Obsazeno : " #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "Volné : " #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "Jméno katalogu : " #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "Aktualizace : " #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "Popis disku : " #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Informace o disku" #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "Jméno adresáøe" #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Typ : (adresáø)" #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "Velikost : " #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "Vytvoøen : " #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "Zmìnìn : " #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "Poslední pøístup : " #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Práva : " #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "Vlastník : " #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "Skupina : " #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "Jméno disku : " #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "Cesta : " #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "Popis adresáøe : " #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Informace o složce" #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "Jméno souboru : " #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Typ souboru : funkce není implementována!!" #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "Velikost : %s (%ld bajtù)" #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "Popis souboru : " #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Informace o souboru" #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "Soubor katalogu" #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Úroveò komprese katalogu :" #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "Zvolte úroveò komprese souboru. Bìžnì je 3, což je kompromis rychlosti a velikosti." #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Naposled otevøené soubory :" #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "Zvolte velikost historie otevøených souborù. Bìžnì je 5." #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "Vyèistit historii" #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "Kliknìte pro otevøení historie naposled otevøených souborù." #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Automaticky nahrát katalog" #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "Automaticky nahraje katalog pøi spuštìní." #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "Nahrát naposled otevøený soubor." #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "Nahrát zvolený katalog." #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "Vložte celou sestu k souboru." #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "Zvolit katalog" #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "Kliknìte pro zvolení souboru katalogu." #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "Zvolit automaticky nahrávaný katalog" #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "Prùzkumník" # #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "Rozlišovat velikost písmen" #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "Výsledek seøazený v prohlížeèi je citlivý na velikost znakù." #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Výsledek seøazený podle adresáøe/souboru." #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "Výsledek seøazený v prohlížeèi mùže být ve skupinách podle typu objektu.Pokud je tato volba zaškrtnuta, všechny objekty budou seskupeny podle adresáøù nebo souborù." #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Mìnit velikost sloupcù automaticky" #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "Automaticky mìní velikost sloupcù." #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "Disky" #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "Viditelný" #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Schovat" #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "Ukázat" #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "Schovaný" #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Soubory" #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "Výsledek øazení pøi hledání je citlivý na velikost znakù." #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Výsledky seøazené podle typu." #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "Výsledek mùže být seøazen podle typu objektu. Pokud je tato volba zaškrtnuta všechny objekty budou seøazeny podle kategorií, diskù, adresáøù a souborù." #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "Všechna klíèová slova musí souhlasit" #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "Zvolte, jestli musí souhlasit všechna klíèová slova nebo staèí pouze jedno aby byl výsledek nalezen." # #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "Rychle" #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "Všeobecné nastavení" #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "GUI" #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "Uložit vlastnosti GUI pøi odchodu." #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "Uloží prostøedí (velikosti a pozice oken)." #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "Povolit zvuk" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "Povolit krátké pípnutí pøi nìkterých událostech." #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Pošta" #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "E-mailová adresa :" #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "Vložte svoji e-mail adresu." #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "Server pro odchozí poštu :" #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "Vložte adresu Vašeho SMTP serveru pro odchozí poštu. Napø. smtp.example.com" #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Port serveru :" #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "Vložte èíslo portu SMTP serveru (typicky 25)." #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "Toto okno umožnuje nastavit nìkteré funkce a vlastnosti programu." #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "Nastavení" #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "Zvolte sekci nastavení." #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "Použijte panely k nastavení programu podle vašich pøedstav." #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "Toto okno umožnuje nastavit nìkteré vlastnosti programu." #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "Kliknìte na OK pro uložení zmìn a zavøení okna." #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "Kliknìte na Zrušit pro zavøení okna (bez ukládání zmìn)." #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "_Použij" #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "Kliknìte na Použij pro použití zmìn (bez zavøení okna)." #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "Nastavení zmìnìno" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "Pokud neuložíte zmìny, pøijdete o nì. Chcete uložit zmìny ?" #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], celkem diskù: %d" #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr " Vybrané objekty: %d (velikost : %s)" #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], kapacita : %s, volné : %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr "" #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr " Zvolený objekt: %d (celkem : %s)" #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr " Adresáø \"%s\", %s (souborù %d, složek %d)" #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr " %s, %s, %s" #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr " Zvolený objekt : %d" #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr " Prùzkum katalogu" #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr " Vyhledávání" #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr " Správa katalogu" #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Zavøít katalog" #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "Poslat katalog e-mailem" #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "O programu" # #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "Správa katalogu výmìnných médií\n" "Od Sébastiena LECACHEURa\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "GWhere slouží k uchování obsahu CD a dalších médií(HDD, floppy, zip,...). Potom mùžete procházet databázia vyhledávat soubory bez nutnosti vložit CD do mechaniky." #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Bìží na " #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "Toto okno umožnuje poslat katalog e-mailem." #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "Poslat e-mail" #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "Pro :" #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "CC :" #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "BCC :" #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "Pøedmìt :" #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "Adresát(i)." #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "Adresát(i) kopií." #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "Adresát(i) skrytých kopií." #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "Nadpis e-mailu" #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "Pøíloha :" #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "Zvolte katalog pro pøipojení k e-mailu." #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "Text zprávy." #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "_Poslat" #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "Kliknìte pro odeslání e-mailu (s pøiloženým katalogem)." #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "Kliknìte pro zrušení e-mailu." #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "Odesílám e-mail, poèkejte..." #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "Bìhem odesílání došlo k chybì. Prosím, zkotrolujte nastavení." #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Nemohu najít obrázek: %s" #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "Nemohu nahrát obrázek: %s" #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "Chyba : nemohu otevøít aktuální adresáø." #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "Chyba: nemohu vejít do pracovního adresáøe." #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "Disk nebyl pøidán\n" "Operace zrušena uživatelem" #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "Disk nebyl pøidán\n" #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "%s mimo alokovaný adresní prostor programu." #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "Komponenta následující cesty pøekroèila %d znakù nebocelá cesta pøekroèila %d znakù : %s." #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "Následující adresáø neexistuje: %s." #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "Nedostatek pamìti pro dokonèení operace." #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "Komponenta prefixu cesty není adresáø: %s." #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "Pøíliš mnoho symbolických odkazù pøi rozlišování cesty: %s." #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "Chyba I/O pøi zmìnì adresáøe do : %s." #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "Neznámá chyba" #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" "Disk nebyl pøidán\n" "Chyba : nemohu pøejít do nadøazeného adresáøe." #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Pøíliš mnoho souborù otevøených procesem." #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Pøíliš mnoho otevøených souborù v systému." #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "Adresáø neexistuje nebo jeho jméno je prázdný øetìzec : %s." #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "Následující jméno není adresár : %s." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" "Disk nebyl pøidán\n" "Chyba : není možné opustit aktuální adresáø." #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "Bìží pod %s" #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Katalog naèten" #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "Chyba pøi otvírání katalogu" #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "Otevírám katalog" #: src/gwapplicationmanager.c:499 msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "Soubor katalogu neexistuje, zkontrolujte prosím cestu k souboru." #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "Ukládám katalog" #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Katalog uložen" #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "Chyba pøi ukládání katalogu" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Práva" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "Vlastník" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "Skupina" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "Velikost" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "INode" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Poslední pøístup" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Zmìna" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "Vytvoøen" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "Jméno systému souboru" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "Cesta" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Archív è." #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Typ" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Jméno svazku" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "Kapacita" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "Volné" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Datum" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Sériové èíslo" #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "Cesta" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "Plný" #: win32/config.h:288 msgid "Compact" msgstr "Kompaktní" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (vyžadován)" #: win32/config.h:290 msgid "Main engine application." msgstr "Aplikace." #: win32/config.h:291 #, fuzzy msgid "GTK+ 2.6 RunTime (required)" msgstr "GTK+ 2.0 knihovny (vyžadovány)" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "Knihovny pro GUI prostøedí." #: win32/config.h:293 msgid "Plugins" msgstr "Pluginy" #: win32/config.h:294 #, fuzzy msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "Pluginy pro extrakci informací ze souborù." #: win32/config.h:295 msgid "Languages Files" msgstr "Jazyky prostøedí" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "Všecny jazykové soubory pro pøeklad." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "" #: win32/config.h:298 msgid "Installer already running" msgstr "" #: win32/config.h:299 #, fuzzy msgid "Install options" msgstr "Všeobecné nastavení" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" #: win32/config.h:303 msgid "All users|Current user" msgstr "" #: win32/config.h:304 msgid "All users" msgstr "" #~ msgid "" #~ "The catalog file doesn't exists. Check your catalog file path please." #~ msgstr "Soubor katalogu neexistuje, zkontrolujte prosím cestu k souboru." #~ msgid "" #~ "The catalog file to load doesn't have a good file extension. Only .ctg " #~ "files are allowed to be loaded." #~ msgstr "Soubor katalogu má špatnou pøíponu,mohu naèíst jen .ctg soubory." #~ msgid "Load file" #~ msgstr "Nahrát soubor" #~ msgid "Error : cannot open this file." #~ msgstr "Chyba : nemohu otevøít soubor" #~ msgid "Error : cannot read the file version." #~ msgstr "Chyba : nemohu pøeèíst verzi souboru" #~ msgid "Load catalog" #~ msgstr "Nahrát katalog" #~ msgid "Error : cannot close file." #~ msgstr "Chyba : nemohu zavøít soubor." #~ msgid "Error : it's not a GWhere file." #~ msgstr "Chyba: soubor není ve formátu GWhere." #~ msgid "Error : this GWhere version file is unknown." #~ msgstr "Chyba : neznámá verze souboru GWhere." #~ msgid "Error : cannot close this file after loading." #~ msgstr "Chyba: nemohu zavøít soubor po otevøení." #~ msgid "Error : during the loading of disk." #~ msgstr "Chyba : bìhem nahrávání disku." #~ msgid "Error : cannot create file." #~ msgstr "Chyba : není možné vytvoøit soubor." #~ msgid "Error : cannot write file version." #~ msgstr "Chyba : není možné zapsat verzi souboru." #~ msgid "Error : cannot close catalog file." #~ msgstr "Chyba : není možné zavøít katalog." #~ msgid "Elapsed time to save the catalog : %d secs" #~ msgstr "Vypršel èas pro uložení katalogu : %d sec" #~ msgid "" #~ "Give the device file of the selected disk. The device file is the one of " #~ "the /etc/fstab file." #~ msgstr "Jméno zaøízení disku (jeden ze /etc/fstab)." #~ msgid "Scan disk" #~ msgstr "Naèíst disk" #~ msgid "unkown" #~ msgstr "neznámá" gwhere-0.2.3/po/es.nsh0000644000175000017500000000345310256616233013207 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ;This file has been translated by Victor G. MARIMON (mailto:vgmarimon@terra.es) !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_SPANISH} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (requerido)" LangString DESC_SecCopyUI ${CURLANG} "Motor aplicacion principal." LangString TITLE_SecCopyGTK ${CURLANG} "GTK+ 2.6 Runtime (requerido)" LangString DESC_SecCopyGTK ${CURLANG} "Runtime para entorno GUI." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Plugins" LangString DESC_SecCopyPLUGINS ${CURLANG} "Plugins para autoextracción de las descripciones de fichero y plugins para/importar y exportar catálogos." LangString TITLE_SecCopyLANG ${CURLANG} "Ficheros de idioma" LangString DESC_SecCopyLANG ${CURLANG} "Todos los ficheros de idioma para la traduccion del programa." LangString UninstBefore ${CURLANG} "Debes desinstalar tu ultima version de $(^NameDA)" LangString InstAlready ${CURLANG} "Instalador ya funcionando" LangString InstTypeFull ${CURLANG} "Completo/a" LangString InstTypeCompact ${CURLANG} "Compacto/a" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.es" LangString TITLE_SecAllUsersUI ${CURLANG} "Opciones de Instalacion" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Que usuarios pueden ejecutar $(^NameDA) ?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "$(^NameDA) instalar derechos de acceso" LangString ASK_SecAllUsersUI ${CURLANG} "$(^NameDA) puede ser instalado para todos los usuarios o solamente para el usuario actual. Selecciona para cual quieres instalarlo $(^NameDA) por favor." LangString LIST_SecAllUsersUI ${CURLANG} "Todos los usuarios|Solo para mi" LangString STATE_SecAllUsersUI ${CURLANG} "Todos los usuarios" !verbose 4 gwhere-0.2.3/po/hu.nsh0000644000175000017500000000345210112712521013177 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ;This file has been translated by LAJOSHÁZI László Gergely (mailto:lajoshaz@zeus.iit.uni-miskolc.hu) !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_HUNGARIAN} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (nélkülözhetetlen)" LangString DESC_SecCopyUI ${CURLANG} "Fõbb programrészek." LangString TITLE_SecCopyGTK ${CURLANG} "GTK+ 2.4 RunTime (nélkülözhetetlen)" LangString DESC_SecCopyGTK ${CURLANG} "A grafikus felület megjelenítéséhez használt futtatókörnyezet." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Plugins" LangString DESC_SecCopyPLUGINS ${CURLANG} "Automatikus leírásgyûjtéshez kiegészítõk. pl. mp3 fájlok szöveges adatainak kinyeréséhez." LangString TITLE_SecCopyLANG ${CURLANG} "További fordítások" LangString DESC_SecCopyLANG ${CURLANG} "A használt szövegek magyar adatbázisa mellé minden más támogatott nyelvfájlt is telepít." LangString UninstBefore ${CURLANG} "You must uninstall your last version of $(^NameDA)" LangString InstAlready ${CURLANG} "Installer already running" LangString InstTypeFull ${CURLANG} "Teljes" LangString InstTypeCompact ${CURLANG} "Minimális" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.hu" LangString TITLE_SecAllUsersUI ${CURLANG} "Install options" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Which users can run $(^NameDA)?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "$(^NameDA) install rights access" LangString ASK_SecAllUsersUI ${CURLANG} "$(^NameDA) can be installed for all users or only for current user. Select for which you want install $(^NameDA) please." LangString LIST_SecAllUsersUI ${CURLANG} "All users|Current user" LangString STATE_SecAllUsersUI ${CURLANG} "All users" !verbose 4 gwhere-0.2.3/po/it.nsh0000644000175000017500000000344210247147041013206 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ;This file has been translated by Michele PETRECCA (mailto:petrecca@interfree.it) !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_ITALIAN} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (richiesto)" LangString DESC_SecCopyUI ${CURLANG} "Principale motore dell'applicazione." LangString TITLE_SecCopyGTK ${CURLANG} "GTK+ 2.6 RunTime (richiesto)" LangString DESC_SecCopyGTK ${CURLANG} "RunTime per l'ambiente GUI." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Plugins" LangString DESC_SecCopyPLUGINS ${CURLANG} "Plugins per l'estensione delle funzionalità (descrizione dei file e importazione/esportazione dei cataloghi)." LangString TITLE_SecCopyLANG ${CURLANG} "Pacchetto Lingua" LangString DESC_SecCopyLANG ${CURLANG} "Tutti i files di linguaggio per la traduzione del programma." LangString UninstBefore ${CURLANG} "Devi disinstallare l'ultima versione di $(^NameDA)" LangString InstAlready ${CURLANG} "Installazione in corso..." LangString InstTypeFull ${CURLANG} "Completo" LangString InstTypeCompact ${CURLANG} "Compatto" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.en" LangString TITLE_SecAllUsersUI ${CURLANG} "Installa opzioni" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Quale utente può lanciare $(^NameDA) ?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "$(^NameDA) installa i diritti d'accesso" LangString ASK_SecAllUsersUI ${CURLANG} "$(^NameDA) può essere installato per tutti gli utenti o solo per l'utente corrente. Seleziona per chi vuoi installare $(^NameDA) , per favore." LangString LIST_SecAllUsersUI ${CURLANG} "Tutti gli utenti|Utente corrente" LangString STATE_SecAllUsersUI ${CURLANG} "Tutti gli utenti" !verbose 4 gwhere-0.2.3/po/en.nsh0000644000175000017500000000316710241225645013201 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ; !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_ENGLISH} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (requiered)" LangString DESC_SecCopyUI ${CURLANG} "Main engine application." LangString TITLE_SecCopyGTK ${CURLANG} "GTK+ 2.6 RunTime (required)" LangString DESC_SecCopyGTK ${CURLANG} "RunTime for GUI environment." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Plugins" LangString DESC_SecCopyPLUGINS ${CURLANG} "Plugins for auto extraction of file descriptions and plugins for importation/exportation of catalogs." LangString TITLE_SecCopyLANG ${CURLANG} "Languages Files" LangString DESC_SecCopyLANG ${CURLANG} "All languages files for the program translation." LangString UninstBefore ${CURLANG} "You must uninstall your last version of $(^NameDA)" LangString InstAlready ${CURLANG} "Installer already running" LangString InstTypeFull ${CURLANG} "Full" LangString InstTypeCompact ${CURLANG} "Compact" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.en" LangString TITLE_SecAllUsersUI ${CURLANG} "Install options" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Which users can run $(^NameDA) ?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "$(^NameDA) install rights access" LangString ASK_SecAllUsersUI ${CURLANG} "$(^NameDA) can be installed for all users or only for current user. Select for which you want install $(^NameDA) please." LangString LIST_SecAllUsersUI ${CURLANG} "All users|Current user" LangString STATE_SecAllUsersUI ${CURLANG} "All users" !verbose 4 gwhere-0.2.3/po/cs.nsh0000644000175000017500000000316010242726210013170 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ;This file has been translated by Thomas NAVARA (mailto:navara@shalmirane.net) !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_CZECH} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (vy¾adován)" LangString DESC_SecCopyUI ${CURLANG} "Aplikace." LangString TITLE_SecCopyGTK ${CURLANG} "GTK+ 2.6 knihovny (vy¾adovány)" LangString DESC_SecCopyGTK ${CURLANG} "Knihovny pro GUI prostøedí." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Pluginy" LangString DESC_SecCopyPLUGINS ${CURLANG} "Pluginy pro extrakci informací ze souborù." LangString TITLE_SecCopyLANG ${CURLANG} "Jazyky prostøedí" LangString DESC_SecCopyLANG ${CURLANG} "V¹ecny jazykové soubory pro pøeklad." LangString UninstBefore ${CURLANG} "You must uninstall your last version of $(^NameDA)" LangString InstAlready ${CURLANG} "Installer already running" LangString InstTypeFull ${CURLANG} "Plný" LangString InstTypeCompact ${CURLANG} "Kompaktní" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.en" LangString TITLE_SecAllUsersUI ${CURLANG} "Install options" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Which users can run $(^NameDA)?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "$(^NameDA) install rights access" LangString ASK_SecAllUsersUI ${CURLANG} "$(^NameDA) can be installed for all users or only for current user. Select for which you want install $(^NameDA) please." LangString LIST_SecAllUsersUI ${CURLANG} "All users|Current user" LangString STATE_SecAllUsersUI ${CURLANG} "All users" !verbose 4 gwhere-0.2.3/po/fr.nsh0000644000175000017500000000365310241226164013203 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ;This file has been translated by Sébastien LECACHEUR(mailto:zero@gwhere.org) !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_FRENCH} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (nécessaire)" LangString DESC_SecCopyUI ${CURLANG} "Moteur principal de l'application." LangString TITLE_SecCopyGTK ${CURLANG} "GTK+ 2.6 RunTime (nécessaire)" LangString DESC_SecCopyGTK ${CURLANG} "Machine d'exécution pour l'environnement de l'IHM." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Plugins" LangString DESC_SecCopyPLUGINS ${CURLANG} "Modules pour l'extraction automatique des descriptions des fichiers et pour l'importation/exportation des catalogues." LangString TITLE_SecCopyLANG ${CURLANG} "Fichiers des langages" LangString DESC_SecCopyLANG ${CURLANG} "Tous les fichiers des langages pour la traduction du programme." LangString UninstBefore ${CURLANG} "Vous devez désinstaller la version précédente de $(^NameDA)" LangString InstAlready ${CURLANG} "Le programme d'installation est déjà lancé" LangString InstTypeFull ${CURLANG} "Complète" LangString InstTypeCompact ${CURLANG} "Compacte" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.fr" LangString TITLE_SecAllUsersUI ${CURLANG} "Options d'installation" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Quels sont les utilisateurs qui peuvent lancer $(^NameDA) ?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "Droits d'accès de l'installation de $(^NameDA)" LangString ASK_SecAllUsersUI ${CURLANG} "$(^NameDA) peut être installé pour tous les utilisateurs ou seulement pour l'utilisateur courant. Sélectionnez pour qui vous voulez installer $(^NameDA) s'il vous plait." LangString LIST_SecAllUsersUI ${CURLANG} "Tous les utilisateurs|L'utilisateur courant" LangString STATE_SecAllUsersUI ${CURLANG} "Tous les utilisateurs" !verbose 4 gwhere-0.2.3/po/pt.nsh0000644000175000017500000000351310244171743013217 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ;This file has been translated by Paulo ANDRE' (mailto:l16083@alunos.uevora.pt) !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_PORTUGUESE} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (obrigatório)" LangString DESC_SecCopyUI ${CURLANG} "Motor principal da aplicação." LangString TITLE_SecCopyGTK ${CURLANG} "RunTime GTK+ 2.6 (obrigatório)" LangString DESC_SecCopyGTK ${CURLANG} "RunTime para o ambiente GUI." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Plugins" LangString DESC_SecCopyPLUGINS ${CURLANG} "Plugins para extracção automática de descritores e plugins paraimportação/exportação de catálogos." LangString TITLE_SecCopyLANG ${CURLANG} "Ficheiros de Linguagem" LangString DESC_SecCopyLANG ${CURLANG} "Todos os ficheiros de linguagem para a tradução do programa." LangString UninstBefore ${CURLANG} "Terá de desinstalar a sua última versão de $(^NameDA)" LangString InstAlready ${CURLANG} "O instalar já está em execução" LangString InstTypeFull ${CURLANG} "Completo" LangString InstTypeCompact ${CURLANG} "Compacto" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.en" LangString TITLE_SecAllUsersUI ${CURLANG} "Opções de instalação" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Que utilizadores podem executar $(^NameDA) ?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "Direitos de acesso à instalação de $(^NameDA)" LangString ASK_SecAllUsersUI ${CURLANG} "$(^NameDA) poderá ser instalado para todos os utilizadores ou apenas para o utilizador actual. Seleccione para quem deseja instalar $(^NameDA) por favor." LangString LIST_SecAllUsersUI ${CURLANG} "Todos os utilizadores|Utilizador actual" LangString STATE_SecAllUsersUI ${CURLANG} "Todos os utilizadores" !verbose 4 gwhere-0.2.3/po/de.nsh0000644000175000017500000000350010243467170013161 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ;This file has been translated by Hermann-Josef BECKERS (mailto:hj.beckers@onelinehome.de) !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_GERMAN} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (erforderlich)" LangString DESC_SecCopyUI ${CURLANG} "Hauptanwendung." LangString TITLE_SecCopyGTK ${CURLANG} "GTK+ 2.6 Laufzeit-Umgebung (erforderlich)" LangString DESC_SecCopyGTK ${CURLANG} "Laufzeit-Umgebung für die grafische Oberfläche." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Erweiterungen" LangString DESC_SecCopyPLUGINS ${CURLANG} "Erweiterungen für autom. Extraktion der Dateibeschreibungen und Erweiterungen für Katalog-Import/Export." LangString TITLE_SecCopyLANG ${CURLANG} "Sprachdateien" LangString DESC_SecCopyLANG ${CURLANG} "Alle Sprachdateien für die Programm-Übersetzung." LangString UninstBefore ${CURLANG} "Sie müssen die vorherige Version von $(^NameDA) deinstallieren." LangString InstAlready ${CURLANG} "Installationsprogramm bereits aktiv" LangString InstTypeFull ${CURLANG} "Voll" LangString InstTypeCompact ${CURLANG} "Kompakt" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.de" LangString TITLE_SecAllUsersUI ${CURLANG} "Installations-Optionen" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Welche Benutzer können $(^NameDA) starten ?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "$(^NameDA) Installation der Zugriffsrechte" LangString ASK_SecAllUsersUI ${CURLANG} "$(^NameDA) kann für alle oder nur den aktuellen Benutzer installiert werden. Wählen Sie bitte, wie $(^NameDA) installiert werden soll." LangString LIST_SecAllUsersUI ${CURLANG} "Alle Benutzer|Aktueller Benutzer" LangString STATE_SecAllUsersUI ${CURLANG} "Alle Benutzer" !verbose 4 gwhere-0.2.3/po/el.nsh0000644000175000017500000000325110112712502013157 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ;This file has been translated by Dimitris GARANATSIOS (mailto:rs96057@hotmail.com) !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_GREEK} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (áðáéôåßôáé)" LangString DESC_SecCopyUI ${CURLANG} "Êõñßùò åöáñìïãÞ." LangString TITLE_SecCopyGTK ${CURLANG} "ÐåñéâÜëëïí åêôÝëåóçò GTK+ 2.4 (áðáéôåßôáé)" LangString DESC_SecCopyGTK ${CURLANG} "ÂéâëéïèÞêåò åêôÝëåóçò ôïõ ãñáöéêïý ðåñéâÜëëïíôïò." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Plugins" LangString DESC_SecCopyPLUGINS ${CURLANG} "Plugins ãéá áõôüìáôç åîáãùãÞ ðåñéãñáöþí áñ÷åßùí." LangString TITLE_SecCopyLANG ${CURLANG} "Ðïëýãëùóóç õðïóôÞñéîç" LangString DESC_SecCopyLANG ${CURLANG} "Áñ÷åßá ìåôáãëþôéóçò ôïõ ðñïãñÜììáôïò." LangString UninstBefore ${CURLANG} "You must uninstall your last version of $(^NameDA)" LangString InstAlready ${CURLANG} "Installer already running" LangString InstTypeFull ${CURLANG} "Full" LangString InstTypeCompact ${CURLANG} "Compact" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.en" LangString TITLE_SecAllUsersUI ${CURLANG} "Install options" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Which users can run $(^NameDA)?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "$(^NameDA) install rights access" LangString ASK_SecAllUsersUI ${CURLANG} "$(^NameDA) can be installed for all users or only for current user. Select for which you want install $(^NameDA) please." LangString LIST_SecAllUsersUI ${CURLANG} "All users|Current user" LangString STATE_SecAllUsersUI ${CURLANG} "All users" !verbose 4 gwhere-0.2.3/po/pl.nsh0000644000175000017500000000337310243206776013217 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ;This file has been translated by Bogdan MODZELEWSKI (mailto:motzel@panda.bg.univ.gda.pl) !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_POLISH} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (wymagany)" LangString DESC_SecCopyUI ${CURLANG} "G³ówne pliki aplikacji." LangString TITLE_SecCopyGTK ${CURLANG} "Biblioteki uruchomieniowe GTK+ 2.6 (wymagane)" LangString DESC_SecCopyGTK ${CURLANG} "Biblioteki dla œrodowiska GUI." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Wtyczki" LangString DESC_SecCopyPLUGINS ${CURLANG} "Wtyczki do automatycznego tworzenia opisów plików i importu/eksportu katalogów." LangString TITLE_SecCopyLANG ${CURLANG} "Pliki Jêzykowe" LangString DESC_SecCopyLANG ${CURLANG} "Wszystkie pliki jêzykowe." LangString UninstBefore ${CURLANG} "Proszê odinstalowaæ wczeœniejsz¹ wersjê $(^NameDA)" LangString InstAlready ${CURLANG} "Program instalacyjny jest ju¿ uruchomiony" LangString InstTypeFull ${CURLANG} "Pe³na" LangString InstTypeCompact ${CURLANG} "Minimalna" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.pl" LangString TITLE_SecAllUsersUI ${CURLANG} "Opcje instalacji" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Którzy u¿ytkownicy mog¹ uruchamiaæ $(^NameDA) ?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "$(^NameDA) instaluje prawa dostêpu" LangString ASK_SecAllUsersUI ${CURLANG} "$(^NameDA) mo¿e byæ zainstalowany dla wszystkich u¿ytkowników lub tylko dla bie¿¹cego. Proszê wybraæ sposób instalacji $(^NameDA)." LangString LIST_SecAllUsersUI ${CURLANG} "Wszyscy u¿ytkownicy|Bie¿¹cy u¿ytkownik" LangString STATE_SecAllUsersUI ${CURLANG} "Wszyscy u¿ytkownicy" !verbose 4 gwhere-0.2.3/po/nl.nsh0000644000175000017500000000324210247421307013201 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ; !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_DUTCH} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (vereist)" LangString DESC_SecCopyUI ${CURLANG} "Hoofdprogramma." LangString TITLE_SecCopyGTK ${CURLANG} "GTK+ 2.6 RunTime (vereist)" LangString DESC_SecCopyGTK ${CURLANG} "GUI uitvoeringsprogramma." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Plugins" LangString DESC_SecCopyPLUGINS ${CURLANG} "Modules om automatisch bestandsbeschrijvingen te extraheren en voor import/export van catalogen." LangString TITLE_SecCopyLANG ${CURLANG} "Taalbestanden" LangString DESC_SecCopyLANG ${CURLANG} "Alle taalbestanden voor de vertaling van het programma." LangString UninstBefore ${CURLANG} "Je moet je laatste versie van $(^NameDA) verwijderen" LangString InstAlready ${CURLANG} "Installeren is al bezig" LangString InstTypeFull ${CURLANG} "Volledig" LangString InstTypeCompact ${CURLANG} "Compact" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.en" LangString TITLE_SecAllUsersUI ${CURLANG} "Installatie opties" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Welke gebruiker kunnen $(^NameDA) starten ?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "Installatie toegangsrechten voor $(^NameDA)" LangString ASK_SecAllUsersUI ${CURLANG} "Je kunt $(^NameDA) installeren voor alle gebruikers of alleen voor de huidige gebruiker. Selecteer waarvoor je GWhere wil installeren." LangString LIST_SecAllUsersUI ${CURLANG} "Alle gebruikers|Huidige gebruiker" LangString STATE_SecAllUsersUI ${CURLANG} "Alle gebruikers" !verbose 4 gwhere-0.2.3/po/nl.gmo0000644000175000017500000010752510472436236013213 0ustar bartbartÞ•·Ô KŒ¸$ ¹$aÇ$$)%N% k%w%‰% œ%*¨%$Ó%ø%&%&A& J& W&b&j&r&z&‚&Š&’&š&1¯&á&qý&7o'°§'X(_( e( q(}( (Ž( —(¤(»(0Ô( )) &)+1)m])4Ë)J*RK*ž* ¦* ±*¿* Ï* Û*é*ÿ*-+ >+H+h+{++ †+ +œ+ £+C±+õ+1 ,?,S,*d, ,›,ª,¿,Ç, Þ,ë,û,- -<-P- a-n--—-¯-¾- Ñ-ß-ò- û-.\.u.n‰.(ø.!/ '/5/1O/(/5ª/5à/H0D_0?¤0ä0 ê0 ø0,101@1H1d1 ‚1 1ž1 £1 ¯1»1Ê1Ï1 ã1 í1ú1 22$282/N2 ~2M‹2Ù2ß2ð23 33r33¦3L¶3449&4@`43¡4#Õ4ù45$5@5T5%j5&5)·5Rá546S6s6I6\Ù6C67z7L”7"á7$8)8G8L8,_8$Œ8±8º8Á8Ó8Ø8 ì8 ö899 .9;9!L9n9 t9 ~9Š9‘9 §9 ³9¿9Î9 á9 ï9 ú9: ::7:;:N:pO;À;Ý;+î;?<?Z<gš<G=@J=‹=‘=š= =¨=¯=´=É=Ï=PO> >§>»>Ã>Ó>.í>?8?I?P?DY? ž?¨?¸?Ì?à?ÿ?@+@B@V@[@[t@ Ð@Û@ í@iû@ eA pA{A€A ˆA “A A ¤A°A¹AÂAÅA-ÚABB"B>BZBhxBáB æB óBýBC CC1C7C@CEEC‹C ©CµCÄCeÌC 2D=DCDIDcDvD†D…šD E'E 6E BE NE!\E~E™E  EªEÇEÐE0ÕEF"F*F :F$GFlF{F‘F šF¤F «FµF ÇF ÕF áFîFGGx'G] G<þG ;HK\H¨H½H ÏHÙH öH I II ,I:IRI[IlIqI…I ŠI”I œII¦I5ðI&J>J2ZJ?J>ÍJ/ K8ŠGdЬŠÁŠÕŠìŠþŠ‹*‹?‹Z‹_‹g‹$w‹œ‹ «‹µ‹:Ë‹KŒRŒfŒ nŒ xŒ ‚ŒŒŒ ›Œ ¦Œ'´Œ ÜŒæŒ0 Ž>ŽEŽNŽ UŽ `ŽjŽ|Ž…Ž‹Ž’Ž˜ŽœŽ Ž¨Ž°Ž¿Ž ÒŽÞŽçŽ ïŽ ùŽ )2Bc9lÄrBEi)8f ±k[È´xkV3ÜI“*Ž£r~Å'w¡.”ß4×™Ÿ=îžt ‰¥7ygR`s·ZALž›¢,–|«ÖbÛz 'l#µ@&zÇDq<ñ·jsu䜤#ã£|ˆïÎýÊ)€¤7Ó^ÿF ê¯!—%hZ>dœ™.Xm(´ÌNóÑ0a®\³ÍŒEchKªSQ LØìHϦ«!]CËŸŠæŽ/ U•먗]ÚÝ‚g³T(þ9‡8­RT‚An²µ»5a"Д©ð6¹˜$u±{P¶;¿Cšàv…§piø€OÙå@Šo?É ©+0‹}-‘^‹†4m~š%‘§ õqF¦Y2 {„<ª•°â ²/ç;>G¯í¢¬÷Ã?Þb\ V1ÆpáÂ_½WYe6G$›ô5†ºÀÔ `NKSnI2[QyB… }o&Xƒ­U–Œ¾°„è‰-H_=˜*MMW¬f3¨+ü¡ûv,dòO“öJ‡¼¥wù"DP’újƒ:Á¸¶1 ÕetÒé®Jˆ:’x Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Empty disk Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A catalog is already openedA component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A critical error occured when extracting file information of %s%s%s. Save your catalog if it is possible, exit GWhere and report this trouble to the GWhere project team please.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.All usersAll users|Current userAllow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Audio CD : Audio CD : %dAuto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog exportedCatalog fileCatalog importedCatalog is not exportedCatalog is not importedCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerExportExport catalog toFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGTK+ 2.6 RunTime (required)GUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.GWhere can be installed for all users or only for current user. Select for which you want install GWhere please.GWhere install rights accessGenerals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?ImportImport catalog fromInfo : Install optionsInstaller already runningInsufficient memory to complete the operation.Invalid filled catalog nameIs running on %sJaz : Jaz : %dKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : Network : Network : %dNewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new disk name was filledNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPlugins for auto extraction of file descriptions and plugins for importation/exportation of catalogs.PropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :Tape : Tape : %dThe catalog is invalid or doesn't exists. Check your catalog path please.The current catalog is never be saved, cannot send itThe disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled disk name already exist in the current catalogThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.There is no available catalog pluginThis Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Files : %ldTotal Folders : Total Folders : %ldTotal Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : Which users can run GWhere ?WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberYou must uninstall your last version of GWhereZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: 0.1.3 Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2001-09-27 00:12GMT Last-Translator: Herman Viaene Language-Team: dutch MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Werkt onder Beheer verwijderbare media Door Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capaciteit : %s, vrij : %s %s [ %s ], totaal schijven : %d%s, %s, %s Cataloog verkenner CataloogbeheerLege schijf Folder "%s", %s (bestanden %d, subfolders %d) Gelijste items : %d (totale grootte : %s) Zoekmachine Geselecteerd item : %d Geselecteerd item : %d (totale grootte : %s) Type : aangemaakt met %. bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) gevonden.%s buiten de gealloceerde geheugenruimte van het proces.Cataloog is reeds geopendEen onderdeel van het volgende pad heeft meer dan %d karakters, of de volledige pad naam is is langer dan %d karakters : %s.Een onderdeel van de pad prefix is geen folder : %s.Kritieke fout tijdens het extraheren van bestandsonformatie %s%s%s. Bewaar je cataloog indien mogelijk, sluit GWhere af en rapporteer de anomalie aan de GWhere project groep aub.O_verOverToegangsdatumToegangspadToevoegenToevoegen / BijwerkenVoeg schijf toeNieuwe schijf toevoegenSchijf toevoegen is bezigAlle sleutelwoorden moeten overeenstemmen.Alle taalbestanden voor de vertaling van het programma.Alle gebruikersAlle gebruikers|Huidige gebruikerLaat biepjes toeLaat toe om korte biep te geven bij sommige gebeurtenissen.Hier kan je de eigenschappen van de geselecteerde categorie bijwerken. Klik op de knop Toevoegen/Bijwerken om de wijzigingen te bewaren.I/O fout bij het navigeren naar folder : %s.Er is een fout tijdens het verzenden. Zie aub je parameters na.Pas categorie toe op alle delen van de toe te voegen schijf (schijf, folders en bestanden).ArchiveerArchiefnrArchiefnr : Aangehecht bestand :Audio CD : Audio CD : %dAutomatische beschrijvingCataloog automatisch opladenStandaard cataloog automatisch opladen bij opstarten.AutomonterenAfmetingen kolommen verkenner automatisch aanpassen.Afmetingen kolommen automatisch aanpassenBCC :CC :CD-Rom : CD-Rom : %dSluitenKlap a_lles ineenJe kan een gewone uitdrukking gebruiken. Bekijk de documentatie voor meer informatie.Kan dit bestand niet bijwerken!! Je kunt deze categorie niet verwijderen. Een ander element verwijst ernaar.Kan geen gegevens ontvangenKan geen gegevens versturenOpzoeking kan niet starten : er is geen cataloog opgeladenCapaciteit : HoofdlettergevoeligHoofdlettergevoelig sorterenCataloogCataloog beschrijving : Cataloog infoCataloognaam : Cataloog categorieën : Cataloog geslotenCataloog compressie niveau :CataloogbeschrijvingCataloog geëxporteerdCataloog bestandCataloog geïmporteerdCataloog is niet geëxporteerdGeen cataloog geimporteerdCataloog geladenCataloog eigenschappenCataloog bewaardLijst Categorieën : CategorieCategorie : Categorie naam : Wijzig in dit paneel alle beschikbare eigenschappen om het programma naar je wensen te configureren.Volumenaam wijzigenKies of alle sleutelwoorden of enkel één van alle sleutelwoorden moeten overeenstemmen met het item om in het zoekresultaat opgenomen te worden.Kies om het cataloog bestand al of niet aan te hechten.WissenHistoriek wissenWist alle opzoekresultatenKlik hier om te bladeren en het cataloog bestand te selecteren.Klik hier om het verzenden af te breken.Klik hier om historiek van recent geopende bestanden te wissen.Klik hier om boodschap te zenden (met aangehechte cataloog).Klik op de knop Toepassen om de wijzigingen toe te passen (zonder het venster Instellingen te sluiten).Klik op de knop Afbreken om de wijzigingen te annuleren en het venster Instellingen te sluiten.Klik op OK knop om wijzigingen toe te passen en het Instellingen venster te sluiten.SluitenSluit cataloogSluit bestandSluit venster bewerking categorie eigenschappen.Sluit cataloogCompactVerbinding afgebroken door klient Kan het pixmap bestand niet vinden: %sAangemaakt op : Datum aanmaakDatumSchijf wissenBeschrijvingBeschrijving : SchijfSchijfbeschrijving : SchijfinfoSchijfnaam : Schijf statistiekenSchijfbeschrijvingSchijvenSchijven in cataloog : Schijven in cataloog : %dToon of geselecteerde medium is gemonteerd of niet.Toon informatieToon geselecteerde medium informatie zoals pad, capaciteit, vrije ruimte, label,... AfsluitenBewerk _categorieënCategorieën EditerenBeschrijving bijwerkenBestand bijwerkenWerp medium uit indien mogelijkWerp medium uit (CD-ROM...), ook als de schuif gesloten was. Dit kan alleen als automonteren geactiveerd is!!E-post adres :Geef een lijst van sleutelwoorden die allen in de gezochte bestanden moeten voorkomen.Geef naam van cataloogSchijfnaam ingevenGeef hier het e-post adres van je contact(en) in copie.Geef hier het e-post adres van je contact(en) in verborgen copie.Geef hier het e-post adres van je contact(en).Geef hier het onderwerp van je boodschap.Geef nieuwe naam voor cataloogGeef nieuwe naam voor schijfGeef nieuwe schijf volume labelGeef nieuwe bestandsnaamGeef nieuwe naam folderGeef archiefnummer van de schijf.Voer categorie beschrijving in.Geef het volledige pad van het op te laden cataloog bestand.Geef het volledige wildcards patroon. Dit patroon mag de karakters "?" and "*" bevattenGeef cataloognaam.Voer categorie naam in.Geef schijfnaam.Geef de naam van de nieuwe schijf. Deze naam komt in je cataloog.Geef nummer van nieuwe schijf. Dit nummer kan je helpen bij de historiek van je cataloog.Geef de poort van de uitgaande post server (meestal is dit 25).Geef je e-post adresGeef je uitgaande post server. Meestal is dit adres mail.domain.comFout : kan het bestand niet openen.Fout : kan de werkfolder niet bereiken.Fout tijdens het opladen van pixmap bestand: %sAfsluitenKlap alles uitOnderzoek archief bestanden (.tar, .gz, .zip, ...)Onderzoek boomstructuur van medium.VerkennerExportExporteer cataloog naarBestandBestandsbeschrijving : BestandsinfoBestandsgrootte : Bestandsgrootte : %s (%s bytes)BestandsbeschrijvingBestandsnaam : BestandsnaamBestandstype : nog niet geïmplementeerd!!BestandenDiskette : Diskette : %dFolderFolderbeschrijving : Folder InfoFoldernaamFoldergrootte : FolderbeschrijvingVrije ruimte : Vije ruimteVrije ruimte : VolledigTotale capaciteitGTK+ 2.6 RunTime (vereist)GUIGWhere (vereist)Met GWhere kun je een gegevensbank van je CD's en andere verwijderbare media beheren (harde schijven, diskettes, ZIP diskettes, CD-ROM, enz...). Met GWhere is het makkelijk je CD's te doorlopen of snel iets op te zoeken zonder telkens je CD's in de speler te moeten steken.Je kunt GWhere installeren voor alle gebruikers of alleen voor de huidige gebruiker. Selecteer waarvoor je GWhere wil installeren.Installatie toegangsrechten voor GWhereAlgemene optiesGeef het apparaatbestand van het geselecteerde medium.Geef vrije ruimte op geselecteerd medium (alleen indien gemonteerd).Geef volledige ruimte op geselecteerd medium (alleen indien gemonteerd).Geef serienummer van geselecteerd medium (alleen indien gemonteerd). Dit nummer is een fabrieksnummer.Geef type van het geselecteerde medium (bijv : ext2, ext3, vfat, ntfs, ...).Geef volumenaam geselecteerd medium (enkel wanneer gemonteerd).GroepGroep : HS : HS : %dVerborgenVerbergenVerberg de bestandsbewerkingenINodeIndien je geen schijfnaam gegeven hebt en je geselecteerde medium een volumenaam heeft, zal de volumenaam als schijfnaam gebruikt worden.Indien je wijzigingen niet toepast zul je ze allemaal verliezen. Wil je wijzigingen toepassen?ImportImporteer cataloog vanuitInformatie : Installatie optiesInstalleren is al bezigNiet genoeg geheugen om de bewerking te voltooien.Ongeldige cataloog naamWerkt op %sJaz : Jaz : %dHou deze optie aangestipt om alle folder- en bestandsinfo te scannen. SleutelwoordenTaalbestandenLaatst aangesproken op : Laatst bijgewerkt op : Laatst geopende cataloog opladen.Geselecteerde cataloog opladen.Cataloog aan het ladenCataloog opladen misluktPlaats op schijf : PostHoofdprogramma.Maak automatisch bestandsbeschrijving aan (beschrijving formaat bestand, beeldgrootte van xmp of jpg, enz...).BeheerWijzigingsdatumMonteren mislukt Monteer medium indien niet gemonteerd. En demonteer nadien ook als het gedemonteerd was voor de scan.Gemonteerd : Verplaatsen naar...NaamNaam : Netwerk : Netwerk : %dNieuwNieuwe cataloogNieuwe schijfNieuw bestandNeenGeen cataloog geopendGeen cataloog open : kan de categorieën niet bijwerkenGeen item gevonden.Geen labelJe hebt geen nieuwe bestandsnaam ingevuldJe hebt geen nieuwe bestandsnaam ingevuldGeen nieuwe foldernaam ingegevenNog niet geïmplementeerd!! Onderzoek alle archieven, alsof het een folder is. Archieven zijn tar- of gzip-bestanden.OpenenOpen cataloogOpen bestandOptiesAndere : Andere : %dServer uitgaande post :EigenaarEigenaar : PadConfigureer mail opties in instellingen om mails te kunnen versturen.Geef nieuwe cataloognaam Wacht evenEven wachten...PluginsModules om automatisch bestandsbeschrijvingen te extraheren en voor import/export van catalogen.EigenschappenSnelAfsluiten Recent geopende catalogen :Gewone uitdrukkingVerwijder categorieUit cataloog verwijderenVerwijder de geselecteerde categorie uit de lijst. Je kan deze categorieën alleen verwijderen als geen ander element naar deze categorie verwijst.HernoemenCataloog hernoemenSchijf hernoemenBestand hernoemenFolder hernoemenResultaat sortering groep op folder/bestand.Resultaat sortering zoekopdracht groeperen per type.RechtenRechten : GUI uitvoeringsprogramma.Bewaren _alsBewarenBewaar de GUI eigenschappen zoals venstergrootte en -positie.Bewaar de GUI eigenschappen bij het afsluiten.Bewaren alsBewaar als cataloogBewaar cataloogBewaar wijzigingen van categorie eigenschappen.Cataloog aan het bewarenBewaren van catloog is misluktScannen bezigInstellingenOpzoekenOpzoeken : Zoek in cataloogOpzoekresultaatType OpzoekingAan het zoeken...Selecteer de automatisch op te laden cataloogSelecteer cataloogSelecteer medium : Selecteer het compressie niveau van cataloog. Standaard waarde is 3, wat een redelijke mate van snelheid en bestandsgrootte geeft. Selecteer categorie voor schijf die toegevoegd zal worden (ook als de optie is aangestipt).Selecteer het medium dat als schijf aan je cataloog wordt toegevoegd.Selecteer de te configureren sectie .Selecteer de grootte voor de historiek van de recent geopende catalogen. De standaard waarde is 5.Zend cataloog per e-postVerstuur bestand per mailZend e-postAan het zenden, even wachten...Serienummer : Serienummer : SerienummerSerienummer : Server poort :Zet categorie recursiefInstellingenInstellingen gewijzigdTonenToon de bestandsbewerkingenGrootteOnderwerp :Band : Band : %dHet cataloog bestand bestaat niet. Zie het pad van het bestand na.Je hebt de huidige cataloog niet bewaard, kan niet verzonden wordenDe schijf is toegevoegdDe schijf is niet toegevoegd De schijf is niet toegevoegd Toevoegen is afgebroken door gebruikerDe schijf is niet toegevoegd Fout : kan de folder niet sluiten.De schijf is niet toegevoegd Fout : kan de bovenliggende folder niet bereiken.De schijf is niet toegevoegd : medium kan niet gemonteerd wordenDe schijf is niet toegevoegd : er is geen medium gemonteerdDe gegeven bestandsnaam bestaat al in deze folderDe gegeven bestandsnaam bestaat al in deze folderDe ingevulde foldernaam bestaat al in de actuele folderDe volgende folder bestaat niet : %s.De volgende folder bestaat niet of de naam is een lege letterreeks : %s.De volgende foldernaam is geen folder : %s.Het sorteerresultaat in verkenner kan gegroepeerd zijn per item type. Indien deze optie is aangevinkt, zullen alle items gegroepeerd zijn per folder of bestand.Het resultaat van de sortering in verkenner is hoofdlettergevoelig.De sortering van het opzoekresultaat kan gegroepeerd per item type. Indien deze optie is aangevinkt, zullen alle items gegroepeerd worden per cataloog, schijf, folder en bestand.Het resultaat van de sortering in de opzoeking is hoofdlettergevoelig.De opzoeking kan al of niet hoofdlettergevoelig zijn. Indien wel, dan is "File.txt" niet gelijk aan "file.txt". Maar indien niet dan zijn beide resultaten in feite dezelfde.Opzoekresultaten zijn hoofdlettergevoelig. Opzoeken met wildcards ondersteunt de karakters "*". Voorbeeld : img*.bmp or *.htm Opzoeken met sleutelwoorden aanvaardt een lijst verplichte woorden.De opzoeking geeft categorienamen.De opzoeking geeft beschrijvingen.De opzoeking geeft schijfnamen.De opzoeking geeft bestandsnamen.De opzoeking geeft foldernamen.Er is geen cataloog plugin beschikbaarDit venster Instellingen laat toe bepaalde functionaliteiten en eigenschappen vast te leggen.In dit venster Instellingen kan je het programma configureren. Je kunt hier sommige eigenschappen wijzigen.Dit venster laat je toe een cataloog per e-post aan één (of meerdere) van je contacten te sturen.Naar :Teveel bestandsbeschrijvingen in gebruik door het proces.Teveel bestanden open in het systeem.Teveel symbolische verbindingen gevonden bij het oplossen van pad : %s.Totale capaciteit : Totaal bestanden : Totaal bestanden : %ldTotaal Folders : Totaal Folders : %ldTotaal vrije ruimte : Totale capaciteit : Totaal gebruikte ruimte : TypeType : Type : (folder)Type hier de tekst van je boodschap.Onbekende foutBijwerkenCataloog bijwerken : Gebruik een geavanceerd patroon om schijfnaam te genererenGebruik medium volume label als schijfnaam (alleen als schijfnaam leeg is) Gebruikte ruimte : Versie Versie : ZichtbaarVolume : Volumelabel : VolumenaamVolumenaam : Welke gebruiker kunnen GWhere starten ?WildcardsWil je de cataloog bewaren : JaJe kan extra tags invullen om schijfnaam te genereren met schijfinformatie : - %% : % - %n : archiefnummer (kan prefix gebruiken om te prefixen met 0 : %.4n geeft 0001, 0002, 0003, ..., 0091, ... - %l : medium volumelabel - %t : type medium - %s : serienummerJe moet je laatste versie van GWhere verwijderenZip : Zip : %d_Actie_Toepassen_Afbreken_Alles uitklappen_Bestand_Help_Nieuw_Neen_OK_Ok_Openen_Opties_Eigenschappen_Recente bestandenVerwijderenBe_waren_ZendenBijwerkengeen spelergeenschijf toevoegen is afgebrokenonbekendonbekende groeponbekende eigenaargwhere-0.2.3/po/nl.po0000644000175000017500000042443010472436223013040 0ustar bartbart# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # First Author: S�astien LECACHEUR , 2000. # # msgid "" msgstr "" "Project-Id-Version: 0.1.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2001-09-27 00:12GMT\n" "Last-Translator: Herman Viaene \n" "Language-Team: dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "Kan geen gegevens ontvangen" #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "Verbinding afgebroken door klient\n" #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "Kan geen gegevens versturen" # src/tools/Calcul.c:41 # src/tools/Calcul.c:46 #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%. bytes" # src/tools/Calcul.c:44 # src/tools/Calcul.c:49 #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f Kb" # src/tools/Calcul.c:47 # src/tools/Calcul.c:52 #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f Mb" # src/tools/Calcul.c:50 # src/tools/Calcul.c:55 #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f Gb" # src/tools/Calcul.c:54 # src/tools/Calcul.c:59 #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f Tb" # src/tools/Calcul.c:58 # src/tools/Calcul.c:63 #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f Pb" # src/tools/Calcul.c:62 # src/tools/Calcul.c:67 #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f Hb" # src/tools/Calcul.c:67 src/tools/Calcul.c:72 # src/tools/Calcul.c:72 src/tools/Calcul.c:77 #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f Ib" # src/gui/CaptureBox.c:84 src/gui/MenuFile.c:291 src/gui/MsgBox.c:71 # src/gui/Properties.c:164 src/gui/TextBox.c:100 # src/gui/CaptureBox.c:84 src/gui/MenuFile.c:291 src/gui/MsgBox.c:71 # src/gui/Properties.c:164 src/gui/TextBox.c:100 # src/gui/CaptureBox.c:84 src/gui/DialogBox.c:59 src/gui/MsgBox.c:75 # src/gui/Properties.c:164 src/gui/TextBox.c:100 # src/gui/CaptureBox.c:96 src/gui/DialogBox.c:59 src/gui/MsgBox.c:75 # src/gui/PropertiesBox.c:189 src/gui/TextBox.c:107 #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "_OK" # src/gui/CaptureBox.c:92 src/gui/MenuFile.c:348 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:92 src/gui/MenuFile.c:348 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:92 src/gui/DialogBox.c:94 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:116 src/gui/DialogBox.c:94 # src/gui/ProgressBarBox.c:127 src/gui/ProgressBarBox.c:246 # src/gui/ProgressBarBox.c:504 src/gui/PropertiesBox.c:216 # src/gui/TextBox.c:122 #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "_Afbreken" # src/gui/Categories.c:58 src/gui/MenuPopup.c:98 # src/gui/Categories.c:58 src/gui/MenuPopup.c:98 # src/gui/Categories.c:58 src/gui/MenuPopup.c:98 # src/gui/CategoriesEditBox.c:88 src/gui/MenuPopup.c:99 #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Categorieën Editeren" # src/gui/Categories.c:68 # src/gui/Categories.c:68 # src/gui/Categories.c:68 # src/gui/CategoriesEditBox.c:104 #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "Lijst Categorieën : " # src/gui/Categories.c:99 src/gui/NoteBookCatalog.c:109 # src/gui/NoteBookCatalog.c:186 src/gui/NoteBookCatalog.c:220 # src/gui/NoteBookSearch.c:133 # src/gui/Categories.c:99 src/gui/NoteBookCatalog.c:109 # src/gui/NoteBookCatalog.c:186 src/gui/NoteBookCatalog.c:220 # src/gui/NoteBookSearch.c:133 # src/gui/Categories.c:99 src/gui/NoteBookCatalog.c:107 # src/gui/NoteBookCatalog.c:205 src/gui/NoteBookCatalog.c:252 # src/gui/NoteBookSearch.c:207 # src/gui/CategoriesEditBox.c:135 src/gui/NoteBookCatalog.c:108 # src/gui/NoteBookCatalog.c:206 src/gui/NoteBookCatalog.c:253 # src/gui/NoteBookSearch.c:229 #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "Naam" # src/gui/Categories.c:105 src/gui/NoteBookCatalog.c:149 # src/gui/NoteBookCatalog.c:194 src/gui/NoteBookCatalog.c:228 # src/gui/NoteBookSearch.c:163 # src/gui/Categories.c:105 src/gui/NoteBookCatalog.c:149 # src/gui/NoteBookCatalog.c:194 src/gui/NoteBookCatalog.c:228 # src/gui/NoteBookSearch.c:163 # src/gui/Categories.c:105 src/gui/NoteBookCatalog.c:147 # src/gui/NoteBookCatalog.c:213 src/gui/NoteBookCatalog.c:260 # src/gui/NoteBookSearch.c:163 src/gui/NoteBookSearch.c:237 # src/gui/CategoriesEditBox.c:141 src/gui/NoteBookCatalog.c:148 # src/gui/NoteBookCatalog.c:214 src/gui/NoteBookCatalog.c:261 # src/gui/NoteBookSearch.c:185 src/gui/NoteBookSearch.c:247 #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "Beschrijving" # src/gui/Categories.c:118 # src/gui/Categories.c:118 # src/gui/Categories.c:118 # src/gui/CategoriesEditBox.c:154 #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "Bijwerken" # src/gui/Categories.c:123 # src/gui/Categories.c:123 # src/gui/Categories.c:123 # src/gui/CategoriesEditBox.c:159 #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" "Hier kan je de eigenschappen van de geselecteerde categorie bijwerken. Klik " "op de knop Toevoegen/Bijwerken om de wijzigingen te bewaren." # src/gui/Categories.c:127 # src/gui/Categories.c:127 # src/gui/Categories.c:127 # src/gui/CategoriesEditBox.c:163 #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "Verwijderen" # src/gui/Categories.c:132 # src/gui/Categories.c:132 # src/gui/Categories.c:132 # src/gui/CategoriesEditBox.c:168 #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" "Verwijder de geselecteerde categorie uit de lijst. Je kan deze categorieën " "alleen verwijderen als geen ander element naar deze categorie verwijst." # src/gui/Categories.c:147 # src/gui/Categories.c:147 # src/gui/Categories.c:147 # src/gui/CategoriesEditBox.c:183 #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "Categorie naam : " # src/gui/Categories.c:157 # src/gui/Categories.c:157 # src/gui/Categories.c:157 # src/gui/CategoriesEditBox.c:193 #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "Voer categorie naam in." # src/gui/Categories.c:160 # src/gui/Categories.c:160 # src/gui/Categories.c:160 # src/gui/CategoriesEditBox.c:196 #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "Beschrijving : " # src/gui/Categories.c:183 # src/gui/Categories.c:183 # src/gui/Categories.c:183 # src/gui/CategoriesEditBox.c:219 #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "Voer categorie beschrijving in." # src/gui/Categories.c:196 # src/gui/Categories.c:196 # src/gui/Categories.c:196 # src/gui/CategoriesEditBox.c:232 #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "Toevoegen / Bijwerken" # src/gui/Categories.c:201 # src/gui/Categories.c:201 # src/gui/Categories.c:201 # src/gui/CategoriesEditBox.c:237 #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "Bewaar wijzigingen van categorie eigenschappen." # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/CategoriesEditBox.c:243 src/gui/MenuPopup.c:58 # src/gui/MenuPopup.c:128 #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Sluiten" # src/gui/Categories.c:212 # src/gui/Categories.c:212 # src/gui/Categories.c:212 # src/gui/CategoriesEditBox.c:248 #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Sluit venster bewerking categorie eigenschappen." # src/NoteBookManagmentCallBack.c:169 src/gui/ComboBoxCategories.c:105 # src/NoteBookManagmentCallBack.c:169 src/gui/ComboBoxCategories.c:105 # src/gui/ComboBoxCategories.c:105 src/gui/NoteBookManagmentCallBack.c:159 # src/gui/ComboBoxCategories.c:105 src/gui/NoteBookManagmentCallBack.c:203 #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "geen" # src/gui/Categories.c:297 # src/gui/Categories.c:297 # src/gui/Categories.c:297 # src/gui/CategoriesEditBox.c:368 #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "Verwijder categorie" # src/gui/Categories.c:297 # src/gui/Categories.c:297 # src/gui/Categories.c:297 # src/gui/CategoriesEditBox.c:368 #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "" "Je kunt deze categorie niet verwijderen. Een ander element verwijst ernaar." # src/gui/Categories.c:193 src/gui/Categories.c:395 src/gui/Categories.c:603 # src/gui/Categories.c:193 src/gui/Categories.c:395 src/gui/Categories.c:603 # src/gui/Categories.c:193 src/gui/Categories.c:395 src/gui/Categories.c:603 # src/gui/CategoriesEditBox.c:229 src/gui/CategoriesEditBox.c:526 # src/gui/CategoriesEditBox.c:849 #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "Toevoegen" # src/gui/Categories.c:410 src/gui/Categories.c:623 # src/gui/Categories.c:410 src/gui/Categories.c:623 # src/gui/Categories.c:410 src/gui/Categories.c:623 # src/gui/CategoriesEditBox.c:553 src/gui/CategoriesEditBox.c:882 #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "Bijwerken" # src/gui/MenuFile.c:320 # src/gui/MenuFile.c:320 # src/gui/DialogBox.c:77 # src/gui/DialogBox.c:77 #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "_Neen" # src/gui/MenuFile.c:213 src/gui/MenuFile.c:423 # src/gui/MenuFile.c:213 src/gui/MenuFile.c:423 # src/gui/FileSelectionBox.c:64 # src/gui/FileSelectionBox.c:64 #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "Verberg de bestandsbewerkingen" # src/gui/MenuFile.c:428 # src/gui/MenuFile.c:428 #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "Toon de bestandsbewerkingen" # src/gui/Menu.c:148 # src/gui/Menu.c:148 # src/gui/MenuAction.c:41 # src/gui/MenuAction.c:41 #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "_Actie" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "_Alles uitklappen" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "Klap alles uit" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "Klap a_lles ineen" # src/gui/Menu.c:162 # src/gui/Menu.c:162 # src/gui/MenuAction.c:54 # src/gui/MenuAction.c:54 #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "Bewerk _categorieën" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "Geen cataloog open : kan de categorieën niet bijwerken" # src/gui/Menu.c:50 # src/gui/Menu.c:50 # src/gui/MenuFile.c:48 # src/gui/MenuFile.c:48 #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "_Bestand" # src/gui/Menu.c:64 # src/gui/Menu.c:64 # src/gui/MenuFile.c:61 # src/gui/MenuFile.c:61 #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "_Nieuw" # src/gui/Menu.c:74 # src/gui/Menu.c:74 # src/gui/MenuFile.c:71 # src/gui/MenuFile.c:71 #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "_Openen" # src/gui/Menu.c:84 # src/gui/Menu.c:84 # src/gui/MenuFile.c:81 # src/gui/MenuFile.c:81 #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "Be_waren" # src/gui/Menu.c:94 # src/gui/Menu.c:94 # src/gui/MenuFile.c:91 # src/gui/MenuFile.c:91 #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "Bewaren _als" # src/gui/Menu.c:104 # src/gui/Menu.c:104 # src/gui/MenuFile.c:101 # src/gui/MenuFile.c:101 #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "Sluiten" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "Import" #: src/gui/gwmenufile.c:199 msgid "Export" msgstr "Export" # src/gui/Menu.c:121 # src/gui/Menu.c:121 # src/gui/MenuFile.c:118 # src/gui/MenuFile.c:118 #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "_Eigenschappen" # src/gui/MenuFile.c:272 # src/gui/MenuFile.c:272 # src/gui/MenuFileCallBack.c:73 # src/gui/MenuFileCallBack.c:82 #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "_Recente bestanden" # src/gui/Menu.c:138 # src/gui/Menu.c:138 # src/gui/MenuFile.c:135 # src/gui/MenuFile.c:135 #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "Afsluiten" # src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:157 # src/gui/MenuFile.c:54 src/gui/ToolBar.c:53 # src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:157 # src/gui/MenuFile.c:54 src/gui/ToolBar.c:53 # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:329 # src/gui/MenuFileCallBack.c:343 src/gui/MenuFileCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:148 src/gui/ToolBar.c:53 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 src/gui/ToolBar.c:70 #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Nieuwe cataloog" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "Er is geen cataloog plugin beschikbaar" # src/gui/MenuFile.c:284 # src/gui/MenuFile.c:284 # src/gui/MenuFileCallBack.c:51 src/gui/MenuFileCallBack.c:73 # src/gui/MenuFileCallBack.c:95 src/gui/MenuFileCallBack.c:186 # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:82 # src/gui/MenuFileCallBack.c:108 src/gui/MenuFileCallBack.c:223 #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "Wil je de cataloog bewaren :\n" "\n" # src/gui/MenuFile.c:269 # src/gui/MenuFile.c:269 # src/gui/MenuFileCallBack.c:51 # src/gui/MenuFileCallBack.c:56 #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Nieuw bestand" # src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:157 # src/gui/MenuFile.c:54 # src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:157 # src/gui/MenuFile.c:54 # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:329 # src/gui/MenuFileCallBack.c:343 src/gui/MenuFileCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:148 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "Geef naam van cataloog" # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:78 src/gui/MenuFileCallBack.c:411 # src/gui/MenuFileCallBack.c:425 src/gui/MenuFileCallBack.c:463 # src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "Open cataloog" # src/gui/MenuFile.c:272 # src/gui/MenuFile.c:272 # src/gui/MenuFileCallBack.c:73 # src/gui/MenuFileCallBack.c:82 #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "Open bestand" # src/gui/MenuFile.c:275 # src/gui/MenuFile.c:275 # src/gui/MenuFileCallBack.c:95 # src/gui/MenuFileCallBack.c:108 #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Sluit bestand" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "Geen cataloog geopend" #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "Verstuur bestand per mail" #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "Configureer mail opties in instellingen om mails te kunnen versturen." # src/gui/MenuFile.c:382 # src/gui/MenuFile.c:382 # src/gui/MenuFileCallBack.c:146 src/gui/MenuFileCallBack.c:169 # src/gui/MenuFileCallBack.c:323 src/gui/MenuFileCallBack.c:405 # src/gui/MenuFileCallBack.c:486 src/gui/MenuFileCallBack.c:564 # src/gui/MenuFileCallBack.c:629 # src/gui/MenuFileCallBack.c:175 src/gui/MenuFileCallBack.c:202 # src/gui/MenuFileCallBack.c:406 src/gui/MenuFileCallBack.c:503 # src/gui/MenuFileCallBack.c:596 src/gui/MenuFileCallBack.c:686 # src/gui/MenuFileCallBack.c:763 #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "Bewaar als cataloog" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "Je hebt de huidige cataloog niet bewaard, kan niet verzonden worden" # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "Cataloog eigenschappen" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "Bewaar cataloog" # src/gui/MenuFile.c:278 # src/gui/MenuFile.c:278 # src/gui/MenuFileCallBack.c:186 # src/gui/MenuFileCallBack.c:223 #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "Afsluiten " #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "Importeer cataloog vanuit" # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:1231 msgid "Catalog imported" msgstr "Cataloog geïmporteerd" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:1233 msgid "Catalog is not imported" msgstr "Geen cataloog geimporteerd" # src/gui/MenuFileCallBack.c:142 #: src/gui/gwmenufilecallback.c:1267 msgid "A catalog is already opened" msgstr "Cataloog is reeds geopend" # src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:157 # src/gui/MenuFile.c:54 # src/MenuFileCallBack.c:154 src/MenuFileCallBack.c:165 # src/MenuFileCallBack.c:352 src/NoteBookManagmentCallBack.c:157 # src/gui/MenuFile.c:54 # src/gui/MenuFileCallBack.c:56 src/gui/MenuFileCallBack.c:329 # src/gui/MenuFileCallBack.c:343 src/gui/MenuFileCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:148 # src/gui/MenuFileCallBack.c:61 src/gui/MenuFileCallBack.c:412 # src/gui/MenuFileCallBack.c:433 src/gui/MenuFileCallBack.c:476 # src/gui/NoteBookManagmentCallBack.c:190 #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 msgid "Export catalog to" msgstr "Exporteer cataloog naar" # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 #: src/gui/gwmenufilecallback.c:1291 msgid "Catalog exported" msgstr "Cataloog geëxporteerd" # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 #: src/gui/gwmenufilecallback.c:1293 msgid "Catalog is not exported" msgstr "Cataloog is niet geëxporteerd" # src/gui/Menu.c:172 # src/gui/Menu.c:172 # src/gui/MenuHelp.c:41 # src/gui/MenuHelp.c:41 #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "_Help" # src/gui/Menu.c:187 # src/gui/Menu.c:187 # src/gui/MenuHelp.c:54 # src/gui/MenuHelp.c:54 #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "O_ver" # src/gui/NoteBookManagment.c:257 # src/gui/NoteBookManagment.c:257 # src/gui/NoteBookManagment.c:277 # src/gui/NoteBookManagment.c:298 #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "_Opties" #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "Instellingen" # src/gui/MenuPopup.c:37 src/gui/MenuPopup.c:107 # src/gui/MenuPopup.c:37 src/gui/MenuPopup.c:107 # src/gui/MenuPopup.c:37 src/gui/MenuPopup.c:107 # src/gui/MenuPopup.c:38 src/gui/MenuPopup.c:108 #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Nieuw" # src/gui/MenuPopup.c:42 src/gui/MenuPopup.c:112 # src/gui/MenuPopup.c:42 src/gui/MenuPopup.c:112 # src/gui/MenuPopup.c:42 src/gui/MenuPopup.c:112 # src/gui/MenuPopup.c:43 src/gui/MenuPopup.c:113 #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "Openen" # src/gui/MenuPopup.c:47 src/gui/MenuPopup.c:117 # src/gui/MenuPopup.c:47 src/gui/MenuPopup.c:117 # src/gui/MenuPopup.c:47 src/gui/MenuPopup.c:117 # src/gui/MenuPopup.c:48 src/gui/MenuPopup.c:118 #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "Bewaren" # src/gui/MenuPopup.c:52 src/gui/MenuPopup.c:122 # src/gui/MenuPopup.c:52 src/gui/MenuPopup.c:122 # src/gui/MenuPopup.c:52 src/gui/MenuPopup.c:122 # src/gui/MenuPopup.c:53 src/gui/MenuPopup.c:123 #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "Bewaren als" # src/gui/MenuPopup.c:66 # src/gui/MenuPopup.c:66 # src/gui/MenuPopup.c:66 # src/gui/MenuPopup.c:67 #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "Afsluiten" # src/gui/MenuPopup.c:83 src/gui/MenuPopup.c:158 # src/gui/MenuPopup.c:83 src/gui/MenuPopup.c:158 # src/gui/MenuPopup.c:83 src/gui/MenuPopup.c:158 # src/gui/MenuPopup.c:84 src/gui/MenuPopup.c:159 #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Hernoemen" # src/MenuPopupCallBack.c:123 src/MenuPopupCallBack.c:343 # src/MenuPopupCallBack.c:428 src/MenuPopupCallBack.c:546 # src/gui/MenuPopup.c:93 src/gui/MenuPopup.c:173 src/gui/MenuPopup.c:204 # src/gui/MenuPopup.c:238 # src/MenuPopupCallBack.c:123 src/MenuPopupCallBack.c:343 # src/MenuPopupCallBack.c:428 src/MenuPopupCallBack.c:546 # src/gui/MenuPopup.c:93 src/gui/MenuPopup.c:173 src/gui/MenuPopup.c:204 # src/gui/MenuPopup.c:238 # src/MenuPopupCallBack.c:124 src/MenuPopupCallBack.c:350 # src/MenuPopupCallBack.c:435 src/MenuPopupCallBack.c:564 # src/gui/MenuPopup.c:93 src/gui/MenuPopup.c:173 src/gui/MenuPopup.c:204 # src/gui/MenuPopup.c:238 # src/gui/MenuPopup.c:94 src/gui/MenuPopup.c:174 src/gui/MenuPopup.c:205 # src/gui/MenuPopup.c:240 src/gui/MenuPopupCallBack.c:129 # src/gui/MenuPopupCallBack.c:358 src/gui/MenuPopupCallBack.c:444 # src/gui/MenuPopupCallBack.c:574 #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Beschrijving bijwerken" # src/gui/MenuPopup.c:136 src/gui/MenuPopup.c:182 src/gui/MenuPopup.c:218 # src/gui/MenuPopup.c:252 src/gui/Properties.c:85 # src/gui/MenuPopup.c:136 src/gui/MenuPopup.c:182 src/gui/MenuPopup.c:218 # src/gui/MenuPopup.c:252 src/gui/Properties.c:85 # src/gui/MenuPopup.c:136 src/gui/MenuPopup.c:182 src/gui/MenuPopup.c:218 # src/gui/MenuPopup.c:252 src/gui/Properties.c:85 # src/gui/MenuPopup.c:137 src/gui/MenuPopup.c:183 src/gui/MenuPopup.c:219 # src/gui/MenuPopup.c:254 src/gui/PropertiesBox.c:110 #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "Eigenschappen" # src/gui/MenuPopup.c:153 src/gui/MenuPopup.c:199 # src/gui/MenuPopup.c:153 src/gui/MenuPopup.c:199 # src/gui/MenuPopup.c:153 src/gui/MenuPopup.c:199 # src/gui/MenuPopup.c:154 src/gui/MenuPopup.c:200 #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "Verplaatsen naar..." # src/gui/MenuPopup.c:163 # src/gui/MenuPopup.c:163 # src/gui/MenuPopup.c:163 # src/gui/MenuPopup.c:164 #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "Schijf wissen" # src/MenuPopupCallBack.c:292 src/gui/MenuPopup.c:168 # src/MenuPopupCallBack.c:292 src/gui/MenuPopup.c:168 # src/MenuPopupCallBack.c:299 src/gui/MenuPopup.c:168 # src/gui/MenuPopup.c:169 src/gui/MenuPopupCallBack.c:306 #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "Volumenaam wijzigen" # src/gui/MenuPopup.c:209 src/gui/MenuPopup.c:243 # src/gui/MenuPopup.c:209 src/gui/MenuPopup.c:243 # src/gui/MenuPopup.c:209 src/gui/MenuPopup.c:243 # src/gui/MenuPopup.c:210 src/gui/MenuPopup.c:245 #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "Uit cataloog verwijderen" # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:261 #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "Bestand bijwerken" # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:259 # src/gui/MenuPopup.c:261 #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "Kan dit bestand niet bijwerken!!\n" # src/MenuPopupCallBack.c:55 # src/MenuPopupCallBack.c:55 # src/MenuPopupCallBack.c:56 # src/gui/MenuPopupCallBack.c:57 #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Cataloog hernoemen" # src/MenuPopupCallBack.c:55 # src/MenuPopupCallBack.c:55 # src/MenuPopupCallBack.c:56 # src/gui/MenuPopupCallBack.c:57 #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "Geef nieuwe naam voor cataloog" # src/NoteBookManagmentCallBack.c:175 # src/NoteBookManagmentCallBack.c:175 # src/gui/NoteBookManagmentCallBack.c:165 # src/gui/NoteBookManagmentCallBack.c:213 #: src/gui/gwmenupopupcallback.c:121 msgid "Invalid filled catalog name" msgstr "Ongeldige cataloog naam" # src/MenuPopupCallBack.c:123 # src/MenuPopupCallBack.c:123 # src/MenuPopupCallBack.c:124 # src/gui/MenuPopupCallBack.c:129 #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "Cataloogbeschrijving" # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Schijf hernoemen" # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "Geef nieuwe naam voor schijf" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "De gegeven bestandsnaam bestaat al in deze folder" #: src/gui/gwmenupopupcallback.c:374 msgid "No new disk name was filled" msgstr "Je hebt geen nieuwe bestandsnaam ingevuld" # src/MenuPopupCallBack.c:292 # src/MenuPopupCallBack.c:292 # src/MenuPopupCallBack.c:299 # src/gui/MenuPopupCallBack.c:306 #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "Geef nieuwe schijf volume label" # src/MenuPopupCallBack.c:343 # src/MenuPopupCallBack.c:343 # src/MenuPopupCallBack.c:350 # src/gui/MenuPopupCallBack.c:358 #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "Schijfbeschrijving" # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "Folder hernoemen" # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "Geef nieuwe naam folder" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "De ingevulde foldernaam bestaat al in de actuele folder" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "Geen nieuwe foldernaam ingegeven" # src/MenuPopupCallBack.c:428 # src/MenuPopupCallBack.c:428 # src/MenuPopupCallBack.c:435 # src/gui/MenuPopupCallBack.c:444 #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "Folderbeschrijving" # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "Bestand hernoemen" # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:218 # src/MenuPopupCallBack.c:219 # src/gui/MenuPopupCallBack.c:225 #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "Geef nieuwe bestandsnaam" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "De gegeven bestandsnaam bestaat al in deze folder" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "Je hebt geen nieuwe bestandsnaam ingevuld" # src/MenuPopupCallBack.c:546 # src/MenuPopupCallBack.c:546 # src/MenuPopupCallBack.c:564 # src/gui/MenuPopupCallBack.c:574 #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "Bestandsbeschrijving" # src/gui/NoteBookCatalog.c:67 # src/gui/NoteBookCatalog.c:67 # src/gui/NoteBookCatalog.c:66 # src/gui/NoteBookCatalog.c:67 #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Archiveer" # src/gui/NoteBookCatalog.c:154 # src/gui/NoteBookCatalog.c:154 # src/gui/NoteBookCatalog.c:152 # src/gui/NoteBookCatalog.c:153 #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "Cataloog" # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:76 #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "Sluit cataloog" # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "Even wachten..." # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Cataloog gesloten" # src/Exploration.c:594 src/Exploration.c:650 src/Exploration.c:728 # src/Exploration.c:784 # src/Exploration.c:594 src/Exploration.c:650 src/Exploration.c:728 # src/Exploration.c:784 # src/Exploration.c:599 src/Exploration.c:655 src/Exploration.c:733 # src/Exploration.c:789 # src/Exploration.c:620 src/Exploration.c:676 src/Exploration.c:757 # src/Exploration.c:813 #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "onbekende eigenaar" # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:607 src/Exploration.c:663 src/Exploration.c:741 # src/Exploration.c:797 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "onbekende groep" # src/NoteBookManagmentCallBack.c:175 src/gui/NoteBookManagment.c:79 # src/NoteBookManagmentCallBack.c:175 src/gui/NoteBookManagment.c:79 # src/gui/NoteBookManagment.c:99 src/gui/NoteBookManagmentCallBack.c:165 # src/gui/NoteBookManagment.c:127 src/gui/NoteBookManagmentCallBack.c:213 #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Nieuwe schijf" # src/gui/NoteBookManagment.c:95 # src/gui/NoteBookManagment.c:95 # src/gui/NoteBookManagment.c:115 # src/gui/NoteBookManagment.c:139 #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "Selecteer het medium dat als schijf aan je cataloog wordt toegevoegd." # src/gui/NoteBookManagment.c:97 # src/gui/NoteBookManagment.c:97 # src/gui/NoteBookManagment.c:117 # src/gui/NoteBookManagment.c:142 #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "Selecteer medium : " # src/gui/NoteBookManagment.c:124 # src/gui/NoteBookManagment.c:124 # src/gui/NoteBookManagment.c:144 # src/gui/NoteBookManagment.c:167 #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "" "Geef nummer van nieuwe schijf. Dit nummer kan je helpen bij de historiek van " "je cataloog." # src/gui/NoteBookManagment.c:126 src/gui/Properties.c:717 # src/gui/NoteBookManagment.c:126 src/gui/Properties.c:717 # src/gui/NoteBookManagment.c:146 src/gui/Properties.c:717 # src/gui/NoteBookManagment.c:170 src/gui/PropertiesBox.c:653 #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Archiefnr : " # src/gui/NoteBookManagment.c:141 # src/gui/NoteBookManagment.c:141 # src/gui/NoteBookManagment.c:161 # src/gui/NoteBookManagment.c:183 #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "Geef de naam van de nieuwe schijf. Deze naam komt in je cataloog." # src/gui/NoteBookManagment.c:143 # src/gui/NoteBookManagment.c:143 # src/gui/NoteBookManagment.c:163 # src/gui/NoteBookManagment.c:186 #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "Naam : " # src/gui/NoteBookManagment.c:159 src/gui/Properties.c:945 # src/gui/Properties.c:1288 src/gui/Properties.c:1646 # src/gui/NoteBookManagment.c:159 src/gui/Properties.c:945 # src/gui/Properties.c:1288 src/gui/Properties.c:1646 # src/gui/NoteBookManagment.c:179 src/gui/Properties.c:945 # src/gui/Properties.c:1288 src/gui/Properties.c:1646 # src/gui/NoteBookManagment.c:200 src/gui/PropertiesBox.c:811 # src/gui/PropertiesBox.c:1065 src/gui/PropertiesBox.c:1334 #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "Categorie : " # src/gui/NoteBookManagment.c:165 # src/gui/NoteBookManagment.c:165 # src/gui/NoteBookManagment.c:185 # src/gui/NoteBookManagment.c:206 #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "" "Selecteer categorie voor schijf die toegevoegd zal worden (ook als de optie " "is aangestipt)." # src/gui/NoteBookManagment.c:250 # src/gui/NoteBookManagment.c:250 # src/gui/NoteBookManagment.c:270 # src/gui/NoteBookManagment.c:289 #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "Geef het apparaatbestand van het geselecteerde medium." # src/NoteBookManagmentCallBack.c:313 src/NoteBookManagmentCallBack.c:355 # src/gui/NoteBookManagment.c:179 # src/NoteBookManagmentCallBack.c:313 src/NoteBookManagmentCallBack.c:355 # src/gui/NoteBookManagment.c:179 # src/gui/NoteBookManagment.c:199 src/gui/NoteBookManagmentCallBack.c:300 # src/gui/NoteBookManagmentCallBack.c:341 # src/gui/NoteBookManagment.c:219 src/gui/NoteBookManagmentCallBack.c:332 # src/gui/NoteBookManagmentCallBack.c:376 #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Informatie : " # src/gui/NoteBookManagment.c:190 # src/gui/NoteBookManagment.c:190 # src/gui/NoteBookManagment.c:210 # src/gui/NoteBookManagment.c:229 #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "" "Geef type van het geselecteerde medium (bijv : ext2, ext3, vfat, ntfs, ...)." # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:212 src/gui/NoteBookManagmentCallBack.c:302 # src/gui/NoteBookManagmentCallBack.c:356 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Type : " # src/gui/NoteBookManagment.c:202 # src/gui/NoteBookManagment.c:202 # src/gui/NoteBookManagment.c:222 # src/gui/NoteBookManagment.c:241 #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "Toon of geselecteerde medium is gemonteerd of niet." # src/NoteBookManagmentCallBack.c:317 src/NoteBookManagmentCallBack.c:375 # src/gui/NoteBookManagment.c:204 # src/NoteBookManagmentCallBack.c:317 src/NoteBookManagmentCallBack.c:375 # src/gui/NoteBookManagment.c:204 # src/gui/NoteBookManagment.c:224 src/gui/NoteBookManagmentCallBack.c:304 # src/gui/NoteBookManagmentCallBack.c:361 # src/gui/NoteBookManagment.c:244 src/gui/NoteBookManagmentCallBack.c:338 # src/gui/NoteBookManagmentCallBack.c:395 #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "Gemonteerd : " # src/gui/NoteBookManagment.c:214 # src/gui/NoteBookManagment.c:214 # src/gui/NoteBookManagment.c:234 # src/gui/NoteBookManagment.c:253 #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "Geef volumenaam geselecteerd medium (enkel wanneer gemonteerd)." # src/NoteBookManagmentCallBack.c:319 # src/NoteBookManagmentCallBack.c:319 # src/gui/NoteBookManagment.c:236 src/gui/NoteBookManagmentCallBack.c:306 # src/gui/NoteBookManagment.c:256 src/gui/NoteBookManagmentCallBack.c:341 #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Volume : " # src/gui/NoteBookManagment.c:226 # src/gui/NoteBookManagment.c:226 # src/gui/NoteBookManagment.c:246 # src/gui/NoteBookManagment.c:265 #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "" "Geef serienummer van geselecteerd medium (alleen indien gemonteerd). Dit " "nummer is een fabrieksnummer." # src/gui/NoteBookManagment.c:228 # src/gui/NoteBookManagment.c:228 # src/gui/NoteBookManagment.c:248 # src/gui/NoteBookManagment.c:268 #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Serienummer : " # src/gui/NoteBookManagment.c:238 # src/gui/NoteBookManagment.c:238 # src/gui/NoteBookManagment.c:258 # src/gui/NoteBookManagment.c:277 #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "" "Geef volledige ruimte op geselecteerd medium (alleen indien gemonteerd)." # src/NoteBookManagmentCallBack.c:323 src/NoteBookManagmentCallBack.c:403 # src/gui/NoteBookManagment.c:240 # src/NoteBookManagmentCallBack.c:323 src/NoteBookManagmentCallBack.c:403 # src/gui/NoteBookManagment.c:240 # src/gui/NoteBookManagment.c:260 src/gui/NoteBookManagmentCallBack.c:310 # src/gui/NoteBookManagmentCallBack.c:386 # src/gui/NoteBookManagment.c:280 src/gui/NoteBookManagmentCallBack.c:347 # src/gui/NoteBookManagmentCallBack.c:420 #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "Capaciteit : " # src/gui/NoteBookManagment.c:250 # src/gui/NoteBookManagment.c:250 # src/gui/NoteBookManagment.c:270 # src/gui/NoteBookManagment.c:289 #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "Geef vrije ruimte op geselecteerd medium (alleen indien gemonteerd)." # src/NoteBookManagmentCallBack.c:325 src/NoteBookManagmentCallBack.c:408 # src/gui/NoteBookManagment.c:252 # src/NoteBookManagmentCallBack.c:325 src/NoteBookManagmentCallBack.c:408 # src/gui/NoteBookManagment.c:252 # src/gui/NoteBookManagment.c:272 src/gui/NoteBookManagmentCallBack.c:312 # src/gui/NoteBookManagmentCallBack.c:390 # src/gui/NoteBookManagment.c:292 src/gui/NoteBookManagmentCallBack.c:350 # src/gui/NoteBookManagmentCallBack.c:424 #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Vrije ruimte : " # src/gui/NoteBookManagment.c:257 # src/gui/NoteBookManagment.c:257 # src/gui/NoteBookManagment.c:277 # src/gui/NoteBookManagment.c:298 #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "Opties" # src/gui/NoteBookManagment.c:268 # src/gui/NoteBookManagment.c:268 # src/gui/NoteBookManagment.c:288 # src/gui/NoteBookManagment.c:307 #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "Toon informatie" # src/gui/NoteBookManagment.c:275 # src/gui/NoteBookManagment.c:275 # src/gui/NoteBookManagment.c:295 # src/gui/NoteBookManagment.c:314 #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" "Toon geselecteerde medium informatie zoals pad, capaciteit, vrije ruimte, " "label,... " # src/gui/NoteBookManagment.c:277 # src/gui/NoteBookManagment.c:277 # src/gui/NoteBookManagment.c:297 # src/gui/NoteBookManagment.c:317 #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Automonteren" # src/gui/NoteBookManagment.c:284 # src/gui/NoteBookManagment.c:284 # src/gui/NoteBookManagment.c:304 # src/gui/NoteBookManagment.c:324 #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" "Monteer medium indien niet gemonteerd. En demonteer nadien ook als het " "gedemonteerd was voor de scan." # src/gui/Properties.c:706 # src/gui/Properties.c:706 # src/gui/Properties.c:706 # src/gui/PropertiesBox.c:645 #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "Onderzoek boomstructuur van medium." #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "Hou deze optie aangestipt om alle folder- en bestandsinfo te scannen. " # src/gui/NoteBookManagment.c:286 # src/gui/NoteBookManagment.c:286 # src/gui/NoteBookManagment.c:306 # src/gui/NoteBookManagment.c:327 #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "Onderzoek archief bestanden (.tar, .gz, .zip, ...)" # src/gui/NoteBookManagment.c:293 # src/gui/NoteBookManagment.c:293 # src/gui/NoteBookManagment.c:313 # src/gui/NoteBookManagment.c:334 #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "Nog niet geïmplementeerd!!\n" "Onderzoek alle archieven, alsof het een folder is. Archieven zijn tar- of " "gzip-bestanden." # src/gui/NoteBookManagment.c:295 # src/gui/NoteBookManagment.c:295 # src/gui/NoteBookManagment.c:315 # src/gui/NoteBookManagment.c:337 #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "Werp medium uit indien mogelijk" # src/gui/NoteBookManagment.c:302 # src/gui/NoteBookManagment.c:302 # src/gui/NoteBookManagment.c:322 # src/gui/NoteBookManagment.c:344 #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" "Werp medium uit (CD-ROM...), ook als de schuif gesloten was. Dit kan alleen " "als automonteren geactiveerd is!!" # src/gui/NoteBookManagment.c:304 # src/gui/NoteBookManagment.c:304 # src/gui/NoteBookManagment.c:324 # src/gui/NoteBookManagment.c:347 #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "Zet categorie recursief" # src/gui/NoteBookManagment.c:310 # src/gui/NoteBookManagment.c:310 # src/gui/NoteBookManagment.c:330 # src/gui/NoteBookManagment.c:353 #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "" "Pas categorie toe op alle delen van de toe te voegen schijf (schijf, folders " "en bestanden)." # src/gui/NoteBookManagment.c:312 # src/gui/NoteBookManagment.c:312 # src/gui/NoteBookManagment.c:332 # src/gui/NoteBookManagment.c:356 #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "Automatische beschrijving" # src/gui/NoteBookManagment.c:317 # src/gui/NoteBookManagment.c:317 # src/gui/NoteBookManagment.c:337 # src/gui/NoteBookManagment.c:361 #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "" "Maak automatisch bestandsbeschrijving aan (beschrijving formaat bestand, " "beeldgrootte van xmp of jpg, enz...)." #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "Gebruik een geavanceerd patroon om schijfnaam te genereren" #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Je kan extra tags invullen om schijfnaam te genereren met " "schijfinformatie :\n" "- %% : %\n" "- %n : archiefnummer (kan prefix gebruiken om te prefixen met 0 : %.4n " "geeft 0001, 0002, 0003, ..., 0091, ...\n" "- %l : medium volumelabel\n" "- %t : type medium\n" "- %s : serienummer" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "" "Gebruik medium volume label als schijfnaam (alleen als schijfnaam leeg is) " #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" "Indien je geen schijfnaam gegeven hebt en je geselecteerde medium een " "volumenaam heeft, zal de volumenaam als schijfnaam gebruikt worden." # src/Catalog.c:1009 src/Catalog.c:1122 src/NoteBookManagmentCallBack.c:125 # src/NoteBookManagmentCallBack.c:137 src/NoteBookManagmentCallBack.c:175 # src/NoteBookManagmentCallBack.c:261 src/NoteBookManagmentCallBack.c:509 # src/Catalog.c:1009 src/Catalog.c:1122 src/NoteBookManagmentCallBack.c:125 # src/NoteBookManagmentCallBack.c:137 src/NoteBookManagmentCallBack.c:175 # src/NoteBookManagmentCallBack.c:261 src/NoteBookManagmentCallBack.c:509 # src/Catalog.c:1009 src/Catalog.c:1122 # src/gui/NoteBookManagmentCallBack.c:119 # src/gui/NoteBookManagmentCallBack.c:130 # src/gui/NoteBookManagmentCallBack.c:165 # src/gui/NoteBookManagmentCallBack.c:249 # src/gui/NoteBookManagmentCallBack.c:492 # src/Catalog.c:1186 src/Catalog.c:1344 # src/gui/NoteBookManagmentCallBack.c:148 # src/gui/NoteBookManagmentCallBack.c:162 # src/gui/NoteBookManagmentCallBack.c:213 # src/gui/NoteBookManagmentCallBack.c:285 # src/gui/NoteBookManagmentCallBack.c:620 #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "Voeg schijf toe" # src/gui/NoteBookManagment.c:328 # src/gui/NoteBookManagment.c:328 # src/gui/NoteBookManagment.c:348 # src/gui/NoteBookManagment.c:397 #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Beheer" # src/NoteBookManagmentCallBack.c:125 # src/NoteBookManagmentCallBack.c:125 # src/gui/NoteBookManagmentCallBack.c:119 # src/gui/NoteBookManagmentCallBack.c:148 #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "De schijf is niet toegevoegd : er is geen medium gemonteerd" # src/NoteBookManagmentCallBack.c:137 # src/NoteBookManagmentCallBack.c:137 # src/gui/NoteBookManagmentCallBack.c:130 # src/gui/NoteBookManagmentCallBack.c:162 #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "De schijf is niet toegevoegd : medium kan niet gemonteerd worden" # src/NoteBookManagmentCallBack.c:157 src/gui/MenuPopup.c:88 # src/NoteBookManagmentCallBack.c:157 src/gui/MenuPopup.c:88 # src/gui/MenuPopup.c:88 src/gui/NoteBookManagmentCallBack.c:148 # src/gui/MenuPopup.c:89 src/gui/NoteBookManagmentCallBack.c:190 #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "Nieuwe schijf toevoegen" # src/NoteBookManagmentCallBack.c:175 # src/NoteBookManagmentCallBack.c:175 # src/gui/NoteBookManagmentCallBack.c:165 # src/gui/NoteBookManagmentCallBack.c:213 #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "Schijfnaam ingeven" # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "Scannen bezig" # src/NoteBookManagmentCallBack.c:556 # src/NoteBookManagmentCallBack.c:556 # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "Schijf toevoegen is bezig" # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "Wacht even" # src/Catalog.c:641 src/NoteBookManagmentCallBack.c:199 # src/NoteBookManagmentCallBack.c:236 # src/Catalog.c:641 src/NoteBookManagmentCallBack.c:199 # src/NoteBookManagmentCallBack.c:236 # src/Catalog.c:641 src/gui/NoteBookManagmentCallBack.c:188 # src/gui/NoteBookManagmentCallBack.c:224 # src/Catalog.c:731 src/gui/NoteBookManagmentCallBack.c:245 #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "De schijf is toegevoegd" # src/NoteBookManagmentCallBack.c:261 # src/NoteBookManagmentCallBack.c:261 # src/gui/NoteBookManagmentCallBack.c:249 # src/gui/NoteBookManagmentCallBack.c:285 #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Monteren mislukt\n" # src/NoteBookManagmentCallBack.c:321 src/NoteBookManagmentCallBack.c:398 # src/NoteBookManagmentCallBack.c:321 src/NoteBookManagmentCallBack.c:398 # src/gui/NoteBookManagmentCallBack.c:308 # src/gui/NoteBookManagmentCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:344 # src/gui/NoteBookManagmentCallBack.c:416 #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Serienummer : " # src/NoteBookManagmentCallBack.c:355 src/NoteBookManagmentCallBack.c:366 # src/NoteBookManagmentCallBack.c:388 src/NoteBookManagmentCallBack.c:392 # src/NoteBookManagmentCallBack.c:398 src/NoteBookManagmentCallBack.c:403 # src/NoteBookManagmentCallBack.c:408 # src/NoteBookManagmentCallBack.c:355 src/NoteBookManagmentCallBack.c:366 # src/NoteBookManagmentCallBack.c:388 src/NoteBookManagmentCallBack.c:392 # src/NoteBookManagmentCallBack.c:398 src/NoteBookManagmentCallBack.c:403 # src/NoteBookManagmentCallBack.c:408 # src/gui/NoteBookManagmentCallBack.c:341 # src/gui/NoteBookManagmentCallBack.c:353 # src/gui/NoteBookManagmentCallBack.c:373 # src/gui/NoteBookManagmentCallBack.c:377 # src/gui/NoteBookManagmentCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:386 # src/gui/NoteBookManagmentCallBack.c:390 # src/gui/NoteBookManagmentCallBack.c:376 # src/gui/NoteBookManagmentCallBack.c:387 # src/gui/NoteBookManagmentCallBack.c:407 # src/gui/NoteBookManagmentCallBack.c:411 # src/gui/NoteBookManagmentCallBack.c:416 # src/gui/NoteBookManagmentCallBack.c:420 # src/gui/NoteBookManagmentCallBack.c:424 #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "geen speler" # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:607 src/Exploration.c:663 src/Exploration.c:741 # src/Exploration.c:797 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "onbekend" # src/NoteBookManagmentCallBack.c:375 # src/NoteBookManagmentCallBack.c:375 # src/gui/NoteBookManagmentCallBack.c:361 # src/gui/NoteBookManagmentCallBack.c:395 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Ja" # src/NoteBookManagmentCallBack.c:375 # src/NoteBookManagmentCallBack.c:375 # src/gui/NoteBookManagmentCallBack.c:361 # src/gui/NoteBookManagmentCallBack.c:395 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "Neen" # src/NoteBookManagmentCallBack.c:383 # src/NoteBookManagmentCallBack.c:383 # src/gui/NoteBookManagmentCallBack.c:368 # src/gui/NoteBookManagmentCallBack.c:402 #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "Geen label" # src/NoteBookManagmentCallBack.c:392 src/gui/NoteBookManagment.c:216 # src/NoteBookManagmentCallBack.c:392 src/gui/NoteBookManagment.c:216 # src/gui/NoteBookManagmentCallBack.c:377 # src/gui/NoteBookManagmentCallBack.c:411 #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Volumenaam : " # src/NoteBookManagmentCallBack.c:556 # src/NoteBookManagmentCallBack.c:556 # src/gui/NoteBookManagmentCallBack.c:536 # src/gui/NoteBookManagmentCallBack.c:530 #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "schijf toevoegen is afgebroken" # src/NoteBookManagmentCallBack.c:509 # src/NoteBookManagmentCallBack.c:509 # src/gui/NoteBookManagmentCallBack.c:492 # src/gui/NoteBookManagmentCallBack.c:620 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "Geef nieuwe cataloognaam\n" # src/gui/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:104 #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "Opzoeken : " # src/gui/NoteBookSearch.c:71 src/gui/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:71 src/gui/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:97 src/gui/NoteBookSearch.c:243 # src/gui/NoteBookSearch.c:116 src/gui/NoteBookSearch.c:273 #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "Opzoeken" # src/gui/NoteBookSearch.c:74 # src/gui/NoteBookSearch.c:74 # src/gui/NoteBookSearch.c:100 # src/gui/NoteBookSearch.c:121 #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "Opzoekresultaten zijn hoofdlettergevoelig. Opzoeken met wildcards " "ondersteunt de karakters \"*\".\n" "Voorbeeld : img*.bmp or *.htm\n" "Opzoeken met sleutelwoorden aanvaardt een lijst verplichte woorden." # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/Categories.c:207 src/gui/MenuPopup.c:57 src/gui/MenuPopup.c:127 # src/gui/CategoriesEditBox.c:243 src/gui/MenuPopup.c:58 # src/gui/MenuPopup.c:128 #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "Wissen" # src/gui/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:104 #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "Wist alle opzoekresultaten" # src/gui/NoteBookSearch.c:80 # src/gui/NoteBookSearch.c:80 # src/gui/NoteBookSearch.c:107 # src/gui/NoteBookSearch.c:127 #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "Hoofdlettergevoelig" # src/gui/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:112 # src/gui/NoteBookSearch.c:134 #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "De opzoeking kan al of niet hoofdlettergevoelig zijn.\n" "Indien wel, dan is \"File.txt\" niet gelijk aan \"file.txt\". Maar indien " "niet dan zijn beide resultaten in feite dezelfde." # src/gui/NoteBookSearch.c:71 src/gui/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:71 src/gui/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:97 src/gui/NoteBookSearch.c:243 # src/gui/NoteBookSearch.c:116 src/gui/NoteBookSearch.c:273 #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "Type Opzoeking" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "Sleutelwoorden" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "" "Geef een lijst van sleutelwoorden die allen in de gezochte bestanden moeten " "voorkomen." #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "Wildcards" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "" "Geef het volledige wildcards patroon. Dit patroon mag de karakters \"?\" and " "\"*\" bevatten" # src/gui/NoteBookSearch.c:88 # src/gui/NoteBookSearch.c:88 # src/gui/NoteBookSearch.c:115 # src/gui/NoteBookSearch.c:137 #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "Gewone uitdrukking" # src/gui/NoteBookSearch.c:93 # src/gui/NoteBookSearch.c:93 # src/gui/NoteBookSearch.c:120 # src/gui/NoteBookSearch.c:144 #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "" "Je kan een gewone uitdrukking gebruiken. Bekijk de documentatie voor meer " "informatie." # src/gui/Menu.c:50 # src/gui/Menu.c:50 # src/gui/NoteBookSearch.c:130 # src/gui/NoteBookSearch.c:152 #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "Bestand" # src/gui/NoteBookSearch.c:136 # src/gui/NoteBookSearch.c:158 #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "De opzoeking geeft bestandsnamen." # src/gui/Properties.c:1341 # src/gui/Properties.c:1341 # src/gui/NoteBookSearch.c:139 # src/gui/NoteBookSearch.c:161 #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "Folder" # src/gui/NoteBookSearch.c:144 # src/gui/NoteBookSearch.c:166 #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "De opzoeking geeft foldernamen." # src/gui/NoteBookSearch.c:138 # src/gui/NoteBookSearch.c:138 # src/gui/NoteBookSearch.c:147 src/gui/NoteBookSearch.c:212 # src/gui/NoteBookSearch.c:169 src/gui/NoteBookSearch.c:232 #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "Schijf" # src/gui/NoteBookSearch.c:152 # src/gui/NoteBookSearch.c:174 #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "De opzoeking geeft schijfnamen." # src/gui/NoteBookCatalog.c:144 src/gui/NoteBookCatalog.c:193 # src/gui/NoteBookCatalog.c:227 src/gui/NoteBookSearch.c:158 # src/gui/NoteBookCatalog.c:144 src/gui/NoteBookCatalog.c:193 # src/gui/NoteBookCatalog.c:227 src/gui/NoteBookSearch.c:158 # src/gui/NoteBookCatalog.c:142 src/gui/NoteBookCatalog.c:212 # src/gui/NoteBookCatalog.c:259 src/gui/NoteBookSearch.c:155 # src/gui/NoteBookSearch.c:232 # src/gui/NoteBookCatalog.c:143 src/gui/NoteBookCatalog.c:213 # src/gui/NoteBookCatalog.c:260 src/gui/NoteBookSearch.c:177 # src/gui/NoteBookSearch.c:244 #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "Categorie" # src/gui/NoteBookSearch.c:160 # src/gui/NoteBookSearch.c:182 #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "De opzoeking geeft categorienamen." # src/gui/NoteBookSearch.c:168 # src/gui/NoteBookSearch.c:190 #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "De opzoeking geeft beschrijvingen." # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:78 src/gui/MenuFileCallBack.c:411 # src/gui/MenuFileCallBack.c:425 src/gui/MenuFileCallBack.c:463 # src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "Zoek in cataloog" #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "%lu item(s) gevonden." # src/gui/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:59 # src/gui/NoteBookSearch.c:85 # src/gui/NoteBookSearch.c:104 #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "Opzoekresultaat" #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "Geen item gevonden." # src/gui/NoteBookSearch.c:71 src/gui/NoteBookSearch.c:169 # src/gui/NoteBookSearch.c:71 src/gui/NoteBookSearch.c:169 # src/gui/NoteBookSearchCallBack.c:87 # src/gui/NoteBookSearchCallBack.c:99 #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "Aan het zoeken..." # src/gui/NoteBookSearchCallBack.c:87 # src/gui/NoteBookSearchCallBack.c:99 #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "Opzoeking kan niet starten : er is geen cataloog opgeladen" # src/gui/ProgressBarBox.c:185 src/gui/ProgressBarBox.c:215 # src/gui/ProgressBarBox.c:185 src/gui/ProgressBarBox.c:215 # src/gui/ProgressBarBox.c:185 src/gui/ProgressBarBox.c:215 #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "_Ok" # src/gui/Properties.c:286 # src/gui/Properties.c:286 # src/gui/Properties.c:286 # src/gui/PropertiesBox.c:335 #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "Geef cataloognaam." # src/gui/Properties.c:332 # src/gui/Properties.c:332 # src/gui/Properties.c:332 # src/gui/PropertiesBox.c:366 #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "Versie : " # src/gui/Properties.c:331 # src/gui/Properties.c:331 # src/gui/Properties.c:331 # src/gui/PropertiesBox.c:365 #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "Versie " # src/gui/Properties.c:331 # src/gui/Properties.c:331 # src/gui/Properties.c:331 # src/gui/PropertiesBox.c:365 #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr " aangemaakt met " # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/PropertiesBox.c:376 src/gui/PropertiesBox.c:377 #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "Schijven in cataloog : " # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/Properties.c:347 src/gui/Properties.c:348 # src/gui/PropertiesBox.c:376 src/gui/PropertiesBox.c:377 #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "Schijven in cataloog : %d" # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/PropertiesBox.c:387 src/gui/PropertiesBox.c:388 # src/gui/PropertiesBox.c:717 src/gui/PropertiesBox.c:718 #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Totaal bestanden : " # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/Properties.c:363 src/gui/Properties.c:364 src/gui/Properties.c:807 # src/gui/Properties.c:808 # src/gui/PropertiesBox.c:387 src/gui/PropertiesBox.c:388 # src/gui/PropertiesBox.c:717 src/gui/PropertiesBox.c:718 #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, c-format msgid "Total Files : %ld" msgstr "Totaal bestanden : %ld" # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/PropertiesBox.c:398 src/gui/PropertiesBox.c:399 # src/gui/PropertiesBox.c:728 src/gui/PropertiesBox.c:729 #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "Totaal Folders : " # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/Properties.c:379 src/gui/Properties.c:380 src/gui/Properties.c:823 # src/gui/Properties.c:824 # src/gui/PropertiesBox.c:398 src/gui/PropertiesBox.c:399 # src/gui/PropertiesBox.c:728 src/gui/PropertiesBox.c:729 #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, c-format msgid "Total Folders : %ld" msgstr "Totaal Folders : %ld" # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/PropertiesBox.c:413 src/gui/PropertiesBox.c:414 # src/gui/PropertiesBox.c:1202 src/gui/PropertiesBox.c:1203 #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "Bestandsgrootte : " # src/gui/Properties.c:417 src/gui/Properties.c:418 # src/gui/Properties.c:417 src/gui/Properties.c:418 # src/gui/Properties.c:417 src/gui/Properties.c:418 # src/gui/PropertiesBox.c:424 src/gui/PropertiesBox.c:425 #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Totale capaciteit : " # src/gui/Properties.c:433 src/gui/Properties.c:434 # src/gui/Properties.c:433 src/gui/Properties.c:434 # src/gui/Properties.c:433 src/gui/Properties.c:434 # src/gui/PropertiesBox.c:435 src/gui/PropertiesBox.c:436 #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "Totaal gebruikte ruimte : " # src/gui/Properties.c:449 src/gui/Properties.c:450 # src/gui/Properties.c:449 src/gui/Properties.c:450 # src/gui/Properties.c:449 src/gui/Properties.c:450 # src/gui/PropertiesBox.c:446 src/gui/PropertiesBox.c:447 #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "Totaal vrije ruimte : " # src/gui/Properties.c:471 # src/gui/Properties.c:471 # src/gui/Properties.c:471 # src/gui/PropertiesBox.c:461 #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "Schijf statistieken" # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/PropertiesBox.c:478 src/gui/PropertiesBox.c:479 #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "CD-Rom : " # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/Properties.c:497 src/gui/Properties.c:498 # src/gui/PropertiesBox.c:478 src/gui/PropertiesBox.c:479 #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "CD-Rom : %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "Audio CD : " # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #: src/gui/gwpropertiesbox.c:577 #, c-format msgid "Audio CD : %d" msgstr "Audio CD : %d" # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "HS : " # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "HS : %d" # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/PropertiesBox.c:500 src/gui/PropertiesBox.c:501 #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "Diskette : " # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/Properties.c:529 src/gui/Properties.c:530 # src/gui/PropertiesBox.c:500 src/gui/PropertiesBox.c:501 #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "Diskette : %d" # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/PropertiesBox.c:515 src/gui/PropertiesBox.c:516 #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip : " # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/Properties.c:551 src/gui/Properties.c:552 # src/gui/PropertiesBox.c:515 src/gui/PropertiesBox.c:516 #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip : %d" # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:212 src/gui/NoteBookManagmentCallBack.c:302 # src/gui/NoteBookManagmentCallBack.c:356 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 msgid "Tape : " msgstr "Band : " # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:212 src/gui/NoteBookManagmentCallBack.c:302 # src/gui/NoteBookManagmentCallBack.c:356 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:232 src/gui/NoteBookManagmentCallBack.c:335 # src/gui/NoteBookManagmentCallBack.c:390 src/gui/PropertiesBox.c:684 #: src/gui/gwpropertiesbox.c:649 #, c-format msgid "Tape : %d" msgstr "Band : %d" #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "Netwerk : " # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 #: src/gui/gwpropertiesbox.c:666 #, c-format msgid "Network : %d" msgstr "Netwerk : %d" # src/gui/NoteBookManagment.c:143 # src/gui/NoteBookManagment.c:143 # src/gui/NoteBookManagment.c:163 # src/gui/NoteBookManagment.c:186 #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 msgid "Jaz : " msgstr "Jaz : " # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/Properties.c:513 src/gui/Properties.c:514 # src/gui/PropertiesBox.c:489 src/gui/PropertiesBox.c:490 #: src/gui/gwpropertiesbox.c:683 #, c-format msgid "Jaz : %d" msgstr "Jaz : %d" # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "Andere : " # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/Properties.c:567 src/gui/Properties.c:568 # src/gui/PropertiesBox.c:526 src/gui/PropertiesBox.c:527 #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "Andere : %d" # src/gui/Properties.c:589 # src/gui/Properties.c:589 # src/gui/Properties.c:589 # src/gui/PropertiesBox.c:541 #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Cataloog categorieën : " # src/gui/Properties.c:610 # src/gui/Properties.c:610 # src/gui/Properties.c:610 # src/gui/PropertiesBox.c:557 #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "Cataloog beschrijving : " # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Cataloog info" # src/gui/Properties.c:706 # src/gui/Properties.c:706 # src/gui/Properties.c:706 # src/gui/PropertiesBox.c:645 #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "Geef schijfnaam." # src/gui/Properties.c:730 # src/gui/Properties.c:730 # src/gui/Properties.c:730 # src/gui/PropertiesBox.c:664 #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "Geef archiefnummer van de schijf." # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/NoteBookManagmentCallBack.c:315 src/NoteBookManagmentCallBack.c:369 # src/gui/NoteBookManagment.c:192 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/NoteBookManagment.c:212 src/gui/NoteBookManagmentCallBack.c:302 # src/gui/NoteBookManagmentCallBack.c:356 src/gui/Properties.c:759 # src/gui/Properties.c:760 # src/gui/PropertiesBox.c:685 #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr " Type : " # src/gui/Properties.c:775 src/gui/Properties.c:776 # src/gui/Properties.c:775 src/gui/Properties.c:776 # src/gui/Properties.c:775 src/gui/Properties.c:776 # src/gui/PropertiesBox.c:695 src/gui/PropertiesBox.c:696 #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "Serienummer : " # src/gui/Properties.c:791 src/gui/Properties.c:792 # src/gui/Properties.c:791 src/gui/Properties.c:792 # src/gui/Properties.c:791 src/gui/Properties.c:792 # src/gui/PropertiesBox.c:706 src/gui/PropertiesBox.c:707 #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "Volumelabel : " # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/PropertiesBox.c:743 src/gui/PropertiesBox.c:744 #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "Totale capaciteit : " # src/gui/Properties.c:861 src/gui/Properties.c:862 # src/gui/Properties.c:861 src/gui/Properties.c:862 # src/gui/Properties.c:861 src/gui/Properties.c:862 # src/gui/PropertiesBox.c:754 src/gui/PropertiesBox.c:755 #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "Gebruikte ruimte : " # src/gui/Properties.c:877 src/gui/Properties.c:878 # src/gui/Properties.c:877 src/gui/Properties.c:878 # src/gui/Properties.c:877 src/gui/Properties.c:878 # src/gui/PropertiesBox.c:765 src/gui/PropertiesBox.c:766 #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "Vrije ruimte : " # src/gui/Properties.c:915 src/gui/Properties.c:916 # src/gui/Properties.c:915 src/gui/Properties.c:916 # src/gui/Properties.c:915 src/gui/Properties.c:916 # src/gui/PropertiesBox.c:790 src/gui/PropertiesBox.c:791 #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "Cataloognaam : " # src/gui/Properties.c:931 src/gui/Properties.c:932 # src/gui/Properties.c:931 src/gui/Properties.c:932 # src/gui/Properties.c:931 src/gui/Properties.c:932 # src/gui/PropertiesBox.c:801 src/gui/PropertiesBox.c:802 #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "Cataloog bijwerken : " # src/gui/Properties.c:967 # src/gui/Properties.c:967 # src/gui/Properties.c:967 # src/gui/PropertiesBox.c:828 #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "Schijfbeschrijving : " # src/gui/Properties.c:998 # src/gui/Properties.c:998 # src/gui/Properties.c:998 # src/gui/PropertiesBox.c:854 #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Schijfinfo" # src/gui/NoteBookCatalog.c:189 # src/gui/NoteBookCatalog.c:189 # src/gui/NoteBookCatalog.c:255 # src/gui/PropertiesBox.c:908 #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "Foldernaam" # src/gui/Properties.c:1104 # src/gui/Properties.c:1104 # src/gui/Properties.c:1104 # src/gui/PropertiesBox.c:940 #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Type : (folder)" # src/gui/Properties.c:1118 src/gui/Properties.c:1119 # src/gui/Properties.c:1118 src/gui/Properties.c:1119 # src/gui/Properties.c:1118 src/gui/Properties.c:1119 # src/gui/PropertiesBox.c:949 src/gui/PropertiesBox.c:950 #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "Foldergrootte : " # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/PropertiesBox.c:960 src/gui/PropertiesBox.c:961 # src/gui/PropertiesBox.c:1213 src/gui/PropertiesBox.c:1214 #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "Aangemaakt op : " # src/gui/Properties.c:1150 src/gui/Properties.c:1151 # src/gui/Properties.c:1492 src/gui/Properties.c:1493 # src/gui/Properties.c:1150 src/gui/Properties.c:1151 # src/gui/Properties.c:1492 src/gui/Properties.c:1493 # src/gui/Properties.c:1150 src/gui/Properties.c:1151 # src/gui/Properties.c:1492 src/gui/Properties.c:1493 # src/gui/PropertiesBox.c:971 src/gui/PropertiesBox.c:972 # src/gui/PropertiesBox.c:1224 src/gui/PropertiesBox.c:1225 #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "Laatst bijgewerkt op : " # src/gui/Properties.c:1166 src/gui/Properties.c:1167 # src/gui/Properties.c:1508 src/gui/Properties.c:1509 # src/gui/Properties.c:1166 src/gui/Properties.c:1167 # src/gui/Properties.c:1508 src/gui/Properties.c:1509 # src/gui/Properties.c:1166 src/gui/Properties.c:1167 # src/gui/Properties.c:1508 src/gui/Properties.c:1509 # src/gui/PropertiesBox.c:982 src/gui/PropertiesBox.c:983 # src/gui/PropertiesBox.c:1235 src/gui/PropertiesBox.c:1236 #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "Laatst aangesproken op : " # src/gui/Properties.c:1188 src/gui/Properties.c:1189 # src/gui/Properties.c:1530 src/gui/Properties.c:1531 # src/gui/Properties.c:1188 src/gui/Properties.c:1189 # src/gui/Properties.c:1530 src/gui/Properties.c:1531 # src/gui/Properties.c:1188 src/gui/Properties.c:1189 # src/gui/Properties.c:1530 src/gui/Properties.c:1531 # src/gui/PropertiesBox.c:997 src/gui/PropertiesBox.c:998 # src/gui/PropertiesBox.c:1250 src/gui/PropertiesBox.c:1251 #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Rechten : " # src/gui/Properties.c:1204 src/gui/Properties.c:1205 # src/gui/Properties.c:1546 src/gui/Properties.c:1547 # src/gui/Properties.c:1204 src/gui/Properties.c:1205 # src/gui/Properties.c:1546 src/gui/Properties.c:1547 # src/gui/Properties.c:1204 src/gui/Properties.c:1205 # src/gui/Properties.c:1546 src/gui/Properties.c:1547 # src/gui/PropertiesBox.c:1008 src/gui/PropertiesBox.c:1009 # src/gui/PropertiesBox.c:1261 src/gui/PropertiesBox.c:1262 #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "Eigenaar : " # src/gui/Properties.c:1220 src/gui/Properties.c:1221 # src/gui/Properties.c:1562 src/gui/Properties.c:1563 # src/gui/Properties.c:1220 src/gui/Properties.c:1221 # src/gui/Properties.c:1562 src/gui/Properties.c:1563 # src/gui/Properties.c:1220 src/gui/Properties.c:1221 # src/gui/Properties.c:1562 src/gui/Properties.c:1563 # src/gui/PropertiesBox.c:1019 src/gui/PropertiesBox.c:1020 # src/gui/PropertiesBox.c:1272 src/gui/PropertiesBox.c:1273 #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "Groep : " # src/gui/Properties.c:1258 src/gui/Properties.c:1259 # src/gui/Properties.c:1602 src/gui/Properties.c:1606 # src/gui/Properties.c:1609 # src/gui/Properties.c:1258 src/gui/Properties.c:1259 # src/gui/Properties.c:1602 src/gui/Properties.c:1606 # src/gui/Properties.c:1609 # src/gui/Properties.c:1258 src/gui/Properties.c:1259 # src/gui/Properties.c:1602 src/gui/Properties.c:1606 # src/gui/Properties.c:1609 # src/gui/PropertiesBox.c:1044 src/gui/PropertiesBox.c:1045 # src/gui/PropertiesBox.c:1299 src/gui/PropertiesBox.c:1303 # src/gui/PropertiesBox.c:1306 #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "Schijfnaam : " # src/gui/Properties.c:1274 src/gui/Properties.c:1275 # src/gui/Properties.c:1626 src/gui/Properties.c:1630 # src/gui/Properties.c:1633 # src/gui/Properties.c:1274 src/gui/Properties.c:1275 # src/gui/Properties.c:1626 src/gui/Properties.c:1630 # src/gui/Properties.c:1633 # src/gui/Properties.c:1274 src/gui/Properties.c:1275 # src/gui/Properties.c:1626 src/gui/Properties.c:1630 # src/gui/Properties.c:1633 # src/gui/PropertiesBox.c:1055 src/gui/PropertiesBox.c:1056 # src/gui/PropertiesBox.c:1318 src/gui/PropertiesBox.c:1322 # src/gui/PropertiesBox.c:1325 #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "Plaats op schijf : " # src/gui/Properties.c:1310 # src/gui/Properties.c:1310 # src/gui/Properties.c:1310 # src/gui/PropertiesBox.c:1082 #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "Folderbeschrijving : " # src/gui/Properties.c:1341 # src/gui/Properties.c:1341 # src/gui/Properties.c:1341 # src/gui/PropertiesBox.c:1108 #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Folder Info" # src/NoteBookManagmentCallBack.c:392 src/gui/NoteBookManagment.c:216 # src/NoteBookManagmentCallBack.c:392 src/gui/NoteBookManagment.c:216 # src/gui/NoteBookManagmentCallBack.c:377 # src/gui/PropertiesBox.c:1161 #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "Bestandsnaam : " # src/gui/Properties.c:1446 # src/gui/Properties.c:1446 # src/gui/Properties.c:1446 # src/gui/PropertiesBox.c:1193 #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Bestandstype : nog niet geïmplementeerd!!" # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/Properties.c:401 src/gui/Properties.c:402 src/gui/Properties.c:1460 # src/gui/Properties.c:1461 # src/gui/PropertiesBox.c:413 src/gui/PropertiesBox.c:414 # src/gui/PropertiesBox.c:1202 src/gui/PropertiesBox.c:1203 #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "Bestandsgrootte : %s (%s bytes)" # src/gui/Properties.c:1668 # src/gui/Properties.c:1668 # src/gui/Properties.c:1668 # src/gui/PropertiesBox.c:1351 #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "Bestandsbeschrijving : " # src/gui/Properties.c:1699 # src/gui/Properties.c:1699 # src/gui/Properties.c:1699 # src/gui/PropertiesBox.c:1377 #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Bestandsinfo" # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "Cataloog bestand" # src/gui/Properties.c:589 # src/gui/Properties.c:589 # src/gui/Properties.c:589 # src/gui/PropertiesBox.c:541 #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Cataloog compressie niveau :" #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "" "Selecteer het compressie niveau van cataloog. Standaard waarde is 3, wat een " "redelijke mate van snelheid en bestandsgrootte geeft. " # src/MenuPopupCallBack.c:55 # src/MenuPopupCallBack.c:55 # src/MenuPopupCallBack.c:56 # src/gui/MenuPopupCallBack.c:57 #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Recent geopende catalogen :" #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "" "Selecteer de grootte voor de historiek van de recent geopende catalogen. De " "standaard waarde is 5." #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "Historiek wissen" #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "Klik hier om historiek van recent geopende bestanden te wissen." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Cataloog automatisch opladen" #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "Standaard cataloog automatisch opladen bij opstarten." # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1186 src/Catalog.c:1344 #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "Laatst geopende cataloog opladen." # src/NoteBookManagmentCallBack.c:509 # src/NoteBookManagmentCallBack.c:509 # src/gui/NoteBookManagmentCallBack.c:492 # src/gui/NoteBookManagmentCallBack.c:620 #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "Geselecteerde cataloog opladen." #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "Geef het volledige pad van het op te laden cataloog bestand." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "Selecteer cataloog" #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "Klik hier om te bladeren en het cataloog bestand te selecteren." # src/gui/MenuFile.c:382 # src/gui/MenuFile.c:382 # src/gui/MenuFileCallBack.c:146 src/gui/MenuFileCallBack.c:169 # src/gui/MenuFileCallBack.c:323 src/gui/MenuFileCallBack.c:405 # src/gui/MenuFileCallBack.c:486 src/gui/MenuFileCallBack.c:564 # src/gui/MenuFileCallBack.c:629 # src/gui/MenuFileCallBack.c:175 src/gui/MenuFileCallBack.c:202 # src/gui/MenuFileCallBack.c:406 src/gui/MenuFileCallBack.c:503 # src/gui/MenuFileCallBack.c:596 src/gui/MenuFileCallBack.c:686 # src/gui/MenuFileCallBack.c:763 #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "Selecteer de automatisch op te laden cataloog" #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "Verkenner" # src/gui/NoteBookSearch.c:80 # src/gui/NoteBookSearch.c:80 # src/gui/NoteBookSearch.c:107 # src/gui/NoteBookSearch.c:127 #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "Hoofdlettergevoelig sorteren" #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "Het resultaat van de sortering in verkenner is hoofdlettergevoelig." #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Resultaat sortering groep op folder/bestand." #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" "Het sorteerresultaat in verkenner kan gegroepeerd zijn per item type. Indien " "deze optie is aangevinkt, zullen alle items gegroepeerd zijn per folder of " "bestand." #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Afmetingen kolommen automatisch aanpassen" #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "Afmetingen kolommen verkenner automatisch aanpassen." # src/gui/NoteBookSearch.c:138 # src/gui/NoteBookSearch.c:138 # src/gui/NoteBookSearch.c:147 src/gui/NoteBookSearch.c:212 # src/gui/NoteBookSearch.c:169 src/gui/NoteBookSearch.c:232 #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "Schijven" #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "Zichtbaar" #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Verbergen" #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "Tonen" #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "Verborgen" # src/gui/Menu.c:50 # src/gui/Menu.c:50 # src/gui/NoteBookSearch.c:130 # src/gui/NoteBookSearch.c:152 #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Bestanden" #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "Het resultaat van de sortering in de opzoeking is hoofdlettergevoelig." #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Resultaat sortering zoekopdracht groeperen per type." #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" "De sortering van het opzoekresultaat kan gegroepeerd per item type. Indien " "deze optie is aangevinkt, zullen alle items gegroepeerd worden per cataloog, " "schijf, folder en bestand." #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "Alle sleutelwoorden moeten overeenstemmen." #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" "Kies of alle sleutelwoorden of enkel één van alle sleutelwoorden moeten " "overeenstemmen met het item om in het zoekresultaat opgenomen te worden." # src/gui/MenuFile.c:278 # src/gui/MenuFile.c:278 # src/gui/MenuFileCallBack.c:186 # src/gui/MenuFileCallBack.c:223 #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "Snel" #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "Algemene opties" #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "GUI" # src/gui/Categories.c:201 # src/gui/Categories.c:201 # src/gui/Categories.c:201 # src/gui/CategoriesEditBox.c:237 #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "Bewaar de GUI eigenschappen bij het afsluiten." #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "Bewaar de GUI eigenschappen zoals venstergrootte en -positie." #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "Laat biepjes toe" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "Laat toe om korte biep te geven bij sommige gebeurtenissen." #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Post" #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "E-post adres :" #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "Geef je e-post adres" #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "Server uitgaande post :" #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "Geef je uitgaande post server. Meestal is dit adres mail.domain.com" #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Server poort :" #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "Geef de poort van de uitgaande post server (meestal is dit 25)." #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "" "Dit venster Instellingen laat toe bepaalde functionaliteiten en " "eigenschappen vast te leggen." #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "Instellingen" #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "Selecteer de te configureren sectie ." #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "" "Wijzig in dit paneel alle beschikbare eigenschappen om het programma naar je " "wensen te configureren." #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "" "In dit venster Instellingen kan je het programma configureren. Je kunt hier " "sommige eigenschappen wijzigen." #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "" "Klik op OK knop om wijzigingen toe te passen en het Instellingen venster te " "sluiten." #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "" "Klik op de knop Afbreken om de wijzigingen te annuleren en het venster " "Instellingen te sluiten." #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "_Toepassen" #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "" "Klik op de knop Toepassen om de wijzigingen toe te passen (zonder het " "venster Instellingen te sluiten)." #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "Instellingen gewijzigd" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "" "Indien je wijzigingen niet toepast zul je ze allemaal verliezen. Wil je " "wijzigingen toepassen?" # src/gui/StatusBarCallBack.c:56 #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], totaal schijven : %d" # src/gui/StatusBar.c:203 # src/gui/StatusBar.c:203 # src/gui/StatusBar.c:203 # src/gui/StatusBarCallBack.c:57 src/gui/StatusBarCallBack.c:88 # src/gui/StatusBarCallBack.c:120 #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr " Gelijste items : %d (totale grootte : %s)" # src/gui/StatusBarCallBack.c:80 #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], capaciteit : %s, vrij : %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr "Lege schijf" # src/gui/StatusBar.c:203 # src/gui/StatusBar.c:203 # src/gui/StatusBar.c:203 # src/gui/StatusBarCallBack.c:84 src/gui/StatusBarCallBack.c:116 # src/gui/StatusBarCallBack.c:145 #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr " Geselecteerd item : %d (totale grootte : %s)" # src/gui/StatusBarCallBack.c:112 #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr " Folder \"%s\", %s (bestanden %d, subfolders %d)" # src/gui/StatusBar.c:197 # src/gui/StatusBar.c:197 # src/gui/StatusBar.c:197 # src/gui/StatusBarCallBack.c:144 #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr "%s, %s, %s" # src/gui/StatusBar.c:225 src/gui/StatusBar.c:247 # src/gui/StatusBar.c:225 src/gui/StatusBar.c:247 # src/gui/StatusBar.c:225 src/gui/StatusBar.c:247 # src/gui/StatusBarCallBack.c:169 src/gui/StatusBarCallBack.c:193 #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr " Geselecteerd item : %d" # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBar.c:220 # src/gui/StatusBarCallBack.c:168 #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr " Cataloog verkenner" # src/gui/StatusBar.c:242 # src/gui/StatusBar.c:242 # src/gui/StatusBar.c:242 # src/gui/StatusBarCallBack.c:192 #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr " Zoekmachine" # src/gui/StatusBar.c:264 # src/gui/StatusBar.c:264 # src/gui/StatusBar.c:264 # src/gui/StatusBarCallBack.c:216 #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr " Cataloogbeheer" # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:59 # src/gui/ToolBar.c:76 #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Sluit cataloog" # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:78 src/gui/MenuFileCallBack.c:411 # src/gui/MenuFileCallBack.c:425 src/gui/MenuFileCallBack.c:463 # src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "Zend cataloog per e-post" # src/gui/Menu.c:187 # src/gui/Menu.c:187 # src/gui/MenuHelp.c:54 # src/gui/About.c:108 #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "Over" # src/gui/About.c:128 # src/gui/About.c:128 # src/gui/About.c:128 # src/gui/About.c:125 #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "Beheer verwijderbare media\n" "Door Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" # src/gui/About.c:129 # src/gui/About.c:126 #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" "Met GWhere kun je een gegevensbank van je CD's en andere verwijderbare media " "beheren (harde schijven, diskettes, ZIP diskettes, CD-ROM, enz...). Met " "GWhere is het makkelijk je CD's te doorlopen of snel iets op te zoeken " "zonder telkens je CD's in de speler te moeten steken." #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Werkt onder " #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "" "Dit venster laat je toe een cataloog per e-post aan één (of meerdere) van " "je contacten te sturen." #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "Zend e-post" #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "Naar :" #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "CC :" #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "BCC :" #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "Onderwerp :" #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "Geef hier het e-post adres van je contact(en)." #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "Geef hier het e-post adres van je contact(en) in copie." #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "Geef hier het e-post adres van je contact(en) in verborgen copie." #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "Geef hier het onderwerp van je boodschap." #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "Aangehecht bestand :" #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "Kies om het cataloog bestand al of niet aan te hechten." #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "Type hier de tekst van je boodschap." # src/gui/Menu.c:84 # src/gui/Menu.c:84 # src/gui/MenuFile.c:81 # src/gui/MenuFile.c:81 #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "_Zenden" #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "Klik hier om boodschap te zenden (met aangehechte cataloog)." #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "Klik hier om het verzenden af te breken." # src/gui/NoteBookManagmentCallBack.c:181 # src/gui/NoteBookManagmentCallBack.c:217 # src/gui/NoteBookManagmentCallBack.c:234 #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "Aan het zenden, even wachten..." #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "Er is een fout tijdens het verzenden. Zie aub je parameters na." # src/support.c:118 # src/support.c:118 # src/support.c:118 # src/support.c:120 #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Kan het pixmap bestand niet vinden: %s" # src/support.c:125 # src/support.c:125 # src/support.c:125 # src/support.c:127 #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "Fout tijdens het opladen van pixmap bestand: %s" # src/Catalog.c:605 # src/Catalog.c:605 # src/Catalog.c:605 # src/Catalog.c:695 #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "Fout : kan het bestand niet openen." # src/Catalog.c:641 # src/Catalog.c:641 # src/Catalog.c:641 # src/Catalog.c:731 #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "Fout : kan de werkfolder niet bereiken." # src/Catalog.c:692 # src/Catalog.c:692 # src/Catalog.c:692 # src/Catalog.c:780 #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "De schijf is niet toegevoegd\n" "Toevoegen is afgebroken door gebruiker" # src/Catalog.c:641 src/NoteBookManagmentCallBack.c:199 # src/NoteBookManagmentCallBack.c:236 # src/Catalog.c:641 src/NoteBookManagmentCallBack.c:199 # src/NoteBookManagmentCallBack.c:236 # src/Catalog.c:641 src/gui/NoteBookManagmentCallBack.c:188 # src/gui/NoteBookManagmentCallBack.c:224 # src/Catalog.c:798 src/Catalog.c:803 src/Catalog.c:808 src/Catalog.c:813 # src/Catalog.c:818 src/Catalog.c:823 src/Catalog.c:828 src/Catalog.c:833 # src/Catalog.c:850 src/Catalog.c:855 src/Catalog.c:860 src/Catalog.c:865 # src/Catalog.c:870 src/Catalog.c:875 #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "De schijf is niet toegevoegd\n" # src/Catalog.c:798 #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "%s buiten de gealloceerde geheugenruimte van het proces." # src/Catalog.c:803 #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" "Een onderdeel van het volgende pad heeft meer dan %d karakters, of de " "volledige pad naam is is langer dan %d karakters : %s." # src/Catalog.c:808 #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "De volgende folder bestaat niet : %s." # src/Catalog.c:813 src/Catalog.c:865 #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "Niet genoeg geheugen om de bewerking te voltooien." # src/Catalog.c:818 #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "Een onderdeel van de pad prefix is geen folder : %s." # src/Catalog.c:823 #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "" "Teveel symbolische verbindingen gevonden bij het oplossen van pad : %s." # src/Catalog.c:828 #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "I/O fout bij het navigeren naar folder : %s." # src/Exploration.c:594 src/Exploration.c:650 src/Exploration.c:728 # src/Exploration.c:784 # src/Exploration.c:594 src/Exploration.c:650 src/Exploration.c:728 # src/Exploration.c:784 # src/Exploration.c:599 src/Exploration.c:655 src/Exploration.c:733 # src/Exploration.c:789 # src/Catalog.c:833 src/Catalog.c:875 #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "Onbekende fout" # src/Catalog.c:935 # src/Catalog.c:935 # src/Catalog.c:935 # src/Catalog.c:1110 #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" "De schijf is niet toegevoegd\n" "Fout : kan de bovenliggende folder niet bereiken." # src/Catalog.c:850 #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Teveel bestandsbeschrijvingen in gebruik door het proces." # src/Catalog.c:855 #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Teveel bestanden open in het systeem." # src/Catalog.c:860 #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "" "De volgende folder bestaat niet of de naam is een lege letterreeks : %s." # src/Catalog.c:870 #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "De volgende foldernaam is geen folder : %s." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" "Kritieke fout tijdens het extraheren van bestandsonformatie %s%s%s.\n" " Bewaar je cataloog indien mogelijk, sluit GWhere af en rapporteer de " "anomalie aan de GWhere project groep aub." # src/Catalog.c:926 # src/Catalog.c:926 # src/Catalog.c:926 # src/Catalog.c:1102 #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" "De schijf is niet toegevoegd\n" "Fout : kan de folder niet sluiten." # src/main.c:47 #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "Werkt op %s" # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Cataloog geladen" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "Cataloog opladen mislukt" # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "Cataloog aan het laden" #: src/gwapplicationmanager.c:499 msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "Het cataloog bestand bestaat niet. Zie het pad van het bestand na." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:1140 src/Catalog.c:1149 src/Catalog.c:1221 src/Catalog.c:1231 # src/Catalog.c:1235 src/Catalog.c:1251 src/Catalog.c:1276 src/Catalog.c:1292 # src/Catalog.c:1315 src/Catalog.c:1330 src/gui/ToolBar.c:74 #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "Cataloog aan het bewaren" # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/Properties.c:641 # src/gui/PropertiesBox.c:583 #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Cataloog bewaard" # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFile.c:199 src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:78 src/gui/MenuFileCallBack.c:411 # src/gui/MenuFileCallBack.c:425 src/gui/MenuFileCallBack.c:463 # src/gui/ToolBar.c:55 # src/gui/MenuFileCallBack.c:87 src/gui/MenuFileCallBack.c:509 # src/gui/MenuFileCallBack.c:527 src/gui/MenuFileCallBack.c:569 # src/gui/ToolBar.c:72 #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "Bewaren van catloog is mislukt" # src/gui/NoteBookCatalog.c:114 src/gui/NoteBookCatalog.c:221 # src/gui/NoteBookCatalog.c:114 src/gui/NoteBookCatalog.c:221 # src/gui/NoteBookCatalog.c:112 src/gui/NoteBookCatalog.c:206 # src/gui/NoteBookCatalog.c:113 src/gui/NoteBookCatalog.c:207 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Rechten" # src/gui/NoteBookCatalog.c:119 src/gui/NoteBookCatalog.c:222 # src/gui/NoteBookCatalog.c:119 src/gui/NoteBookCatalog.c:222 # src/gui/NoteBookCatalog.c:117 src/gui/NoteBookCatalog.c:207 # src/gui/NoteBookCatalog.c:118 src/gui/NoteBookCatalog.c:208 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "Eigenaar" # src/gui/NoteBookCatalog.c:124 src/gui/NoteBookCatalog.c:223 # src/gui/NoteBookCatalog.c:124 src/gui/NoteBookCatalog.c:223 # src/gui/NoteBookCatalog.c:122 src/gui/NoteBookCatalog.c:208 # src/gui/NoteBookCatalog.c:123 src/gui/NoteBookCatalog.c:209 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "Groep" # src/gui/NoteBookCatalog.c:129 src/gui/NoteBookCatalog.c:224 # src/gui/NoteBookSearch.c:148 # src/gui/NoteBookCatalog.c:129 src/gui/NoteBookCatalog.c:224 # src/gui/NoteBookSearch.c:148 # src/gui/NoteBookCatalog.c:127 src/gui/NoteBookCatalog.c:209 # src/gui/NoteBookSearch.c:222 # src/gui/NoteBookCatalog.c:128 src/gui/NoteBookCatalog.c:210 # src/gui/NoteBookSearch.c:238 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "Grootte" # src/gui/NoteBookCatalog.c:134 src/gui/NoteBookCatalog.c:225 # src/gui/NoteBookCatalog.c:134 src/gui/NoteBookCatalog.c:225 # src/gui/NoteBookCatalog.c:132 src/gui/NoteBookCatalog.c:210 # src/gui/NoteBookCatalog.c:133 src/gui/NoteBookCatalog.c:211 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "INode" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Toegangsdatum" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Wijzigingsdatum" # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/Properties.c:1134 src/gui/Properties.c:1135 # src/gui/Properties.c:1476 src/gui/Properties.c:1477 # src/gui/PropertiesBox.c:960 src/gui/PropertiesBox.c:961 # src/gui/PropertiesBox.c:1213 src/gui/PropertiesBox.c:1214 #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "Datum aanmaak" # src/NoteBookManagmentCallBack.c:392 src/gui/NoteBookManagment.c:216 # src/NoteBookManagmentCallBack.c:392 src/gui/NoteBookManagment.c:216 # src/gui/NoteBookManagmentCallBack.c:377 # src/gui/PropertiesBox.c:1161 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "Bestandsnaam" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "Toegangspad" # src/gui/NoteBookCatalog.c:187 # src/gui/NoteBookCatalog.c:187 # src/gui/NoteBookCatalog.c:253 # src/gui/NoteBookCatalog.c:254 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Archiefnr" # src/gui/NoteBookCatalog.c:188 # src/gui/NoteBookCatalog.c:188 # src/gui/NoteBookCatalog.c:254 # src/gui/NoteBookCatalog.c:255 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Type" # src/gui/NoteBookCatalog.c:189 # src/gui/NoteBookCatalog.c:189 # src/gui/NoteBookCatalog.c:255 # src/gui/NoteBookCatalog.c:256 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Volumenaam" # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/Properties.c:845 src/gui/Properties.c:846 # src/gui/PropertiesBox.c:743 src/gui/PropertiesBox.c:744 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "Totale capaciteit" # src/gui/NoteBookCatalog.c:191 # src/gui/NoteBookCatalog.c:191 # src/gui/NoteBookCatalog.c:257 # src/gui/NoteBookCatalog.c:258 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "Vije ruimte" # src/gui/NoteBookCatalog.c:139 src/gui/NoteBookCatalog.c:192 # src/gui/NoteBookCatalog.c:226 src/gui/NoteBookSearch.c:153 # src/gui/NoteBookCatalog.c:139 src/gui/NoteBookCatalog.c:192 # src/gui/NoteBookCatalog.c:226 src/gui/NoteBookSearch.c:153 # src/gui/NoteBookCatalog.c:137 src/gui/NoteBookCatalog.c:211 # src/gui/NoteBookCatalog.c:258 src/gui/NoteBookSearch.c:227 # src/gui/NoteBookCatalog.c:138 src/gui/NoteBookCatalog.c:212 # src/gui/NoteBookCatalog.c:259 src/gui/NoteBookSearch.c:241 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Datum" # src/NoteBookManagmentCallBack.c:321 src/NoteBookManagmentCallBack.c:398 # src/NoteBookManagmentCallBack.c:321 src/NoteBookManagmentCallBack.c:398 # src/gui/NoteBookManagmentCallBack.c:308 # src/gui/NoteBookManagmentCallBack.c:382 # src/gui/NoteBookManagmentCallBack.c:344 # src/gui/NoteBookManagmentCallBack.c:416 #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Serienummer" # src/gui/NoteBookSearch.c:143 # src/gui/NoteBookSearch.c:143 # src/gui/NoteBookSearch.c:217 # src/gui/NoteBookSearch.c:235 #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "Pad" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "Volledig" #: win32/config.h:288 msgid "Compact" msgstr "Compact" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (vereist)" #: win32/config.h:290 msgid "Main engine application." msgstr "Hoofdprogramma." #: win32/config.h:291 msgid "GTK+ 2.6 RunTime (required)" msgstr "GTK+ 2.6 RunTime (vereist)" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "GUI uitvoeringsprogramma." #: win32/config.h:293 msgid "Plugins" msgstr "Plugins" #: win32/config.h:294 msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "" "Modules om automatisch bestandsbeschrijvingen te extraheren en voor import/" "export van catalogen." #: win32/config.h:295 msgid "Languages Files" msgstr "Taalbestanden" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "Alle taalbestanden voor de vertaling van het programma." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "Je moet je laatste versie van GWhere verwijderen" #: win32/config.h:298 msgid "Installer already running" msgstr "Installeren is al bezig" #: win32/config.h:299 msgid "Install options" msgstr "Installatie opties" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "Welke gebruiker kunnen GWhere starten ?" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "Installatie toegangsrechten voor GWhere" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" "Je kunt GWhere installeren voor alle gebruikers of alleen voor de huidige " "gebruiker. Selecteer waarvoor je GWhere wil installeren." #: win32/config.h:303 msgid "All users|Current user" msgstr "Alle gebruikers|Huidige gebruiker" #: win32/config.h:304 msgid "All users" msgstr "Alle gebruikers" # src/Catalog.c:71 src/Catalog.c:79 src/Catalog.c:88 src/Catalog.c:126 # src/Catalog.c:135 src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:71 src/Catalog.c:79 src/Catalog.c:88 src/Catalog.c:126 # src/Catalog.c:135 src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:71 src/Catalog.c:79 src/Catalog.c:88 src/Catalog.c:126 # src/Catalog.c:135 src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:91 src/Catalog.c:102 src/Catalog.c:115 src/Catalog.c:134 # src/Catalog.c:183 src/Catalog.c:195 src/Catalog.c:270 src/Catalog.c:363 #~ msgid "Load file" #~ msgstr "Bestand opladen" # src/Catalog.c:71 # src/Catalog.c:71 # src/Catalog.c:71 # src/Catalog.c:91 src/Catalog.c:102 #~ msgid "Error : cannot open this file." #~ msgstr "Fout : kan dit bestand niet openen." # src/Catalog.c:79 # src/Catalog.c:79 # src/Catalog.c:79 # src/Catalog.c:115 #~ msgid "Error : cannot read the file version." #~ msgstr "Fout : kan de bestandsversie niet lezen." # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:964 src/Catalog.c:972 src/Catalog.c:1038 src/Catalog.c:1047 # src/gui/ToolBar.c:57 # src/Catalog.c:119 src/Catalog.c:139 #~ msgid "Load catalog" #~ msgstr "Cataloog opladen" # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:119 src/Catalog.c:139 src/Catalog.c:1235 src/Catalog.c:1251 # src/Catalog.c:1276 src/Catalog.c:1292 src/Catalog.c:1315 src/Catalog.c:1330 #~ msgid "Error : cannot close file." #~ msgstr "Fout : kan bestand niet sluiten." # src/Catalog.c:88 # src/Catalog.c:88 # src/Catalog.c:88 # src/Catalog.c:134 #~ msgid "Error : it's not a GWhere file." #~ msgstr "Fout : dit is geen GWhere bestand." # src/Catalog.c:126 # src/Catalog.c:126 # src/Catalog.c:126 # src/Catalog.c:183 #~ msgid "Error : this GWhere version file is unknown." #~ msgstr "Fout : dit GWhere versie bestand is onbekend." # src/Catalog.c:135 # src/Catalog.c:135 # src/Catalog.c:135 # src/Catalog.c:195 #~ msgid "Error : cannot close this file after loading." #~ msgstr "Fout : kan dit bestand niet sluiten na het opladen." # src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:195 src/Catalog.c:283 # src/Catalog.c:270 src/Catalog.c:363 #~ msgid "Error : during the loading of disk." #~ msgstr "Fout : tijdens het opladen van de schijf." # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:964 src/Catalog.c:1038 # src/Catalog.c:1140 src/Catalog.c:1221 #~ msgid "Error : cannot create file." #~ msgstr "Fout : kan bestand niet aanmaken." # src/Catalog.c:972 src/Catalog.c:1047 # src/Catalog.c:972 src/Catalog.c:1047 # src/Catalog.c:972 src/Catalog.c:1047 # src/Catalog.c:1149 src/Catalog.c:1231 #~ msgid "Error : cannot write file version." #~ msgstr "Fout : kan bestand versie niet schrijven." # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1009 src/Catalog.c:1122 # src/Catalog.c:1186 src/Catalog.c:1344 #~ msgid "Error : cannot close catalog file." #~ msgstr "Fout : kan cataloog bestand niet sluiten." # src/Catalog.c:1354 #~ msgid "Elapsed time to save the catalog : %d secs" #~ msgstr "Tijd verstreken om cataloog te bewaren : %d secs" #~ msgid "" #~ "The catalog file to load doesn't have a good file extension. Only .ctg " #~ "files are allowed to be loaded." #~ msgstr "" #~ "Het op te laden cataloog bestand heeft geen goede bestandsnaamextensie. " #~ "Je kan alleen .ctg bestanden laden." # src/gui/NoteBookManagment.c:177 # src/gui/NoteBookManagment.c:177 # src/gui/NoteBookManagment.c:197 # src/gui/NoteBookManagment.c:216 #~ msgid "" #~ "Give the device file of the selected disk. The device file is the one of " #~ "the /etc/fstab file." #~ msgstr "" #~ "Geef het systeembestand van de geselecteerde schijf. Het systeembestand " #~ "is vermeld in het bestand /etc/fstab." # src/gui/NoteBookManagment.c:319 # src/gui/NoteBookManagment.c:319 # src/gui/NoteBookManagment.c:339 # src/gui/NoteBookManagment.c:364 #~ msgid "Scan disk" #~ msgstr "Scan de schijf" # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:602 src/Exploration.c:658 src/Exploration.c:736 # src/Exploration.c:792 # src/Exploration.c:607 src/Exploration.c:663 src/Exploration.c:741 # src/Exploration.c:797 # src/Exploration.c:628 src/Exploration.c:684 src/Exploration.c:765 # src/Exploration.c:821 #~ msgid "unkown" #~ msgstr "onbekend" # src/Supermount.c:824 src/data/VirtualFileSystemStats.c:443 # src/data/VirtualFileSystemStats.c:459 # src/Supermount.c:824 src/data/VirtualFileSystemStats.c:443 # src/data/VirtualFileSystemStats.c:459 # src/Supermount.c:824 src/data/VirtualFileSystemStats.c:453 # src/data/VirtualFileSystemStats.c:470 # src/Supermount.c:831 src/data/VirtualFileSystemStats.c:418 #~ msgid "Not yet implemented" #~ msgstr "Nog niet geïmplementeerd" # src/main.c:45 #~ msgid "Is running on GNU/Linux" #~ msgstr "Werkt onder GNU/Linux" # src/main.c:47 #~ msgid "Is running on FreeBSD" #~ msgstr "Werkt onder FreeBSD" # src/main.c:47 #~ msgid "Is running on OpenBSD" #~ msgstr "Werkt onder OpenBSD" # src/main.c:47 #~ msgid "Is running on NetBSD" #~ msgstr "Werkt onder NetBSD" # src/main.c:49 #~ msgid "Is running on MS Windows" #~ msgstr "Werkt onder MS Windows" # src/main.c:51 #~ msgid "Is running on unkown OS" #~ msgstr "Werkt onder een onbekend OS" # src/gui/CaptureBox.c:92 src/gui/MenuFile.c:348 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:92 src/gui/MenuFile.c:348 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:92 src/gui/DialogBox.c:94 src/gui/ProgressBarBox.c:115 # src/gui/ProgressBarBox.c:187 src/gui/ProgressBarBox.c:274 # src/gui/Properties.c:189 src/gui/TextBox.c:108 # src/gui/CaptureBox.c:116 src/gui/DialogBox.c:94 # src/gui/ProgressBarBox.c:127 src/gui/ProgressBarBox.c:246 # src/gui/ProgressBarBox.c:504 src/gui/PropertiesBox.c:216 # src/gui/TextBox.c:122 #~ msgid "Cancel" #~ msgstr "Afbreken" # src/gui/ProgressBarBox.c:217 src/gui/ProgressBarBox.c:294 # src/gui/ProgressBarBox.c:217 src/gui/ProgressBarBox.c:294 # src/gui/ProgressBarBox.c:217 src/gui/ProgressBarBox.c:294 # src/gui/ProgressBarBox.c:276 src/gui/ProgressBarBox.c:460 #~ msgid "Ok" #~ msgstr "Ok" # src/gui/NoteBookCatalog.c:190 # src/gui/NoteBookCatalog.c:190 # src/gui/NoteBookCatalog.c:256 # src/gui/NoteBookCatalog.c:257 #~ msgid "Total Size" #~ msgstr "Totale Grootte" # src/gui/StatusBar.c:269 # src/gui/StatusBar.c:269 # src/gui/StatusBar.c:269 # src/gui/StatusBarCallBack.c:217 #~ msgid " " #~ msgstr " " # src/main.c:40 # src/main.c:42 #~ msgid "%s %s is running in debug mode\n" #~ msgstr "%s %s werkt in debug\n" # src/gui/Interface.c:56 # src/gui/Interface.c:56 # src/gui/Interface.c:56 #~ msgid "GWhere" #~ msgstr "GWhere" # src/Catalog.c:710 src/Catalog.c:730 # src/Catalog.c:710 src/Catalog.c:730 # src/Catalog.c:710 src/Catalog.c:730 #~ msgid "" #~ "The disk hasn't been added\n" #~ "Unknown error" #~ msgstr "" #~ "De schijf is niet toegevoegd\n" #~ "Onbekende fout" # src/Catalog.c:893 # src/Catalog.c:893 # src/Catalog.c:893 #~ msgid "" #~ "The disk hasn't been added\n" #~ "Error : cannot add dir to the disk." #~ msgstr "" #~ "De schijf is niet toegevoegd\n" #~ "Fout: kan de folder niet toevoegen aan de schijf." # src/gui/MenuFile.c:266 # src/gui/MenuFile.c:266 #~ msgid "Save file" #~ msgstr "Bewaar bestand" #~ msgid "Not yet implemeted" #~ msgstr "Nog niet geïmplementeerd" #~ msgid "An error occured, the disk hasn't been added" #~ msgstr "Er is een fout opgetreden, de schijf is niet toegevoegd" #~ msgid "Error : cannot add dir to the disk." #~ msgstr "Fout : kan de folder niet aan de schijf toevoegen." #~ msgid "Error : cannot list files of \"%s\" folder." #~ msgstr "Fout : kan de bestanden van folder \"%s\" niet lijsten." #~ msgid "Error : cannot close current folder." #~ msgstr "Fout : kan de werkfolder niet sluiten." #~ msgid "Error : cannot go to parent folder." #~ msgstr "Fout : kan niet binnen in bovenliggende folder." #~ msgid "" #~ "Please wait\n" #~ "Scanning disk..." #~ msgstr "" #~ "Even wachten\n" #~ "Schijf aan het scannen..." #~ msgid "Not yet implemeted!!" #~ msgstr "Nog niet geïmplementeerd!" #~ msgid "Enter catalogue name" #~ msgstr "Geef de cataloognaam" #~ msgid "Add New Disk Image" #~ msgstr "Voeg een nieuwe schijf toe" #~ msgid "Edit Description" #~ msgstr "Bewerk de Beschrijving" #~ msgid "Edit Categories" #~ msgstr "Bewerk de categoriën" #~ msgid "Change Volume Label" #~ msgstr "Verander het volumelabel" #~ msgid "Auto Mount On\n" #~ msgstr "Automatisch monteren aanzetten\n" #~ msgid "Auto Mount Off\n" #~ msgstr "Automatisch monteren afzetten\n" #~ msgid "Explorer archive On\n" #~ msgstr "Archieven onderzoeken aanzetten\n" #~ msgid "Explorer Archive Off\n" #~ msgstr "Archieven onderzoeken afzetten\n" gwhere-0.2.3/po/sr.po0000644000175000017500000020312410472436225013050 0ustar bartbartmsgid "" msgstr "" "Project-Id-Version: 0.2.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2006-06-24 18:59+0100\n" "Last-Translator: Nemanja Avramovic \n" "Language-Team: Avramovic.info \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "Ne mogu da primim podatke" #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "Konekcija prekinuta od strane klijenta\n" #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "Ne mogu da posaljem podatke" #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%.0f bajtova" #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f Kb" #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f Mb" #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f Gb" #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f Tb" #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f Pb" #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f Hb" #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f Ib" #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "_OK" #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "_Ponisti" #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Izmeni kategorije" #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "Lista kategorija :" #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "Ime" #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "Opis" #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "_Nadopuni" #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" "Omogucava vam da nadopunite svojstva izabrane kategorije. Kliknite na " "Dodaj / Nadopuni da snimite izmene." #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "_Ukloni" #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" "Uklanja izabranu kategoriju iz liste. Ova kategorije moze biti uklonjena " "jedino ako nije koriscena od strane bilo cega." #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "Ime kategorije :" #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "Unesite ime kategorije." #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "Opis :" #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "Unesite opis kategorije." #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "Dodaj / Nadopuni" #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "Snima izmene svojstava kategorije." #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Zatvori" #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Zatvara prozor za izmenu svojstava kategorije." #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "nista" #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "Uklanja kategoriju" #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "Ne mogu da uklonim kategoriju. Nesto je koristi." #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "Dodaj" #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "Nadopuni" #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "_Ne" #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "Sakrij operacije nad fajlom" #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "Prikazi operaciju nad fajlom" #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "_Akcija" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "_Prosiri sve" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "Prosiri samo _diskove" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "S_kupi sve" #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "Izmeni _kategorije" #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "Katalog nije otvoren : ne mozete da menjate kategorije" #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "_Fajl" #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "_Nov" #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "_Otvori" #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "_Sacuvaj" #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "Sacuv_aj kao" #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "_Zatvori" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "Uvezi" #: src/gui/gwmenufile.c:199 msgid "Export" msgstr "Izvezi" #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "Svo_jstva" #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "Pre_djasnji fajlovi" #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "_Izadji" #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Novi katalog" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "Ne postoji odgovarajuci plugin za katalog" #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "Da li zelite da sacuvate katalog : \n" " \n" #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Novi fajl" #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "Unesite ime kataloga" #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "Otvori katalog" #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "Otvori fajl" #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Zatvori fajl" #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "Nema otvorenih kataloga" #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "Posalji fajl mejlom" #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "" "Molimo vas da podesite opcije za mejl kako biste mogli da saljete mejlove" #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "Sacuvaj kao katalog" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "Trenutni katalog nije jos ni jednom snimljen, ne mogu da ga posaljem" #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "Svojstva kataloga" #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "Sacuvaj katalog" #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "Zatvori" #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "Uvezi katalog iz" #: src/gui/gwmenufilecallback.c:1231 msgid "Catalog imported" msgstr "Katalog uvezen" #: src/gui/gwmenufilecallback.c:1233 msgid "Catalog is not imported" msgstr "Katalog nije uvezen" #: src/gui/gwmenufilecallback.c:1267 msgid "A catalog is already opened" msgstr "Katalog je vec otvoren" #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 msgid "Export catalog to" msgstr "Izvezi katalog u" #: src/gui/gwmenufilecallback.c:1291 msgid "Catalog exported" msgstr "Katalog izvezen" #: src/gui/gwmenufilecallback.c:1293 msgid "Catalog is not exported" msgstr "Katalog nije izvezen" #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "Po_moc" #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "O..." #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "_Opcije" #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "Pod_esavanja" #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Novi" #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "Otvori" #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "Sacuvaj" #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "Sacuvaj kao" #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "Izadji" #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Preimenuj" #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Izmeni opis" #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "Svojstva" #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "Pomeri u..." #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "Izbrisi disk" #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "Promeni naziv diska" #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "Izbaci iz kataloga" #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "Izmeni fajl" #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "Ne mogu da izmenim ovaj fajl!\n" #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Preimenuj katalog" #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "Unesi novo ime kataloga" #: src/gui/gwmenupopupcallback.c:121 msgid "Invalid filled catalog name" msgstr "Lose popunjeno ime kataloga" #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "Opis kataloga" #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Preimenuj disk" #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "Unesi novo ime diska" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "Popunjeno ime diska vec postoji u katalogu" #: src/gui/gwmenupopupcallback.c:374 msgid "No new disk name was filled" msgstr "Ime nije upisano" #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "Unesite novi naziv diska" #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "Opis diska" #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "Preimenuj folder" #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "Unesite novo ime foldera" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "Folder sa unetim imenom vec postoji u tekucem folderu" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "Ime nije uneto" #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "Opis foldera" #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "Preimenuj fajl" #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "Unesite novo ime fajla" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "Fajl sa ovakvim imenom vec postoji u ovom folderu" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "Ime nije uneto" #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "Opis fajla" #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Arhiva" #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "Katalog" #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "Zatvaram katalog" #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "Molim sacekajte..." #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Katalog zatvoren" #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "nepoznat vlasnik" #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "nepoznata grupa" #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Novi disk" #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "Izaberite uredjaj koji ce biti dodat kao disk u vas katalog" #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "Izaberi medijum :" #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "Unesite broj novog diska." #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Broj arhive :" #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "Unesite ime novog diska. Ovo ce biti prikazano u katalogu." #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "Ime :" #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "Kategorija :" #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "Izaberite kategoriju da primenite disku koji ce biti dodat." #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "Izaberite fajl uredjaja izabranog medijuma." #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Info :" #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "" "Izaberite tip izabranog medijuma (npr : ext2, ext3, vfat, ntfs, " "reiserFS, ...)." #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Tip :" #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "Prikazi da li je izabrani medijum mountovan ili ne." #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "Mountovan :" #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "Daje ime medijuma (samo ako je mountovan)." #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Ime :" #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "" "Daje serijski broj izabranog medijuma (ako je mountovan). Ovo je fabricki " "broj." #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Serijski broj:" #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "Daje ukupan prostor izabranog uredjaja (ako je mountovan)." #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "Kapacitet :" #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "Daje prazan prostor na izabranom uredjaju (ako je mountovan)." #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Prazno :" #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "Opcije" #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "Prikazi informacije" #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" "Prikazuje informacije o medijumu. Putanja, kapacitet, slobodan prostor, ..." #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Automount" #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" "Mountuje medijum ako nije mountovan. I unmountuje ga cak i ako je bio " "mountovan pre skeniranja." #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "Istrazi strukturu medijuma (kao \"drvo\")." #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "" "Ostavite ovo obelezeno da skenirate informacije svih fajlova i foldera." #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "Istrazi arhive (.tar, .gz, .zip, ...)" #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "Jos nije implementirano!!\n" "Istrazuje sve arhive kao da su folderi. Arhive su tarovani ili gzipovani " "fajlovani (targuzovani)." #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "Izbaci medijum ako je moguce." #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" "Izbacuje medijum ako je to moguce (CD-ROM...), cak i ako je fioka zatvorena. " "Ovo je omoguceno samo ako je automount omogucen!!" #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "Obelezi rekurzivno kategoriju" #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "" "Primenjuje izabranu kategoriju na sve stavke u disku koji se dodaje " "(diskove, foldere i fajlove)." #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "Automatski napravi opis" #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "" "Automatsko pravljenje opisa fajla (opis formata fajla, velicina slike za xmp " "ili jpg, itd...)." #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "Koristi napredni sablon za generisanje imena diska" #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Mozete popuniti dodatne tagove da generisete ime diska sa informacijama " "diska :\n" "- %% : %\n" "- %n : broj arhive (moze se koristiti prefiks da bude 0 ispred : %.4n daje " "0001, 0002, 0003, ..., 0091, ...\n" "- %l : naziv medijuma\n" "- %t : tip medijuma\n" "- %s : serijski broj" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "Koristi ime medijiuma za ime diska (samo kada je ime diska prazno)" #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" "Ako niste uneli ime diska, koristice se ime medijuma (volume label) kao ime " "diska." #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "Dodak disk" #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Upravljanje" #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "Disk nije dodat : nema mountovanog medijuma" #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "Disk nije dodat : ne mogu da mountujem medijum" #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "Dodaj novi disk" #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "Unesite ime diska" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "Skeniranje" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "Dodavanje diska je u toku" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "Molim sacekajte" #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "Disk je dodat" #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Mountovanje neuspesno\n" #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Serijski broj :" #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "nema drajva" #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "nepoznat" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Da" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "Ne" #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "Nema naziva" #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Ime medijuma : " #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "dodavanje diska je otkazano" #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "Molim izaberite ime kataloga\n" #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "Trazi :" #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "Trazi" #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "Pretraga moze biti osetljiva na mala i velika slova. Pretraga sa dzokerima " "daje podrsku za karakter \"*\".\n" "Primer : img*.nmp ili *.htm\n" "Pretraga sa kljucnim recima prihvata spisak obaveznih reci." #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "Ocisti" #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "Brise sve rezultate pretrage" #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "Osetljivo na mala i velika slova" #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "Pretraga moze biti a i ne mora osetljiva na mala i velika slova.\n" "Kada je osetljiva \"Fajl.txt\" nije isto sto i \"fajl.txt\". Ali kada nije " "osetljiva onda je to isto." #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "Tip pretrage" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "Kljucne reci" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "" "Unesite listu kljucnih reci koje moraju biti sadrzane u pronadjenim " "fajlovima (sve reci se traze)." #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "Dzokeri" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "" "Ovde mozete koristiti dzokere. Dzokeri mogu biti \"?\" (za jedno slovo) i \"*" "\" (za citav izraz)." #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "Regulartni izraz" #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "" "Ovde mozete koristiti regularne izraze. Pogledajte dokumentaciju za vise " "informacija." #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "Fajl" #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "Pretraga trazi fajlove." #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "Folder" #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "Pretraga trazi foldere." #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "Disk" #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "Pretraga trazi diskove." #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "Kategorija" #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "Pretraga trazi kategoriju." #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "Pretraga trazi opis." #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "Trazi u katalogu" #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "%lu pogodak(a) pronadjen(o)." #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "Rezultati pretrage" #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "Nista nije pronadjeno" #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "Trazim..." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "Ne mogu da zapocnem pretragu : katalog nije ucitan" #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "_Ok" #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "Unesite ime kataloga." #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "Verzija : " #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "Verzuha" #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr " kompajliran sa " #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "Diskova u katalogu : " #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "Diskova u katalogu : %d" #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Ukupno fajlova : " #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, c-format msgid "Total Files : %ld" msgstr "Ukupno fajlova : %ld" #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "Ukupno foldera : " #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, c-format msgid "Total Folders : %ld" msgstr "Ukupno foldera : %ld" #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "Velicina fajla : " #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Ukupno prostora : " #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "Ukupno zauzetog prostora : " #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "Ukupno slobodnog prostora : " #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "Statistike diska : " #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "CD-Rom : " #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "CD-Rom : %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "Audio CD : " #: src/gui/gwpropertiesbox.c:577 #, c-format msgid "Audio CD : %d" msgstr "Audio CD : %d" #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "HD : " #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "HD : %d" #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "Flopi : " #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "Flopi : %d" #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip : " #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip : %d" #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 msgid "Tape : " msgstr "Traka : " #: src/gui/gwpropertiesbox.c:649 #, c-format msgid "Tape : %d" msgstr "Traka : %d" #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "Mreza : " #: src/gui/gwpropertiesbox.c:666 #, c-format msgid "Network : %d" msgstr "Mreza : %d" #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 msgid "Jaz : " msgstr "Jaz : " #: src/gui/gwpropertiesbox.c:683 #, c-format msgid "Jaz : %d" msgstr "Jaz : %d" #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "Ostalo : " #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "Ostalo : %d" #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Kategorije kataloga : " #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "Opis kataloga : " #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Informacije o katalogu : " #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "Unesite ime diska." #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "Unesite arhivni broj diska." #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr " Tip : " #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "Serijski # : " #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "Naziv diska : " #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "Kapacitet : " #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "Zauzeto : " #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "Slobodno : " #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "Ime kataloga : " #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "Osvezenje u katalogu : " #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "Opis diska : " #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Informacije i disku : " #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "Ime foldera" #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Tip : (folder)" #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "Velicina foldera : " #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "Kreiran : " #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "Poslednja izmena : " #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "Poslednji pristup : " #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Prava : " #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "Vlasnik : " #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "Grupa : " #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "Ime diska : " #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "Lokacija na disku : " #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "Opis foldera : " #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Informacije o folderu" #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "Ime fajla : " #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Tip fajla : jos nije implementirano!!" #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "Velicina fajla : %s (%s bajt/ov/a)" #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "Opis fajla : " #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Informacije o fajlu" #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "Fajl kataloga" #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Nivo kompresije kataloga : " #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "" "Izaberite nivo kompresije kataloga. Predefinisana vrednost je 3, to je dobra " "vrednost izmedju brzine i velicine." #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Poslednji otvarani katalozi : " #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "" "Izaberite velicinu istorije (prethodno otvoreni katalozi). Predefinisana " "vrednost je 5." #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "Ocisti istoriju" #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "Kliknite ovde da obrisete istoriju prethodno otvorenih fajlova." #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Automatski ucitaj katalog" #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "Automatski ucitava predefinisani katalog kada se program pokrene." #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "Ucitaj poslednji otvoren katalog." #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "Ucitaj izabrani fajl kataloga." #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "Unesite punu putanju do fajla kataloga." #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "Izaberite katalog" #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "Kliknite ovde da izaberete fajl kataloga sa diska." #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "Ovelezi automatski ucitan katalog" #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "Istrazivac" #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "Sortiranje osetljivo na mala i velika slova." #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "" "Sortiranje rezultata u istrazivacu je osetljivo na mala i velika slova." #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Grupisi rezultate po folderu/fajlu." #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" "Rezultati u istrazivacu mogu biti grupisani po tipu. Ako je ovo obelezeno " "sve ce biti grupisano po folderima ili fajlovima." #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Automatski promeni velicinu kolona" #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "Automatski menja velicinu svih kolona u istrazivacu" #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "Diskovi" #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "Vidljivo" #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Sakrij" #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "Prikazi" #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "Skriveno" #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Fajlovi" #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "Sortiranje rezultata je osetljivo na mala i velika slova." #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Rezultati grupisani po tipu." #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" "Rezultati u istrazivacu mogu biti grupisani po tipu. Ako je ovo obelezeno " "sve ce biti grupisano po katalozima, diskovima, folderima ili fajlovima." #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "Ukljuci sve kljucne reci." #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" "Izaberite ovo ako sve kljucne reci ili samo jedna od svih kljucnih reci mora " "biti u rezultatima." #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "Brzo" #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "Glavne opcije" #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "GUI" #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "Snimi opcije GUI (grafickog okruzenja) pri izlasku" #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "" "Snimi opcije GUI (grafickog okruzenja) kao sto su pozicija prozora i " "velicina istog." #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "Dozvoli pisak" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "Dozvoljava programu da pishti kod nekih dogadjaja" #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Mail" #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "Email adresa :" #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "Unesite vasu email adresu." #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "Odlazni mail server : " #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "Unesite vas odlazni mejl server. Obicno je to mail.vasdomen.com" #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Port servera : " #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "Unesite odlazni port mejl servera (najcesce je to port 25)." #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "" "Ovaj deo vam omogucava da konfigurisete neke funkcionalnosti i opcije " "programa." #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "Podesavanja" #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "Izaberite deo za konfigurisanje" #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "" "Menjajte u ovom delu sve moguce postavke programa kako biste ga " "konfigurisali kako vi zelite." #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "" "Ovaj deo prozora za podesavanja vam dozvoljava da konfigurisete program. " "Neke postavke mogu biti menjane." #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "" "Kliknite na OK dugme da primenite izmene i zatvorite prozor podesavanja." #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "" "Kliknite na Ponisti taster da ponistite sve izmene i zatvorite prozor " "podesavanja." #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "_Primeni" #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "" "Kliknite na taster Primeni da primenite sve izmene (bez zatvaranja prozora " "podesavanja)." #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "Postavke su izmenjene" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "" "Ako ne primenite izmene izgubicete sve izmene. Da li zelite da primenite " "izmene?" #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], ukupno diskova : %d" #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr "Izlistano : %d (ukupna velicina : %s)" #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], kapacitet : %s, slobodno : %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr " Prazan disk " #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr " Izabrano : %d (ukupna velicina : %s)" #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr " Folder \"%s\", %s (fajlova %d, podfoldera %d)" #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr " %s, %s, %s" #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr "Izabrano : %d" #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr " Istrazivac kataloga" #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr " Pretraga" #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr " Menadzment kataloga" #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Zatvori katalog" #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "Posalji katalog mejlom" #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "O..." #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "Katalog diskova\n" "napisao: Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" "GWhere vam omogucava da vodite bazu svojih CDova i drugih medijuma (hard " "diskovi, dlopi diskovi, zip drajvovi, CD-ROm, itd...). Sa GWhere-om je lako " "da pronadjete bilo sta na vasim diskova bez ubacivanja disk(ov)a u drajv " "jedan po jedan." #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Radi na " #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "" "Ovaj deo prozora vam omogucava da posaljete katalog mejlom nekom od vasih " "kontakata." #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "Posalji mejl" #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "Za : " #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "CC :" #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "BCC :" #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "Naslov : " #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "Ovde unesite email adresu vaseg(vasih) kontak(a)ta." #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "Ovde unesite email adresu ostalih primalaca." #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "Ovde unesite email adresu ostalih skrivenih primalaca." #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "Ovde unesite objekat vase poruke." #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "Prikacen fajl : " #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "Izaberite da li cete zakaciti fajl kataloga." #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "Ovde unesite tekst mejl poruke." #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "Po_salji" #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "Kliknite ovde da posaljete mejl (sa prikacenim katalogom)." #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "Kliknite ovde da prekinite slanje mejla." #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "Saljem mejl, molim sacekajte..." #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "Doslo je do greske prilikom slanja. Proverite postavke." #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Ne mogu da nadjem pixmap fajl: %s" #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "Greska pri ucitavanju pixmap fajla: %s" #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "Greska : ne mogu da otvorim tekuci folder." #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "Greska : ne mogu da otvorim radni folder." #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "Disk nije dodat\n" "Dodavanje otkazano od strane korisnika" #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "Disk nije dodat\n" #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "%s izvan procesovog alociranog adresnog prostora." #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" "Komponenta na sledecoj putanji prelazi %d karaktera, ili cela putanja " "prelazi %d karaktera : %s" #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "Sledeci folder ne postoji : %s." #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "Nema dovoljno memorije da zavrsim operaciju." #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "Komponenta sa prefiksom putanje nije folder : %s." #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "" "Previse simbolickih linkova dok sam pokusavao da pronadjem pravu putanju : %" "s." #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "U/I (I/O) greska kad sam menjao folder na : %s." #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "Nepoznata greska" #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" "Disk nije dodat\n" "Greska : ne mogu da otvorim roditeljski folder." #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Previse fajl deskriptora proces koristi." #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Previse fajlova je trenutno otvoreno na sistemu." #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "Sledeci folder ne postoji, ili mu je ime prazan tekst : %s." #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "Sledeci \"folder\" u stvari nije folder : %s." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" "Kriticna greska dok sam izdvajao informacije fajla iz %s%s%s.\n" "Sacuvajte katalog ako je moguce, zatvorite GWhere i prijavite ovu gresku " "GWhere timu ako mozete." #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" "Disk nije dodat\n" "Greska : ne mogu da zatvorim tekuci folder." #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "Radi na %s" #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Katalog ucitan" #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "Ucitavanje kataloga nije uspelo" #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "Ucitavam katalog" #: src/gwapplicationmanager.c:499 msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "Katalog nije ispravan ili ne postoji. Proverite putanju do kataloga." #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "Cuvam katalog" #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Katalog sacuvan" #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "Cuvanje kataloga nije uspelo" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Prava" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "Vlasnik" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "Grupa" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "Velicina" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "INode" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Datum pristupa" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Datum izmene" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "Datum kreiranja" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "Ime fajl sistema" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "Putanja pristupa" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Broj arhive" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Tip" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Ime medijuma" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "Pun kapacitet" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "Slobodno prostora" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Datum" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Serijski broj" #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "Putanja" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "Cela instalacija" #: win32/config.h:288 msgid "Compact" msgstr "Kompaktna instalacija" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (obavezno)" #: win32/config.h:290 msgid "Main engine application." msgstr "Glavni deo aplikacije." #: win32/config.h:291 msgid "GTK+ 2.6 RunTime (required)" msgstr "GTK+ 2.6 RunTime (obavezno)" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "Biblioteke za Graficki Interfejs (GUI)." #: win32/config.h:293 msgid "Plugins" msgstr "Dodaci" #: win32/config.h:294 msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "Dodaci za automatsko izdvajanje opisa i dodaci za uvoz/izvoz kataloga." #: win32/config.h:295 msgid "Languages Files" msgstr "Prevodi" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "Svi fajlovi za prevod programa na druge jezike." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "Morate deinstalirati prethodnu verziju GWhere-a" #: win32/config.h:298 msgid "Installer already running" msgstr "Instaler je vec startovan" #: win32/config.h:299 msgid "Install options" msgstr "Opcije instalacije" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "Koji korisnici mogu pokretati GWhere ?" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "GWhere instalacija prava pristupa" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" "GWhere moze biti instaliran za sve korisnike ili samo za trenutnog " "korisnika. Izaberite kako zelite da instalirate GWhere." #: win32/config.h:303 msgid "All users|Current user" msgstr "Svi korisnici|Trenutni korisnik" #: win32/config.h:304 msgid "All users" msgstr "Svi korisnici" gwhere-0.2.3/po/ru.po0000644000175000017500000023331610472436224013057 0ustar bartbart# translation of gwhere.po to Russian # Lesnevsky Gennady , 2005. msgid "" msgstr "" "Project-Id-Version: ru\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-08-22 01:05+0200\n" "PO-Revision-Date: 2005-12-17 20:52+0400\n" "Last-Translator: Lesnevsky Gennady \n" "Language-Team: Russian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.10\n" #: src/tools/gwmail.c:74 msgid "Cannot receive data" msgstr "Ðевозможно получить данные" #: src/tools/gwmail.c:80 msgid "Connexion closed by client\n" msgstr "Соединение прервано клиентом\n" #: src/tools/gwmail.c:109 msgid "Cannot send data" msgstr "Ðевозможно отправить данные" #: src/tools/gwstring.c:148 #, c-format msgid "%.0f bytes" msgstr "%.0f байт" #: src/tools/gwstring.c:152 #, c-format msgid "%.2f Kb" msgstr "%.2f Кб" #: src/tools/gwstring.c:156 #, c-format msgid "%.2f Mb" msgstr "%.2f Мб" #: src/tools/gwstring.c:160 #, c-format msgid "%.2f Gb" msgstr "%.2f Гб" #: src/tools/gwstring.c:165 #, c-format msgid "%.2f Tb" msgstr "%.2f Тб" #: src/tools/gwstring.c:170 #, c-format msgid "%.2f Pb" msgstr "%.2f Пб" #: src/tools/gwstring.c:175 #, c-format msgid "%.2f Hb" msgstr "%.2f Hb" #: src/tools/gwstring.c:181 src/tools/gwstring.c:187 #, c-format msgid "%.2f Ib" msgstr "%.2f Ib" #: src/gui/gwcapturebox.c:100 src/gui/gwdialogbox.c:80 src/gui/gwmsgbox.c:76 #: src/gui/gwpropertiesbox.c:202 src/gui/gwsettingswindowbox.c:163 #: src/gui/gwtextbox.c:110 msgid "_OK" msgstr "ОК" #: src/gui/gwcapturebox.c:125 src/gui/gwdialogbox.c:115 #: src/gui/gwprogressbarbox.c:139 src/gui/gwprogressbarbox.c:562 #: src/gui/gwpropertiesbox.c:234 src/gui/gwsettingswindowbox.c:178 #: src/gui/gwtextbox.c:127 src/gui/gwwindowboxmail.c:219 msgid "_Cancel" msgstr "Отмена" #: src/gui/gwcategorieseditbox.c:85 src/gui/gwmenuactioncallback.c:151 #: src/gui/gwmenupopup.c:137 msgid "Edit categories" msgstr "Редактирование категории" #. Frame category description #: src/gui/gwcategorieseditbox.c:99 msgid "Categories list : " msgstr "СпиÑок категорий" #. 1st column label #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name #. ! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name #: src/gui/gwcategorieseditbox.c:126 src/gwapplicationmanager.h:248 #: src/gwapplicationmanager.h:382 src/gwapplicationmanager.h:546 msgid "Name" msgstr "Ðазвание" #. 2nd column label #. Match description check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description #: src/gui/gwcategorieseditbox.c:132 src/gui/gwnotebooksearch.c:295 #: src/gwapplicationmanager.h:368 src/gwapplicationmanager.h:514 #: src/gwapplicationmanager.h:618 msgid "Description" msgstr "ОпиÑание" #: src/gui/gwcategorieseditbox.c:143 msgid "_Update" msgstr "Изменить" #: src/gui/gwcategorieseditbox.c:151 msgid "" "Allows to update category properties of the selected category. Clicks on " "Add / Update button to save updates." msgstr "" "ПозволÑет изменÑть ÑвойÑтва выбранной категории. Ðажатие кнопки Добавить/" "Изменить ÑохранÑет изменениÑ." #: src/gui/gwcategorieseditbox.c:158 msgid "_Remove" msgstr "Удалить" #: src/gui/gwcategorieseditbox.c:166 msgid "" "Remove the selected category from categories list. This categories may " "removed only if there's not any item which uses this category." msgstr "" "УдалÑет выбранную категорию из ÑпиÑка категорий. ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ удалена " "только при отÑутÑтвии запиÑей иÑпользующих Ñту категорию." #. Label for category name #: src/gui/gwcategorieseditbox.c:180 msgid "Category name : " msgstr "Ðазвание категории :" #: src/gui/gwcategorieseditbox.c:191 msgid "Enter the name of the category." msgstr "Введите название категории." #. Frame category description #: src/gui/gwcategorieseditbox.c:196 msgid "Description : " msgstr "ОпиÑание :" #: src/gui/gwcategorieseditbox.c:221 msgid "Enter the description of the category." msgstr "Введите апиÑание категории." #. Is it not mandatory? #. g_strdup_to_gtk_text ( _( "Add"), text_utf8); #. gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); #. g_free ( text_utf8); #. #. gtk_widget_ref ( bt); #. (GtkDestroyNotify)gtk_widget_unref #: src/gui/gwcategorieseditbox.c:240 msgid "Add / Update" msgstr "Добавить/Изменить" #: src/gui/gwcategorieseditbox.c:247 msgid "Save properties changes of category." msgstr "СоранÑет изменёные ÑвойÑтва категории." #: src/gui/gwcategorieseditbox.c:257 src/gui/gwmenupopup.c:67 #: src/gui/gwmenupopup.c:170 msgid "Close" msgstr "Закрыть" #: src/gui/gwcategorieseditbox.c:264 msgid "Close the categories properties edit window." msgstr "Закрывает окно Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑвойÑтв категории." #: src/gui/gwcategorieseditbox.c:308 src/gui/gwnotebookmanagmentcallback.c:265 #: src/gui/gwpropertiesbox.c:1046 msgid "none" msgstr "отÑутÑтвует" #: src/gui/gwcategorieseditbox.c:379 msgid "Remove category" msgstr "Удалить категорию" #: src/gui/gwcategorieseditbox.c:379 msgid "Can't remove this category. It's used by an item." msgstr "Ðевозможно удалить данную категорию. Она имеет запиÑи." #: src/gui/gwcategorieseditbox.c:532 src/gui/gwcategorieseditbox.c:843 msgid "Add" msgstr "Добавить" #: src/gui/gwcategorieseditbox.c:556 src/gui/gwcategorieseditbox.c:873 msgid "Update" msgstr "Изменить" #: src/gui/gwdialogbox.c:98 msgid "_No" msgstr "Ðет" #: src/gui/gwfileselectionbox.c:80 msgid "Hide file operations" msgstr "Скрыть файловые операции" #: src/gui/gwfileselectionbox.c:86 msgid "Show file operation" msgstr "Показать файловые операции" #: src/gui/gwmenuaction.c:64 msgid "_Action" msgstr "_ДейÑтвие" #: src/gui/gwmenuaction.c:85 msgid "_Expand all" msgstr "Развернуть вÑе" #: src/gui/gwmenuaction.c:101 msgid "Expand only _disks" msgstr "Развернуть только диÑки" #: src/gui/gwmenuaction.c:115 msgid "C_ollapse all" msgstr "Свернуть вÑе" #: src/gui/gwmenuaction.c:138 msgid "Edit _categories" msgstr "Редактировать категории" #: src/gui/gwmenuactioncallback.c:151 msgid "No catalog is opened : cannot edit categories" msgstr "Ðет открытого каталога: невозможно редактировать категории" #: src/gui/gwmenufile.c:85 msgid "_File" msgstr "_Файл" #: src/gui/gwmenufile.c:106 msgid "_New" msgstr "_Ðовый" #: src/gui/gwmenufile.c:120 msgid "_Open" msgstr "_Открыть" #: src/gui/gwmenufile.c:134 msgid "_Save" msgstr "_Сохранить" #: src/gui/gwmenufile.c:148 msgid "Sav_e as" msgstr "Сохранить _как" #: src/gui/gwmenufile.c:162 msgid "C_lose" msgstr "_Закрыть" #: src/gui/gwmenufile.c:183 msgid "Import" msgstr "Импорт" #: src/gui/gwmenufile.c:199 msgid "Export" msgstr "ЭкÑпорт" #: src/gui/gwmenufile.c:222 msgid "_Properties" msgstr "СвойÑтва" #: src/gui/gwmenufile.c:243 msgid "_Recents files" msgstr "Ðедавние файлы" #: src/gui/gwmenufile.c:266 msgid "E_xit" msgstr "_Выход" #. Else ask the new catalog name #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:75 #: src/gui/gwmenufilecallback.c:607 src/gui/gwmenufilecallback.c:625 #: src/gui/gwmenufilecallback.c:671 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gui/gwnotebookmanagmentcallback.c:256 src/gui/gwtoolbar.c:77 msgid "New catalog" msgstr "Ðовый каталог" #: src/gui/gwmenufilecallback.c:62 src/gui/gwmenufilecallback.c:95 #: src/gui/gwmenufilecallback.c:1357 src/gui/gwnotebookmanagmentcallback.c:121 #: src/gwapplicationmanager.c:130 msgid "There is no available catalog plugin" msgstr "Ðет доÑтупных плагинов каталога" #. if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); #. } else { #. msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); #. } #. If has been modified, ask to save it before open another catalog #: src/gui/gwmenufilecallback.c:69 src/gui/gwmenufilecallback.c:102 #: src/gui/gwmenufilecallback.c:138 src/gui/gwmenufilecallback.c:180 #: src/gui/gwmenufilecallback.c:461 src/gui/gwmenufilecallback.c:1367 msgid "" "Would you want save catalog :\n" "\n" msgstr "" "Желаете Ñохранить каталог:\n" "\n" #: src/gui/gwmenufilecallback.c:70 msgid "New file" msgstr "Ðовый файл" #: src/gui/gwmenufilecallback.c:75 src/gui/gwmenufilecallback.c:607 #: src/gui/gwmenufilecallback.c:625 src/gui/gwmenufilecallback.c:671 #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Enter catalog name" msgstr "Ведите название каталога" #. Else opens file selection box #: src/gui/gwmenufilecallback.c:95 src/gui/gwmenufilecallback.c:108 #: src/gui/gwmenufilecallback.c:702 src/gui/gwmenufilecallback.c:719 #: src/gui/gwmenufilecallback.c:829 src/gui/gwtoolbar.c:81 msgid "Open catalog" msgstr "Открыть каталог" #: src/gui/gwmenufilecallback.c:103 src/gui/gwmenufilecallback.c:1357 #: src/gui/gwmenufilecallback.c:1369 msgid "Open file" msgstr "Открыть файл" #: src/gui/gwmenufilecallback.c:139 src/gui/gwmenufilecallback.c:148 msgid "Close file" msgstr "Закрыть файл" #: src/gui/gwmenufilecallback.c:148 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:365 src/gui/gwmenufilecallback.c:406 #: src/gui/gwmenufilecallback.c:428 src/gui/gwmenufilecallback.c:1336 msgid "No catalog is opened" msgstr "Ðет открытого каталога" #: src/gui/gwmenufilecallback.c:181 src/gui/gwmenufilecallback.c:191 #: src/gui/gwmenufilecallback.c:196 src/gui/gwmenufilecallback.c:270 msgid "Send file by mail" msgstr "ПоÑлать файл по почте" #: src/gui/gwmenufilecallback.c:196 msgid "Please configure mail options in the settings in order to send mails." msgstr "" "ПожалуйÑта, уÑтановите параметры почты в наÑтройках Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ почтовых " "Ñообщений." #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks un file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); #. If it's a new catalog, asks a file name. #. if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #. If it's a new catalog, asks a file name. #. gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); #: src/gui/gwmenufilecallback.c:228 src/gui/gwmenufilecallback.c:394 #: src/gui/gwmenufilecallback.c:425 src/gui/gwmenufilecallback.c:428 #: src/gui/gwmenufilecallback.c:603 src/gui/gwmenufilecallback.c:697 #: src/gui/gwmenufilecallback.c:749 src/gui/gwmenufilecallback.c:921 #: src/gui/gwmenufilecallback.c:977 src/gui/gwmenufilecallback.c:1020 #: src/gui/gwmenufilecallback.c:1122 msgid "Save as catalog" msgstr "Сохранить как каталог" #: src/gui/gwmenufilecallback.c:270 msgid "The current catalog is never be saved, cannot send it" msgstr "Текущий каталог небыл Ñохранён, невозможно его отправить" #: src/gui/gwmenufilecallback.c:365 msgid "Catalog properties" msgstr "СвойÑтва каталога" #: src/gui/gwmenufilecallback.c:406 src/gui/gwtoolbar.c:85 msgid "Save catalog" msgstr "Сохранить каталог" #. If has been modified, ask to save it before exit program #: src/gui/gwmenufilecallback.c:455 msgid "Quit " msgstr "Выход" #: src/gui/gwmenufilecallback.c:1231 src/gui/gwmenufilecallback.c:1233 #: src/gui/gwmenufilecallback.c:1263 src/gui/gwmenufilecallback.c:1267 msgid "Import catalog from" msgstr "Импортировать каталог из" #: src/gui/gwmenufilecallback.c:1231 msgid "Catalog imported" msgstr "Каталог импортирован" #: src/gui/gwmenufilecallback.c:1233 msgid "Catalog is not imported" msgstr "Каталог не импортирован" #: src/gui/gwmenufilecallback.c:1267 msgid "A catalog is already opened" msgstr "Каталог уже открыт" #: src/gui/gwmenufilecallback.c:1291 src/gui/gwmenufilecallback.c:1293 #: src/gui/gwmenufilecallback.c:1329 src/gui/gwmenufilecallback.c:1336 msgid "Export catalog to" msgstr "ЭкÑпортировать каталог в" #: src/gui/gwmenufilecallback.c:1291 msgid "Catalog exported" msgstr "Каталог ÑкÑпортирован" #: src/gui/gwmenufilecallback.c:1293 msgid "Catalog is not exported" msgstr "Каталог не ÑкÑпортирован" #: src/gui/gwmenuhelp.c:53 msgid "_Help" msgstr "_Помощь" #: src/gui/gwmenuhelp.c:75 msgid "A_bout" msgstr "_О программе" #: src/gui/gwmenuoptions.c:54 msgid "_Options" msgstr "ÐаÑтройки" #: src/gui/gwmenuoptions.c:75 msgid "Se_ttings" msgstr "УÑтановки" #: src/gui/gwmenupopup.c:43 src/gui/gwmenupopup.c:146 msgid "New" msgstr "Ðовый" #: src/gui/gwmenupopup.c:49 src/gui/gwmenupopup.c:152 msgid "Open" msgstr "Открыть" #: src/gui/gwmenupopup.c:55 src/gui/gwmenupopup.c:158 msgid "Save" msgstr "Сохранить" #: src/gui/gwmenupopup.c:61 src/gui/gwmenupopup.c:164 msgid "Save as" msgstr "Сохранить как" #: src/gui/gwmenupopup.c:76 msgid "Exit" msgstr "Выход" #: src/gui/gwmenupopup.c:119 src/gui/gwmenupopup.c:228 #: src/gui/gwmenupopup.c:304 src/gui/gwmenupopup.c:373 msgid "Rename" msgstr "Переименовать" #. g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); #. menuitem = gtk_menu_item_new_with_label ( text_utf8); #. g_free ( text_utf8); #. gtk_menu_append ( GTK_MENU ( menu), menuitem); #. gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); #. #: src/gui/gwmenupopup.c:131 src/gui/gwmenupopup.c:246 #: src/gui/gwmenupopup.c:310 src/gui/gwmenupopup.c:379 #: src/gui/gwmenupopupcallback.c:171 src/gui/gwmenupopupcallback.c:528 #: src/gui/gwmenupopupcallback.c:747 src/gui/gwmenupopupcallback.c:1024 msgid "Edit description" msgstr "Редактировать опиÑание" #: src/gui/gwmenupopup.c:179 src/gui/gwmenupopup.c:255 #: src/gui/gwmenupopup.c:325 src/gui/gwmenupopup.c:394 #: src/gui/gwpropertiesbox.c:110 msgid "Properties" msgstr "СвойÑтва" #: src/gui/gwmenupopup.c:222 src/gui/gwmenupopup.c:298 msgid "Move To..." msgstr "ПеремеÑтить в..." #: src/gui/gwmenupopup.c:234 msgid "Delete disk" msgstr "Удалить диÑк" #: src/gui/gwmenupopup.c:240 src/gui/gwmenupopupcallback.c:453 msgid "Change volume label" msgstr "Изменить метку тома" #: src/gui/gwmenupopup.c:316 src/gui/gwmenupopup.c:385 msgid "Remove from catalog" msgstr "Удалить из каталога" #: src/gui/gwmenupopup.c:402 msgid "Edit file" msgstr "Редактировать файл" #: src/gui/gwmenupopup.c:402 msgid "Can't edit this file!!\n" msgstr "Ðевозможно редактировать файл!!!\n" #: src/gui/gwmenupopupcallback.c:64 src/gui/gwmenupopupcallback.c:121 msgid "Rename catalog" msgstr "Переименовать каталог" #: src/gui/gwmenupopupcallback.c:64 msgid "Enter new catalog name" msgstr "Введите новое название каталога" #: src/gui/gwmenupopupcallback.c:121 msgid "Invalid filled catalog name" msgstr "Ðеправильное название каталога" #: src/gui/gwmenupopupcallback.c:171 msgid "Catalog description" msgstr "ОпиÑание каталога" #: src/gui/gwmenupopupcallback.c:320 src/gui/gwmenupopupcallback.c:360 #: src/gui/gwmenupopupcallback.c:374 msgid "Rename disk" msgstr "Переименовать диÑк" #: src/gui/gwmenupopupcallback.c:320 msgid "Enter new disk name" msgstr "Веедите новое название диÑка" #: src/gui/gwmenupopupcallback.c:360 msgid "The filled disk name already exist in the current catalog" msgstr "Введенное название уже ÑущеÑтвует в текущем каталоге" #: src/gui/gwmenupopupcallback.c:374 msgid "No new disk name was filled" msgstr "Ðовое название диÑка не введено" #: src/gui/gwmenupopupcallback.c:453 msgid "Enter new disk volume label" msgstr "Ведите новую метку тома диÑка" #: src/gui/gwmenupopupcallback.c:528 msgid "Disk description" msgstr "ОпиÑание диÑка" #: src/gui/gwmenupopupcallback.c:652 src/gui/gwmenupopupcallback.c:693 #: src/gui/gwmenupopupcallback.c:707 msgid "Rename folder" msgstr "Переименовать папку" #: src/gui/gwmenupopupcallback.c:652 msgid "Enter new folder name" msgstr "Введите новое название папки" #: src/gui/gwmenupopupcallback.c:693 msgid "The filled folder name already exist in the current folder" msgstr "Введённое название папки уже ÑущеÑтвует" #: src/gui/gwmenupopupcallback.c:707 msgid "No new folder name was filled" msgstr "Ðовое название папки не введено" #: src/gui/gwmenupopupcallback.c:747 msgid "Folder description" msgstr "ОпиÑание папки" #: src/gui/gwmenupopupcallback.c:921 src/gui/gwmenupopupcallback.c:956 #: src/gui/gwmenupopupcallback.c:965 msgid "Rename file" msgstr "Переименовать файл" #: src/gui/gwmenupopupcallback.c:921 msgid "Enter new file name" msgstr "Введите новое название файла" #: src/gui/gwmenupopupcallback.c:956 msgid "The filled file name already exist in the current folder" msgstr "Введённое название файла уже ÑущеÑтвует в текущей папке" #: src/gui/gwmenupopupcallback.c:965 msgid "No new file name was filled" msgstr "Ðовое название файла не введено" #: src/gui/gwmenupopupcallback.c:1024 msgid "File description" msgstr "ОпиÑание файла" #: src/gui/gwnotebookcatalog.c:96 msgid "Archive" msgstr "Ðрхив" #. Text label of the search tabbed pane. #: src/gui/gwnotebookcatalog.c:202 msgid "Catalog" msgstr "Каталог" #: src/gui/gwnotebookcatalog.c:764 msgid "Closing catalog" msgstr "Закрытие каталога" #: src/gui/gwnotebookcatalog.c:764 src/gui/gwnotebooksearchcallback.c:324 #: src/gwapplicationmanager.c:603 msgid "Please wait..." msgstr "ПожалуйÑта подпждите..." #: src/gui/gwnotebookcatalog.c:782 msgid "Catalog closed" msgstr "Каталог закрыт" #: src/gui/gwnotebookcatalogcallback.c:1275 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1647 msgid "unknown owner" msgstr "неизвеÑтный владелец" #: src/gui/gwnotebookcatalogcallback.c:1280 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1667 msgid "unknown group" msgstr "неизвеÑÑ‚Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°" #. Frame of new disk control #: src/gui/gwnotebookmanagment.c:159 src/gui/gwnotebookmanagmentcallback.c:275 msgid "New disk" msgstr "Ðовый диÑк" #: src/gui/gwnotebookmanagment.c:173 msgid "Select the media that will be added as disk to your catalog." msgstr "Выберите ноÑитель который будет добвылен как диÑк в ваш каталог" #. Label for media selection #: src/gui/gwnotebookmanagment.c:178 msgid "Select media : " msgstr "Выберите ноÑитель : " #: src/gui/gwnotebookmanagment.c:212 msgid "" "Enter the number of the new disk. This number can help you with the history " "of your catalog." msgstr "" "Ввеите номер нового диÑка. Этот номер поможет вам веÑти иÑторию каталога." #. Label for number archive #. Number archive label #: src/gui/gwnotebookmanagment.c:217 src/gui/gwpropertiesbox.c:842 msgid "Archive N# : " msgstr "Ðрхив N : " #: src/gui/gwnotebookmanagment.c:232 msgid "" "Enter the name of the new disk. This name will be appear in your catalog." msgstr "" "Введите название нового диÑка. Это название будет отображатьÑÑ Ð² вашем " "каталоге." #. Label for disk name #: src/gui/gwnotebookmanagment.c:237 msgid "Name : " msgstr "Ðазвание : " #. ComboBox for category selection #. It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. #. Combo box for categories list #: src/gui/gwnotebookmanagment.c:255 src/gui/gwpropertiesbox.c:1077 #: src/gui/gwpropertiesbox.c:1403 src/gui/gwpropertiesbox.c:1737 msgid "Category : " msgstr "ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ : " #: src/gui/gwnotebookmanagment.c:261 msgid "" "Select the category to apply to the disk which will be added (even if the " "option is checked)." msgstr "" "Выберите категорию ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ применена к добавлÑемому диÑку (даже еÑли " "Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð°)" #: src/gui/gwnotebookmanagment.c:273 msgid "Give the device file of the selected media." msgstr "Показывает файл уÑтройÑтва выбранного ноÑителÑ" #. Device file information label #: src/gui/gwnotebookmanagment.c:278 src/gui/gwnotebookmanagmentcallback.c:420 #: src/gui/gwnotebookmanagmentcallback.c:479 msgid "Info : " msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ : " #: src/gui/gwnotebookmanagment.c:290 msgid "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)." msgstr "" "Показывает тип выбранного уÑтройÑтва (напр: ext2, ext3, vfat, ntfs, ...)." #. Device type information label #: src/gui/gwnotebookmanagment.c:295 src/gui/gwnotebookmanagmentcallback.c:425 #: src/gui/gwnotebookmanagmentcallback.c:497 src/gui/gwpropertiesbox.c:883 msgid "Type : " msgstr "Тип : " #: src/gui/gwnotebookmanagment.c:307 msgid "Display if the selected media is mounted or no." msgstr "Показывает Ñмонтировано выбранное уÑтройÑтво или нет." #. Media mount state information label #: src/gui/gwnotebookmanagment.c:312 src/gui/gwnotebookmanagmentcallback.c:431 #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Mounted : " msgstr "Смонтировано : " #: src/gui/gwnotebookmanagment.c:324 msgid "Give the volume name of the selected media (only if is mounted)." msgstr "Показывает Ð¸Ð¼Ñ Ñ‚Ð¾Ð¼Ð° выбранного ноÑÐ¸Ñ‚ÐµÐ»Ñ (только еÑли он Ñмонтирован)." #. Media volume information label #: src/gui/gwnotebookmanagment.c:329 src/gui/gwnotebookmanagmentcallback.c:437 msgid "Volume : " msgstr "Том : " #: src/gui/gwnotebookmanagment.c:340 msgid "" "Give the serial number of the selected media (only if is mounted). This " "number is a manufacture number." msgstr "" "Показывает Ñерийный номер выбраного ноÑÐ¸Ñ‚ÐµÐ»Ñ (только еÑли он Ñмонтирован). " "Этот номер уÑтановлен на заводе изготовителе." #. Media serial number information label #: src/gui/gwnotebookmanagment.c:345 msgid "Serial N# : " msgstr "Серийный N : " #: src/gui/gwnotebookmanagment.c:356 msgid "Give the full space of the selected media (only if is mounted)." msgstr "" "Показывает полную ёмкоÑть выбраного ноÑÐ¸Ñ‚ÐµÐ»Ñ (только еÑли он Ñмонтирован)." #. Media capacity information label #: src/gui/gwnotebookmanagment.c:361 src/gui/gwnotebookmanagmentcallback.c:447 #: src/gui/gwnotebookmanagmentcallback.c:539 msgid "Capacity : " msgstr "ÐмкоÑть : " #: src/gui/gwnotebookmanagment.c:372 msgid "Give the free space of the selected media (only if is mounted)." msgstr "" "Показывает Ñвободное проÑтранÑтво на выбраном ноÑителе (только еÑли он " "Ñмонтирован)" #. Media free space information label #: src/gui/gwnotebookmanagment.c:377 src/gui/gwnotebookmanagmentcallback.c:452 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "Free space : " msgstr "Свободное проÑтранÑтво : " #. Frame for scan options #: src/gui/gwnotebookmanagment.c:385 msgid "Options" msgstr "ÐаÑтройки" #. Check button for the displaying of media information #: src/gui/gwnotebookmanagment.c:396 msgid "Display info" msgstr "Отображать информацию" #: src/gui/gwnotebookmanagment.c:404 msgid "" "Displays selected media informations as path, capacity, free space, label,..." msgstr "" "Отображает такую информацию о выбраном ноÑителе как путь, ёмкоÑть, Ñвободное " "проÑтранÑтво, метка,..." #. Check button for the automount #: src/gui/gwnotebookmanagment.c:410 msgid "Automount" msgstr "Ðвтомонтирование" #: src/gui/gwnotebookmanagment.c:418 msgid "" "Mount the media if it wasn't mounted. And unmount after the media even if it " "was mounted before the scan." msgstr "" "Монтирует ноÑитель еÑли он небыл Ñмонтирован. И отмонтирует впоÑледÑтвии " "даже еÑли он был Ñмонтирован перед Ñканированием." #. Check button for the exploring of tree structure #: src/gui/gwnotebookmanagment.c:424 msgid "Explore tree structure of the media." msgstr "ПроÑматривать Ñтруктуру дерева ноÑителÑ" #: src/gui/gwnotebookmanagment.c:432 msgid "Keep this option checked to scan all folders and files informations." msgstr "" "Держите Ñту опцию выбраной Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ что получить информацию о вÑе файлах и " "папках." #. Check button for the exploring of archive files #: src/gui/gwnotebookmanagment.c:437 msgid "Explore archive files (.tar, .gz, .zip, ...)" msgstr "ПроÑмотр заархивированных файлов (.tar, .gz, .zip, ...)" #: src/gui/gwnotebookmanagment.c:445 msgid "" "Not yet implemented!!\n" "Explore all archives, as it was a directory. Archives are tarred or gzipped " "files." msgstr "" "Пока не реализована!!!\n" "ПроÑматроивает вÑе архивы, как каталоги. Ðрхивами ÑвлÑÑŽÑ‚ÑÑ tarr или zip " "файлы." #. Check button for the auto eject #: src/gui/gwnotebookmanagment.c:450 msgid "Eject media if possible" msgstr "Извлечь ноÑитель еÑли возможно" #: src/gui/gwnotebookmanagment.c:458 msgid "" "Eject the media if possible (CD-ROM...), even if the tray was closed. This " "is enable only if automount is enable!!" msgstr "" "Извлекает ноÑитель еÑли возможно (CD-ROM ...), даже при закрытом лотке. Это " "возможно только при включенной опции автомонтирование!" #. Check button for setting category recursively #: src/gui/gwnotebookmanagment.c:463 msgid "Sets category recursive" msgstr "УÑтановить категории рекурÑивно" #: src/gui/gwnotebookmanagment.c:471 msgid "" "Apply selected category to all items in the disk to add (disk, folders and " "files)." msgstr "" "ПрименÑет выбранную категорию ко вÑем Ñлементам (диÑку, папкам, файлам)." #. Check button for the auto make description #: src/gui/gwnotebookmanagment.c:476 msgid "Auto make description" msgstr "ÐвтоматичеÑÐºÐ°Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ð¿Ð¸ÑаниÑ" #: src/gui/gwnotebookmanagment.c:484 msgid "" "Make auto description of file (file format description, image size for xmp " "or jpg, etc...)." msgstr "" "ÐвтоматичеÑки генерируетÑÑ Ð¾Ð¿Ð¸Ñание файла (формат файла, размер xpm или jpg " "и Ñ‚.п.)." #. Check button for the using a pattern to generate disk name #: src/gui/gwnotebookmanagment.c:489 msgid "Use an advanced pattern to generate disk name" msgstr "ИÑпользовать уÑложненый шаблон Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð´Ð¸Ñка" #: src/gui/gwnotebookmanagment.c:497 msgid "" "You can fill extra tags to generate a disk name with disk information :\n" "- %% : %\n" "- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, " "0002, 0003, ..., 0091, ...\n" "- %l : media volume label\n" "- %t : media type\n" "- %s : serial number" msgstr "" "Ð’Ñ‹ можете заполнить дополнительные Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð´Ð¸Ñка и " "информации о диÑке :\n" "-%% : %\n" "- %n : номер архива (можно иÑпользовать приÑтавку :0 : 4n даÑÑ‚ 0001, 0002, " "0003, ... 0091, ... \n" "- %l : метка тома ноÑителÑ\n" "- %t : тип ноÑителÑ\n" "- %s : Ñерийный номер" #. Check button for the using media label #: src/gui/gwnotebookmanagment.c:502 msgid "Use media volume name as disk name (only when disk name is empty)" msgstr "" "ИÑпользовать название тома ноÑÐ¸Ñ‚ÐµÐ»Ñ ÐºÐ°Ðº название диÑка (только когда " "название диÑка отÑутÑтвует)" #: src/gui/gwnotebookmanagment.c:510 msgid "" "If you didn't enter disk name and if your selected media has a volume name, " "the media volume name will be applied as disk name." msgstr "" "ЕÑли вы не ввели название диÑкаи и еÑли вы выбрали приÑвоение ноÑителю " "Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÑ‚ÐºÐ¸ тома, то название метки тома будет применено как Ð¸Ð¼Ñ Ð´Ð¸Ñка." #. The add disk button to start the media scanning #. If no disk name is filled #. The device cannot be mounted #: src/gui/gwnotebookmanagment.c:515 src/gui/gwnotebookmanagmentcallback.c:152 #: src/gui/gwnotebookmanagmentcallback.c:160 #: src/gui/gwnotebookmanagmentcallback.c:275 #: src/gui/gwnotebookmanagmentcallback.c:354 #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Add disk" msgstr "Добавить диÑк" #. Text label of the managment tabbed pane. #: src/gui/gwnotebookmanagment.c:561 msgid "Management" msgstr "Управление" #: src/gui/gwnotebookmanagmentcallback.c:152 msgid "The disk hasn't been added : there are not mounted media" msgstr "ДиÑк не был добавлен : нет Ñмонтированого ноÑителÑ" #: src/gui/gwnotebookmanagmentcallback.c:160 msgid "The disk hasn't been added : cannot mount media" msgstr "ДиÑк не был добавлен : невозможно Ñмонтировать ноÑитель" #. If no catalog is opened #: src/gui/gwnotebookmanagmentcallback.c:256 msgid "Add new disk" msgstr "Добавить новый диÑк" #: src/gui/gwnotebookmanagmentcallback.c:275 msgid "Enter disk name" msgstr "Введите Ð¸Ð¼Ñ Ð´Ð¸Ñка" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Scanning" msgstr "Сканирование" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Adding disk is working" msgstr "Добавление диÑка в процеÑÑе" #: src/gui/gwnotebookmanagmentcallback.c:298 msgid "Please wait" msgstr "ПожалуйÑта подождите" #: src/gui/gwnotebookmanagmentcallback.c:308 src/gwcatalogmanager.c:369 msgid "The disk has been added" msgstr "ДиÑк был добавлен" #: src/gui/gwnotebookmanagmentcallback.c:354 msgid "Mount failed\n" msgstr "Монтирование не удалоÑÑŒ\n" #: src/gui/gwnotebookmanagmentcallback.c:442 #: src/gui/gwnotebookmanagmentcallback.c:531 msgid "Serial number : " msgstr "Серийный номер : " #: src/gui/gwnotebookmanagmentcallback.c:479 #: src/gui/gwnotebookmanagmentcallback.c:494 #: src/gui/gwnotebookmanagmentcallback.c:519 #: src/gui/gwnotebookmanagmentcallback.c:523 #: src/gui/gwnotebookmanagmentcallback.c:531 #: src/gui/gwnotebookmanagmentcallback.c:539 #: src/gui/gwnotebookmanagmentcallback.c:550 msgid "no drive" msgstr "нет ноÑителÑ" #: src/gui/gwnotebookmanagmentcallback.c:491 src/gwsupport.c:356 msgid "unknown" msgstr "неизвеÑтно" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "Yes" msgstr "Да" #: src/gui/gwnotebookmanagmentcallback.c:507 msgid "No" msgstr "Ðет" #: src/gui/gwnotebookmanagmentcallback.c:516 msgid "No label" msgstr "Ðет метки" #: src/gui/gwnotebookmanagmentcallback.c:523 msgid "Volume name : " msgstr "Ð˜Ð¼Ñ Ñ‚Ð¾Ð¼Ð° : " #: src/gui/gwnotebookmanagmentcallback.c:643 msgid "the disk adding is canceled" msgstr "Добавка диÑка отменена" #: src/gui/gwnotebookmanagmentcallback.c:707 msgid "Please select a catalog name\n" msgstr "ПожалуйÑта выберите Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°\n" #: src/gui/gwnotebooksearch.c:132 msgid "Search : " msgstr "ПоиÑк : " #. Start search button. #. Text label of the search tabbed pane. #: src/gui/gwnotebooksearch.c:153 src/gui/gwnotebooksearch.c:385 #: src/gui/gwsettingssearch.c:57 msgid "Search" msgstr "ПоиÑк" #: src/gui/gwnotebooksearch.c:160 msgid "" "The search can be case sensitive. The wildcards search supports character \"*" "\".\n" "Example : img*.bmp or *.htm\n" "The key words search accepts a list of obligatory words." msgstr "" "ÐŸÐ¾Ð¸Ñ Ñ‡ÑƒÐ²Ñтвителен к региÑтру. ÐŸÐ¾Ð¸Ñ Ð¿Ð¾ шаблону поддерживает Ñимволы \"*\" \n" "Ðапример : img*.bmp or *.htm\n" "ПоиÑк по ключевым Ñловам принимает ÑпиÑок обÑзательных Ñлов." #. Clear results button. #: src/gui/gwnotebooksearch.c:168 msgid "Clear" msgstr "ОчиÑтить" #: src/gui/gwnotebooksearch.c:175 msgid "Clears all search results" msgstr "ОчиÑтить вÑе результаты поиÑка" #. Case/uncase sensitive check buton. #: src/gui/gwnotebooksearch.c:183 msgid "Case sensitive" msgstr "РегиÑтр" #: src/gui/gwnotebooksearch.c:193 msgid "" "The search can be be or not case sensitive.\n" "In case sensitive \"File.txt\" doesn't match with \"file.txt\". But in " "uncase sensitive it matches." msgstr "" "ПоиÑк может быть или не быть чувÑтвительным к региÑтру\n" "Ð’ Ñлучае чувÑтвительноÑти к региÑтру \"File.txt\" не равен \"file.txt\". Ðо " "вÑлучае не чувÑтвительноÑти к региÑтру они будут равны." #. Create the radio button group for search type. #: src/gui/gwnotebooksearch.c:198 msgid "Search type" msgstr "Тип поиÑка" #: src/gui/gwnotebooksearch.c:206 msgid "Key words" msgstr "Ключевые Ñлова" #: src/gui/gwnotebooksearch.c:214 msgid "" "Enter a list of key words which all must be containted is the matched files." msgstr "" "Введите ÑпиÑок ключевых Ñлов по которым будет щÑущеÑтвлÑÑ‚ÑÑ Ð¿Ð¾Ð¸Ñк файлов. " #: src/gui/gwnotebooksearch.c:218 msgid "Wildcards" msgstr "Шаблон" #: src/gui/gwnotebooksearch.c:226 msgid "" "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" " "caracters." msgstr "Введите шаблон. Этот шаблон может Ñодержать Ñимволы \"?\" и \"*\"." #: src/gui/gwnotebooksearch.c:230 msgid "Regular expression" msgstr "РегулÑрные выражениÑ" #: src/gui/gwnotebooksearch.c:238 msgid "Can use regular expression. See documentation for more information." msgstr "" "Может Ñодержать регулÑрные выражениÑ. Смотрите документацию Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ " "более детальной информации." #. Match file check buton. #: src/gui/gwnotebooksearch.c:243 msgid "File" msgstr "Файл" #: src/gui/gwnotebooksearch.c:251 msgid "The search matches with files name." msgstr "ПоиÑк Ñовпадений Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ файлов," #. Match folder check buton. #: src/gui/gwnotebooksearch.c:256 msgid "Folder" msgstr "Папка" #: src/gui/gwnotebooksearch.c:264 msgid "The search matches with folders name." msgstr "ÐŸÐ¾Ð¸Ñ Ñовпадений Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми папок" #. Match disk check buton. #. ! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gui/gwnotebooksearch.c:269 src/gwapplicationmanager.h:558 msgid "Disk" msgstr "ДиÑк" #: src/gui/gwnotebooksearch.c:277 msgid "The search matches with disks name." msgstr "ÐŸÐ¾Ð¸Ñ Ñовпадений Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми диÑков" #. Match category check buton. #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number #. ! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category #: src/gui/gwnotebooksearch.c:282 src/gwapplicationmanager.h:356 #: src/gwapplicationmanager.h:502 src/gwapplicationmanager.h:606 msgid "Category" msgstr "КатегориÑ" #: src/gui/gwnotebooksearch.c:290 msgid "The search matches with categories name." msgstr "ÐŸÐ¾Ð¸Ñ Ñовпадений Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми категорий" #: src/gui/gwnotebooksearch.c:303 msgid "The search matches with descriptions." msgstr "ÐŸÐ¾Ð¸Ñ Ñовпадений Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми опиÑаний" #: src/gui/gwnotebooksearchcallback.c:324 msgid "Search in catalog" msgstr "ПоиÑк в каталоге" #: src/gui/gwnotebooksearchcallback.c:328 #, c-format msgid "%lu item(s) founded." msgstr "%lu запиÑей найдено." #: src/gui/gwnotebooksearchcallback.c:329 #: src/gui/gwnotebooksearchcallback.c:337 msgid "Search result" msgstr "Результат поиÑка" #: src/gui/gwnotebooksearchcallback.c:337 msgid "No item matched." msgstr "Ðет Ñовпавших запиÑей" #: src/gui/gwnotebooksearchcallback.c:347 msgid "Searching..." msgstr "ПоиÑк ..." #: src/gui/gwnotebooksearchcallback.c:347 msgid "Cannot start searching : no catalog loaded" msgstr "Ðевозможно начать поиÑк : нет загруженных каталогов" #: src/gui/gwprogressbarbox.c:514 msgid "_Ok" msgstr "_ОК" #: src/gui/gwpropertiesbox.c:360 msgid "Enter the name of the catalog." msgstr "Введите Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°." #. Catalog file version label #: src/gui/gwpropertiesbox.c:387 msgid "Version : " msgstr "ВерÑÐ¸Ñ : " #: src/gui/gwpropertiesbox.c:390 msgid "Version " msgstr "ВерÑиÑ" #: src/gui/gwpropertiesbox.c:390 msgid " built with " msgstr " Ñобрано Ñ " #. Number of disks label #: src/gui/gwpropertiesbox.c:403 msgid "Disks in catalog : " msgstr "ДиÑков в каталоге : " #: src/gui/gwpropertiesbox.c:406 #, c-format msgid "Disks in catalog : %d" msgstr "ДиÑков в каталоге : %d" #. Total number of files label #. Total number of files of disk label #: src/gui/gwpropertiesbox.c:419 src/gui/gwpropertiesbox.c:928 msgid "Total Files : " msgstr "Ð’Ñего файлов : " #: src/gui/gwpropertiesbox.c:422 src/gui/gwpropertiesbox.c:931 #, c-format msgid "Total Files : %ld" msgstr "Ð’Ñего файлов : %ld" #. Total number of files label #. Total number of folders of disk label #: src/gui/gwpropertiesbox.c:435 src/gui/gwpropertiesbox.c:944 msgid "Total Folders : " msgstr "Ð’Ñего папок : " #: src/gui/gwpropertiesbox.c:438 src/gui/gwpropertiesbox.c:947 #, c-format msgid "Total Folders : %ld" msgstr "Ð’Ñего папок : %ld" #. Catalog size label #. The file size label #: src/gui/gwpropertiesbox.c:455 src/gui/gwpropertiesbox.c:459 #: src/gui/gwpropertiesbox.c:1544 msgid "File Size : " msgstr "Размер файла : " #. Total capacity of catalog label #: src/gui/gwpropertiesbox.c:475 src/gui/gwpropertiesbox.c:479 msgid "Total Storage Space : " msgstr "Общий размер ноÑÐ¸Ñ‚ÐµÐ»Ñ : " #. Used space of catalog label #: src/gui/gwpropertiesbox.c:495 src/gui/gwpropertiesbox.c:499 msgid "Total Used Space : " msgstr "ИÑпользуемый обьём : " #. Free space of catalog label #: src/gui/gwpropertiesbox.c:515 src/gui/gwpropertiesbox.c:519 msgid "Total Free Space : " msgstr "Свободное проÑтранÑтво : " #. Statistics label #: src/gui/gwpropertiesbox.c:539 msgid "Disk Statistics : " msgstr "СтатиÑтика диÑка " #. CD-Roms statistics label #: src/gui/gwpropertiesbox.c:556 msgid "CD-Rom : " msgstr "CD-ROM : " #: src/gui/gwpropertiesbox.c:560 #, c-format msgid "CD-Rom : %d" msgstr "CD-ROM : %d" #. Audio CD statistics label #: src/gui/gwpropertiesbox.c:573 msgid "Audio CD : " msgstr "Ðудио CD : " #: src/gui/gwpropertiesbox.c:577 #, c-format msgid "Audio CD : %d" msgstr "Ðудио CD : %d" #. HDs statistics label #: src/gui/gwpropertiesbox.c:590 msgid "HD : " msgstr "ЖеÑткий диÑк : " #: src/gui/gwpropertiesbox.c:594 #, c-format msgid "HD : %d" msgstr "ЖеÑткий диÑк : %d" #. Floppies statistics label #: src/gui/gwpropertiesbox.c:607 msgid "Floppy : " msgstr "Гибкий диÑк : " #: src/gui/gwpropertiesbox.c:611 #, c-format msgid "Floppy : %d" msgstr "Гибкий диÑк : %d" #. Zips statistics label #: src/gui/gwpropertiesbox.c:624 msgid "Zip : " msgstr "Zip : " #: src/gui/gwpropertiesbox.c:628 #, c-format msgid "Zip : %d" msgstr "Zip : %d" #. Tape drive statistics label #: src/gui/gwpropertiesbox.c:645 msgid "Tape : " msgstr "Лента : " #: src/gui/gwpropertiesbox.c:649 #, c-format msgid "Tape : %d" msgstr "Лента : %d" #. Network drive statistics label #: src/gui/gwpropertiesbox.c:662 msgid "Network : " msgstr "Сеть : " #: src/gui/gwpropertiesbox.c:666 #, c-format msgid "Network : %d" msgstr "Сеть : %d" #. Jaz statistics label #: src/gui/gwpropertiesbox.c:679 msgid "Jaz : " msgstr "Jaz : " #: src/gui/gwpropertiesbox.c:683 #, c-format msgid "Jaz : %d" msgstr "Jaz : %d" #. Others media statistics label #: src/gui/gwpropertiesbox.c:696 msgid "Other : " msgstr "Другое : " #: src/gui/gwpropertiesbox.c:700 #, c-format msgid "Other : %d" msgstr "Другое : %d" #. Combo box for categories list #: src/gui/gwpropertiesbox.c:717 msgid "Catalog categories : " msgstr "Категории каталога : " #. Title description label #: src/gui/gwpropertiesbox.c:733 msgid "Catalog Description : " msgstr "ОпиÑание каталога " #: src/gui/gwpropertiesbox.c:760 msgid "Catalog Info" msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ каталоге " #: src/gui/gwpropertiesbox.c:827 msgid "Enter the name of the disk." msgstr "Введите Ð¸Ð¼Ñ Ð´Ð¸Ñка." #: src/gui/gwpropertiesbox.c:858 msgid "Enter the archive number of the disk." msgstr "Введите номер архива диÑка." #. Disk type label #: src/gui/gwpropertiesbox.c:880 msgid " Type : " msgstr "Тип : " #. Disk serial number label #: src/gui/gwpropertiesbox.c:896 src/gui/gwpropertiesbox.c:899 msgid "Serial : " msgstr "Серийный номер : " #. Disk volume name label #: src/gui/gwpropertiesbox.c:912 src/gui/gwpropertiesbox.c:915 msgid "Volume Label : " msgstr "Метка тома : " #. Total capacity of disk label #: src/gui/gwpropertiesbox.c:964 src/gui/gwpropertiesbox.c:968 msgid "Total Capacity : " msgstr "ÐžÐ±Ñ‰Ð°Ñ Ñ‘Ð¼ÐºÐ¾Ñть : " #. Used space of disk label #: src/gui/gwpropertiesbox.c:984 src/gui/gwpropertiesbox.c:988 msgid "Used Space : " msgstr "ИÑпользованное проÑтранÑтво :" #. Free space of disk label #: src/gui/gwpropertiesbox.c:1004 src/gui/gwpropertiesbox.c:1008 msgid "Free Space : " msgstr "Свободное проÑтранÑтво :" #. Catalog name label #: src/gui/gwpropertiesbox.c:1038 src/gui/gwpropertiesbox.c:1042 #: src/gui/gwpropertiesbox.c:1044 src/gui/gwpropertiesbox.c:1046 msgid "Catalog Name : " msgstr "Ðазвание каталога : " #. Adding date label of disk #: src/gui/gwpropertiesbox.c:1060 src/gui/gwpropertiesbox.c:1064 msgid "Update in catalog : " msgstr "Изменение в каталоге : " #. Title description label #: src/gui/gwpropertiesbox.c:1094 msgid "Disk Description : " msgstr "ОпиÑание диÑка : " #: src/gui/gwpropertiesbox.c:1121 msgid "Disk Info" msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ диÑке" #. Folder name label #: src/gui/gwpropertiesbox.c:1175 msgid "Folder Name" msgstr "Ðазвание папки" #. The folder type label #: src/gui/gwpropertiesbox.c:1206 msgid "Type : (folder)" msgstr "Тип : (папка)" #. The folder size label #: src/gui/gwpropertiesbox.c:1217 src/gui/gwpropertiesbox.c:1221 msgid "Folder Size : " msgstr "Размер папки : " #. The folder creation date label #. The file creation date label #: src/gui/gwpropertiesbox.c:1237 src/gui/gwpropertiesbox.c:1241 #: src/gui/gwpropertiesbox.c:1567 src/gui/gwpropertiesbox.c:1571 msgid "Created on : " msgstr "Создана : " #. the folder last update date label #. The file last modification date lalbel #: src/gui/gwpropertiesbox.c:1255 src/gui/gwpropertiesbox.c:1259 #: src/gui/gwpropertiesbox.c:1585 src/gui/gwpropertiesbox.c:1589 msgid "Last modified on : " msgstr "ПоÑледнее изменение : " #. The folder last access date label #. The file last access date label #: src/gui/gwpropertiesbox.c:1273 src/gui/gwpropertiesbox.c:1277 #: src/gui/gwpropertiesbox.c:1603 src/gui/gwpropertiesbox.c:1607 msgid "Last accessed on : " msgstr "ПоÑледний доÑтуп : " #. Folder rights label #. the file rights label #: src/gui/gwpropertiesbox.c:1295 src/gui/gwpropertiesbox.c:1299 #: src/gui/gwpropertiesbox.c:1625 src/gui/gwpropertiesbox.c:1629 msgid "Rights : " msgstr "Права : " #. The folder owner name label #. The file owner name label #: src/gui/gwpropertiesbox.c:1313 src/gui/gwpropertiesbox.c:1317 #: src/gui/gwpropertiesbox.c:1319 src/gui/gwpropertiesbox.c:1643 #: src/gui/gwpropertiesbox.c:1647 src/gui/gwpropertiesbox.c:1649 msgid "Owner : " msgstr "Владелец : " #. The folder group name label #. File group name label #: src/gui/gwpropertiesbox.c:1333 src/gui/gwpropertiesbox.c:1337 #: src/gui/gwpropertiesbox.c:1339 src/gui/gwpropertiesbox.c:1663 #: src/gui/gwpropertiesbox.c:1667 src/gui/gwpropertiesbox.c:1669 msgid "Group : " msgstr "Группа : " #. Disk name label #. The disk name label #: src/gui/gwpropertiesbox.c:1367 src/gui/gwpropertiesbox.c:1370 #: src/gui/gwpropertiesbox.c:1697 src/gui/gwpropertiesbox.c:1702 msgid "Disk Name : " msgstr "Ðазвание диÑка : " #. The folder location label #. The file location label #: src/gui/gwpropertiesbox.c:1383 src/gui/gwpropertiesbox.c:1388 #: src/gui/gwpropertiesbox.c:1717 src/gui/gwpropertiesbox.c:1721 msgid "Location on Disk : " msgstr "РаÑположение на диÑке : " #. Title description label #: src/gui/gwpropertiesbox.c:1420 msgid "Folder Description : " msgstr "ОпиÑание папки : " #: src/gui/gwpropertiesbox.c:1447 msgid "Folder Info" msgstr "Ð˜Ð½Ñ„Ð»Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ папке" #. Folder name label #: src/gui/gwpropertiesbox.c:1502 msgid "File name : " msgstr "Ðазвание файла : " #. The file type label #: src/gui/gwpropertiesbox.c:1533 msgid "File type : not yet implemented!!" msgstr "Тип файла : пока не реализовано !!" #: src/gui/gwpropertiesbox.c:1548 #, c-format msgid "File Size : %s (%s bytes)" msgstr "Размер файла : %s (%s байт)" #. Title description label #: src/gui/gwpropertiesbox.c:1754 msgid "File Description : " msgstr "ОпиÑание файла : " #: src/gui/gwpropertiesbox.c:1781 msgid "File Info" msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ файле" #: src/gui/gwsettingscatalogfile.c:68 msgid "Catalog file" msgstr "Файл каталога" #. Adds the compression level. #: src/gui/gwsettingscatalogfile.c:119 msgid "Catalog compression level :" msgstr "Уровень компреÑии каталога : " #: src/gui/gwsettingscatalogfile.c:134 msgid "" "Select the catalog compression level. The default value is 3, it's a good " "value between high performance and small size." msgstr "" "Выберите уровень компреÑии каталога. Значение по умолчанию 3, Ñто хорошее " "Ñоотношение между производительноÑтью и размером." #. Adds the history size. #: src/gui/gwsettingscatalogfile.c:142 msgid "Recents opened catalogs :" msgstr "Ðедавно открытых каталогов : " #: src/gui/gwsettingscatalogfile.c:157 msgid "" "Select the size of recents opened catalogs history. The default value is 5." msgstr "" "Укажите размер иÑтории недавно открытых каталогов. Значение по умолчанию 5." #. Adds the clear history. #: src/gui/gwsettingscatalogfile.c:164 msgid "Clear history" msgstr "ОчиÑтить иÑторию" #: src/gui/gwsettingscatalogfile.c:168 msgid "Click here to clear the recents opened files history." msgstr "Ðажмите здеÑÑŒ Ð´Ð»Ñ Ð¾Ñ‡Ð¸Ñтки иÑтории недавно открытых каталогов." #. Adds the autload catalog option. #: src/gui/gwsettingscatalogfile.c:174 msgid "Autoload catalog" msgstr "Ðвтозагрузка каталога" #: src/gui/gwsettingscatalogfile.c:179 msgid "Autoloads a default catalog when at starting." msgstr "ÐвтоматичеÑки загружает каталог по умолчанию при запуÑке." #. Create the radio button group for autoload options. #: src/gui/gwsettingscatalogfile.c:186 msgid "Load last opened catalog file." msgstr "Загрузить поÑледний каталог." #: src/gui/gwsettingscatalogfile.c:193 msgid "Load selected catalog file." msgstr "Загрузить указанный каталог." #: src/gui/gwsettingscatalogfile.c:204 msgid "Enter the full catalog file path to load." msgstr "Введите полный путь к загрузаемому каталогу." #. Adds the select catalog file. #: src/gui/gwsettingscatalogfile.c:211 msgid "Select catalog" msgstr "Выберите каталог" #: src/gui/gwsettingscatalogfile.c:217 msgid "Click here to browse and select the catalog file." msgstr "Ðажмите здеÑÑŒ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра и выбора файла каталога" #: src/gui/gwsettingscatalogfile.c:607 msgid "Select autoloaded catalog" msgstr "Выберите каталог Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкой загрузки" #: src/gui/gwsettingsexplorer.c:56 msgid "Explorer" msgstr "ПроÑмотр" #. Adds the case sensitive sort option. #: src/gui/gwsettingsexplorer.c:107 src/gui/gwsettingssearch.c:109 msgid "Case sensitive sort." msgstr "ЧувÑÑ‚Ð²Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ðº региÑтру Ñортировка" #: src/gui/gwsettingsexplorer.c:112 msgid "The result sort in explorer is case sensitive." msgstr "Результат Ñортировки при проÑмотре будет региÑтрозавиÑимым." #. Adds the sort group by type option. #: src/gui/gwsettingsexplorer.c:118 msgid "Result sort group by folder/file." msgstr "Результат Ñортировки Ñгруппировать по папкам/файлам." #: src/gui/gwsettingsexplorer.c:123 msgid "" "The result sort in explorer can be grouped by item type. If this option is " "checked all item will be grouped by folders or files." msgstr "" "Результат Ñортировки при проÑмотре будет Ñгруппирован по типу. ЕÑли Ñта " "Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð° вÑе запиÑи будут Ñгруппированы по папкам или файлам." #. Adds the autoload catalog option. #. Adds the autoresize column option. #: src/gui/gwsettingsexplorer.c:129 src/gui/gwsettingssearch.c:131 msgid "Autoresize columns" msgstr "Ðвтоширина колонок" #: src/gui/gwsettingsexplorer.c:134 src/gui/gwsettingssearch.c:136 msgid "Autoresize all explorer column." msgstr "ÐвтоматичеÑкий подбор ширины вÑех показываемых колонок" #: src/gui/gwsettingsexplorerdisk.c:54 msgid "Disks" msgstr "ДиÑки" #: src/gui/gwsettingsexplorerdisk.c:112 src/gui/gwsettingsexplorerfile.c:111 #: src/gui/gwsettingsquicksearch.c:118 msgid "Visible" msgstr "Видимы" #: src/gui/gwsettingsexplorerdisk.c:120 src/gui/gwsettingsexplorerfile.c:119 #: src/gui/gwsettingsquicksearch.c:126 msgid "Hide" msgstr "Скрыть" #: src/gui/gwsettingsexplorerdisk.c:125 src/gui/gwsettingsexplorerfile.c:124 #: src/gui/gwsettingsquicksearch.c:131 msgid "Show" msgstr "Показать" #: src/gui/gwsettingsexplorerdisk.c:141 src/gui/gwsettingsexplorerfile.c:140 #: src/gui/gwsettingsquicksearch.c:147 msgid "Hidden" msgstr "Скрыты" #: src/gui/gwsettingsexplorerfile.c:53 msgid "Files" msgstr "Файлы" #: src/gui/gwsettingssearch.c:114 msgid "The result sort in search is case sensitive." msgstr "Сортировка результатов поиÑка региÑтрозавиÑима." #. Adds the sort group by type option. #: src/gui/gwsettingssearch.c:120 msgid "Result sort group by type." msgstr "Сортировка результатов поиÑка по типу группы." #: src/gui/gwsettingssearch.c:125 msgid "" "The result sort in search can be grouped by item type. If this option is " "checked all item will be grouped by catalogs, disks, folders and files." msgstr "" "Результат Ñортировки при проÑмотре будет Ñгруппирован по типу. ЕÑли Ñта " "Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð° вÑе запиÑи будут Ñгруппированы по каталогам,диÑкам, папкам и " "файлам." #. Adds the key words mode option. #: src/gui/gwsettingssearch.c:142 msgid "All key words must match" msgstr "Ð’Ñе ключевые Ñлова должны ÑовпаÑть" #: src/gui/gwsettingssearch.c:147 msgid "" "Choose if all key words or only one of all key words must match with item in " "order to be in the search result." msgstr "" "Указывае должны ли вÑе ключевые Ñлова или или только одно из них ÑовпаÑть Ñ " "запиÑью чтоб попаÑть в результат Ñортировки." #: src/gui/gwsettingsquicksearch.c:60 msgid "Quick" msgstr "БыÑтро" #: src/gui/gwsettingsgeneral.c:44 msgid "Generals options" msgstr "Общие уÑтановки" #: src/gui/gwsettingsgui.c:54 msgid "GUI" msgstr "ИнтерфейÑ" #. Adds the autosave GUI properties option. #: src/gui/gwsettingsgui.c:93 msgid "Save GUI properties on exit" msgstr "СохранÑть ÑввойÑтва интерфейÑа при выходе" #: src/gui/gwsettingsgui.c:98 msgid "Save GUI properties as window position and size." msgstr "СохранÑть такие ÑвойÑтва интерфейÑа как Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð¸ размер окна." #. Adds the allowing beep option. #: src/gui/gwsettingsgui.c:104 msgid "Allow beep" msgstr "Разрешить Ñигнал" #: src/gui/gwsettingsgui.c:109 msgid "Allows to emits a short beep on some event." msgstr "" "Разрешает воÑпроизведение короткого Ñигнала при возникновение некоторых " "Ñобытий." #: src/gui/gwsettingsmail.c:83 msgid "Mail" msgstr "Почта" #. Email address. #: src/gui/gwsettingsmail.c:126 msgid "Email address :" msgstr "Почтовый Ð°Ð´Ñ€ÐµÑ : " #: src/gui/gwsettingsmail.c:136 msgid "Enter your email address." msgstr "Введите ваш почтовый адреÑ." #. Server address. #: src/gui/gwsettingsmail.c:141 msgid "Out going mail server :" msgstr "ИÑходÑщий почтовый Ñервер : " #: src/gui/gwsettingsmail.c:151 msgid "" "Enter your out going mail server. Usualy this address is mail.yourdomain.com" msgstr "" "Введите ваш Ñервер иÑходÑщих Ñообщений. Обычно Ñто Ð°Ð´Ñ€ÐµÑ Ð²Ð¸Ð´Ð° mai.yourdomain." "com" #. Server port. #: src/gui/gwsettingsmail.c:156 msgid "Server port :" msgstr "Порт Ñервера : " #: src/gui/gwsettingsmail.c:166 msgid "Enter the out going mail server port (the most common value is 25)." msgstr "Введите порт иÑходÑщего почтового Ñервера (в большинÑтве Ñлучаев 25)." #: src/gui/gwsettingswindowbox.c:82 msgid "" "This Settings box allows to configure some functionnalities and properties " "of the program." msgstr "" "Этот набор уÑтановок позволÑет изменÑть некоторые возможноÑти и ÑвойÑтва " "программы." #: src/gui/gwsettingswindowbox.c:85 src/gui/gwsettingswindowbox.c:124 msgid "Settings" msgstr "ÐаÑтройки" #: src/gui/gwsettingswindowbox.c:120 msgid "Select the section to configure." msgstr "Выберите Ñекцию Ð´Ð»Ñ Ð½Ð°Ñтройки." #: src/gui/gwsettingswindowbox.c:134 msgid "" "Change in this pane all availables properties in order to configure the " "program as you want." msgstr "" "Изменением вÑех доÑтупных на Ñтой панели наÑтроек вы можете наÑтроить " "программу по Ñвоему вкуÑу." #: src/gui/gwsettingswindowbox.c:145 msgid "" "This settings windows box allows to configure the program. Some properties " "may be modified here." msgstr "" "Этото окно уÑтановок позволÑет наÑтроить программу. Ðекоторые ÑвойÑтва " "редактируютÑÑ Ð·Ð´ÐµÑÑŒ. " #: src/gui/gwsettingswindowbox.c:170 msgid "Click on OK button to apply changes and close the Settings box." msgstr "" "Ðажмите кнопку ОК Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñделаных изменений и Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¾ÐºÐ½Ð° наÑтроек." #: src/gui/gwsettingswindowbox.c:185 msgid "Click on Cancel button to cancel changes and close the Settings box." msgstr "" "Ðажмите кнопку Отмена Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ Ñделаных изменений и Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¾ÐºÐ½Ð° наÑтроек." #: src/gui/gwsettingswindowbox.c:191 msgid "_Apply" msgstr "_Применить" #: src/gui/gwsettingswindowbox.c:198 msgid "" "Click on Apply button to apply changes (without close the Settings box)." msgstr "" "Ðажмите кнопку Применить Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñделаных изменений (без Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ " "окна наÑтроек)." #: src/gui/gwsettingswindowboxcallback.c:89 msgid "Settings changed" msgstr "ÐаÑтройки изменены" #: src/gui/gwsettingswindowboxcallback.c:89 msgid "" "If you don't apply changes you will lose all changes. Do you want apply " "changes?" msgstr "" "ЕÑли вы не примените изменениÑ, то вы потерÑете вÑе произведённые изменениÑ. " "Желаете применить изменениÑ?" #: src/gui/gwstatusbarcallback.c:49 #, c-format msgid " %s [ %s ], total disks : %d" msgstr " %s [ %s ], вÑего ноÑителей : %d" #: src/gui/gwstatusbarcallback.c:50 src/gui/gwstatusbarcallback.c:100 #: src/gui/gwstatusbarcallback.c:151 #, c-format msgid " Listed Items : %d (total size : %s)" msgstr " ЗапиÑей : %d (общий размер : %s)" #: src/gui/gwstatusbarcallback.c:81 #, c-format msgid " %s [ %s ], capacity : %s, free : %s" msgstr " %s [ %s ], ёмкоÑть : %s, Ñвободно : %s" #: src/gui/gwstatusbarcallback.c:91 msgid " Empty disk" msgstr "ПуÑтой диÑк" #: src/gui/gwstatusbarcallback.c:94 src/gui/gwstatusbarcallback.c:145 #: src/gui/gwstatusbarcallback.c:185 #, c-format msgid " Selected Item : %d (total size : %s)" msgstr "Выбраный Ñлемент : %d (общий размер : %s)" #: src/gui/gwstatusbarcallback.c:138 #, c-format msgid " Folder \"%s\", %s (files %d, subfolders %d)" msgstr " Папка \"%s\", %s (файлов %d, подпапок %d)" #: src/gui/gwstatusbarcallback.c:179 #, c-format msgid " %s, %s, %s" msgstr " %s, %s, %s" #: src/gui/gwstatusbarcallback.c:209 src/gui/gwstatusbarcallback.c:228 #, c-format msgid " Selected Item : %d" msgstr " Выбранный Ñлемент : %d" #: src/gui/gwstatusbarcallback.c:210 msgid " Catalog explorer" msgstr "ПроÑмотр каталога" #: src/gui/gwstatusbarcallback.c:229 msgid " Search engine" msgstr "ПоиÑÐºÐ¾Ð²Ð°Ñ ÑиÑтема" #: src/gui/gwstatusbarcallback.c:246 msgid " Catalog managment" msgstr "Управление каталогами" #: src/gui/gwtoolbar.c:89 msgid "Close catalog" msgstr "Закрыть каталог" #: src/gui/gwtoolbar.c:93 msgid "Send catalog by mail" msgstr "ПереÑлать каталог по почте" #: src/gui/gwwindowboxabout.c:121 msgid "About" msgstr "О программе" #: src/gui/gwwindowboxabout.c:152 msgid "" "\n" "Removable media catalog managment\n" "By Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" msgstr "" "\n" "Менеджер каталогов Ñьёмных ноÑителей\n" "Sebastien LECACHEUR\n" "\n" "zero@gwhere.org\n" "http://www.gwhere.org\n" #: src/gui/gwwindowboxabout.c:153 msgid "" "GWhere allows to manage a database of yours CDs and others removable media " "(hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's " "easy to browse yours CDs or to make quick search without need to insert " "yours CDs in the drive at each once." msgstr "" "GWhere позволÑет управлÑть базой данных ваших CD или други Ñьёмных ноÑителей " "(жёÑткие диÑки, гибкие магнитные диÑки, Zip диÑки, компакт диÑки, и Ñ‚.п.). С " "GWhere легко проÑмотреть ваши CD или выполнить быÑтрый поиÑк без " "необходимоÑти вÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ отдельного CD в привод." #: src/gui/gwwindowboxabout.c:154 msgid "" "\n" "\n" "Runs under " msgstr "" "\n" "\n" "Запущено под " #: src/gui/gwwindowboxmail.c:85 msgid "" "This window box allows you to send a catalog by mail to one (or more) of " "yours contacts." msgstr "" "Это окно позволит вам переÑлать каталог по почте одному (или более) человек " "из вашего контактлиÑта. " #: src/gui/gwwindowboxmail.c:88 src/gui/gwwindowboxmailcallback.c:57 #: src/gui/gwwindowboxmailcallback.c:64 msgid "Send mail" msgstr "ПоÑлать почту" #: src/gui/gwwindowboxmail.c:112 msgid "To :" msgstr "Кому : " #: src/gui/gwwindowboxmail.c:118 msgid "CC :" msgstr "ÐšÐ¾Ð¿Ð¸Ñ : " #: src/gui/gwwindowboxmail.c:124 msgid "BCC :" msgstr "Ð¡ÐºÑ€Ñ‹Ñ‚Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ : " #: src/gui/gwwindowboxmail.c:130 msgid "Subject :" msgstr "Тема : " #: src/gui/gwwindowboxmail.c:140 msgid "Enter here the email address of your(s) contact(s)." msgstr "Введите Ñюда почтовые адреÑ(а) получателÑ(ей)." #: src/gui/gwwindowboxmail.c:148 msgid "Enter here the email address of the copied mail contacts." msgstr "Введите Ñюда почтовые адреÑ(а) получателÑ(ей) копии." #: src/gui/gwwindowboxmail.c:156 msgid "Enter here the email address of the hidden copied mail contacts." msgstr "Введите Ñюда почтовые адреÑ(а) получателÑ(ей) Ñкрытой копии." #: src/gui/gwwindowboxmail.c:164 msgid "Enter here the object of your mail." msgstr "Введите Ñюда тему вашего пиÑьма." #: src/gui/gwwindowboxmail.c:168 msgid "Attached file :" msgstr "Вложеный файл : " #: src/gui/gwwindowboxmail.c:182 msgid "Choose to attach or no the catalog file." msgstr "Выберите вкладывать или нет файл каталога." #: src/gui/gwwindowboxmail.c:197 msgid "Type here the text for the mail message." msgstr "Ðапечатайте здеÑÑŒ текÑÑ‚ фашего ÑообщениÑ." #: src/gui/gwwindowboxmail.c:208 msgid "_Send" msgstr "_Отправить" #: src/gui/gwwindowboxmail.c:213 msgid "Click here to send a mail (with an attached catalog)." msgstr "Ðажмите здеÑÑŒ Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ пиÑьма (Ñ Ð¿Ñ€Ð¸ÐºÑ€ÐµÐ¿Ð»Ñ‘Ð½Ð½Ñ‹Ð¼ каталогом." #: src/gui/gwwindowboxmail.c:225 msgid "Click here to cancel the send of a mail." msgstr "Ðажмите здеÑÑŒ Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ отправки пиÑьма." #: src/gui/gwwindowboxmailcallback.c:57 msgid "Sending mail, please wait..." msgstr "Отправка почты. пожалуйÑта подождите..." #: src/gui/gwwindowboxmailcallback.c:64 msgid "" "An error occured during the sending of mail. Please check your parameters." msgstr "" "Ошибки возникли во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ почты. ПожалуйÑта проверьте ваши наÑтройки." #: src/gwsupport.c:129 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Ðе возможно найти файл изовражениÑ: %s" #: src/gwsupport.c:136 #, c-format msgid "Error loading pixmap file: %s" msgstr "Ошибка загрузки файла изовражениÑ: %s" #: src/gwcatalogmanager.c:285 msgid "Error : cannot get current folder." msgstr "Ошибка : невозможно получить текущую папку." #: src/gwcatalogmanager.c:369 msgid "Error : cannot go to working folder." msgstr "Ошибка : невозможно перейти в рабочую папку." #: src/gwcatalogmanager.c:444 msgid "" "The disk hasn't been added\n" "Adding canceled by user" msgstr "" "ДиÑк не был добавлен\n" "Добавление отменено пользователем" #: src/gwcatalogmanager.c:458 src/gwcatalogmanager.c:463 #: src/gwcatalogmanager.c:468 src/gwcatalogmanager.c:473 #: src/gwcatalogmanager.c:478 src/gwcatalogmanager.c:484 #: src/gwcatalogmanager.c:489 src/gwcatalogmanager.c:494 #: src/gwcatalogmanager.c:536 src/gwcatalogmanager.c:541 #: src/gwcatalogmanager.c:546 src/gwcatalogmanager.c:552 #: src/gwcatalogmanager.c:557 src/gwcatalogmanager.c:563 msgid "The disk hasn't been added\n" msgstr "ДиÑк не был добавлен\n" #: src/gwcatalogmanager.c:458 #, c-format msgid "%s outside the process's allocated address space." msgstr "%s за пределами выделенной процеÑÑу памÑти." #: src/gwcatalogmanager.c:463 #, c-format msgid "" "A component of the following pathname exceeded %d characters, or an entire " "path name exceeded %d characters : %s." msgstr "" "Компонент Ñледующего пути превыÑил %d Ñиволов, или веÑÑŒ путь превыÑил %d " "Ñимволов : %s" #: src/gwcatalogmanager.c:468 #, c-format msgid "The following directory does not exist : %s." msgstr "Следующий каталог не ÑущеÑтвует : %s." #: src/gwcatalogmanager.c:473 src/gwcatalogmanager.c:552 msgid "Insufficient memory to complete the operation." msgstr "ÐедоÑтаточно памÑти Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸." #: src/gwcatalogmanager.c:478 #, c-format msgid "A component of the path prefix is not a directory : %s." msgstr "Компоненты пути указывают не на каталог : %s." #: src/gwcatalogmanager.c:484 #, c-format msgid "" "Too many symbolic links were encountered in resolving following path : %s." msgstr "" "Слишком много ÑимволичеÑких Ñылок было вÑтречено при разрешение Ñледующего " "пути : %s." #: src/gwcatalogmanager.c:489 #, c-format msgid "An I/O error occurred when change directory to : %s." msgstr "Ошибка ввода/вывода возникла при Ñмене каталога на : %s." #: src/gwcatalogmanager.c:494 src/gwcatalogmanager.c:563 msgid "Unknown error" msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°" #: src/gwcatalogmanager.c:518 src/gwcatalogmanager.c:843 msgid "" "The disk hasn't been added\n" "Error : cannot go to parent folder." msgstr "" "ДиÑк не был добавлен\n" "Ошибка : невозможно перейти в родительÑкий каталог." #: src/gwcatalogmanager.c:536 msgid "Too many file descriptors in use by process." msgstr "Слишком много файловых диÑкрипторов иÑпользуетÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÑами." #: src/gwcatalogmanager.c:541 msgid "Too many files are currently open in the system." msgstr "Ð’ ÑиÑтеме открыто Ñлишком много файлов." #: src/gwcatalogmanager.c:546 #, c-format msgid "" "The following directory does not exist, or name is an empty string : %s." msgstr "Следующий каталог не ÑущеÑтвует или в название пуÑÑ‚Ð°Ñ Ñтрока : %s." #: src/gwcatalogmanager.c:557 #, c-format msgid "The following directory name is not a directory : %s." msgstr "Следующее Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° не ÑвлÑетÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð¼ : %s." #: src/gwcatalogmanager.c:735 #, c-format msgid "" "A critical error occured when extracting file information of %s%s%s.\n" "Save your catalog if it is possible, exit GWhere and report this trouble to " "the GWhere project team please." msgstr "" "КритичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° возникла при попытке Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о файле %s%s%" "s \n" "Сохраните ваш каталог еÑли Ñто возможно, выйдите из GWhere и Ñообщите, " "пожалуйÑта, об Ñтой проблеме команде разработчиков GWhere." #: src/gwcatalogmanager.c:836 msgid "" "The disk hasn't been added\n" "Error : cannot close current folder." msgstr "" "ДиÑк не был добавлен\n" "Ошибка : невозможно закрыть текущий каталог." #: src/gwapplicationmanager.c:65 #, c-format msgid "Is running on %s" msgstr "ВыполнÑетÑÑ Ð½Ð° %s" #: src/gwapplicationmanager.c:493 msgid "Catalog loaded" msgstr "Каталог загружен" #: src/gwapplicationmanager.c:498 msgid "Loading catalog failed" msgstr "Загрузка каталога не удалаÑÑŒ" #: src/gwapplicationmanager.c:499 msgid "Loading catalog" msgstr "Загружаю каталог" #: src/gwapplicationmanager.c:499 msgid "" "The catalog is invalid or doesn't exists. Check your catalog path please." msgstr "" "Ðеверный или неÑущеÑтвующий каталог. Проверьте ваш путь к каталогу " "пожалуйÑта." #: src/gwapplicationmanager.c:603 msgid "Saving catalog" msgstr "Сохранение каталога" #: src/gwapplicationmanager.c:615 msgid "Catalog saved" msgstr "Каталог Ñохранён" #: src/gwapplicationmanager.c:621 msgid "Saving catalog failed" msgstr "Сохранение каиалога не удалоÑÑÑŒ" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights #: src/gwapplicationmanager.h:260 msgid "Rights" msgstr "Права" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner #: src/gwapplicationmanager.h:272 msgid "Owner" msgstr "Владелец" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group #: src/gwapplicationmanager.h:284 msgid "Group" msgstr "Группа" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size #. ! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size #: src/gwapplicationmanager.h:296 src/gwapplicationmanager.h:582 msgid "Size" msgstr "Размер" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode #: src/gwapplicationmanager.h:308 msgid "INode" msgstr "INode" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date #: src/gwapplicationmanager.h:320 msgid "Access date" msgstr "Дата доÑтупа" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date #: src/gwapplicationmanager.h:332 msgid "Modification date" msgstr "Дата изменениÑ" #. ! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date #: src/gwapplicationmanager.h:344 msgid "Creation date" msgstr "Дата ÑозданиÑ" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name #: src/gwapplicationmanager.h:394 msgid "File system name" msgstr "Ðазвание файловой ÑиÑтемы" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path #: src/gwapplicationmanager.h:406 msgid "Access path" msgstr "Путь доÑтупа" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number #: src/gwapplicationmanager.h:418 msgid "Archive N#" msgstr "Ðрхив N " #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type #: src/gwapplicationmanager.h:430 msgid "Type" msgstr "Тип" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name #: src/gwapplicationmanager.h:442 msgid "Volume name" msgstr "Метка тома" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity #: src/gwapplicationmanager.h:454 msgid "Full capacity" msgstr "ÐŸÐ¾Ð»Ð½Ð°Ñ Ñ‘Ð¼ÐºÐ¾Ñть" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space #: src/gwapplicationmanager.h:466 msgid "Free space" msgstr "Свободное проÑтранÑтво" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date #. ! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date #: src/gwapplicationmanager.h:478 src/gwapplicationmanager.h:594 msgid "Date" msgstr "Дата" #. ! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number #: src/gwapplicationmanager.h:490 msgid "Serial number" msgstr "Серийный номер" #. ! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path #: src/gwapplicationmanager.h:570 msgid "Path" msgstr "Путь" #. Define all used string in the win32 installer #: win32/config.h:287 msgid "Full" msgstr "Полный" #: win32/config.h:288 msgid "Compact" msgstr "Сжатый" #: win32/config.h:289 msgid "GWhere (requiered)" msgstr "GWhere (требуетÑÑ)" #: win32/config.h:290 msgid "Main engine application." msgstr "Главное прилжение" #: win32/config.h:291 msgid "GTK+ 2.6 RunTime (required)" msgstr "GTK+ 2.6 RunTime (необходимо)" #: win32/config.h:292 msgid "RunTime for GUI environment." msgstr "RunTime Ð´Ð»Ñ GUI окружениÑ." #: win32/config.h:293 msgid "Plugins" msgstr "Плагины" #: win32/config.h:294 msgid "" "Plugins for auto extraction of file descriptions and plugins for importation/" "exportation of catalogs." msgstr "" "Плагины Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð¿Ð¸Ñаний файлов и плагины Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°/" "ÑкÑпорта каталогов." #: win32/config.h:295 msgid "Languages Files" msgstr "Языковые файлы" #: win32/config.h:296 msgid "All languages files for the program translation." msgstr "Ð’Ñе Ñзыковые файлы Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð° программы." #: win32/config.h:297 msgid "You must uninstall your last version of GWhere" msgstr "Ð’Ñ‹ должны деинÑталировать вашу поÑледнюю верÑию GWhere" #: win32/config.h:298 msgid "Installer already running" msgstr "ИнÑталÑÑ†Ð¸Ñ ÑƒÐ¶Ðµ запущена" #: win32/config.h:299 msgid "Install options" msgstr "ÐаÑтройки инÑталÑтора" #: win32/config.h:300 msgid "Which users can run GWhere ?" msgstr "Какие пользователи могут запуÑкать GWhere ?" #: win32/config.h:301 msgid "GWhere install rights access" msgstr "GWhere уÑтановит права доÑтупа" #: win32/config.h:302 msgid "" "GWhere can be installed for all users or only for current user. Select for " "which you want install GWhere please." msgstr "" "GWhere может быть уÑтановлен Ð´Ð»Ñ Ð²Ñех пользователей или только Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ " "пользователÑ. Укажите, пожалуйÑта, как вы хотите уÑтановить GWhere." #: win32/config.h:303 msgid "All users|Current user" msgstr "Ð’Ñе пользователллли|Текущий пользователь" #: win32/config.h:304 msgid "All users" msgstr "Ð’Ñе пользователи" gwhere-0.2.3/po/ru.nsh0000644000175000017500000000425010472427765013234 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ; !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_RUSSIAN} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (требуетÑÑ)" LangString DESC_SecCopyUI ${CURLANG} "Главное прилжение" LangString TITLE_SecCopyGTK ${CURLANG} "GTK+ 2.6 RunTime (необходимо)" LangString DESC_SecCopyGTK ${CURLANG} "RunTime Ð´Ð»Ñ GUI окружениÑ." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Плагины" LangString DESC_SecCopyPLUGINS ${CURLANG} "Плагины Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого извлечениÑопиÑаний файлов и плагины Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°/ÑкÑпорта каталогов." LangString TITLE_SecCopyLANG ${CURLANG} "Языковые файлы" LangString DESC_SecCopyLANG ${CURLANG} "Ð’Ñе Ñзыковые файлы Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð° программы." LangString UninstBefore ${CURLANG} "Ð’Ñ‹ должны деинÑталировать вашу поÑледнюю верÑию $(^NameDA)" LangString InstAlready ${CURLANG} "ИнÑталÑÑ†Ð¸Ñ ÑƒÐ¶Ðµ запущена" LangString InstTypeFull ${CURLANG} "Полный" LangString InstTypeCompact ${CURLANG} "Сжатый" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.en" LangString TITLE_SecAllUsersUI ${CURLANG} "ÐаÑтройки инÑталÑтора" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Какие пользователи могут запуÑкать $(^NameDA) ?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "$(^NameDA) уÑтановит права доÑтупа" LangString ASK_SecAllUsersUI ${CURLANG} "$(^NameDA) может быть уÑтановлен Ð´Ð»Ñ Ð²Ñех пользователей или только Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ пользователÑ. Укажите, пожалуйÑта, как вы хотите уÑтановить $(^NameDA)." LangString LIST_SecAllUsersUI ${CURLANG} "Ð’Ñе пользователллли|Текущий пользователь" LangString STATE_SecAllUsersUI ${CURLANG} "Ð’Ñе пользователи" !verbose 4 gwhere-0.2.3/po/ru.gmo0000644000175000017500000013473710472436237013236 0ustar bartbartÞ•·Ô KŒ¸$ ¹$aÇ$$)%N% k%w%‰% œ%*¨%$Ó%ø%&%&A& J& W&b&j&r&z&‚&Š&’&š&1¯&á&qý&7o'°§'X(_( e( q(}( (Ž( —(¤(»(0Ô( )) &)+1)m])4Ë)J*RK*ž* ¦* ±*¿* Ï* Û*é*ÿ*-+ >+H+h+{++ †+ +œ+ £+C±+õ+1 ,?,S,*d, ,›,ª,¿,Ç, Þ,ë,û,- -<-P- a-n--—-¯-¾- Ñ-ß-ò- û-.\.u.n‰.(ø.!/ '/5/1O/(/5ª/5à/H0D_0?¤0ä0 ê0 ø0,101@1H1d1 ‚1 1ž1 £1 ¯1»1Ê1Ï1 ã1 í1ú1 22$282/N2 ~2M‹2Ù2ß2ð23 33r33¦3L¶3449&4@`43¡4#Õ4ù45$5@5T5%j5&5)·5Rá546S6s6I6\Ù6C67z7L”7"á7$8)8G8L8,_8$Œ8±8º8Á8Ó8Ø8 ì8 ö899 .9;9!L9n9 t9 ~9Š9‘9 §9 ³9¿9Î9 á9 ï9 ú9: ::7:;:N:pO;À;Ý;+î;?<?Z<gš<G=@J=‹=‘=š= =¨=¯=´=É=Ï=PO> >§>»>Ã>Ó>.í>?8?I?P?DY? ž?¨?¸?Ì?à?ÿ?@+@B@V@[@[t@ Ð@Û@ í@iû@ eA pA{A€A ˆA “A A ¤A°A¹AÂAÅA-ÚABB"B>BZBhxBáB æB óBýBC CC1C7C@CEEC‹C ©CµCÄCeÌC 2D=DCDIDcDvD†D…šD E'E 6E BE NE!\E~E™E  EªEÇEÐE0ÕEF"F*F :F$GFlF{F‘F šF¤F «FµF ÇF ÕF áFîFGGx'G] G<þG ;HK\H¨H½H ÏHÙH öH I II ,I:IRI[IlIqI…I ŠI”I œII¦I5ðI&J>J2ZJ?J>ÍJ/ K8ä”'#•*K•v•´…•:– K– X–5c–'™–!Á–$ã–ó—ü—)˜#A˜#e˜%‰˜b¯˜T™ g™ r™&€™§™™sÕ™NIš˜š(²š!ÛšHýš%F›;l›¨›Á› Ô› ß›í› œ,œ@œTOœ¤œ$Äœä霥Îutž8꞊#Ÿ1®Ÿ'àŸ G" j ‰ Ÿ » Ú <õ 2¡#E¡i¡2z¡ ­¡ º¡ ơԡ‘ä¡iv¢ à¢&£f(£w£„¤fŒ¤\ó¤bP¥g³¥J¦Af¦v¨¦Y§ÿy§py¨ê¨Zª<bªŸ«H¶¬Fÿ¬BF­C‰­@Í­;®œJ®¬ç®¶”¯ K°pW°HȰ›±­±ʱå±²².8²+g²&“²º² Á²˲Má²#/³S³)d³p޳³ÿ³7³´ ë´ø´ µ µµ6µJµJ]µ ¨µ3µµéµ§îµ`–·÷·þ·¸¸ -¸:¸ V¸ `¸ n¸z¸¸†¸Œ¸œ¸¯¸À¸ܸë¸ÿ¸¹$¹<¹*S¹~¹#“¹'·¹c9lÄrBEi)8f ±k[È´xkV3ÜI“*Ž£r~Å'w¡.”ß4×™Ÿ=îžt ‰¥7ygR`s·ZALž›¢,–|«ÖbÛz 'l#µ@&zÇDq<ñ·jsu䜤#ã£|ˆïÎýÊ)€¤7Ó^ÿF ê¯!—%hZ>dœ™.Xm(´ÌNóÑ0a®\³ÍŒEchKªSQ LØìHϦ«!]CËŸŠæŽ/ U•먗]ÚÝ‚g³T(þ9‡8­RT‚An²µ»5a"Д©ð6¹˜$u±{P¶;¿Cšàv…§piø€OÙå@Šo?É ©+0‹}-‘^‹†4m~š%‘§ õqF¦Y2 {„<ª•°â ²/ç;>G¯í¢¬÷Ã?Þb\ V1ÆpáÂ_½WYe6G$›ô5†ºÀÔ `NKSnI2[QyB… }o&Xƒ­U–Œ¾°„è‰-H_=˜*MMW¬f3¨+ü¡ûv,dòO“öJ‡¼¥wù"DP’újƒ:Á¸¶1 ÕetÒé®Jˆ:’x Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Empty disk Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A catalog is already openedA component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A critical error occured when extracting file information of %s%s%s. Save your catalog if it is possible, exit GWhere and report this trouble to the GWhere project team please.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.All usersAll users|Current userAllow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Audio CD : Audio CD : %dAuto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog exportedCatalog fileCatalog importedCatalog is not exportedCatalog is not importedCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerExportExport catalog toFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGTK+ 2.6 RunTime (required)GUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.GWhere can be installed for all users or only for current user. Select for which you want install GWhere please.GWhere install rights accessGenerals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?ImportImport catalog fromInfo : Install optionsInstaller already runningInsufficient memory to complete the operation.Invalid filled catalog nameIs running on %sJaz : Jaz : %dKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : Network : Network : %dNewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new disk name was filledNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPlugins for auto extraction of file descriptions and plugins for importation/exportation of catalogs.PropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :Tape : Tape : %dThe catalog is invalid or doesn't exists. Check your catalog path please.The current catalog is never be saved, cannot send itThe disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled disk name already exist in the current catalogThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.There is no available catalog pluginThis Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Files : %ldTotal Folders : Total Folders : %ldTotal Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : Which users can run GWhere ?WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberYou must uninstall your last version of GWhereZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: ru Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2005-12-17 20:52+0400 Last-Translator: Lesnevsky Gennady Language-Team: Russian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: KBabel 1.10 Запущено под Менеджер каталогов Ñьёмных ноÑителей Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], ёмкоÑть : %s, Ñвободно : %s %s [ %s ], вÑего ноÑителей : %d %s, %s, %sПроÑмотр каталогаУправление каталогамиПуÑтой диÑк Папка "%s", %s (файлов %d, подпапок %d) ЗапиÑей : %d (общий размер : %s)ПоиÑÐºÐ¾Ð²Ð°Ñ ÑиÑтема Выбранный Ñлемент : %dВыбраный Ñлемент : %d (общий размер : %s)Тип : Ñобрано Ñ %.0f байт%.2f Гб%.2f Hb%.2f Ib%.2f Кб%.2f Мб%.2f Пб%.2f Тб%lu запиÑей найдено.%s за пределами выделенной процеÑÑу памÑти.Каталог уже открытКомпонент Ñледующего пути превыÑил %d Ñиволов, или веÑÑŒ путь превыÑил %d Ñимволов : %sКомпоненты пути указывают не на каталог : %s.КритичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° возникла при попытке Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о файле %s%s%s Сохраните ваш каталог еÑли Ñто возможно, выйдите из GWhere и Ñообщите, пожалуйÑта, об Ñтой проблеме команде разработчиков GWhere._О программеО программеДата доÑтупаПуть доÑтупаДобавитьДобавить/ИзменитьДобавить диÑкДобавить новый диÑкДобавление диÑка в процеÑÑеВÑе ключевые Ñлова должны ÑовпаÑтьВÑе Ñзыковые файлы Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð° программы.Ð’Ñе пользователиВÑе пользователллли|Текущий пользовательРазрешить ÑигналРазрешает воÑпроизведение короткого Ñигнала при возникновение некоторых Ñобытий.ПозволÑет изменÑть ÑвойÑтва выбранной категории. Ðажатие кнопки Добавить/Изменить ÑохранÑет изменениÑ.Ошибка ввода/вывода возникла при Ñмене каталога на : %s.Ошибки возникли во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ почты. ПожалуйÑта проверьте ваши наÑтройки.ПрименÑет выбранную категорию ко вÑем Ñлементам (диÑку, папкам, файлам).ÐрхивÐрхив N Ðрхив N : Вложеный файл : Ðудио CD : Ðудио CD : %dÐвтоматичеÑÐºÐ°Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ð¿Ð¸ÑаниÑÐвтозагрузка каталогаÐвтоматичеÑки загружает каталог по умолчанию при запуÑке.ÐвтомонтированиеÐвтоматичеÑкий подбор ширины вÑех показываемых колонокÐвтоширина ÐºÐ¾Ð»Ð¾Ð½Ð¾ÐºÐ¡ÐºÑ€Ñ‹Ñ‚Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ : ÐšÐ¾Ð¿Ð¸Ñ : CD-ROM : CD-ROM : %d_ЗакрытьСвернуть вÑеМожет Ñодержать регулÑрные выражениÑ. Смотрите документацию Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ детальной информации.Ðевозможно редактировать файл!!! Ðевозможно удалить данную категорию. Она имеет запиÑи.Ðевозможно получить данныеÐевозможно отправить данныеÐевозможно начать поиÑк : нет загруженных каталоговÐмкоÑть : РегиÑтрЧувÑÑ‚Ð²Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ðº региÑтру ÑортировкаКаталогОпиÑание каталога Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ каталоге Ðазвание каталога : Категории каталога : Каталог закрытУровень компреÑии каталога : ОпиÑание каталогаКаталог ÑкÑпортированФайл каталогаКаталог импортированКаталог не ÑкÑпортированКаталог не импортированКаталог загруженСвойÑтва каталогаКаталог ÑохранёнСпиÑок категорийКатегориÑÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ : Ðазвание категории :Изменением вÑех доÑтупных на Ñтой панели наÑтроек вы можете наÑтроить программу по Ñвоему вкуÑу.Изменить метку томаУказывае должны ли вÑе ключевые Ñлова или или только одно из них ÑовпаÑть Ñ Ð·Ð°Ð¿Ð¸Ñью чтоб попаÑть в результат Ñортировки.Выберите вкладывать или нет файл каталога.ОчиÑтитьОчиÑтить иÑториюОчиÑтить вÑе результаты поиÑкаÐажмите здеÑÑŒ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра и выбора файла каталогаÐажмите здеÑÑŒ Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ отправки пиÑьма.Ðажмите здеÑÑŒ Ð´Ð»Ñ Ð¾Ñ‡Ð¸Ñтки иÑтории недавно открытых каталогов.Ðажмите здеÑÑŒ Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ пиÑьма (Ñ Ð¿Ñ€Ð¸ÐºÑ€ÐµÐ¿Ð»Ñ‘Ð½Ð½Ñ‹Ð¼ каталогом.Ðажмите кнопку Применить Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñделаных изменений (без Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¾ÐºÐ½Ð° наÑтроек).Ðажмите кнопку Отмена Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ Ñделаных изменений и Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¾ÐºÐ½Ð° наÑтроек.Ðажмите кнопку ОК Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñделаных изменений и Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð¾ÐºÐ½Ð° наÑтроек.ЗакрытьЗакрыть каталогЗакрыть файлЗакрывает окно Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑвойÑтв категории.Закрытие каталогаСжатыйСоединение прервано клиентом Ðе возможно найти файл изовражениÑ: %sСоздана : Дата ÑозданиÑДатаУдалить диÑкОпиÑаниеОпиÑание :ДиÑкОпиÑание диÑка : Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ диÑкеÐазвание диÑка : СтатиÑтика диÑка ОпиÑание диÑкаДиÑкиДиÑков в каталоге : ДиÑков в каталоге : %dПоказывает Ñмонтировано выбранное уÑтройÑтво или нет.Отображать информациюОтображает такую информацию о выбраном ноÑителе как путь, ёмкоÑть, Ñвободное проÑтранÑтво, метка,..._ВыходРедактировать категорииРедактирование категорииРедактировать опиÑаниеРедактировать файлИзвлечь ноÑитель еÑли возможноИзвлекает ноÑитель еÑли возможно (CD-ROM ...), даже при закрытом лотке. Это возможно только при включенной опции автомонтирование!Почтовый Ð°Ð´Ñ€ÐµÑ : Введите ÑпиÑок ключевых Ñлов по которым будет щÑущеÑтвлÑÑ‚ÑÑ Ð¿Ð¾Ð¸Ñк файлов. Ведите название каталогаВведите Ð¸Ð¼Ñ Ð´Ð¸ÑкаВведите Ñюда почтовые адреÑ(а) получателÑ(ей) копии.Введите Ñюда почтовые адреÑ(а) получателÑ(ей) Ñкрытой копии.Введите Ñюда почтовые адреÑ(а) получателÑ(ей).Введите Ñюда тему вашего пиÑьма.Введите новое название каталогаВеедите новое название диÑкаВедите новую метку тома диÑкаВведите новое название файлаВведите новое название папкиВведите номер архива диÑка.Введите апиÑание категории.Введите полный путь к загрузаемому каталогу.Введите шаблон. Этот шаблон может Ñодержать Ñимволы "?" и "*".Введите Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð°.Введите название категории.Введите Ð¸Ð¼Ñ Ð´Ð¸Ñка.Введите название нового диÑка. Это название будет отображатьÑÑ Ð² вашем каталоге.Ввеите номер нового диÑка. Этот номер поможет вам веÑти иÑторию каталога.Введите порт иÑходÑщего почтового Ñервера (в большинÑтве Ñлучаев 25).Введите ваш почтовый адреÑ.Введите ваш Ñервер иÑходÑщих Ñообщений. Обычно Ñто Ð°Ð´Ñ€ÐµÑ Ð²Ð¸Ð´Ð° mai.yourdomain.comОшибка : невозможно получить текущую папку.Ошибка : невозможно перейти в рабочую папку.Ошибка загрузки файла изовражениÑ: %sВыходРазвернуть только диÑкиПроÑмотр заархивированных файлов (.tar, .gz, .zip, ...)ПроÑматривать Ñтруктуру дерева ноÑителÑПроÑмотрЭкÑпортЭкÑпортировать каталог вФайлОпиÑание файла : Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ файлеРазмер файла : Размер файла : %s (%s байт)ОпиÑание файлаÐазвание файла : Ðазвание файловой ÑиÑтемыТип файла : пока не реализовано !!ФайлыГибкий диÑк : Гибкий диÑк : %dПапкаОпиÑание папки : Ð˜Ð½Ñ„Ð»Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ папкеÐазвание папкиРазмер папки : ОпиÑание папкиСвободное проÑтранÑтво :Свободное проÑтранÑтвоСвободное проÑтранÑтво : ÐŸÐ¾Ð»Ð½Ñ‹Ð¹ÐŸÐ¾Ð»Ð½Ð°Ñ Ñ‘Ð¼ÐºÐ¾ÑтьGTK+ 2.6 RunTime (необходимо)ИнтерфейÑGWhere (требуетÑÑ)GWhere позволÑет управлÑть базой данных ваших CD или други Ñьёмных ноÑителей (жёÑткие диÑки, гибкие магнитные диÑки, Zip диÑки, компакт диÑки, и Ñ‚.п.). С GWhere легко проÑмотреть ваши CD или выполнить быÑтрый поиÑк без необходимоÑти вÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ отдельного CD в привод.GWhere может быть уÑтановлен Ð´Ð»Ñ Ð²Ñех пользователей или только Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ пользователÑ. Укажите, пожалуйÑта, как вы хотите уÑтановить GWhere.GWhere уÑтановит права доÑтупаОбщие уÑтановкиПоказывает файл уÑтройÑтва выбранного ноÑителÑПоказывает Ñвободное проÑтранÑтво на выбраном ноÑителе (только еÑли он Ñмонтирован)Показывает полную ёмкоÑть выбраного ноÑÐ¸Ñ‚ÐµÐ»Ñ (только еÑли он Ñмонтирован).Показывает Ñерийный номер выбраного ноÑÐ¸Ñ‚ÐµÐ»Ñ (только еÑли он Ñмонтирован). Этот номер уÑтановлен на заводе изготовителе.Показывает тип выбранного уÑтройÑтва (напр: ext2, ext3, vfat, ntfs, ...).Показывает Ð¸Ð¼Ñ Ñ‚Ð¾Ð¼Ð° выбранного ноÑÐ¸Ñ‚ÐµÐ»Ñ (только еÑли он Ñмонтирован).ГруппаГруппа : ЖеÑткий диÑк : ЖеÑткий диÑк : %dСкрытыСкрытьСкрыть файловые операцииINodeЕÑли вы не ввели название диÑкаи и еÑли вы выбрали приÑвоение ноÑителю Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÑ‚ÐºÐ¸ тома, то название метки тома будет применено как Ð¸Ð¼Ñ Ð´Ð¸Ñка.ЕÑли вы не примените изменениÑ, то вы потерÑете вÑе произведённые изменениÑ. Желаете применить изменениÑ?ИмпортИмпортировать каталог Ð¸Ð·Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ : ÐаÑтройки инÑталÑтораИнÑталÑÑ†Ð¸Ñ ÑƒÐ¶Ðµ запущенаÐедоÑтаточно памÑти Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸.Ðеправильное название каталогаВыполнÑетÑÑ Ð½Ð° %sJaz : Jaz : %dДержите Ñту опцию выбраной Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ что получить информацию о вÑе файлах и папках.Ключевые ÑловаЯзыковые файлыПоÑледний доÑтуп : ПоÑледнее изменение : Загрузить поÑледний каталог.Загрузить указанный каталог.Загружаю каталогЗагрузка каталога не удалаÑьРаÑположение на диÑке : ПочтаГлавное прилжениеÐвтоматичеÑки генерируетÑÑ Ð¾Ð¿Ð¸Ñание файла (формат файла, размер xpm или jpg и Ñ‚.п.).УправлениеДата изменениÑМонтирование не удалоÑÑŒ Монтирует ноÑитель еÑли он небыл Ñмонтирован. И отмонтирует впоÑледÑтвии даже еÑли он был Ñмонтирован перед Ñканированием.Смонтировано : ПеремеÑтить в...ÐазваниеÐазвание : Сеть : Сеть : %dÐовыйÐовый каталогÐовый диÑкÐовый файлÐетÐет открытого каталогаÐет открытого каталога: невозможно редактировать категорииÐет Ñовпавших запиÑейÐет меткиÐовое название диÑка не введеноÐовое название файла не введеноÐовое название папки не введеноПока не реализована!!! ПроÑматроивает вÑе архивы, как каталоги. Ðрхивами ÑвлÑÑŽÑ‚ÑÑ tarr или zip файлы.ОткрытьОткрыть каталогОткрыть файлÐаÑтройкиДругое : Другое : %dИÑходÑщий почтовый Ñервер : ВладелецВладелец : ПутьПожалуйÑта, уÑтановите параметры почты в наÑтройках Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ почтовых Ñообщений.ПожалуйÑта выберите Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° ПожалуйÑта подождитеПожалуйÑта подпждите...ПлагиныПлагины Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¾Ð¿Ð¸Ñаний файлов и плагины Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°/ÑкÑпорта каталогов.СвойÑтваБыÑтроВыходÐедавно открытых каталогов : РегулÑрные выражениÑУдалить категориюУдалить из каталогаУдалÑет выбранную категорию из ÑпиÑка категорий. ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ удалена только при отÑутÑтвии запиÑей иÑпользующих Ñту категорию.ПереименоватьПереименовать каталогПереименовать диÑкПереименовать файлПереименовать папкуРезультат Ñортировки Ñгруппировать по папкам/файлам.Сортировка результатов поиÑка по типу группы.ПраваПрава : RunTime Ð´Ð»Ñ GUI окружениÑ.Сохранить _какСохранитьСохранÑть такие ÑвойÑтва интерфейÑа как Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð¸ размер окна.СохранÑть ÑввойÑтва интерфейÑа при выходеСохранить какСохранить как каталогСохранить каталогСоранÑет изменёные ÑвойÑтва категории.Сохранение каталогаСохранение каиалога не удалоÑÑьСканированиеУÑтановкиПоиÑкПоиÑк : ПоиÑк в каталогеРезультат поиÑкаТип поиÑкаПоиÑк ...Выберите каталог Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкой загрузкиВыберите каталогВыберите ноÑитель : Выберите уровень компреÑии каталога. Значение по умолчанию 3, Ñто хорошее Ñоотношение между производительноÑтью и размером.Выберите категорию ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ применена к добавлÑемому диÑку (даже еÑли Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð°)Выберите ноÑитель который будет добвылен как диÑк в ваш каталогВыберите Ñекцию Ð´Ð»Ñ Ð½Ð°Ñтройки.Укажите размер иÑтории недавно открытых каталогов. Значение по умолчанию 5.ПереÑлать каталог по почтеПоÑлать файл по почтеПоÑлать почтуОтправка почты. пожалуйÑта подождите...Серийный номер : Серийный N : Серийный номерСерийный номер : Порт Ñервера : УÑтановить категории рекурÑивноÐаÑтройкиÐаÑтройки измененыПоказатьПоказать файловые операцииРазмерТема : Лента : Лента : %dÐеверный или неÑущеÑтвующий каталог. Проверьте ваш путь к каталогу пожалуйÑта.Текущий каталог небыл Ñохранён, невозможно его отправитьДиÑк был добавленДиÑк не был добавлен ДиÑк не был добавлен Добавление отменено пользователемДиÑк не был добавлен Ошибка : невозможно закрыть текущий каталог.ДиÑк не был добавлен Ошибка : невозможно перейти в родительÑкий каталог.ДиÑк не был добавлен : невозможно Ñмонтировать ноÑительДиÑк не был добавлен : нет Ñмонтированого ноÑителÑВведенное название уже ÑущеÑтвует в текущем каталогеВведённое название файла уже ÑущеÑтвует в текущей папкеВведённое название папки уже ÑущеÑтвуетСледующий каталог не ÑущеÑтвует : %s.Следующий каталог не ÑущеÑтвует или в название пуÑÑ‚Ð°Ñ Ñтрока : %s.Следующее Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° не ÑвлÑетÑÑ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð¾Ð¼ : %s.Результат Ñортировки при проÑмотре будет Ñгруппирован по типу. ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð° вÑе запиÑи будут Ñгруппированы по папкам или файлам.Результат Ñортировки при проÑмотре будет региÑтрозавиÑимым.Результат Ñортировки при проÑмотре будет Ñгруппирован по типу. ЕÑли Ñта Ð¾Ð¿Ñ†Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð° вÑе запиÑи будут Ñгруппированы по каталогам,диÑкам, папкам и файлам.Сортировка результатов поиÑка региÑтрозавиÑима.ПоиÑк может быть или не быть чувÑтвительным к региÑтру Ð’ Ñлучае чувÑтвительноÑти к региÑтру "File.txt" не равен "file.txt". Ðо вÑлучае не чувÑтвительноÑти к региÑтру они будут равны.ÐŸÐ¾Ð¸Ñ Ñ‡ÑƒÐ²Ñтвителен к региÑтру. ÐŸÐ¾Ð¸Ñ Ð¿Ð¾ шаблону поддерживает Ñимволы "*" Ðапример : img*.bmp or *.htm ПоиÑк по ключевым Ñловам принимает ÑпиÑок обÑзательных Ñлов.ÐŸÐ¾Ð¸Ñ Ñовпадений Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ð¹ÐŸÐ¾Ð¸Ñ Ñовпадений Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми опиÑÐ°Ð½Ð¸Ð¹ÐŸÐ¾Ð¸Ñ Ñовпадений Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми диÑковПоиÑк Ñовпадений Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸ÐµÐ¼ файлов,ÐŸÐ¾Ð¸Ñ Ñовпадений Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñми папокÐет доÑтупных плагинов каталогаЭтот набор уÑтановок позволÑет изменÑть некоторые возможноÑти и ÑвойÑтва программы.Этото окно уÑтановок позволÑет наÑтроить программу. Ðекоторые ÑвойÑтва редактируютÑÑ Ð·Ð´ÐµÑÑŒ. Это окно позволит вам переÑлать каталог по почте одному (или более) человек из вашего контактлиÑта. Кому : Слишком много файловых диÑкрипторов иÑпользуетÑÑ Ð¿Ñ€Ð¾Ñ†ÐµÑами.Ð’ ÑиÑтеме открыто Ñлишком много файлов.Слишком много ÑимволичеÑких Ñылок было вÑтречено при разрешение Ñледующего пути : %s.ÐžÐ±Ñ‰Ð°Ñ Ñ‘Ð¼ÐºÐ¾Ñть : Ð’Ñего файлов : Ð’Ñего файлов : %ldÐ’Ñего папок : Ð’Ñего папок : %ldСвободное проÑтранÑтво : Общий размер ноÑÐ¸Ñ‚ÐµÐ»Ñ : ИÑпользуемый обьём : ТипТип : Тип : (папка)Ðапечатайте здеÑÑŒ текÑÑ‚ фашего ÑообщениÑ.ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°Ð˜Ð·Ð¼ÐµÐ½Ð¸Ñ‚ÑŒÐ˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ в каталоге : ИÑпользовать уÑложненый шаблон Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð´Ð¸ÑкаИÑпользовать название тома ноÑÐ¸Ñ‚ÐµÐ»Ñ ÐºÐ°Ðº название диÑка (только когда название диÑка отÑутÑтвует)ИÑпользованное проÑтранÑтво :ВерÑиÑВерÑÐ¸Ñ : ВидимыТом : Метка тома : Метка Ñ‚Ð¾Ð¼Ð°Ð˜Ð¼Ñ Ñ‚Ð¾Ð¼Ð° : Какие пользователи могут запуÑкать GWhere ?ШаблонЖелаете Ñохранить каталог: ДаВы можете заполнить дополнительные Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð´Ð¸Ñка и информации о диÑке : -%% : % - %n : номер архива (можно иÑпользовать приÑтавку :0 : 4n даÑÑ‚ 0001, 0002, 0003, ... 0091, ... - %l : метка тома ноÑÐ¸Ñ‚ÐµÐ»Ñ - %t : тип ноÑÐ¸Ñ‚ÐµÐ»Ñ - %s : Ñерийный номерВы должны деинÑталировать вашу поÑледнюю верÑию GWhereZip : Zip : %d_ДейÑтвие_ПрименитьОтменаРазвернуть вÑе_Файл_Помощь_ÐовыйÐетОК_ОК_ОткрытьÐаÑтройкиСвойÑтваÐедавние файлыУдалить_Сохранить_ОтправитьИзменитьнет ноÑителÑотÑутÑтвуетДобавка диÑка отмененанеизвеÑтнонеизвеÑÑ‚Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°Ð½ÐµÐ¸Ð·Ð²ÐµÑтный владелецgwhere-0.2.3/po/sr.gmo0000644000175000017500000010474110472436237013224 0ustar bartbartÞ•·Ô KŒ¸$ ¹$aÇ$$)%N% k%w%‰% œ%*¨%$Ó%ø%&%&A& J& W&b&j&r&z&‚&Š&’&š&1¯&á&qý&7o'°§'X(_( e( q(}( (Ž( —(¤(»(0Ô( )) &)+1)m])4Ë)J*RK*ž* ¦* ±*¿* Ï* Û*é*ÿ*-+ >+H+h+{++ †+ +œ+ £+C±+õ+1 ,?,S,*d, ,›,ª,¿,Ç, Þ,ë,û,- -<-P- a-n--—-¯-¾- Ñ-ß-ò- û-.\.u.n‰.(ø.!/ '/5/1O/(/5ª/5à/H0D_0?¤0ä0 ê0 ø0,101@1H1d1 ‚1 1ž1 £1 ¯1»1Ê1Ï1 ã1 í1ú1 22$282/N2 ~2M‹2Ù2ß2ð23 33r33¦3L¶3449&4@`43¡4#Õ4ù45$5@5T5%j5&5)·5Rá546S6s6I6\Ù6C67z7L”7"á7$8)8G8L8,_8$Œ8±8º8Á8Ó8Ø8 ì8 ö899 .9;9!L9n9 t9 ~9Š9‘9 §9 ³9¿9Î9 á9 ï9 ú9: ::7:;:N:pO;À;Ý;+î;?<?Z<gš<G=@J=‹=‘=š= =¨=¯=´=É=Ï=PO> >§>»>Ã>Ó>.í>?8?I?P?DY? ž?¨?¸?Ì?à?ÿ?@+@B@V@[@[t@ Ð@Û@ í@iû@ eA pA{A€A ˆA “A A ¤A°A¹AÂAÅA-ÚABB"B>BZBhxBáB æB óBýBC CC1C7C@CEEC‹C ©CµCÄCeÌC 2D=DCDIDcDvD†D…šD E'E 6E BE NE!\E~E™E  EªEÇEÐE0ÕEF"F*F :F$GFlF{F‘F šF¤F «FµF ÇF ÕF áFîFGGx'G] G<þG ;HK\H¨H½H ÏHÙH öH I II ,I:IRI[IlIqI…I ŠI”I œII¦I5ðI&J>J2ZJ?J>ÍJ/ K8YFYNYVY^YfY1ƒYµY_ÌY1,Zž^ZýZ[[['[-[ >[I[Y[s[/[ ½[Ë[ ë[1ù[i+\/•\7Å\aý\_] f] r]€] ‘] ]«]Ã]AÝ] ^3)^"]^€^†^ ‹^ •^¡^ ª^Uµ^ _0*_[_u_2‘_ Ä_ Ð_,ñ_`&`7`Q`a`x`‰` ¥`³` Ã`Ñ`à`õ` aa*a:a Ma Xaea]vaÔa`èa,Ibvb}bb2ªb(Ýb?c:FcXcRÚcH-dvd~d Žd.›dÊdÛd'ñd!e ;eFeVe \eieneue zeˆe Ÿe¬e ÀeËeÓeée3f5fKIf•ff°f Âf ÎfÚf~øfwgb†gégþg,h6=h3th!¨hÊhâh÷hi'i@i\i'ui]iûij)j:sOsos„s‰s^ s ÿs tt_/t t ›t§t«t±t ºtÅt Êt ×t átëtît6u=u Su_upuu{Žu vv v,v 3v =vIv`v hvsvI{vÅvãvóvwF wTw]wbwjw‰wšw­wwÀw 8xBxTxcxrx#ƒx§xÄxÊx'Óx ûxyTy2ey ˜y¤y¸y"Èy ëyùy z !z.z4zdœ™.Xm(´ÌNóÑ0a®\³ÍŒEchKªSQ LØìHϦ«!]CËŸŠæŽ/ U•먗]ÚÝ‚g³T(þ9‡8­RT‚An²µ»5a"Д©ð6¹˜$u±{P¶;¿Cšàv…§piø€OÙå@Šo?É ©+0‹}-‘^‹†4m~š%‘§ õqF¦Y2 {„<ª•°â ²/ç;>G¯í¢¬÷Ã?Þb\ V1ÆpáÂ_½WYe6G$›ô5†ºÀÔ `NKSnI2[QyB… }o&Xƒ­U–Œ¾°„è‰-H_=˜*MMW¬f3¨+ü¡ûv,dòO“öJ‡¼¥wù"DP’újƒ:Á¸¶1 ÕetÒé®Jˆ:’x Runs under Removable media catalog managment By Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], capacity : %s, free : %s %s [ %s ], total disks : %d %s, %s, %s Catalog explorer Catalog managment Empty disk Folder "%s", %s (files %d, subfolders %d) Listed Items : %d (total size : %s) Search engine Selected Item : %d Selected Item : %d (total size : %s) Type : built with %.0f bytes%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu item(s) founded.%s outside the process's allocated address space.A catalog is already openedA component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s.A component of the path prefix is not a directory : %s.A critical error occured when extracting file information of %s%s%s. Save your catalog if it is possible, exit GWhere and report this trouble to the GWhere project team please.A_boutAboutAccess dateAccess pathAddAdd / UpdateAdd diskAdd new diskAdding disk is workingAll key words must matchAll languages files for the program translation.All usersAll users|Current userAllow beepAllows to emits a short beep on some event.Allows to update category properties of the selected category. Clicks on Add / Update button to save updates.An I/O error occurred when change directory to : %s.An error occured during the sending of mail. Please check your parameters.Apply selected category to all items in the disk to add (disk, folders and files).ArchiveArchive N#Archive N# : Attached file :Audio CD : Audio CD : %dAuto make descriptionAutoload catalogAutoloads a default catalog when at starting.AutomountAutoresize all explorer column.Autoresize columnsBCC :CC :CD-Rom : CD-Rom : %dC_loseC_ollapse allCan use regular expression. See documentation for more information.Can't edit this file!! Can't remove this category. It's used by an item.Cannot receive dataCannot send dataCannot start searching : no catalog loadedCapacity : Case sensitiveCase sensitive sort.CatalogCatalog Description : Catalog InfoCatalog Name : Catalog categories : Catalog closedCatalog compression level :Catalog descriptionCatalog exportedCatalog fileCatalog importedCatalog is not exportedCatalog is not importedCatalog loadedCatalog propertiesCatalog savedCategories list : CategoryCategory : Category name : Change in this pane all availables properties in order to configure the program as you want.Change volume labelChoose if all key words or only one of all key words must match with item in order to be in the search result.Choose to attach or no the catalog file.ClearClear historyClears all search resultsClick here to browse and select the catalog file.Click here to cancel the send of a mail.Click here to clear the recents opened files history.Click here to send a mail (with an attached catalog).Click on Apply button to apply changes (without close the Settings box).Click on Cancel button to cancel changes and close the Settings box.Click on OK button to apply changes and close the Settings box.CloseClose catalogClose fileClose the categories properties edit window.Closing catalogCompactConnexion closed by client Couldn't find pixmap file: %sCreated on : Creation dateDateDelete diskDescriptionDescription : DiskDisk Description : Disk InfoDisk Name : Disk Statistics : Disk descriptionDisksDisks in catalog : Disks in catalog : %dDisplay if the selected media is mounted or no.Display infoDisplays selected media informations as path, capacity, free space, label,...E_xitEdit _categoriesEdit categoriesEdit descriptionEdit fileEject media if possibleEject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!Email address :Enter a list of key words which all must be containted is the matched files.Enter catalog nameEnter disk nameEnter here the email address of the copied mail contacts.Enter here the email address of the hidden copied mail contacts.Enter here the email address of your(s) contact(s).Enter here the object of your mail.Enter new catalog nameEnter new disk nameEnter new disk volume labelEnter new file nameEnter new folder nameEnter the archive number of the disk.Enter the description of the category.Enter the full catalog file path to load.Enter the full wildcards pattern. This pattern can contains "?" and "*" caracters.Enter the name of the catalog.Enter the name of the category.Enter the name of the disk.Enter the name of the new disk. This name will be appear in your catalog.Enter the number of the new disk. This number can help you with the history of your catalog.Enter the out going mail server port (the most common value is 25).Enter your email address.Enter your out going mail server. Usualy this address is mail.yourdomain.comError : cannot get current folder.Error : cannot go to working folder.Error loading pixmap file: %sExitExpand only _disksExplore archive files (.tar, .gz, .zip, ...)Explore tree structure of the media.ExplorerExportExport catalog toFileFile Description : File InfoFile Size : File Size : %s (%s bytes)File descriptionFile name : File system nameFile type : not yet implemented!!FilesFloppy : Floppy : %dFolderFolder Description : Folder InfoFolder NameFolder Size : Folder descriptionFree Space : Free spaceFree space : FullFull capacityGTK+ 2.6 RunTime (required)GUIGWhere (requiered)GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once.GWhere can be installed for all users or only for current user. Select for which you want install GWhere please.GWhere install rights accessGenerals optionsGive the device file of the selected media.Give the free space of the selected media (only if is mounted).Give the full space of the selected media (only if is mounted).Give the serial number of the selected media (only if is mounted). This number is a manufacture number.Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...).Give the volume name of the selected media (only if is mounted).GroupGroup : HD : HD : %dHiddenHideHide file operationsINodeIf you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name.If you don't apply changes you will lose all changes. Do you want apply changes?ImportImport catalog fromInfo : Install optionsInstaller already runningInsufficient memory to complete the operation.Invalid filled catalog nameIs running on %sJaz : Jaz : %dKeep this option checked to scan all folders and files informations.Key wordsLanguages FilesLast accessed on : Last modified on : Load last opened catalog file.Load selected catalog file.Loading catalogLoading catalog failedLocation on Disk : MailMain engine application.Make auto description of file (file format description, image size for xmp or jpg, etc...).ManagementModification dateMount failed Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan.Mounted : Move To...NameName : Network : Network : %dNewNew catalogNew diskNew fileNoNo catalog is openedNo catalog is opened : cannot edit categoriesNo item matched.No labelNo new disk name was filledNo new file name was filledNo new folder name was filledNot yet implemented!! Explore all archives, as it was a directory. Archives are tarred or gzipped files.OpenOpen catalogOpen fileOptionsOther : Other : %dOut going mail server :OwnerOwner : PathPlease configure mail options in the settings in order to send mails.Please select a catalog name Please waitPlease wait...PluginsPlugins for auto extraction of file descriptions and plugins for importation/exportation of catalogs.PropertiesQuickQuit Recents opened catalogs :Regular expressionRemove categoryRemove from catalogRemove the selected category from categories list. This categories may removed only if there's not any item which uses this category.RenameRename catalogRename diskRename fileRename folderResult sort group by folder/file.Result sort group by type.RightsRights : RunTime for GUI environment.Sav_e asSaveSave GUI properties as window position and size.Save GUI properties on exitSave asSave as catalogSave catalogSave properties changes of category.Saving catalogSaving catalog failedScanningSe_ttingsSearchSearch : Search in catalogSearch resultSearch typeSearching...Select autoloaded catalogSelect catalogSelect media : Select the catalog compression level. The default value is 3, it's a good value between high performance and small size.Select the category to apply to the disk which will be added (even if the option is checked).Select the media that will be added as disk to your catalog.Select the section to configure.Select the size of recents opened catalogs history. The default value is 5.Send catalog by mailSend file by mailSend mailSending mail, please wait...Serial : Serial N# : Serial numberSerial number : Server port :Sets category recursiveSettingsSettings changedShowShow file operationSizeSubject :Tape : Tape : %dThe catalog is invalid or doesn't exists. Check your catalog path please.The current catalog is never be saved, cannot send itThe disk has been addedThe disk hasn't been added The disk hasn't been added Adding canceled by userThe disk hasn't been added Error : cannot close current folder.The disk hasn't been added Error : cannot go to parent folder.The disk hasn't been added : cannot mount mediaThe disk hasn't been added : there are not mounted mediaThe filled disk name already exist in the current catalogThe filled file name already exist in the current folderThe filled folder name already exist in the current folderThe following directory does not exist : %s.The following directory does not exist, or name is an empty string : %s.The following directory name is not a directory : %s.The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files.The result sort in explorer is case sensitive.The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files.The result sort in search is case sensitive.The search can be be or not case sensitive. In case sensitive "File.txt" doesn't match with "file.txt". But in uncase sensitive it matches.The search can be case sensitive. The wildcards search supports character "*". Example : img*.bmp or *.htm The key words search accepts a list of obligatory words.The search matches with categories name.The search matches with descriptions.The search matches with disks name.The search matches with files name.The search matches with folders name.There is no available catalog pluginThis Settings box allows to configure some functionnalities and properties of the program.This settings windows box allows to configure the program. Some properties may be modified here.This window box allows you to send a catalog by mail to one (or more) of yours contacts.To :Too many file descriptors in use by process.Too many files are currently open in the system.Too many symbolic links were encountered in resolving following path : %s.Total Capacity : Total Files : Total Files : %ldTotal Folders : Total Folders : %ldTotal Free Space : Total Storage Space : Total Used Space : TypeType : Type : (folder)Type here the text for the mail message.Unknown errorUpdateUpdate in catalog : Use an advanced pattern to generate disk nameUse media volume name as disk name (only when disk name is empty)Used Space : Version Version : VisibleVolume : Volume Label : Volume nameVolume name : Which users can run GWhere ?WildcardsWould you want save catalog : YesYou can fill extra tags to generate a disk name with disk information : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : media volume label - %t : media type - %s : serial numberYou must uninstall your last version of GWhereZip : Zip : %d_Action_Apply_Cancel_Expand all_File_Help_New_No_OK_Ok_Open_Options_Properties_Recents files_Remove_Save_Send_Updateno drivenonethe disk adding is canceledunknownunknown groupunknown ownerProject-Id-Version: 0.2.0 Report-Msgid-Bugs-To: POT-Creation-Date: 2006-08-22 01:05+0200 PO-Revision-Date: 2006-06-24 18:59+0100 Last-Translator: Nemanja Avramovic Language-Team: Avramovic.info MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Radi na Katalog diskova napisao: Sebastien LECACHEUR zero@gwhere.org http://www.gwhere.org %s [ %s ], kapacitet : %s, slobodno : %s %s [ %s ], ukupno diskova : %d %s, %s, %s Istrazivac kataloga Menadzment kataloga Prazan disk Folder "%s", %s (fajlova %d, podfoldera %d)Izlistano : %d (ukupna velicina : %s) PretragaIzabrano : %d Izabrano : %d (ukupna velicina : %s) Tip : kompajliran sa %.0f bajtova%.2f Gb%.2f Hb%.2f Ib%.2f Kb%.2f Mb%.2f Pb%.2f Tb%lu pogodak(a) pronadjen(o).%s izvan procesovog alociranog adresnog prostora.Katalog je vec otvorenKomponenta na sledecoj putanji prelazi %d karaktera, ili cela putanja prelazi %d karaktera : %sKomponenta sa prefiksom putanje nije folder : %s.Kriticna greska dok sam izdvajao informacije fajla iz %s%s%s. Sacuvajte katalog ako je moguce, zatvorite GWhere i prijavite ovu gresku GWhere timu ako mozete.O...O...Datum pristupaPutanja pristupaDodajDodaj / NadopuniDodak diskDodaj novi diskDodavanje diska je u tokuUkljuci sve kljucne reci.Svi fajlovi za prevod programa na druge jezike.Svi korisniciSvi korisnici|Trenutni korisnikDozvoli pisakDozvoljava programu da pishti kod nekih dogadjajaOmogucava vam da nadopunite svojstva izabrane kategorije. Kliknite na Dodaj / Nadopuni da snimite izmene.U/I (I/O) greska kad sam menjao folder na : %s.Doslo je do greske prilikom slanja. Proverite postavke.Primenjuje izabranu kategoriju na sve stavke u disku koji se dodaje (diskove, foldere i fajlove).ArhivaBroj arhiveBroj arhive :Prikacen fajl : Audio CD : Audio CD : %dAutomatski napravi opisAutomatski ucitaj katalogAutomatski ucitava predefinisani katalog kada se program pokrene.AutomountAutomatski menja velicinu svih kolona u istrazivacuAutomatski promeni velicinu kolonaBCC :CC :CD-Rom : CD-Rom : %d_ZatvoriS_kupi sveOvde mozete koristiti regularne izraze. Pogledajte dokumentaciju za vise informacija.Ne mogu da izmenim ovaj fajl! Ne mogu da uklonim kategoriju. Nesto je koristi.Ne mogu da primim podatkeNe mogu da posaljem podatkeNe mogu da zapocnem pretragu : katalog nije ucitanKapacitet :Osetljivo na mala i velika slovaSortiranje osetljivo na mala i velika slova.KatalogOpis kataloga : Informacije o katalogu : Ime kataloga : Kategorije kataloga : Katalog zatvorenNivo kompresije kataloga : Opis katalogaKatalog izvezenFajl katalogaKatalog uvezenKatalog nije izvezenKatalog nije uvezenKatalog ucitanSvojstva katalogaKatalog sacuvanLista kategorija :KategorijaKategorija :Ime kategorije :Menjajte u ovom delu sve moguce postavke programa kako biste ga konfigurisali kako vi zelite.Promeni naziv diskaIzaberite ovo ako sve kljucne reci ili samo jedna od svih kljucnih reci mora biti u rezultatima.Izaberite da li cete zakaciti fajl kataloga.OcistiOcisti istorijuBrise sve rezultate pretrageKliknite ovde da izaberete fajl kataloga sa diska.Kliknite ovde da prekinite slanje mejla.Kliknite ovde da obrisete istoriju prethodno otvorenih fajlova.Kliknite ovde da posaljete mejl (sa prikacenim katalogom).Kliknite na taster Primeni da primenite sve izmene (bez zatvaranja prozora podesavanja).Kliknite na Ponisti taster da ponistite sve izmene i zatvorite prozor podesavanja.Kliknite na OK dugme da primenite izmene i zatvorite prozor podesavanja.ZatvoriZatvori katalogZatvori fajlZatvara prozor za izmenu svojstava kategorije.Zatvaram katalogKompaktna instalacijaKonekcija prekinuta od strane klijenta Ne mogu da nadjem pixmap fajl: %sKreiran : Datum kreiranjaDatumIzbrisi diskOpisOpis :DiskOpis diska : Informacije i disku : Ime diska : Statistike diska : Opis diskaDiskoviDiskova u katalogu : Diskova u katalogu : %dPrikazi da li je izabrani medijum mountovan ili ne.Prikazi informacijePrikazuje informacije o medijumu. Putanja, kapacitet, slobodan prostor, ..._IzadjiIzmeni _kategorijeIzmeni kategorijeIzmeni opisIzmeni fajlIzbaci medijum ako je moguce.Izbacuje medijum ako je to moguce (CD-ROM...), cak i ako je fioka zatvorena. Ovo je omoguceno samo ako je automount omogucen!!Email adresa :Unesite listu kljucnih reci koje moraju biti sadrzane u pronadjenim fajlovima (sve reci se traze).Unesite ime katalogaUnesite ime diskaOvde unesite email adresu ostalih primalaca.Ovde unesite email adresu ostalih skrivenih primalaca.Ovde unesite email adresu vaseg(vasih) kontak(a)ta.Ovde unesite objekat vase poruke.Unesi novo ime katalogaUnesi novo ime diskaUnesite novi naziv diskaUnesite novo ime fajlaUnesite novo ime folderaUnesite arhivni broj diska.Unesite opis kategorije.Unesite punu putanju do fajla kataloga.Ovde mozete koristiti dzokere. Dzokeri mogu biti "?" (za jedno slovo) i "*" (za citav izraz).Unesite ime kataloga.Unesite ime kategorije.Unesite ime diska.Unesite ime novog diska. Ovo ce biti prikazano u katalogu.Unesite broj novog diska.Unesite odlazni port mejl servera (najcesce je to port 25).Unesite vasu email adresu.Unesite vas odlazni mejl server. Obicno je to mail.vasdomen.comGreska : ne mogu da otvorim tekuci folder.Greska : ne mogu da otvorim radni folder.Greska pri ucitavanju pixmap fajla: %sIzadjiProsiri samo _diskoveIstrazi arhive (.tar, .gz, .zip, ...)Istrazi strukturu medijuma (kao "drvo").IstrazivacIzveziIzvezi katalog uFajlOpis fajla : Informacije o fajluVelicina fajla : Velicina fajla : %s (%s bajt/ov/a)Opis fajlaIme fajla : Ime fajl sistemaTip fajla : jos nije implementirano!!FajloviFlopi : Flopi : %dFolderOpis foldera : Informacije o folderuIme folderaVelicina foldera : Opis folderaSlobodno : Slobodno prostoraPrazno :Cela instalacijaPun kapacitetGTK+ 2.6 RunTime (obavezno)GUIGWhere (obavezno)GWhere vam omogucava da vodite bazu svojih CDova i drugih medijuma (hard diskovi, dlopi diskovi, zip drajvovi, CD-ROm, itd...). Sa GWhere-om je lako da pronadjete bilo sta na vasim diskova bez ubacivanja disk(ov)a u drajv jedan po jedan.GWhere moze biti instaliran za sve korisnike ili samo za trenutnog korisnika. Izaberite kako zelite da instalirate GWhere.GWhere instalacija prava pristupaGlavne opcijeIzaberite fajl uredjaja izabranog medijuma.Daje prazan prostor na izabranom uredjaju (ako je mountovan).Daje ukupan prostor izabranog uredjaja (ako je mountovan).Daje serijski broj izabranog medijuma (ako je mountovan). Ovo je fabricki broj.Izaberite tip izabranog medijuma (npr : ext2, ext3, vfat, ntfs, reiserFS, ...).Daje ime medijuma (samo ako je mountovan).GrupaGrupa : HD : HD : %dSkrivenoSakrijSakrij operacije nad fajlomINodeAko niste uneli ime diska, koristice se ime medijuma (volume label) kao ime diska.Ako ne primenite izmene izgubicete sve izmene. Da li zelite da primenite izmene?UveziUvezi katalog izInfo :Opcije instalacijeInstaler je vec startovanNema dovoljno memorije da zavrsim operaciju.Lose popunjeno ime katalogaRadi na %sJaz : Jaz : %dOstavite ovo obelezeno da skenirate informacije svih fajlova i foldera.Kljucne reciPrevodiPoslednji pristup : Poslednja izmena : Ucitaj poslednji otvoren katalog.Ucitaj izabrani fajl kataloga.Ucitavam katalogUcitavanje kataloga nije uspeloLokacija na disku : MailGlavni deo aplikacije.Automatsko pravljenje opisa fajla (opis formata fajla, velicina slike za xmp ili jpg, itd...).UpravljanjeDatum izmeneMountovanje neuspesno Mountuje medijum ako nije mountovan. I unmountuje ga cak i ako je bio mountovan pre skeniranja.Mountovan :Pomeri u...ImeIme :Mreza : Mreza : %dNoviNovi katalogNovi diskNovi fajlNeNema otvorenih katalogaKatalog nije otvoren : ne mozete da menjate kategorijeNista nije pronadjenoNema nazivaIme nije upisanoIme nije unetoIme nije unetoJos nije implementirano!! Istrazuje sve arhive kao da su folderi. Arhive su tarovani ili gzipovani fajlovani (targuzovani).OtvoriOtvori katalogOtvori fajlOpcijeOstalo : Ostalo : %dOdlazni mail server : VlasnikVlasnik : PutanjaMolimo vas da podesite opcije za mejl kako biste mogli da saljete mejloveMolim izaberite ime kataloga Molim sacekajteMolim sacekajte...DodaciDodaci za automatsko izdvajanje opisa i dodaci za uvoz/izvoz kataloga.SvojstvaBrzoZatvoriPoslednji otvarani katalozi : Regulartni izrazUklanja kategorijuIzbaci iz katalogaUklanja izabranu kategoriju iz liste. Ova kategorije moze biti uklonjena jedino ako nije koriscena od strane bilo cega.PreimenujPreimenuj katalogPreimenuj diskPreimenuj fajlPreimenuj folderGrupisi rezultate po folderu/fajlu.Rezultati grupisani po tipu.PravaPrava : Biblioteke za Graficki Interfejs (GUI).Sacuv_aj kaoSacuvajSnimi opcije GUI (grafickog okruzenja) kao sto su pozicija prozora i velicina istog.Snimi opcije GUI (grafickog okruzenja) pri izlaskuSacuvaj kaoSacuvaj kao katalogSacuvaj katalogSnima izmene svojstava kategorije.Cuvam katalogCuvanje kataloga nije uspeloSkeniranjePod_esavanjaTraziTrazi :Trazi u kataloguRezultati pretrageTip pretrageTrazim...Ovelezi automatski ucitan katalogIzaberite katalogIzaberi medijum :Izaberite nivo kompresije kataloga. Predefinisana vrednost je 3, to je dobra vrednost izmedju brzine i velicine.Izaberite kategoriju da primenite disku koji ce biti dodat.Izaberite uredjaj koji ce biti dodat kao disk u vas katalogIzaberite deo za konfigurisanjeIzaberite velicinu istorije (prethodno otvoreni katalozi). Predefinisana vrednost je 5.Posalji katalog mejlomPosalji fajl mejlomPosalji mejlSaljem mejl, molim sacekajte...Serijski # : Serijski broj:Serijski brojSerijski broj :Port servera : Obelezi rekurzivno kategorijuPodesavanjaPostavke su izmenjenePrikaziPrikazi operaciju nad fajlomVelicinaNaslov : Traka : Traka : %dKatalog nije ispravan ili ne postoji. Proverite putanju do kataloga.Trenutni katalog nije jos ni jednom snimljen, ne mogu da ga posaljemDisk je dodatDisk nije dodat Disk nije dodat Dodavanje otkazano od strane korisnikaDisk nije dodat Greska : ne mogu da zatvorim tekuci folder.Disk nije dodat Greska : ne mogu da otvorim roditeljski folder.Disk nije dodat : ne mogu da mountujem medijumDisk nije dodat : nema mountovanog medijumaPopunjeno ime diska vec postoji u kataloguFajl sa ovakvim imenom vec postoji u ovom folderuFolder sa unetim imenom vec postoji u tekucem folderuSledeci folder ne postoji : %s.Sledeci folder ne postoji, ili mu je ime prazan tekst : %s.Sledeci "folder" u stvari nije folder : %s.Rezultati u istrazivacu mogu biti grupisani po tipu. Ako je ovo obelezeno sve ce biti grupisano po folderima ili fajlovima.Sortiranje rezultata u istrazivacu je osetljivo na mala i velika slova.Rezultati u istrazivacu mogu biti grupisani po tipu. Ako je ovo obelezeno sve ce biti grupisano po katalozima, diskovima, folderima ili fajlovima.Sortiranje rezultata je osetljivo na mala i velika slova.Pretraga moze biti a i ne mora osetljiva na mala i velika slova. Kada je osetljiva "Fajl.txt" nije isto sto i "fajl.txt". Ali kada nije osetljiva onda je to isto.Pretraga moze biti osetljiva na mala i velika slova. Pretraga sa dzokerima daje podrsku za karakter "*". Primer : img*.nmp ili *.htm Pretraga sa kljucnim recima prihvata spisak obaveznih reci.Pretraga trazi kategoriju.Pretraga trazi opis.Pretraga trazi diskove.Pretraga trazi fajlove.Pretraga trazi foldere.Ne postoji odgovarajuci plugin za katalogOvaj deo vam omogucava da konfigurisete neke funkcionalnosti i opcije programa.Ovaj deo prozora za podesavanja vam dozvoljava da konfigurisete program. Neke postavke mogu biti menjane.Ovaj deo prozora vam omogucava da posaljete katalog mejlom nekom od vasih kontakata.Za : Previse fajl deskriptora proces koristi.Previse fajlova je trenutno otvoreno na sistemu.Previse simbolickih linkova dok sam pokusavao da pronadjem pravu putanju : %s.Kapacitet : Ukupno fajlova : Ukupno fajlova : %ldUkupno foldera : Ukupno foldera : %ldUkupno slobodnog prostora : Ukupno prostora : Ukupno zauzetog prostora : TipTip :Tip : (folder)Ovde unesite tekst mejl poruke.Nepoznata greskaNadopuniOsvezenje u katalogu : Koristi napredni sablon za generisanje imena diskaKoristi ime medijiuma za ime diska (samo kada je ime diska prazno)Zauzeto : VerzuhaVerzija : VidljivoIme :Naziv diska : Ime medijumaIme medijuma : Koji korisnici mogu pokretati GWhere ?DzokeriDa li zelite da sacuvate katalog : DaMozete popuniti dodatne tagove da generisete ime diska sa informacijama diska : - %% : % - %n : broj arhive (moze se koristiti prefiks da bude 0 ispred : %.4n daje 0001, 0002, 0003, ..., 0091, ... - %l : naziv medijuma - %t : tip medijuma - %s : serijski brojMorate deinstalirati prethodnu verziju GWhere-aZip : Zip : %d_Akcija_Primeni_Ponisti_Prosiri sve_FajlPo_moc_Nov_Ne_OK_Ok_Otvori_OpcijeSvo_jstvaPre_djasnji fajlovi_Ukloni_SacuvajPo_salji_Nadopuninema drajvanistadodavanje diska je otkazanonepoznatnepoznata grupanepoznat vlasnikgwhere-0.2.3/po/sr.nsh0000644000175000017500000000323210472426716013224 0ustar bartbart;Language specific include file for GWhere installer ;Created by Sébastien LECACHEUR (mailto:zero@gwhere.org) ; !verbose 3 !ifdef CURLANG !undef CURLANG !endif !define CURLANG ${LANG_SERBIAN} LangString TITLE_SecCopyUI ${CURLANG} "$(^NameDA) (obavezno)" LangString DESC_SecCopyUI ${CURLANG} "Glavni deo aplikacije." LangString TITLE_SecCopyGTK ${CURLANG} "GTK+ 2.6 RunTime (obavezno)" LangString DESC_SecCopyGTK ${CURLANG} "Biblioteke za Graficki Interfejs (GUI)." LangString TITLE_SecCopyPLUGINS ${CURLANG} "Dodaci" LangString DESC_SecCopyPLUGINS ${CURLANG} "Dodaci za automatsko izdvajanje opisa i dodaci za uvoz/izvoz kataloga." LangString TITLE_SecCopyLANG ${CURLANG} "Prevodi" LangString DESC_SecCopyLANG ${CURLANG} "Svi fajlovi za prevod programa na druge jezike." LangString UninstBefore ${CURLANG} "Morate deinstalirati prethodnu verziju $(^NameDA)-a" LangString InstAlready ${CURLANG} "Instaler je vec startovan" LangString InstTypeFull ${CURLANG} "Cela instalacija" LangString InstTypeCompact ${CURLANG} "Kompaktna instalacija" LicenseLangString URL_License ${CURLANG} "${MUI_BUILD_DIR}\..\doc\license\license.en" LangString TITLE_SecAllUsersUI ${CURLANG} "Opcije instalacije" LangString SUBTITLE_SecAllUsersUI ${CURLANG} "Koji korisnici mogu pokretati $(^NameDA) ?" LangString SUBSUBTITLE_SecAllUsersUI ${CURLANG} "$(^NameDA) instalacija prava pristupa" LangString ASK_SecAllUsersUI ${CURLANG} "$(^NameDA) moze biti instaliran za sve korisnike ili samo za trenutnog korisnika. Izaberite kako zelite da instalirate $(^NameDA)." LangString LIST_SecAllUsersUI ${CURLANG} "Svi korisnici|Trenutni korisnik" LangString STATE_SecAllUsersUI ${CURLANG} "Svi korisnici" !verbose 4 gwhere-0.2.3/README0000644000175000017500000000023710075242302012314 0ustar bartbartWeb site : http://www.gwhere.org Maintainer : zero@gwhere.org This program is distributed under the GNU GPL v2 (see COPYING file included with this archive). gwhere-0.2.3/src/0000755000175000017500000000000010506575516012240 5ustar bartbartgwhere-0.2.3/src/data/0000755000175000017500000000000010506575523013147 5ustar bartbartgwhere-0.2.3/src/data/gwdata.h0000744000175000017500000000304410211714030014546 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwdata.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a tool component for files. * @author Sébastien LECACHEUR * @version 1.0 2002/05/19 * @see gwsupport.h * @link GWhere Web Site * @author Author */ #ifndef GW_DATA_H #define GW_DATA_H #include "gwenginequicksearch.h" #include "gwsearchiteminfo.h" #include "gwscandiskinfo.h" #include "gwsettings.h" #include "gwstringbuffer.h" #include "gwuserquicksearch.h" #include "gwvirtualfilesystemstats.h" #endif gwhere-0.2.3/src/data/gwenginequicksearch.c0000744000175000017500000002063410023202520017321 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwenginequicksearch.h" #include "gwuserquicksearch.h" typedef struct engine_quick_search { gchar *pattern; /* The search string pattern (it's a regular expression) */ gchar **key_words; /* The key words list in cas of key words search */ gint type; /* Type of search */ gboolean case_sensitive; /* If use case sensitive */ gboolean match_file; /* If search match with files */ gboolean match_folder; /* If search match with folders */ gboolean match_disk; /* If search match with disks */ gboolean match_category; /* If search match with categories */ gboolean match_description; /* If search match with descriptions */ gboolean match_all_key_words; /* If search must match all key words */ } EngineQuickSearch; struct engine_quick_search *engine_quick_search_new ( void) { struct engine_quick_search *p = NULL; #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif if ( (p = ( struct engine_quick_search*)g_malloc0 ( sizeof ( struct engine_quick_search))) != NULL) { p->pattern = NULL; p->key_words = NULL; p->type = SEARCH_TYPE_NONE; p->case_sensitive = TRUE; p->match_file = TRUE; p->match_folder = FALSE; p->match_disk = FALSE; p->match_category = FALSE; p->match_description = FALSE; p->match_all_key_words = FALSE; } return p; } gint engine_quick_search_set_pattern ( struct engine_quick_search *p, gchar *pattern) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->pattern != NULL ) { g_free ( p->pattern); } p->pattern = pattern; return 0; } return -1; } gint engine_quick_search_set_key_words ( struct engine_quick_search *p, gchar **key_words_list) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->key_words != NULL ) { g_strfreev ( p->key_words); } p->key_words = key_words_list; return 0; } return -1; } gint engine_quick_search_set_type ( struct engine_quick_search *p, gint type) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->type = type; return 0; } return -1; } gint engine_quick_search_set_case_sensitive ( struct engine_quick_search *p, gboolean case_sensitive) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->case_sensitive = case_sensitive; return 0; } return -1; } gint engine_quick_search_set_match_file ( struct engine_quick_search *p, gboolean match_file) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->match_file = match_file; return 0; } return -1; } gint engine_quick_search_set_match_folder ( struct engine_quick_search *p, gboolean match_folder) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->match_folder = match_folder; return 0; } return -1; } gint engine_quick_search_set_match_disk ( struct engine_quick_search *p, gboolean match_disk) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->match_disk = match_disk; return 0; } return -1; } gint engine_quick_search_set_match_category ( struct engine_quick_search *p, gboolean match_category) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->match_category = match_category; return 0; } return -1; } gint engine_quick_search_set_match_description ( struct engine_quick_search *p, gboolean match_description) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->match_description = match_description; return 0; } return -1; } gint engine_quick_search_set_match_all_key_words ( struct engine_quick_search *p, gboolean match_all_key_words) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->match_all_key_words = match_all_key_words; return 0; } return -1; } gchar * engine_quick_search_get_pattern ( struct engine_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->pattern; } return NULL; } gchar ** engine_quick_search_get_key_words ( struct engine_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->key_words; } return NULL; } gint engine_quick_search_get_type ( struct engine_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->type; } return SEARCH_TYPE_NONE; } gboolean engine_quick_search_get_case_sensitive ( struct engine_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->case_sensitive; } return FALSE; } gboolean engine_quick_search_get_match_file ( struct engine_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->match_file; } return FALSE; } gboolean engine_quick_search_get_match_folder ( struct engine_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->match_folder; } return FALSE; } gboolean engine_quick_search_get_match_disk ( struct engine_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->match_disk; } return FALSE; } gboolean engine_quick_search_get_match_category ( struct engine_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->match_category; } return FALSE; } gboolean engine_quick_search_get_match_description ( struct engine_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->match_description; } return FALSE; } gboolean engine_quick_search_get_match_all_key_words ( struct engine_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->match_all_key_words; } return FALSE; } gint engine_quick_search_free ( struct engine_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif if ( p != NULL ) { engine_quick_search_set_pattern ( p, NULL); engine_quick_search_set_key_words ( p, NULL); g_free ( p); return 0; } return -1; } gwhere-0.2.3/src/data/gwenginequicksearch.h0000744000175000017500000003124010023202520017321 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwenginequicksearch.h * @discussion GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* It uses in the search engine. By defaut the quick search is case sensitive and matches only with files. * @abstract This is the engine quick search information data structure * @version 1.0 2002/03/11 * @author Author * @ref gwenginequicksearch.c * @link GWhere Web Site * @link GTK Web Site * @author Sébastien LECACHEUR */ #ifndef GW_DATA_ENGINE_QUICK_SEARCH_H #define GW_DATA_ENGINE_QUICK_SEARCH_H /*! * @struct engine_quick_search * @abstract Engine Quick Search information data structure * @discussion Engine Quick Search information is an opaque data structure containing information about a quick search. */ //struct engine_quick_search; /*! * @function engine_quick_search_new * @abstract Creates a new engine quick search * @discussion This function creates a new engine quick search. It's an allocation function.
* All data are agregated. * @result a pointer to the engine quick search structure. * Returns NULL when an error occured. */ struct engine_quick_search *engine_quick_search_new ( void); /*! * @function engine_quick_search_set_pattern * @abstract Sets the search pattern string * @discussion This function sets the pattern for quick search. This pattern is a regular expression * @param p the engine quick search to set pattern * @param pattern the search pattern string * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint engine_quick_search_set_pattern ( struct engine_quick_search *p, gchar *pattern); /*! * @function engine_quick_search_set_key_words * @abstract Sets the list of key words for the search * @discussion This function sets the list of key words for the search. These key * words are regular expressions * @param p the engine quick search to set pattern * @param key_words_list the key words list * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint engine_quick_search_set_key_words ( struct engine_quick_search *p, gchar **key_words_list); /*! * @function engine_quick_search_set_type * @abstract Sets the search type * @discussion This function sets the search type * @param p the engine quick search to set pattern * @param type the search type (SEARCH_TYPE_KEY_WORDS, SEARCH_TYPE_WILDCARDS, * SEARCH_TYPE_REGEX) * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint engine_quick_search_set_type ( struct engine_quick_search *p, gint type); /*! * @function engine_quick_search_set_case_sensitive * @abstract Sets if the quick search is case sensitive * @discussion This function sets if the quick search is case sensitive. * @param p the engine quick search to set case sensitive mode * @param case_sensitive TRUE if quick search is case sensitive or FALSE if is uncase sensitive * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint engine_quick_search_set_case_sensitive ( struct engine_quick_search *p, gboolean case_sensitive); /*! * @function engine_quick_search_set_match_file * @abstract Sets if the quick search matches with files * @discussion This function sets if the quick search matches with files * @param p the engine quick search to set if matches with files * @param match_file TRUE if quick search matches with files or FALSE if doesn't match * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint engine_quick_search_set_match_file ( struct engine_quick_search *p, gboolean match_file); /*! * @function engine_quick_search_set_match_folder * @abstract Sets if the quick search matches with folders * @discussion This function sets if the quick search matches with folders * @param p the engine quick search to set if matches with folders * @param match_folder TRUE if quick search matches with folders or FALSE if doesn't match * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint engine_quick_search_set_match_folder ( struct engine_quick_search *p, gboolean match_folder); /*! * @function engine_quick_search_set_match_disk * @abstract Sets if the quick search matches with disks * @discussion This function sets if the quick search matches with disks * @param p the engine quick search to set if matches with disks * @param match_disk TRUE if quick search matches with disks or FALSE if doesn't match * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint engine_quick_search_set_match_disk ( struct engine_quick_search *p, gboolean match_disk); /*! * @function engine_quick_search_set_match_category * @abstract Sets if the quick search matches with categories * @discussion This function sets if the quick search matches with categories * @param p the engine quick search to set if matches with cateogies * @param match_category TRUE if quick search matches with categories or FALSE if doesn't match * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint engine_quick_search_set_match_category ( struct engine_quick_search *p, gboolean match_category); /*! * @function engine_quick_search_set_match_description * @abstract Sets if the quick search matches with descriptions * @discussion This function sets if the quick search matches with descriptions * @param p the engine quick search to set if matches with descriptions * @param match_description TRUE if quick search matches with descriptions or FALSE if doesn't match * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint engine_quick_search_set_match_description ( struct engine_quick_search *p, gboolean match_description); /*! * @function engine_quick_search_set_match_all_key_words * @abstract Sets if the quick search matches with all key words * @discussion This function sets if the quick search matches with all key words * @param p the engine quick search to set if matches with all key words * @param match_all_key_words TRUE if quick search matches with all key words or FALSE if it matches with only one of them * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint engine_quick_search_set_match_all_key_words ( struct engine_quick_search *p, gboolean match_all_key_words); /*! * @function engine_quick_search_get_pattern * @abstract Gets the search pattern string * @discussion This function gets the pattern for quick search. * @param p the engine quick search to get pattern * @result the pattern * Returns NULL when an error occured. */ gchar * engine_quick_search_get_pattern ( struct engine_quick_search *p); /*! * @function engine_quick_search_get_key_words * @abstract Gets the list of key words for the search * @discussion This function gets the list of key words for the search. These key * words are regular expressions * @param p the engine quick search to set pattern * @result The key words list.
* Returns NULL when an error occured. */ gchar ** engine_quick_search_get_key_words ( struct engine_quick_search *p); /*! * @function engine_quick_search_get_type * @abstract Gets the search type * @discussion This function gets the search type * @param p the engine quick search to set pattern * @param type * @result The search type (SEARCH_TYPE_KEY_WORDS, SEARCH_TYPE_WILDCARDS, * SEARCH_TYPE_REGEX).
* Returns SEARCH_TYPE_NONE when an error occured. */ gint engine_quick_search_get_type ( struct engine_quick_search *p); /*! * @function engine_quick_search_get_case_sensitive * @abstract Gets if the quick search is case sensitive * @discussion This function gets if the quick search is case sensitive. * @param p the engine quick search to get if is case sensitive * @result TRUE if the quick search is case sensitive or FALSE if is uncase sensitive * Returns NULL when an error occured. */ gboolean engine_quick_search_get_case_sensitive ( struct engine_quick_search *p); /*! * @function engine_quick_search_get_match_file * @abstract Gets if the quick search matches with files * @discussion This function gets if the quick search matches with files. * @param p the engine quick search to get if matches with files * @result TRUE if the quick search matches with files or FALSE if doesn't match * Returns NULL when an error occured. */ gboolean engine_quick_search_get_match_file ( struct engine_quick_search *p); /*! * @function engine_quick_search_get_match_folder * @abstract Gets if the quick search matches with folders * @discussion This function gets if the quick search matches with folders. * @param p the engine quick search to get if matches with folders * @result TRUE if the quick search matches with folders or FALSE if doesn't match * Returns NULL when an error occured. */ gboolean engine_quick_search_get_match_folder ( struct engine_quick_search *p); /*! * @function engine_quick_search_get_match_disk * @abstract Gets if the quick search matches with disks * @discussion This function gets if the quick search matches with disks. * @param p the engine quick search to get if matches with disks * @result TRUE if the quick search matches with disks or FALSE if doesn't match * Returns NULL when an error occured. */ gboolean engine_quick_search_get_match_disk ( struct engine_quick_search *p); /*! * @function engine_quick_search_get_match_category * @abstract Gets if the quick search matches with categories * @discussion This function gets if the quick search matches with categories. * @param p the engine quick search to get if matches with categories * @result TRUE if the quick search matches with categories or FALSE if doesn't match * Returns NULL when an error occured. */ gboolean engine_quick_search_get_match_category ( struct engine_quick_search *p); /*! * @function engine_quick_search_get_match_description * @abstract Gets if the quick search matches with descriptions * @discussion This function gets if the quick search matches with descriptions. * @param p the engine quick search to get if matches with descriptions * @result TRUE if the quick search matches with descriptions or FALSE if doesn't match * Returns NULL when an error occured. */ gboolean engine_quick_search_get_match_description ( struct engine_quick_search *p); /*! * @function engine_quick_search_get_match_all_key_words * @abstract Gets if the quick search matches with all key words * @discussion This function gets if the quick search matches with all key words. * @param p the engine quick search to get if matches with all key words * @result TRUE if the quick search matches with all key words or FALSE if it matches with only one of them * Returns NULL when an error occured. */ gboolean engine_quick_search_get_match_all_key_words ( struct engine_quick_search *p); /*! * @function engine_quick_search_free * @abstract Frees data structure * @discussion This function frees the engine quick search data structure. * @param p the engine quick search to free * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint engine_quick_search_free ( struct engine_quick_search *p); #endif gwhere-0.2.3/src/data/gwscandiskinfo.c0000744000175000017500000002430710223033707016320 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwscandiskinfo.h" typedef struct scan_disk_info { struct vfs_stats *vfs; /* Virtual file system to scan */ gchar *disk_name; /* Disk name for catalog */ gint disk_num_archive; /* Disk number archive for catalog */ GWDBCategoryPK disk_category; /* Disk category for catalog */ gboolean explore_tree_structure; /* If explores tree structure */ gboolean explore_archive; /* If explores archive files */ gboolean make_description; /* If makes description file */ gboolean category_recursive; /* If sets category recursive */ gboolean stop; /* If must stop the scan */ gchar *error_msg; /* Error message */ gpointer statment_controler; /* Statment controler */ func_descr_t scan_disk_get_file_description; /* Function to get the file description */ func_statment_t scan_disk_set_current_statment; /* Function to indicate current statment of scan */ } scan_disk_info; struct scan_disk_info * scan_disk_info_new ( void) { scan_disk_info *p = NULL; #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif if ( (p = ( struct scan_disk_info*)g_malloc0 ( sizeof ( struct scan_disk_info))) != NULL) { p->vfs = NULL; p->disk_name = NULL; p->disk_num_archive = 0; p->disk_category = NULL; p->explore_tree_structure = FALSE; p->explore_archive = FALSE; p->make_description = FALSE; p->category_recursive = FALSE; p->stop = FALSE; p->error_msg = NULL; p->scan_disk_get_file_description = NULL; p->scan_disk_set_current_statment = NULL; } return p; } gint scan_disk_info_set_vfs ( struct scan_disk_info *p, struct vfs_stats *vfs) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->vfs = vfs; return 0; } return -1; } gint scan_disk_info_set_disk_name ( struct scan_disk_info *p, gchar *name) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->disk_name != NULL ) { g_free ( p->disk_name); } p->disk_name = name; return 0; } return -1; } gint scan_disk_info_set_disk_num_archive ( struct scan_disk_info *p, gint num) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->disk_num_archive = num; return 0; } return -1; } gint scan_disk_info_set_disk_category_ref ( struct scan_disk_info *p, GWDBCategoryPK ref) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->disk_category = ref; return 0; } return -1; } gint scan_disk_info_set_explore_tree_structure ( struct scan_disk_info *p, gboolean tree_structure) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->explore_tree_structure = tree_structure; return 0; } return -1; } gint scan_disk_info_set_explore_archive ( struct scan_disk_info *p, gboolean explore_archive) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->explore_archive = explore_archive; return 0; } return -1; } gint scan_disk_info_set_make_description ( struct scan_disk_info *p, gboolean make_description) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->make_description = make_description; return 0; } return -1; } gint scan_disk_info_set_category_recursive ( struct scan_disk_info *p, gboolean category_recursive) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->category_recursive = category_recursive; return 0; } return -1; } gint scan_disk_info_set_stop ( struct scan_disk_info *p, gboolean stop) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->stop = stop; return 0; } return -1; } gint scan_disk_info_set_error_msg ( struct scan_disk_info *p, gchar *error_msg) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->error_msg != NULL ) { g_free ( p->error_msg); } p->error_msg = error_msg; return 0; } return -1; } gint scan_disk_info_set_statment_controler ( struct scan_disk_info *p, gpointer statment_controler) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->statment_controler = statment_controler; return 0; } return -1; } gint scan_disk_info_set_scan_disk_get_file_description ( struct scan_disk_info *p, func_descr_t f) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->scan_disk_get_file_description = f; return 0; } return -1; } gint scan_disk_info_set_scan_disk_set_current_statment ( struct scan_disk_info *p, func_statment_t f) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->scan_disk_set_current_statment = f; return 0; } return -1; } struct vfs_stats * scan_disk_info_get_vfs ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->vfs; } return NULL; } gchar * scan_disk_info_get_disk_name ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->disk_name; } return NULL; } gint scan_disk_info_get_disk_num_archive ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->disk_num_archive; } return -1; } GWDBCategoryPK scan_disk_info_get_disk_category_ref ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->disk_category; } return NULL; } gboolean scan_disk_info_get_explore_tree_structure ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->explore_tree_structure; } return FALSE; } gboolean scan_disk_info_get_explore_archive ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->explore_archive; } return FALSE; } gboolean scan_disk_info_get_make_description ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->make_description; } return FALSE; } gboolean scan_disk_info_get_category_recursive ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->category_recursive; } return FALSE; } gboolean scan_disk_info_get_stop ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->stop; } return FALSE; } gchar * scan_disk_info_get_error_msg ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->error_msg; } return NULL; } gpointer scan_disk_info_get_statment_controler ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->statment_controler; } return NULL; } func_descr_t scan_disk_info_get_scan_disk_get_file_description ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->scan_disk_get_file_description; } return NULL; } func_statment_t scan_disk_info_get_scan_disk_set_current_statment ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL) { return p->scan_disk_set_current_statment; } return NULL; } gint scan_disk_info_free ( struct scan_disk_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif if ( p != NULL ) { scan_disk_info_set_disk_name ( p, NULL); scan_disk_info_set_error_msg ( p, NULL); g_free ( p); return 0; } return -1; } gwhere-0.2.3/src/data/gwscandiskinfo.h0000744000175000017500000003752610223033707016334 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwscandiskinfo.h * @discussion GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is the scan disk information data structure * @version 1.0 2002/01/17 * @author Author * @see glib.h * @see gwsupport.h * @see gwvirtualfilesystemstats.h * @see gwcategory.h * @ref gwscandiskinfo.c * @link GWhere Web Site * @link GTK Web Site * @author Sébastien LECACHEUR */ #ifndef GW_DATA_SCAN_DISK_INFO_H #define GW_DATA_SCAN_DISK_INFO_H #include #include "gwvirtualfilesystemstats.h" #include "db/gwdb.h" /*! * @struct scan_disk_info * @abstract Scan disk information data structure * @discussion Scan disk information is an opaque data structure containing information about a scan process. */ struct scan_disk_info; /*! * @typedef func_descr_t * Specifies the type of the value f function passed to scan_disk_info_set_scan_disk_get_file_description(). * The function get the description of a file. * @abstract Functions specification * @param file_name file name to get description */ typedef gchar * (*func_descr_t)( gchar *file_name); /*! * @typedef func_statment_t * Specifies the type of the value f function passed to scan_disk_info_set_scan_disk_set_current_statment(). * The function update the statmant of the progression. It's usefull in order to update progress bar for example. * @abstract Functions specification * @param object the object to update * @param value the value to increment for statment progress. */ typedef gint (*func_statment_t)( gpointer object, gfloat value); /*! * @function scan_disk_info_new * @abstract Creates a new scan disk information * @discussion This function creates a new scan disk information. It's an allocation function.
* VFSStats and Categories are collaboratived and all other data agregated. * @result a pointer to the scan disk information structure. * Returns NULL when an error occured. */ struct scan_disk_info * scan_disk_info_new ( void); /*! * @function scan_disk_info_set_vfs * @abstract Sets the VFSStats to scan * @discussion This function sets the VFSStats to scan. * @param p the scan disk information to set VFSStats * @param vfs the VFSStats * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_set_vfs ( struct scan_disk_info *p, struct vfs_stats *vfs); /*! * @function scan_disk_info_set_disk_name * @abstract Sets the disk name for catalog * @discussion This function sets the disk name for catalog. * @param p the scan disk information to set disk name * @param name the disk name * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_set_disk_name ( struct scan_disk_info *p, gchar *name); /*! * @function scan_disk_info_set_disk_num_archive * @abstract Sets the disk number archive for catalog * @discussion This function sets the disk number archive for catalog. * @param p the scan disk information to set number archive * @param num the disk number archive * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_set_disk_num_archive ( struct scan_disk_info *p, gint num); /*! * @function scan_disk_info_set_disk_category * @abstract Sets the category disk for catalog * @discussion This function sets the category disk for catalog. * @param p the scan disk information to set category * @param category the category * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_set_disk_category_ref ( struct scan_disk_info *p, GWDBCategoryPK ref); /*! * @function scan_disk_info_set_explore_tree_structure * @abstract Sets if the scan disk had to explore tree structure * @discussion This function sets if the scan disk had to explore tree structure. * @param p the scan disk information to set explore tree structure status * @param tree_structure TRUE to explore files archive or FALSE to no explore them * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_set_explore_tree_structure ( struct scan_disk_info *p, gboolean tree_structure); /*! * @function scan_disk_info_set_explore_archive * @abstract Sets if the scan disk had to explore archive files * @discussion This function sets if the scan disk had to explore archive files. * @param p the scan disk information to set explore archive files status * @param explore_archive TRUE to explore files archive or FALSE to no explore them * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_set_explore_archive ( struct scan_disk_info *p, gboolean explore_archive); /*! * @function scan_disk_info_set_make_description * @abstract Sets if the scan disk had to make file description * @discussion This function sets if the scan disk had to make file description. * @param p the scan disk information to set make file description status * @param make_description TRUE to make description or FALSE to not make description * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_set_make_description ( struct scan_disk_info *p, gboolean make_description); /*! * @function scan_disk_info_set_category_recursive * @abstract Sets if the scan disk had to set recursively category * @discussion This function sets if the scan disk had to set recursively category. * @param p the scan disk information to set recursively category status * @param category_recursive TRUE to set category recursively or FALSE to not set them * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_set_category_recursive ( struct scan_disk_info *p, gboolean category_recursive); /*! * @function scan_disk_info_set_stop * @abstract Sets if the scan disk must stop * @discussion This function sets if the scan disk had to stop. * @param p the scan disk information to set stop status * @param stop TRUE to stop scan disk or FALSE to continue * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_set_stop ( struct scan_disk_info *p, gboolean stop); /*! * @function scan_disk_info_set_error_msg * @abstract Sets the error message * @discussion This function sets the error message. The message indicate why * the scan disk failed. * @param p the scan disk information to set error message * @param error_ms the error message * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_set_error_msg ( struct scan_disk_info *p, gchar *error_msg); /*! * @function scan_disk_info_set_statment_controler * @abstract Sets the statment controler * @discussion This function sets the statment controler. This controler is the first parameter of * func_stament_t function. * @param p the scan disk information to set statment controler * @param statment_controler the statment controler * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_set_statment_controler ( struct scan_disk_info *p, gpointer statment_controler); /*! * @function scan_disk_info_set_scan_disk_get_file_description * @abstract Sets the function to get file description * @discussion This function sets the function to get file description. This * is active only if "make description" is activated. * @param p the scan disk information to set make description function * @param f the function * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_set_scan_disk_get_file_description ( struct scan_disk_info *p, func_descr_t f); /*! * @function scan_disk_info_set_scan_disk_set_current_statment * @abstract Sets the function to set current process statment * @discussion This function sets the function to set current process statment. * @param p the scan disk information to set current process statment status * @param f the function * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_set_scan_disk_set_current_statment ( struct scan_disk_info *p, func_statment_t f); /*! * @function scan_disk_info_get_vfs * @abstract Gets the VFSStats to scan * @discussion This function gets the VFSStats to scan. * @param p the scan disk information to get VFSStats * @result the VFSStats. * Returns NULL when an error occured. */ struct vfs_stats * scan_disk_info_get_vfs ( struct scan_disk_info *p); /*! * @function scan_disk_info_get_disk_name * @abstract Gets the disk name for catalog * @discussion This function gets the disk name for catalog. * @param p the scan disk information to get disk name * @result the disk name * Returns NULL when an error occured. */ gchar * scan_disk_info_get_disk_name ( struct scan_disk_info *p); /*! * @function scan_disk_info_get_disk_num_archive * @abstract Gets the disk number archive for catalog * @discussion This function gets the disk number archive for catalog. * @param p the scan disk information to get number archive * @result the disk number archive * Returns -1 when an error occured. */ gint scan_disk_info_get_disk_num_archive ( struct scan_disk_info *p); /*! * @function scan_disk_info_get_disk_category * @abstract Gets the disk category for catalog * @discussion This function gets the disk category for catalog. * @param p the scan disk information to get * @result the category * Returns NULL when an error occured. */ GWDBCategoryPK scan_disk_info_get_disk_category_ref ( struct scan_disk_info *p); /*! * @function scan_disk_info_get_explore_tree_structure * @abstract Gets if the scan disk had to explore tree structure * @discussion This function gets if the scan disk had to explore tree structure. * @param p the scan disk information to get explore tree structure status * @result TRUE if must explore tree structure or FALSE if not explore them */ gboolean scan_disk_info_get_explore_tree_structure ( struct scan_disk_info *p); /*! * @function scan_disk_info_get_explore_archive * @abstract Gets if the scan disk had to explore archive files * @discussion This function gets if the scan disk had to explore archives files. * @param p the scan disk information to get explore archive status * @result TRUE if must explore files archive or FALSE if not explore them */ gboolean scan_disk_info_get_explore_archive ( struct scan_disk_info *p); /*! * @function scan_disk_info_get_make_description * @abstract Gets if the scan disk had to make file description * @discussion This function gets if the scan disk had to make file description. To make * file description the "get file description" must be set. * @param p the scan disk information to get make description status * @result TRUE if must to make description or FALSE to not make description */ gboolean scan_disk_info_get_make_description ( struct scan_disk_info *p); /*! * @function scan_disk_info_get_category_recursive * @abstract Gets if the scan disk had to set category recursively * @discussion This function gets of the scan disk had to set category recursively to * the catalog. If the category is applicated recursively all sub item of * catalog will have this category (folder, subfolder, files). * @param p the scan disk information to get category recursively status * @result TRUE if must to set category recursively or FALSE to not set them */ gboolean scan_disk_info_get_category_recursive ( struct scan_disk_info *p); /*! * @function scan_disk_info_get_stop * @abstract Gets if the scan disk had to stop * @discussion This function gets if the scan disk had to stop process. This property * is usefull to cancel a scan disk (with an external process). Use this * methode to check when scan disk must stop. * @param p the scan disk information to get stop status * @result TRUE to stop scan disk or FALSE to continue */ gboolean scan_disk_info_get_stop ( struct scan_disk_info *p); /*! * @function scan_disk_info_get_error_msg * @abstract Gets the error message * @discussion This function gets the error message. The error message may be put * when a error occured during scan disk or when the process is stoped. * The error message may be use in order to send a report or anything. * @param p the scan disk information to get error message * @result the error message or NULL if there are no message. * Return NULL when an error occured. */ gchar * scan_disk_info_get_error_msg ( struct scan_disk_info *p); /*! * @function scan_disk_info_get_statment_controler * @abstract Gets the statment controler * @discussion This function gets the statment controler. This controler must use with * func_statment_t function. * @param p the scan disk information to get statment controler * @result the statment controler or NULL if there are no statment controler. * Return NULL when an error occured. */ gpointer scan_disk_info_get_statment_controler ( struct scan_disk_info *p); /*! * @function scan_disk_info_get_scan_disk_get_file_description * @abstract Gets the function to get file description * @discussion This function get the function to get file description. This function * must be use only if the "make description" status is set. * @param p the scan disk information to get function * @result the function or NULL if there are no function. * Returns NULL when an error occured. */ func_descr_t scan_disk_info_get_scan_disk_get_file_description ( struct scan_disk_info *p); /*! * @function scan_disk_info_get_scan_disk_set_current_statment * @abstract Gets the function to set current process statment * @discussion This function gets the function to set current process statment * @param p the scan disk information to get function * @result the function or NULL if there are no function. * Returns NULL when an error occured. */ func_statment_t scan_disk_info_get_scan_disk_set_current_statment ( struct scan_disk_info *p); /*! * @function scan_disk_info_free * @abstract Frees data structure * @discussion This function frees the scan disk data structure. Doesn't * free VFSStats, Category, Statment Controler because they're collaboratives. * @param p the scan disk information to free * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint scan_disk_info_free ( struct scan_disk_info *p); #endif gwhere-0.2.3/src/data/gwsettings.c0000744000175000017500000001104310023202520015463 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwsettings.h" #include struct settings { GHashTable *list; /* List of variables */ }; GWSettings * gw_settings_new ( void) { GWSettings *p = NULL; #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif if ( (p = (GWSettings*)g_malloc0 ( sizeof ( GWSettings))) != NULL ) { p->list = g_hash_table_new ( g_str_hash, g_str_equal); } return p; } gint gw_settings_display ( GWSettings *p) { gint result = -1; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->list != NULL ) { g_hash_table_foreach ( p->list, (GHFunc)gw_settings_pair_display, NULL); result = 0; } } return result; } gint gw_settings_add_pair ( GWSettings *p, gchar *key, gchar *value) { gint result = -1; gboolean exist = FALSE; gpointer old_key = NULL; gpointer old_value = NULL; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( key != NULL ) { if ( (exist = g_hash_table_lookup_extended ( p->list, key, &old_key, &old_value)) == TRUE ) { g_hash_table_remove ( p->list, old_key); gw_settings_pair_free ( old_key, old_value, NULL); } g_hash_table_insert ( p->list, key, value); result = 0; } } return result; } gchar * gw_settings_get_value ( GWSettings *p, gchar *key) { gchar *result = NULL; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( key != NULL ) { result = g_hash_table_lookup ( p->list, key); } } return result; } gint gw_settings_free ( GWSettings *p) { gint result = -1; #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif if ( p != NULL ) { if ( p->list != NULL ) { /* Must free each key/value pairs. */ g_hash_table_foreach_remove ( p->list, (GHRFunc)gw_settings_pair_free, NULL); g_hash_table_destroy ( p->list); } g_free ( p); result = 0; } return result; } gboolean gw_settings_pair_display ( gchar *key, gchar *value, gpointer data) { gboolean result = FALSE; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif g_print ( "*** GW - %s (%d) :: %s() : key/value => (%s := %s)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, key, value); return result; } gboolean gw_settings_pair_free ( gchar * key, gchar *value, gpointer data) { gboolean result = FALSE; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( key != NULL ) { g_free ( key); result = TRUE; } if ( value != NULL ) { g_free ( value); } return result; } gint gw_settings_to_line ( gchar * key, gchar *value, gchar **line) { gint result = -1; gchar *new_line = NULL; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (key != NULL) && (value != NULL) ) { new_line = g_strconcat ( *line, key, "=", value, "\n", NULL); g_free ( *line); *line = new_line; result = 0; } return result; } gint gw_settings_to_file ( GWSettings *p, gchar **file) { gint result = -1; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->list != NULL ) { g_hash_table_foreach ( p->list, (GHFunc)gw_settings_to_line, file); result = 0; } } return result; } gwhere-0.2.3/src/data/gwsettings.h0000744000175000017500000001237310023202520015477 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsettings.h * @discussion GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is the scan disk information data structure * @version 1.0 2002/01/17 * @author Author * @see glib.h * @see gwsupport.h * @ref gwsettings.c * @link GWhere Web Site * @link GTK Web Site * @author Sébastien LECACHEUR */ #ifndef GW_DATA_SETTINGS_H #define GW_DATA_SETTINGS_H /*! * @struct GWSettings * @abstract Settings data structure * @discussion GWSettings is an opaque data structure containing list of settings for the applications. */ typedef struct settings GWSettings; /*! * @function gw_settings_new * @abstract Creates a new settings list. * @discussion This function creates a new settings list. It's an allocation function. * @result a pointer to the settings structure.
* Returns NULL when an error occured.
*/ GWSettings * gw_settings_new ( void); /*! * @function gw_settings_display * @abstract Displays a settings list. * @discussion This function diplays a settings list. * @result a error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_settings_display ( GWSettings *p); /*! * @function gw_settings_add_pair * @abstract Adds a key/value pair. * @discussion This function adds a key/value pair.
* @param p settings where add * @param key the key to add * @param value the value to add * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_settings_add_pair ( GWSettings *p, gchar *key, gchar *value); /*! * @function gw_settings_get_value * @abstract Gets the value of a pair. * @discussion This function gets the value of the pair designed by a key.
* @param p settings to get value * @param key the key * @result the value
* Returns NULL when an error occured.
*/ gchar * gw_settings_get_value ( GWSettings *p, gchar *key); /*! * @function gw_settings_free * @abstract Frees datas structure. * @discussion This function frees the settings data structure.
* Frees all variables in the list. * @param p the settings to free * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_settings_free ( GWSettings *p); /*! * @function gw_settings_pair_display * @abstract Displays a key/value pair. * @discussion This function diplays a key/value pair.
* @param key the key to display * @param value the value to display * @param data user data (not used at time). * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_settings_pair_display ( gchar * key, gchar *value, gpointer data); /*! * @function gw_settings_pair_free * @abstract Frees a key/value pair. * @discussion This function frees a key/value pair.
* @param key the key to free * @param value the value to free * @param data user data (not used at time). * @result an error code.
* Returns TRUE when it's done.
* Returns FALSE when an error occured.
*/ gboolean gw_settings_pair_free ( gchar * key, gchar *value, gpointer data); /*! * @function gw_settings_to_line * @abstract Stores in a string the pair key/value. * @discussion This function stores in a string the pair key/value.
* @param key the key to free * @param value the value to free * @param line a pointer to store the pair (the format is "key=value\n"). * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_settings_to_line ( gchar * key, gchar *value, gchar **line); /*! * @function gw_settings_to_file * @abstract Stores in a string all pairs key/value. * @discussion This function stores in a string all pairs key/value.
* @param key the key to free * @param value the value to free * @param file a pointer to store all pairs (the format is "key1=value1\nkey2=value2\nkey3=value3\n"). * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_settings_to_file ( GWSettings *p, gchar **file); #endif gwhere-0.2.3/src/data/gwuserquicksearch.c0000744000175000017500000002040010023202520017021 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwuserquicksearch.h" #include "tools/gwtools.h" typedef struct user_quick_search { struct engine_quick_search *quick_search; /* The quick search */ gint search_type; /* The quick search type */ } UserQuickSearch; struct user_quick_search *user_quick_search_new ( void) { struct user_quick_search *p = NULL; #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif if ( (p = ( struct user_quick_search*)g_malloc0 ( sizeof ( struct user_quick_search))) != NULL) { p->quick_search = engine_quick_search_new ( ); p->search_type = 0; } return p; } gint user_quick_search_set_pattern ( struct user_quick_search *p, gchar *pattern) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_set_pattern ( p->quick_search, pattern); } return -1; } gint user_quick_search_set_case_sensitive ( struct user_quick_search *p, gboolean case_sensitive) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_set_case_sensitive ( p->quick_search, case_sensitive); } return -1; } gint user_quick_search_set_type ( struct user_quick_search *p, gint type) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->search_type = type; return 0; } return -1; } gint user_quick_search_set_match_file ( struct user_quick_search *p, gboolean match_file) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_set_match_file ( p->quick_search, match_file); } return -1; } gint user_quick_search_set_match_folder ( struct user_quick_search *p, gboolean match_folder) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_set_match_folder ( p->quick_search, match_folder); } return -1; } gint user_quick_search_set_match_disk ( struct user_quick_search *p, gboolean match_disk) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_set_match_disk ( p->quick_search, match_disk); } return -1; } gint user_quick_search_set_match_category ( struct user_quick_search *p, gboolean match_category) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_set_match_category ( p->quick_search, match_category); } return -1; } gint user_quick_search_set_match_description ( struct user_quick_search *p, gboolean match_description) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_set_match_description ( p->quick_search, match_description); } return -1; } gchar * user_quick_search_get_pattern ( struct user_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_get_pattern ( p->quick_search); } return NULL; } gboolean user_quick_search_get_case_sensitive ( struct user_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_get_case_sensitive ( p->quick_search); } return FALSE; } gint user_quick_search_get_type ( struct user_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return p->search_type; } return SEARCH_TYPE_NONE; } gboolean user_quick_search_get_match_file ( struct user_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_get_match_file ( p->quick_search); } return FALSE; } gboolean user_quick_search_get_match_folder ( struct user_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_get_match_folder ( p->quick_search); } return FALSE; } gboolean user_quick_search_get_match_disk ( struct user_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_get_match_disk ( p->quick_search); } return FALSE; } gboolean user_quick_search_get_match_category ( struct user_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_get_match_category ( p->quick_search); } return FALSE; } gboolean user_quick_search_get_match_description ( struct user_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return engine_quick_search_get_match_description ( p->quick_search); } return FALSE; } gint user_quick_search_free ( struct user_quick_search *p) { #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif if ( p != NULL ) { engine_quick_search_free ( p->quick_search); g_free ( p); return 0; } return -1; } struct engine_quick_search *user_quick_search_to_engine_quick_search ( struct user_quick_search *p) { struct engine_quick_search *result = NULL; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { result = engine_quick_search_new ( ); engine_quick_search_set_case_sensitive ( result, user_quick_search_get_case_sensitive ( p)); engine_quick_search_set_type ( result, user_quick_search_get_type ( p)); engine_quick_search_set_match_file ( result, user_quick_search_get_match_file ( p)); engine_quick_search_set_match_folder ( result, user_quick_search_get_match_folder ( p)); engine_quick_search_set_match_disk ( result, user_quick_search_get_match_disk ( p)); engine_quick_search_set_match_category ( result, user_quick_search_get_match_category ( p)); engine_quick_search_set_match_description ( result, user_quick_search_get_match_description ( p)); if ( user_quick_search_get_type ( p) == SEARCH_TYPE_KEY_WORDS ) { engine_quick_search_set_key_words ( result, gw_str_key_words_to_regex ( user_quick_search_get_pattern ( p))); } else if ( user_quick_search_get_type ( p) == SEARCH_TYPE_WILDCARDS ) { engine_quick_search_set_pattern ( result, gw_str_blob_to_regex ( user_quick_search_get_pattern ( p))); } else if ( user_quick_search_get_type ( p) == SEARCH_TYPE_REGEX ) { engine_quick_search_set_pattern ( result, user_quick_search_get_pattern ( p)); } } return result; } gwhere-0.2.3/src/data/gwuserquicksearch.h0000744000175000017500000002657210023202520017046 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwuserquicksearch.h * @discussion GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* It uses to link with user settings. It's an inherited object from EngineQuickSearch. * @abstract This is the engine quick search information data structure * @version 1.0 2002/03/11 * @author Author * @see gwenginequicksearch.c * @ref gwuserquicksearch.c * @link GWhere Web Site * @link GTK Web Site * @author Sébastien LECACHEUR */ #ifndef GW_DATA_USER_QUICK_SEARCH_H #define GW_DATA_USER_QUICK_SEARCH_H #include "gwenginequicksearch.h" /*! @define SEARCH_TYPE_NONE Undefinied search type */ #define SEARCH_TYPE_NONE -1 /*! @define SEARCH_TYPE_KEY_WORDS Search type for key words */ #define SEARCH_TYPE_KEY_WORDS 0 /*! @define SEARCH_TYPE_WILDCARDS Search type for wildcards */ #define SEARCH_TYPE_WILDCARDS 1 /*! @define SEARCH_TYPE_REGEX Search type for regural expression */ #define SEARCH_TYPE_REGEX 2 /*! * @struct user_quick_search * @abstract User Quick Search information data structure * @discussion User Quick Search information is an opaque data structure containing information about a quick search. */ struct user_quick_search; /*! * @function user_quick_search_new * @abstract Creates a new user quick search * @discussion This function creates a new user quick search. It's an allocation function.
* All data are agregated. * @result a pointer to the user quick search structure. * Returns NULL when an error occured. */ struct user_quick_search *user_quick_search_new ( void); /*! * @function user_quick_search_set_pattern * @abstract Sets the search pattern string * @discussion This function sets the pattern for quick search. This patern is a regular expression * @param p the user quick search to set patern * @param pattern the search pattern string * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint user_quick_search_set_pattern ( struct user_quick_search *p, gchar *pattern); /*! * @function user_quick_search_set_case_sensitive * @abstract Sets if the quick search is case sensitive * @discussion This function sets if the quick search is case sensitive. * @param p the user quick search to set case sensitive mode * @param case_sensitive TRUE if quick search is case sensitive or FALSE if is uncase sensitive * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint user_quick_search_set_case_sensitive ( struct user_quick_search *p, gboolean case_sensitive); /*! * @function user_quick_search_set_type * @abstract Sets the quick search type * @discussion This function sets the quick search type. * @param p the user quick search to set if uses regular expression * @param type SEARCH_TYPE_KEY_WORDS,SEARCH_TYPE_WILDCARDS * or SEARCH_TYPE_REGEX * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint user_quick_search_set_type ( struct user_quick_search *p, gint type); /*! * @function user_quick_search_set_match_file * @abstract Sets if the quick search matches with files * @discussion This function sets if the quick search matches with files * @param p the user quick search to set if matches with files * @param match_file TRUE if quick search matches with files or FALSE if doesn't match * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint user_quick_search_set_match_file ( struct user_quick_search *p, gboolean match_file); /*! * @function user_quick_search_set_match_folder * @abstract Sets if the quick search matches with folders * @discussion This function sets if the quick search matches with folders * @param p the user quick search to set if matches with folders * @param match_folder TRUE if quick search matches with folders or FALSE if doesn't match * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint user_quick_search_set_match_folder ( struct user_quick_search *p, gboolean match_folder); /*! * @function user_quick_search_set_match_disk * @abstract Sets if the quick search matches with disks * @discussion This function sets if the quick search matches with disks * @param p the user quick search to set if matches with disks * @param match_disk TRUE if quick search matches with disks or FALSE if doesn't match * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint user_quick_search_set_match_disk ( struct user_quick_search *p, gboolean match_disk); /*! * @function user_quick_search_set_match_category * @abstract Sets if the quick search matches with categories * @discussion This function sets if the quick search matches with categories * @param p the user quick search to set if matches with cateogies * @param match_category TRUE if quick search matches with categories or FALSE if doesn't match * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint user_quick_search_set_match_category ( struct user_quick_search *p, gboolean match_category); /*! * @function user_quick_search_set_match_description * @abstract Sets if the quick search matches with descriptions * @discussion This function sets if the quick search matches with descriptions * @param p the user quick search to set if matches with descriptions * @param match_description TRUE if quick search matches with descriptions or FALSE if doesn't match * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint user_quick_search_set_match_description ( struct user_quick_search *p, gboolean match_description); /*! * @function user_quick_search_get_pattern * @abstract Gets the search pattern string * @discussion This function gets the pattern for quick search. * @param p the user quick search to get pattern * @result the pattern * Returns NULL when an error occured. */ gchar * user_quick_search_get_pattern ( struct user_quick_search *p); /*! * @function user_quick_search_get_case_sensitive * @abstract Gets if the quick search is case sensitive * @discussion This function gets if the quick search is case sensitive. * @param p the user quick search to get if is case sensitive * @result TRUE if the quick search is case sensitive or FALSE if is uncase sensitive * Returns NULL when an error occured. */ gboolean user_quick_search_get_case_sensitive ( struct user_quick_search *p); /*! * @function user_quick_search_get_type * @abstract Gets if the quick search uses regural expressions * @discussion This function gets if the quick search uses regular expressions. * @param p the user quick search to get if uses regular expressions * @result SEARCH_TYPE_KEY_WORDS,SEARCH_TYPE_WILDCARDS or SEARCH_TYPE_REGEX * Returns SEARCH_TYPE_NONE when an error occured. */ gint user_quick_search_get_type ( struct user_quick_search *p); /*! * @function user_quick_search_get_match_file * @abstract Gets if the quick search matches with files * @discussion This function gets if the quick search matches with files. * @param p the user quick search to get if matches with files * @result TRUE if the quick search matches with files or FALSE if doesn't match * Returns NULL when an error occured. */ gboolean user_quick_search_get_match_file ( struct user_quick_search *p); /*! * @function user_quick_search_get_match_folder * @abstract Gets if the quick search matches with folders * @discussion This function gets if the quick search matches with folders. * @param p the user quick search to get if matches with folders * @result TRUE if the quick search matches with folders or FALSE if doesn't match * Returns NULL when an error occured. */ gboolean user_quick_search_get_match_folder ( struct user_quick_search *p); /*! * @function user_quick_search_get_match_disk * @abstract Gets if the quick search matches with disks * @discussion This function gets if the quick search matches with disks. * @param p the user quick search to get if matches with disks * @result TRUE if the quick search matches with disks or FALSE if doesn't match * Returns NULL when an error occured. */ gboolean user_quick_search_get_match_disk ( struct user_quick_search *p); /*! * @function user_quick_search_get_match_category * @abstract Gets if the quick search matches with categories * @discussion This function gets if the quick search matches with categories. * @param p the user quick search to get if matches with categories * @result TRUE if the quick search matches with categories or FALSE if doesn't match * Returns NULL when an error occured. */ gboolean user_quick_search_get_match_category ( struct user_quick_search *p); /*! * @function user_quick_search_get_match_description * @abstract Gets if the quick search matches with descriptions * @discussion This function gets if the quick search matches with descriptions. * @param p the user quick search to get if matches with descriptions * @result TRUE if the quick search matches with descriptions or FALSE if doesn't match * Returns NULL when an error occured. */ gboolean user_quick_search_get_match_description ( struct user_quick_search *p); /*! * @function user_quick_search_free * @abstract Frees data structure * @discussion This function frees the user quick search data structure. * @param p the user quick search to free * @result an error code. * Returns 0 when it's done. * Returns -1 when an error occured. */ gint user_quick_search_free ( struct user_quick_search *p); /*! * @function user_quick_search_to_engine_quick_search * @abstract Transforms a user quick search to engine quick search * @discussion This function tranforms user quick search to engine quick search. It's creates a regular * expression from the search patern. * @param p the user quick search to transform * @result the engine quick search structure. * Returns NULL when an error occured. */ struct engine_quick_search *user_quick_search_to_engine_quick_search ( struct user_quick_search *p); #endif gwhere-0.2.3/src/data/gwvirtualfilesystemstats.c0000744000175000017500000002522510023202520020504 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwvirtualfilesystemstats.h" #include /* strncmp */ typedef struct vfs_stats { gchar *name; /* File system name */ gchar *dir; /* File system path */ gchar *label; /* File system label */ gchar *serial_number; /* Serial number */ gchar *type; /* File system type */ gchar **options; /* File system options */ gboolean mounted; /* Status : mounted/umounted */ gulong nb_files; /* Number of files */ glong blocks_size; /* Block size */ gulong blocks; /* Total number of blocks */ gulong blocks_free; /* Number of free blocks */ } VFSStats; VFSStats * vfs_stats_new ( void) { VFSStats *p = NULL; #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif if ( (p = (VFSStats*)g_malloc0 ( sizeof ( VFSStats))) != NULL ) { p->name = NULL; p->dir = NULL; p->label = NULL; p->serial_number = NULL; p->type = NULL; p->options = NULL; p->mounted = FALSE; p->nb_files = 0; p->blocks_size = 0; p->blocks = 0; p->blocks_free = 0; return p; } return NULL; } void vfs_stats_display ( VFSStats *p) { /* Displays all values of the data structure */ gint i = 0; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { g_print ( "\nName : %s\n", p->name); g_print ( "Dir : %s\n", p->dir); g_print ( "Label : %s\n", p->label); g_print ( "Serial number : %s\n", p->serial_number); g_print ( "Type : %s\n", p->type); if ( p->options != NULL ) { for ( i = 0; p->options[i] != NULL; i++) { g_print ( "Option %d : %s\n", i, p->options[i]); } } if ( p->mounted ) { g_print ( "Mounted\n"); } else { g_print ( "No mounted\n"); } g_print ( "Number of files : %ld\n", p->nb_files); g_print ( "Blocks size : %lu\n", p->blocks_size); g_print ( "Blocks : %ld\n", p->blocks); g_print ( "Blocks free : %lu\n", p->blocks_free); return; } g_print ( "\nvfs stats is (null)\n"); } gint vfs_stats_set_name ( VFSStats *p, gchar *name) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->name != NULL ) { g_free ( p->name); } p->name = name; return 0; } return -1; } gint vfs_stats_set_dir ( VFSStats *p, gchar *dir) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->dir != NULL ) { g_free ( p->dir); } p->dir = dir; return 0; } return -1; } gint vfs_stats_set_label ( VFSStats *p, gchar *label) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->label != NULL ) { g_free ( p->label); } p->label = label; return 0; } return -1; } gint vfs_stats_set_type ( VFSStats *p, gchar *type) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->type != NULL ) { g_free ( p->type); } p->type = type; return 0; } return -1; } gint vfs_stats_set_options ( VFSStats *p, gchar **options) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->options != NULL ) { g_strfreev ( p->options); } p->options = options; return 0; } return -1; } gint vfs_stats_set_ismounted ( VFSStats *p, gboolean mounted) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->mounted = mounted; return 0; } return -1; } gint vfs_stats_set_nb_files ( VFSStats *p, gulong nb_files) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->nb_files = nb_files; return 0; } return -1; } gint vfs_stats_set_blocks_size ( VFSStats *p, glong blocks_size) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->blocks_size = blocks_size; return 0; } return -1; } gint vfs_stats_set_blocks ( VFSStats *p, gulong blocks) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->blocks = blocks; return 0; } return -1; } gint vfs_stats_set_blocks_free ( VFSStats *p, gulong blocks_free) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->blocks_free = blocks_free; return 0; } return -1; } gint vfs_stats_set_serial_number ( struct vfs_stats *p, gchar *serial_number) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->serial_number != NULL ) { g_free ( p->serial_number); } p->serial_number = serial_number; return 0; } return -1; } gchar * vfs_stats_get_name ( VFSStats *p) { gint i = 0; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( (p->type != NULL) && (strncmp ( p->type, "supermount", 10) == 0) ) { if ( p->options != NULL ) { for ( i = 0; p->options[i] != NULL; i++) { if ( strncmp ( p->options[i], "dev=", 4) == 0 ) { return p->options[i]+4; } } } } else { return p->name; } } return NULL; } gchar * vfs_stats_get_dir ( VFSStats *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return p->dir; } return NULL; } gchar * vfs_stats_get_label ( VFSStats *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return p->label; } return NULL; } gchar * vfs_stats_get_type ( VFSStats *p) { gint i = 0; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->type != NULL ) { if ( strncmp ( p->type, "supermount", 10) == 0 ) { for ( i = 0; p->options[i] != NULL; i++) { if ( strncmp ( p->options[i], "fs=", 3) == 0 ) { return p->options[i]+3; } } } else { if ( strncmp ( p->type, "auto", 4) == 0 ) { return NULL; } else { return p->type; }} } } return NULL; } gchar * vfs_stats_get_serial_number ( VFSStats *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return p->serial_number; } return NULL; } gchar ** vfs_stats_get_options ( VFSStats *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return p->options; } return NULL; } gboolean vfs_stats_get_ismounted ( VFSStats *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return p->mounted; } return FALSE; } gulong vfs_stats_get_nb_files ( VFSStats *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return p->nb_files; } return 0; } glong vfs_stats_get_blocks_size ( VFSStats *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return p->blocks_size; } return 0; } gulong vfs_stats_get_blocks ( VFSStats *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p!= NULL ) { return p->blocks; } return 0; } gulong vfs_stats_get_blocks_free ( VFSStats *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p!= NULL ) { return p->blocks_free; } return 0; } guint64 vfs_stats_get_total_capacity ( VFSStats *p) { guint64 b_size, b_num; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p== NULL ) { return -1; } b_size = vfs_stats_get_blocks_size ( p); b_num = vfs_stats_get_blocks ( p); return b_size * b_num; } guint64 vfs_stats_get_total_free_space ( VFSStats *p) { guint64 b_size, b_free; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p == NULL ) { return -1; } b_size = vfs_stats_get_blocks_size ( p); b_free = vfs_stats_get_blocks_free ( p); return b_size * b_free; } guint64 vfs_stats_get_total_used_space ( VFSStats *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p == NULL ) { return -1; } return vfs_stats_get_total_capacity ( p) - vfs_stats_get_total_free_space ( p); } gboolean vfs_stats_free ( VFSStats *p) { #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif if ( p != NULL ) { vfs_stats_set_name ( p, NULL); vfs_stats_set_dir ( p, NULL); vfs_stats_set_label ( p, NULL); vfs_stats_set_serial_number ( p, NULL); vfs_stats_set_type ( p, NULL); vfs_stats_set_options ( p, NULL); g_free ( p); return TRUE; } return FALSE; } gwhere-0.2.3/src/data/gwvirtualfilesystemstats.h0000744000175000017500000003315110023202520020506 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwvirtualfilesystemstats.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.
* It's an object for the virtual representation of a file system. This structure gets many informations as name, path, label, size, ... * Can check or try mount the virtual file system.

* @abstract This is the virtual file system stats data structure. * @author Sébastien LECACHEUR * @author Grégory BLOQUEL * @version 1.0 20020/12/05 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwvirtualfilesystemstats.c * @author Author */ #ifndef GW_DATA_VIRTUAL_FILE_SYSTEM_STATS_H #define GW_DATA_VIRTUAL_FILE_SYSTEM_STATS_H #include /*! * @struct vfs_stats * @abstract Virtual File System Statistics information data structure * @discussion Virtual File System Statstics information is an opaque data structure containing information about a virtual file system properties and informations. */ struct vfs_stats; /*! * @function vfs_stats_new * @abstract Creates a new virtual file system stats. * @discussion This function creates a new virtual file system stats. It's an allocation function. * @result a pointer to the virtual file system stats structure.
* Returns NULL when an error occured.
*/ struct vfs_stats * vfs_stats_new ( void); /*! * @function vfs_stats_display * @abstract Dipslays all informations of the virtual file system stats. * @discussion This function displays all informations of the virtual file system stats in the console. * @param p the virtual file system to load */ void vfs_stats_display ( struct vfs_stats *p); /*! * @function vfs_stats_set_name * @abstract Sets the virtual file system stats name. * @discussion This function sets the virtual file system stats name.
* @param p the virtual file system stats to set name * @param name the name * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint vfs_stats_set_name ( struct vfs_stats *p, gchar *name); /*! * @function vfs_stats_set_dir * @abstract Sets the virtual file system stats path. * @discussion This function sets the virtual file system stats path.
* @param p the virtual file system stats to set path * @param dir the fiel system path * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint vfs_stats_set_dir ( struct vfs_stats *p, gchar *dir); /*! * @function vfs_stats_set_label * @abstract Sets the virtual file system stats label. * @discussion This function sets the virtual file system stats label.
* @param p the virtual file system stats to set label * @param label the file system label * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint vfs_stats_set_label ( struct vfs_stats *p, gchar *label); /*! * @function vfs_stats_set_type * @abstract Sets the virtual file system stats type. * @discussion This function sets the virtual file system stats type.
* Type can be vfat, ext2, iso9660,... * @param p the virtual file system stats to set type * @param type the file system type * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint vfs_stats_set_type ( struct vfs_stats *p, gchar *type); /*! * @function vfs_stats_set_options * @abstract Sets the virtual file system stats options. * @discussion This function sets the virtual file system stats options.
* @param p the virtual file system stats to set options * @param options the file system options * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint vfs_stats_set_options ( struct vfs_stats *p, gchar **options); /*! * @function vfs_stats_set_ismounted * @abstract Sets if the virtual file system stats is mounted. * @discussion This function sets if the virtual file system stats is mounted.
* @param p the virtual file system stats to set mount status * @param mounted the mount status * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint vfs_stats_set_ismounted ( struct vfs_stats *p, gboolean mounted); /*! * @function vfs_stats_set_nb_files * @abstract Sets the total number of files of the virtual file system stats. * @discussion This function sets the total number of files of the virtual file system stats.
* @param p the virtual file system stats to set number of files * @param nb_file the number of files * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint vfs_stats_set_nb_files ( struct vfs_stats *p, gulong nb_files); /*! * @function vfs_stats_set_blocks_size * @abstract Sets blocks size of the virtual file system stats. * @discussion This function sets blocks size of the virtual file system stats.
* @param p the virtual file system stats to set blocks size * @param blocks_size the blocks size * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint vfs_stats_set_blocks_size ( struct vfs_stats *p, glong blocks_size); /*! * @function vfs_stats_set_blocks * @abstract Sets total number blocks of the virtual file system stats. * @discussion This function sets total number blocks of the virtual file system stats.
* @param p the virtual file system stats to set total number blocks * @param blocks the total number blocks * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint vfs_stats_set_blocks ( struct vfs_stats *p, gulong blocks); /*! * @function vfs_stats_set_blocks_free * @abstract Sets free blocks number of the virtual file system stats. * @discussion This function sets free blocks number size of the virtual file system stats.
* @param p the virtual file system stats to set free blocks number * @param blocks_free the free blocks number * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint vfs_stats_set_blocks_free ( struct vfs_stats *p, gulong blocks_free); /*! * @function vfs_stats_set_serial_number * @abstract Sets the virtual file system stats serial number. * @discussion This function sets the virtual file system stats serial number.
* @param p the virtual file system stats to set serial number * @param serial_number the file system serial number * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint vfs_stats_set_serial_number ( struct vfs_stats *p, gchar *serial_number); /*! * @function vfs_stats_get_name * @abstract Gets the virtual file system stats name. * @discussion This function gets the virtual file system stats name.
* @param p the virtual file system stats to get name * @result The name.
* Returns NULL when an error occured.
*/ gchar * vfs_stats_get_name ( struct vfs_stats *p); /*! * @function vfs_stats_get_dir * @abstract Gets the virtual file system stats path. * @discussion This function gets the virtual file system stats path.
* @param p the virtual file system stats to get path * @result The path.
* Returns NULL when an error occured.
*/ gchar * vfs_stats_get_dir ( struct vfs_stats *p); /*! * @function vfs_stats_get_label * @abstract Gets the virtual file system stats label. * @discussion This function gets the virtual file system stats label.
* @param p the virtual file system stats to get label * @result The label.
* Returns NULL when an error occured.
*/ gchar * vfs_stats_get_label ( struct vfs_stats *p); /*! * @function vfs_stats_get_type * @abstract Gets the virtual file system stats type. * @discussion This function gets the virtual file system stats type.
* @param p the virtual file system stats to get type * @result The file system type.
* Returns NULL when file system type is unknown or * when an error occured.
*/ gchar * vfs_stats_get_type ( struct vfs_stats *p); /*! * @function vfs_stats_get_serial_number * @abstract Gets the virtual file system stats serial number. * @discussion This function gets the virtual file system stats serial number.
* @param p the virtual file system stats to get serial number * @result The device serial number.
* Returns NULL when an error occured.
*/ gchar * vfs_stats_get_serial_number ( struct vfs_stats *p); /*! * @function vfs_stats_get_options * @abstract Gets the virtual file system stats options. * @discussion This function gets the virtual file system stats options.
* @param p the virtual file system stats to get options * @result The mount options * Returns NULL when an error occured.
*/ gchar ** vfs_stats_get_options ( struct vfs_stats *p); /*! * @function vfs_stats_get_ismounted * @abstract Gets if is mounted. * @discussion This function gets if the virtual file system stats is mounted.
* @param p the virtual file system stats to get if is mounted * @result TRUE if is mounted or FALSE if is not mounted.
* Returns FALSE when an error occured.
*/ gboolean vfs_stats_get_ismounted ( struct vfs_stats *p); /*! * @function vfs_stats_get_nb_files * @abstract Gets the total number of files of the virtual file system stats. * @discussion This function gets the total number of files of the virtual file system stats.
* @param p the virtual file system stats to get number of files * @result The number of files * Returns 0 when an error occured.
*/ gulong vfs_stats_get_nb_files ( struct vfs_stats *p); /*! * @function vfs_stats_get_blocks_size * @abstract Gets blocks size of the virtual file system stats. * @discussion This function gets blocks size of the virtual file system stats.
* @param p the virtual file system stats to get blocks size * @result The blocks size * Returns 0 when an error occured.
*/ glong vfs_stats_get_blocks_size ( struct vfs_stats *p); /*! * @function vfs_stats_get_blocks * @abstract Gets total number blocks of the virtual file system stats. * @discussion This function gets total number blocks of the virtual file system stats.
* @param p the virtual file system stats to get total number blocks * @result Total number blocks * Returns 0 when an error occured.
*/ gulong vfs_stats_get_blocks ( struct vfs_stats *p); /*! * @function vfs_stats_get_blocks_free * @abstract Gets free blocks number of the virtual file system stats. * @discussion This function gets free blocks number of the virtual file system stats.
* @param p the virtual file system stats to get free blocks number * @result Free number blocks * Returns 0 when an error occured.
*/ gulong vfs_stats_get_blocks_free ( struct vfs_stats *p); /*! * @function vfs_stats_get_total_capacity * @abstract Gets total capacity of the virtual file system stats. * @discussion This function gets the total capacity of the virtual file system stats.
* @param p the virtual file system stats to get total capacity * @result Total capacity * Returns -1 when an error occured.
*/ guint64 vfs_stats_get_total_capacity ( struct vfs_stats *p); /*! * @function vfs_stats_get_total_free_space * @abstract Gets free space of the virtual file system stats. * @discussion This function gets the free space of the virtual file system stats.
* @param p the virtual file system stats to get free space * @result Free space * Returns -1 when an error occured.
*/ guint64 vfs_stats_get_total_free_space ( struct vfs_stats *p); /*! * @function vfs_stats_get_total_used_space * @abstract Gets total used space of the virtual file system stats. * @discussion This function gets the total used space of the virtual file system stats.
* @param p the virtual file system stats to get total used space * @result Total used space * Returns -1 when an error occured.
*/ guint64 vfs_stats_get_total_used_space ( struct vfs_stats *p); /*! * @function vfs_stats_free * @abstract Frees datas structure. * @discussion This function frees the virtual file system stats datas structure.
* @param p the virtual file system stats to free * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gboolean vfs_stats_free ( struct vfs_stats *p); #endif gwhere-0.2.3/src/data/Makefile.am0000744000175000017500000000111510211714052015163 0ustar bartbart## Process this file with automake to produce Makefile.in INCLUDES = \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/src \ @GTK_CFLAGS@ \ -D${HOST_OS} noinst_LIBRARIES = libgwdata.a libgwdata_a_SOURCES = \ gwdata.h \ gwsearchiteminfo.c gwsearchinfo.h \ gwscandiskinfo.c gwscandiskinfo.h \ gwenginequicksearch.c gwenginequicksearch.h \ gwuserquicksearch.c gwuserquicksearch.h \ gwsettings.c gwsettings.h \ gwstringbuffer.c gwstringbuffer.h \ gwvirtualfilesystemstats.c gwvirtualfilesystemstats.h EXTRA_DIST = $(SOURCES) libgwdata_a_LIBADD = \ @top_srcdir@/src/tools/libgwtools.a gwhere-0.2.3/src/data/Makefile.in0000744000175000017500000002447110506327625015223 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir)/src @GTK_CFLAGS@ -D${HOST_OS} noinst_LIBRARIES = libgwdata.a libgwdata_a_SOURCES = gwdata.h gwsearchiteminfo.c gwsearchinfo.h gwscandiskinfo.c gwscandiskinfo.h gwenginequicksearch.c gwenginequicksearch.h gwuserquicksearch.c gwuserquicksearch.h gwsettings.c gwsettings.h gwstringbuffer.c gwstringbuffer.h gwvirtualfilesystemstats.c gwvirtualfilesystemstats.h EXTRA_DIST = $(SOURCES) libgwdata_a_LIBADD = @top_srcdir@/src/tools/libgwtools.a mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libgwdata_a_DEPENDENCIES = @top_srcdir@/src/tools/libgwtools.a libgwdata_a_OBJECTS = gwsearchiteminfo.$(OBJEXT) \ gwscandiskinfo.$(OBJEXT) gwenginequicksearch.$(OBJEXT) \ gwuserquicksearch.$(OBJEXT) gwsettings.$(OBJEXT) \ gwstringbuffer.$(OBJEXT) gwvirtualfilesystemstats.$(OBJEXT) CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best DEP_FILES = .deps/gwenginequicksearch.P .deps/gwscandiskinfo.P \ .deps/gwsearchiteminfo.P .deps/gwsettings.P .deps/gwstringbuffer.P \ .deps/gwuserquicksearch.P .deps/gwvirtualfilesystemstats.P SOURCES = $(libgwdata_a_SOURCES) OBJECTS = $(libgwdata_a_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu src/data/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-noinstLIBRARIES: clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) distclean-noinstLIBRARIES: maintainer-clean-noinstLIBRARIES: # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libgwdata.a: $(libgwdata_a_OBJECTS) $(libgwdata_a_DEPENDENCIES) -rm -f libgwdata.a $(AR) cru libgwdata.a $(libgwdata_a_OBJECTS) $(libgwdata_a_LIBADD) $(RANLIB) libgwdata.a tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = src/data distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/data/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile $(LIBRARIES) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-noinstLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/src/data/Makefile.win0000744000175000017500000000135110233762276015404 0ustar bartbart# Project: libgwdata # Makefile created for GWhere CC = gcc.exe WINDRES = windres.exe RES = OBJ = gwenginequicksearch.o gwsearchiteminfo.o gwscandiskinfo.o gwsettings.o gwuserquicksearch.o gwvirtualfilesystemstats.o gwstringbuffer.o $(RES) INCS = $(GWINCS) $(GTKINCS) -IC:/MINGW/include -IC:/MINGW/mingw_extra/include -IC:/GTK/include GTKINCS = -IC:/GTK/include/gtk-2.0 -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/atk-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include GWINCS = -I.. BIN = libgwdata.a CFLAGS = $(INCS) -O2 -Wall -fnative-struct -DHAVE_CONFIG_H -DOS_WIN32 -DGTK_ENABLE_BROKEN .PHONY: clean all: $(BIN) clean: rm -f $(OBJ) $(BIN) $(BIN): $(OBJ) ar r $(BIN) $(OBJ) ranlib $(BIN) gwhere-0.2.3/src/data/gwsearchiteminfo.c0000744000175000017500000001737710241221313016646 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwsearchiteminfo.h" #include #include /* strlen strncmp */ #include #include "tools/gwtools.h" typedef struct search_item_info { gint type; /* Item type */ gchar *name; /* Item name */ gchar *disk; /* Item disk */ gchar *path; /* Item path */ guint64 size; /* Item size */ gulong date; /* Item creation date */ GWDBCategory *category; /* Item category */ gchar *description; /* Item description (or comment) */ } SearchItemInfo; SearchItemInfo * search_item_info_new ( void) { SearchItemInfo *p = NULL; #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif if ( (p = (SearchItemInfo*)g_malloc0 ( sizeof ( SearchItemInfo))) != NULL ) { p->type = SEARCH_ITEM_TYPE_NONE; p->name = NULL; p->disk = NULL; p->path = NULL; p->size = 0; p->date = 0; p->category = NULL; p->description = NULL; } return p; } gint search_item_info_set_type ( SearchItemInfo *p, gint type) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->type = type; return 0; } return -1; } gint search_item_info_set_name ( SearchItemInfo *p, gchar *name) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->name != NULL ) { g_free ( p->name); } p->name = name; return 0; } return -1; } gint search_item_info_set_disk ( SearchItemInfo *p, gchar *disk) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->disk != NULL ) { g_free ( p->disk); } p->disk = disk; return 0; } return -1; } gint search_item_info_set_path ( SearchItemInfo *p, gchar *path) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->path != NULL ) { g_free ( p->path); } p->path = path; return 0; } return -1; } gint search_item_info_set_size ( SearchItemInfo *p, guint64 size) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->size = size; return 0; } return -1; } gint search_item_info_set_date ( SearchItemInfo *p, gulong date) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { p->date = date; return 0; } return -1; } gint search_item_info_set_category ( struct search_item_info *p, GWDBCategory *category) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->category != NULL ) { /* Must decrese category count */ } p->category = category; return 0; } return -1; } gint search_item_info_set_description ( SearchItemInfo *p, gchar *description) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->description != NULL ) { g_free ( p->description); } p->description = description; return 0; } return -1; } gint search_item_info_get_type ( SearchItemInfo *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return p->type; } return SEARCH_ITEM_TYPE_NONE; } gchar * search_item_info_get_name ( SearchItemInfo *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->name != NULL ) { return p->name; } else { return ""; } } return NULL; } gchar * search_item_info_get_disk ( SearchItemInfo *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->disk != NULL ) { return p->disk; } else { return ""; } } return NULL; } gchar * search_item_info_get_path ( SearchItemInfo *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->path != NULL ) { return p->path; } else { return ""; } } return NULL; } guint64 search_item_info_get_size ( SearchItemInfo *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return p->size; } return -1; } gulong search_item_info_get_date ( SearchItemInfo *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { return p->date; } return 0; } GWDBCategory * search_item_info_get_category ( SearchItemInfo *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->category != NULL ) { return p->category; } } return NULL; } gchar * search_item_info_get_category_name ( struct search_item_info *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( search_item_info_get_category ( p) == NULL ) { return ""; } //FIXME very bad way!! return gw_db_category_get_name ( search_item_info_get_category ( p)); } return NULL; } gint search_item_info_get_category_index ( struct search_item_info *p) { gint index = 0; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( search_item_info_get_category ( p) != NULL ) { if ( (index = gw_db_category_get_index ( search_item_info_get_category ( p))) != -1 ) { return index; } } } return -1; } gchar * search_item_info_get_description ( SearchItemInfo *p) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->description != NULL ) { return p->description; } else { return ""; } } return NULL; } gint search_item_info_free ( SearchItemInfo *p) { #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif if ( p != NULL ) { /* Do not free any string to not destroy database. */ search_item_info_set_name ( p, NULL); search_item_info_set_disk ( p, NULL); search_item_info_set_path ( p, NULL); search_item_info_set_description ( p, NULL); if ( p->category != NULL) { gw_db_category_free ( p->category); } g_free ( p); return 0; } return -1; } gwhere-0.2.3/src/data/gwsearchiteminfo.h0000744000175000017500000002414410241213570016647 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsearchiteminfo.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.
* It's an object for search item representation. His structure gets many informations as name, size, owner, ...

* Category field is collaborative. All other fields are agregated. * @abstract This is the item resultn data structure. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see glib.h * @see gwsupport.h * @see gwcategory.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwsearchiteminfo.c * @author Author */ #ifndef GW_DATA_SEARCH_ITEM_INFO_H #define GW_DATA_SEARCH_INFO_H #define SEARCH_ITEM_TYPE_NONE 0 #define SEARCH_ITEM_TYPE_CATALOG 1 #define SEARCH_ITEM_TYPE_DISK 2 #define SEARCH_ITEM_TYPE_FOLDER 3 #define SEARCH_ITEM_TYPE_FILE 4 #include #include "db/gwdb.h" /*! * @struct search_item_info * @abstract Search item information data structure * @discussion Search item information is an opaque data structure containing information about search item properties and informations. */ struct search_item_info; /*! * @function search_item_info_new * @abstract Creates a new search item information. * @discussion This function creates a new search item information. It's an allocation function. * @result a pointer to the search item information structure.
* Returns NULL when an error occured.
*/ struct search_item_info * search_item_info_new ( void); /*! * @function search_item_info_set_type * @abstract Sets the search item type. * @discussion This function sets the type of the search item * @param p the search item information to set the name * @param type the type * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint search_item_info_set_type ( struct search_item_info *p, gint type); /*! * @function search_item_info_set_name * @abstract Sets the search item name. * @discussion This function sets the name of the search item * @param p the search item information to set the name * @param name the name * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint search_item_info_set_name ( struct search_item_info *p, gchar *name); /*! * @function search_item_info_set_disk * @abstract Sets the search item disk. * @discussion This function sets the disk of the search item * @param p the search item information to set the disk * @param disk the disk * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint search_item_info_set_disk ( struct search_item_info *p, gchar *disk); /*! * @function search_item_info_set_path * @abstract Sets the search item path. * @discussion This function sets the path of the search item * @param p the search item information to set the path * @param path the path * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint search_item_info_set_path ( struct search_item_info *p, gchar *path); /*! * @function search_item_info_set_size * @abstract Sets the search item size. * @discussion This function sets the search item information size.
* @param p the search item information to set size * @param size the size * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint search_item_info_set_size ( struct search_item_info *p, guint64 size); /*! * @function search_item_info_set_date * @abstract Sets the search item date. * @discussion This function sets the search item information date.
* @param p the search item information to set date * @param cdate the creation date * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint search_item_info_set_date ( struct search_item_info *p, gulong date); /*! * @function search_item_info_set_category * @abstract Sets the search item category. * @discussion This function sets the search item information category. The category is struct category
* @param p the information to set category * @param category the category * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint search_item_info_set_category ( struct search_item_info *p, GWDBCategory *category); /*! * @function search_item_info_set_description * @abstract Sets the search item description. * @discussion This function sets the search item information description.
* @param p the search item information to set description * @param description the description * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint search_item_info_set_description ( struct search_item_info *p, gchar *description); /*! * @function search_item_info_get_type * @abstract Gets the search item type. * @discussion This function gets the search item information type.
* @param p the search item information to get type * @result The name.
* Returns NULL when an error occured.
*/ gint search_item_info_get_type ( struct search_item_info *p); /*! * @function search_item_info_get_name * @abstract Gets the search item name. * @discussion This function gets the search item information name.
* @param p the search item information to get name * @result The name.
* Returns NULL when an error occured.
*/ gchar * search_item_info_get_name ( struct search_item_info *p); /*! * @function search_item_info_get_disk * @abstract Gets the search item disk. * @discussion This function gets the search item information disk.
* @param p the search item information to get disk * @result The disk.
* Returns NULL when an error occured.
*/ gchar * search_item_info_get_disk ( struct search_item_info *p); /*! * @function search_item_info_get_path * @abstract Gets the search item path. * @discussion This function gets the search item information path.
* @param p the search item information to get path * @result The path.
* Returns NULL when an error occured.
*/ gchar * search_item_info_get_path ( struct search_item_info *p); /*! * @function search_item_info_get_size * @abstract Gets the search item size. * @discussion This functions gets the search item information size.
* @param p the search item information to get size * @result The size.
* Returns -1 when an error occured.
*/ guint64 search_item_info_get_size ( struct search_item_info *p); /*! * @function search_item_info_get_date * @abstract Gets the search item date. * @discussion This function gets the search item information date.
* @param p the search item information to get date * @result The date.
* Returns 0 when an error occured.
*/ gulong search_item_info_get_date ( struct search_item_info *p); /*! * @function search_item_info_get_category * @abstract Gets the search item category. * @discussion This function gets the search item information category. The category is the category datas structure.
* @param p the search item information to get category * @result The category.
* Returns NULL when an error occured.
*/ GWDBCategory * search_item_info_get_category ( struct search_item_info *p); /*! * @function search_item_info_get_category_name * @abstract Gets the search item category name. * @discussion This function gets the search item category name.
* @param p the search item information to get category name * @result The category name.
* Returns "" when there are not category.
* Returns NULL when an error occured.
*/ gchar * search_item_info_get_category_name ( struct search_item_info *p); /*! * @function search_item_info_get_category_index * @abstract Gets the search item category index. * @discussion This function gets the search item information category index.
* @param p the search item information to get category index * @result The category index.
* Returns -1 when an error occured.
*/ gint search_item_info_get_category_index ( struct search_item_info *p); /*! * @function search_item_info_get_description * @abstract Gets the search item description. * @discussion This function gets the search item information description.
* @param p the search item information to get description * @result The description.
* Returns NULL when an error occured.
*/ gchar * search_item_info_get_description ( struct search_item_info *p); /*! * @function search_item_info_free * @abstract Frees datas structure. * @discussion This function frees the search item information datas structure.
* Doesn't free Category because it's collaborative.
* @param p the search item information to free * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint search_item_info_free ( struct search_item_info *p); #endif gwhere-0.2.3/src/data/gwstringbuffer.c0000744000175000017500000002540410023202520016331 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include /* strcmp */ #define GW_STRING_BUFFER_CAN_CONTAINS(p,l) (p->size > l) typedef struct string_buffer_s { gulong size; /* This is the allocated size of the string buffer. */ gulong length; /* This is the current string buffer length. */ gchar *buff; /* The pointer to the string contained by the string buffer. */ } GWStringBuffer; GWStringBuffer * gw_string_buffer_new ( void) { GWStringBuffer *p = NULL; #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif /* Allocates a new GWStringBuffer. The initial capacity is 0 and the initial string is NULL. */ if ( (p = (GWStringBuffer*)g_malloc0 ( sizeof ( GWStringBuffer))) != NULL ) { p->size = 0; p->length = 0; p->buff = NULL; } return p; } gulong gw_string_buffer_resize ( GWStringBuffer *p, gulong newsize) { gchar *ptr = NULL; gulong result = 0; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { /* This function can only increase the string capacity, not decrease. */ if ( newsize >= p->size ) { if ( p->buff != NULL ) { /* Realloc the string buffer memory. And sets to '\0' all the new allocated memory. */ ptr = (gchar*)g_realloc ( p->buff, sizeof ( gchar)*(newsize+1)); if ( ptr != NULL ) { p->buff = ptr; memset(&p->buff[p->size+1],'\0',newsize-p->size); result = newsize + 1; } else { result = 0; } } else { if ( (p->buff = (gchar*)g_malloc0 ( sizeof ( gchar)*(newsize+1))) != NULL ) { result = newsize + 1; } else { result = 0; } } p->size = result; } } return result; } gulong gw_string_buffer_delete ( GWStringBuffer *p, gulong start, gulong end) { gchar *first = NULL; gulong first_index = 0; gchar *last = NULL; gulong last_index = 0; gulong result = 0; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { /* If start is greater than end, negative, greater than length or if the size is 0 no changes are made. */ if ( (start < end) && (start >= 0) && (start<=p->length) && (p->size > 0) ) { /* The first character to delete is at the start position the last character to delete is at the end - 1 position if end is smaller than length or at the length position. */ first_index = start; first = p->buff + first_index; last_index = (endlength?end-1:p->length); last = p->buff + last_index; result = last_index - first_index; memmove ( first, last+1, p->length - last_index); memset ( &p->buff[p->length-result], '\0', result-1); p->length = p->length - result; } else { result = 0; } } #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : size=%lu len=%lu str=%s deleted=%lu\n", __FILE__, __LINE__, __PRETTY_FUNCTION__,p->size,p->length,p->buff,result); #endif return result; } gulong gw_string_buffer_delete_all ( GWStringBuffer *p) { gulong result = 0; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { result = gw_string_buffer_delete ( p, 0, p->length); } return result; } void gw_string_buffer_set_str ( GWStringBuffer *p, gchar *str, gulong len) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { /* If the string buffer cannot contains the specified string, his size must be increase. */ if (!GW_STRING_BUFFER_CAN_CONTAINS(p,len)) { gw_string_buffer_resize ( p, len); } if ( str != NULL ) { /* If the specified string his different from NULL, copies it in the string buffer. */ memcpy ( p->buff, str, len); p->buff[len] = '\0'; p->length = len; } else { /* Otherwize set the empty string in the string buffer. */ memset ( p->buff, '\0', p->length); p->length = 0; } } return; } void gw_string_buffer_append_str ( GWStringBuffer *p, gchar *str, gulong len) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Doesn't add any character if the str parameter is NULL. */ if ( (p != NULL) && (str != NULL)) { /* Checks if the current string buffer can contain the given string to append. */ if (!GW_STRING_BUFFER_CAN_CONTAINS(p,p->length+len)) { /* Resizes the string buffer if the sum of the current string buffer length and the number of caracters to add to this one is bigger than the string buffer capacity. */ gw_string_buffer_resize ( p, p->length + len); } #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s(): size=%lu len=%lu\n", __FILE__, __LINE__, __PRETTY_FUNCTION__,p->size,p->length); #endif /* Checks if the current string buffer really can contain the given string to append. */ if (GW_STRING_BUFFER_CAN_CONTAINS(p,p->length+len)) { /* The appending is a copy of the given string to the end of the string buffer. This copy copies only the number of characters given by the len parameter. After increases the string buffer length and doesn't forget to add the ending '\0' character. */ memcpy ( &(p->buff[p->length]), str, len); p->length+=len; p->buff[p->length] = '\0'; } #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s(): size=%lu len=%lu\n", __FILE__, __LINE__, __PRETTY_FUNCTION__,p->size,p->length); #endif } return; } void gw_string_buffer_insert_str ( GWStringBuffer *p, gchar *str, gulong start, gulong len) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Doesn't add any character if the str parameter is NULL. */ if ( (p != NULL) && (str != NULL) ) { /* Checks if the index position where the string must be inserted is valid. */ if ( (start >= 0) && (start <= p->length) ) { /* Checks if the current string buffer can contain the given string to append. */ if (!GW_STRING_BUFFER_CAN_CONTAINS(p,p->length+len)) { /* Resizes the string buffer if the sum of the current string buffer length and the number of caracters to add to this one is bigger than the string buffer capacity. */ gw_string_buffer_resize ( p, p->length + len); } #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s(): size=%lu len=%lu\n", __FILE__, __LINE__, __PRETTY_FUNCTION__,p->size,p->length); #endif /* Checks if the current string buffer really can contain the given string to insert. */ if (GW_STRING_BUFFER_CAN_CONTAINS(p,p->length+len)) { /* The insert is a copy of the given string to the specified offset of the string buffer. This copy copies only the number of characters given by the len parameter. After increases the string buffer length and doesn't forget to add the ending '\0' character. */ memmove ( &(p->buff[start+len]), &(p->buff[start]), (p->length - start)); memcpy ( &(p->buff[start]), str, len); p->length+=len; p->buff[p->length] = '\0'; } #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s(): size=%lu len=%lu\n", __FILE__, __LINE__, __PRETTY_FUNCTION__,p->size,p->length); #endif } } return; } void gw_string_buffer_replace_str ( GWStringBuffer *p, gchar *str, gulong start, gulong len) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( (start >= 0) && ( start < p->length) ) { /* Checks if the current string buffer can contain the given string to use. */ if (!GW_STRING_BUFFER_CAN_CONTAINS(p,start+len)) { /* Resizes the string buffer if the sum of the current string buffer length and the number of caracters to add to this one is bigger than the string buffer capacity. */ gw_string_buffer_resize ( p, start + len); } /* Checks if the current string buffer can contain the given string to use. */ if (!GW_STRING_BUFFER_CAN_CONTAINS(p,p->length+len)) { /* The replace is a copy of the given string to the specified offset of the string buffer. This copy copies only the number of characters given by the len parameter. After increases the string buffer length and doesn't forget to add the ending '\0' character. */ memcpy ( &p->buff[start], str, len); if ( p->length < (start + len) ) { p->length = start + len; p->buff[p->length] = '\0'; } } } } return; } void gw_string_buffer_replace_chr ( GWStringBuffer *p, gchar chr, gulong index) { #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( (index >= 0) && (index < p->length) ) { p->buff[index] = chr; } } return; } gchar * gw_string_buffer_get_str ( GWStringBuffer *p) { gchar * str = NULL; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->length >= 0 ) { str = p->buff; } } #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : str=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__,str); #endif return str; } gulong gw_string_buffer_get_size ( GWStringBuffer *p) { gulong size = 0; #ifdef GW_DEBUG_DATA_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { size = p->size; } return size; } void gw_string_buffer_free ( GWStringBuffer *p) { #ifdef GW_DEBUG_DATA_COMPONENT static gint i = 0; i++; g_print ( "*** GW - %s (%d) :: %s() : %d calls\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); #endif if ( p != NULL ) { if ( p->buff != NULL ) { g_free ( p->buff); } g_free ( p); } return; } #undef GW_DEBUG_DATA_COMPONENT gwhere-0.2.3/src/data/gwstringbuffer.h0000744000175000017500000002355210023202520016340 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwstringbuffer.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.
* It's an object for string buffer representation.
* A string buffer is an indexed array of characters where the first character is at * the position 0 and the last character at the position length - 1. * @abstract This is the catalog file data structure. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwstringbuffer.c * @author Author */ #ifndef GW_DATA_STRING_BUFFER_H #define GW_DATA_STRING_BUFFER_H /*! * @typedef GWStringBuffer * This structure represents a string buffer. It is used to manipulate * lot of strings without reallocating at each time memory. * @abstract The string buffer representation. * @struct string_buffer_s */ typedef struct string_buffer_s GWStringBuffer; /*! * @function gw_string_buffer_new * @abstract Creates a new string buffer * @discussion This function constructs a string buffer with no characters in it * and an initial capacity of 0 characters. * @result A pointer to the string buffer structure. * Returns NULL when an error occured. */ GWStringBuffer * gw_string_buffer_new ( void); /*! * @function gw_string_buffer_new_from_str * @abstract Creates a new string buffer from a string * @discussion This function constructs a string buffer from the specified string. * So that it represents the same sequence of characters as the string * argument; in other words, the initial contents of the string buffer * is a copy of the argument string. The initial capacity of the string * buffer is 0 plus the length of the string argument. * @param str the initial contents of the string buffer * @result A pointer to the string buffer structure. * Returns NULL when an error occured. */ GWStringBuffer * gw_string_buffer_new_from_str ( const gchar *str); /*! * @function gw_string_buffer_resize * @abstract Resizes the new string buffer capacity * @discussion This function resizes the string buffer capacity. It only can increase * the string buffer capacity and not decrease it. So the the new size must * bigger than the actual string buffer capacity. * @result The new string buffer capacity.
* Returns 0 when the new size is smaller than the string capacity * or when an error occured. */ gulong gw_string_buffer_resize ( GWStringBuffer *p, gulong newsize); /*! * @function gw_string_buffer_delete * @abstract Deletes the characters in a substring of the string buffer * @discussion This function removes the characters in a substring of this string * buffer. The substring begins at the specified start and extends to the * character at index end - 1 or to the end of the string buffer if no * such character exists. If start is equal to end, no changes are made. * @param p the string buffer to removes somes characters * @param start the strat of the substring to remove (inclusive) * @param end the end of the substring to remove (exclusive) * @result The number of deleted characters.
* Returns 0 if the start is negative, greater than the string * buffer length or greater than end; or when an error occured. */ gulong gw_string_buffer_delete ( GWStringBuffer *p, gulong start, gulong end); /*! * @function gw_string_buffer_delete_all * @abstract Deletes all the characters of the string buffer * @discussion This function removes all the characters of this string buffer. * @param p the string buffer to removes somes characters * @result The number of deleted characters.
* Returns 0 when an error occured. */ gulong gw_string_buffer_delete_all ( GWStringBuffer *p); /*! * @function gw_string_buffer_set_str * @abstract Sets the given string to the string buffer * @discussion This function set the given string the the string buffer * @param p the string buffer to sets the given string * @param str the string to set * @param len the length of the given string */ void gw_string_buffer_set_str ( GWStringBuffer *p, gchar *str, gulong len); /*! * @function gw_string_buffer_append_str * @abstract Appends the given string to this string buffer. * @discussion This function appends the given string to this string buffer. * The characters of the string argument are appended, in order, * to the contents of this string buffer, increasing the length * of this string buffer by the length of the third argument. If * str is NULL, no string is appended to the string buffer. * @param p the string buffer to append the given string * @param str the string to append * @param len the length of the given string, this is the number * of characters to append */ void gw_string_buffer_append_str ( GWStringBuffer *p, gchar *str, gulong len); /*! * @function gw_string_buffer_insert_str * @abstract Inserts the given string into this string buffer at the specified * index position. * @discussion This function inserts the given string into this string buffer * at the specified index position.
* The characters of the string argument are inserted, in order, * into the string buffer at the indicated offset, moving up any * characters originally above that position and increasing the * length of this string buffer by the length of the fourth argument. * If str is NULL, no string is inserted to the string buffer. * @param p the string buffer to insert the given string * @param str the string to insert * @param start the index where the string will be inserted. This argument * must be greater than or equal to 0, and less than or equal * to the length of this string buffer * @param len the length of the given string, this is the number * of characters to insert */ void gw_string_buffer_insert_str ( GWStringBuffer *p, gchar *str, gulong start, gulong len); /*! * @function gw_string_buffer_replace_str * @astract Replaces by the given string the substring of the string buffer. * @discussion This function replaces by the given string the substring of the * string buffer at the given position with the given length.
* The characters of the string argument are used, in order, into * the string buffer at the indicated offset, replacing any characters * originall at this position.
* If the string buffer capacity is less than the sum of the start * argument and the len argument, the string buffer size is increased. * @param p the string buffer where a substring must to be replaced. * @param str the string which must replace the substring. * @param start the index in the string buffer where the substring starts. * This argument must be greater than or equal to 0, * and less than or equal to the length of this string buffer. * @param len the length of the given string, this is the number of * characters to replace. */ void gw_string_buffer_replace_str ( GWStringBuffer *p, gchar *str, gulong start, gulong end); /*! * @function gw_string_buffer_replace_chr * @astract Replaces a specified character in the string buffer by the given character. * @discussion This function replaces a specified character in the string buffer by the * given character at the given position.
* @param p the string buffer where a character must to be replaced. * @param chr the character which must replace the specified character. * @param index the index in the string buffer where the specified character to * replace is located. This argument must be greater than or equal * to 0, and less than or equal to the length of this string * buffer. */ void gw_string_buffer_replace_chr ( GWStringBuffer *p, gchar chr, gulong index); /*! * @function gw_string_buffer_get_str * @abstract Returns the internal string. * @discussion This function returns the internal string. This one is the string representation * of the given string buffer. * @param p the string buffer to get the string form. * @return the string form of the string buffer otherwize returns NULL if an error * was occured or if the string buffer is empty. */ gchar * gw_string_buffer_get_str ( GWStringBuffer *p); /*! * @function gw_string_buffer_get_size * @abstract Returns the string buffer size. * @discussion this function returns the string buffer size. This * size correspond with the string buffer capacity. * @param p the string buffer to get the size. * @return the string buffer capacity or 0 an error * was occured. */ gulong gw_string_buffer_get_size ( GWStringBuffer *p); /*! * @function gw_string_buffer_free * @abstract Frees the given string buffer. * @discussion This function frees the given string buffer. If this string buffer contains * an internal buffer, this buffer will be freed too. * @param p the string buffer to free. */ void gw_string_buffer_free ( GWStringBuffer *p); #endif gwhere-0.2.3/src/gui/0000755000175000017500000000000010506575522013021 5ustar bartbartgwhere-0.2.3/src/gui/gwcapturebox.c0000744000175000017500000001653510074337752015713 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwcapturebox.h" /*! @define GW_REF_GW_CAPTURE_BOX_PARENT_WINDOW The parent window */ #define GW_REF_GW_CAPTURE_BOX_PARENT_WINDOW "gw_ref_gw_capture_box_parent_window" /*! @define GW_REF_GW_CAPTURE_BOX_DATA_CAPTURE The text field */ #define GW_REF_GW_CAPTURE_BOX_DATA_CAPTURE "gw_ref_gw_capture_box_data_capture" /*! @define DATA_GW_CAPTURE_MAX_SIZE The max size of text field */ #define DATA_GW_CAPTURE_MAX_SIZE 255 /*! @define GW_REF_GW_CAPTURE_BOX_ACCEL_GROUP The accel group of the capture box */ #define GW_REF_GW_CAPTURE_BOX_ACCEL_GROUP "gw_ref_gw_capture_box_accel_group" GtkWidget * gw_capture_box_create ( GtkWindow *window, gchar *title, gchar *subject, gchar *text, GtkSignalFunc ok) { /* This window must be single, this property may be changed */ static GtkWidget *w = NULL; GtkWidget *frame = NULL; GtkWidget *vbox = NULL; GtkWidget *hbox = NULL; GtkWidget *entry_data_capture = NULL; GtkWidget *button = NULL; guint button_key; GtkAccelGroup *accel = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( !w ) { /* Init an accel group for shortcuts */ accel = gtk_accel_group_new ( ); w = gtk_window_new ( GTK_WINDOW_TOPLEVEL); gtk_window_set_policy ( GTK_WINDOW ( w), FALSE, FALSE, TRUE); g_strdup_to_gtk_text ( title, text_utf8); gtk_window_set_title ( GTK_WINDOW ( w), text_utf8); g_free ( text_utf8); gtk_container_border_width ( GTK_CONTAINER ( w), 10); gtk_window_set_modal ( GTK_WINDOW ( w),TRUE); gtk_window_set_transient_for ( GTK_WINDOW ( w), window); gtk_window_set_position ( GTK_WINDOW ( w), GTK_WIN_POS_CENTER); gtk_signal_connect ( GTK_OBJECT ( w), "destroy", GTK_SIGNAL_FUNC ( gw_capture_box_destroy), &w); gtk_signal_connect ( GTK_OBJECT ( w), "delete-event", GTK_SIGNAL_FUNC ( gtk_widget_destroy), NULL); /* Store parent window reference */ gtk_widget_ref ( GTK_WIDGET ( window)); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_GW_CAPTURE_BOX_PARENT_WINDOW, window, ( GtkDestroyNotify) gtk_widget_unref); frame = gtk_frame_new ( subject); gtk_container_add ( GTK_CONTAINER ( w), frame); vbox = gtk_vbox_new ( TRUE, 10); gtk_container_add ( GTK_CONTAINER ( frame), vbox); gtk_container_set_border_width ( GTK_CONTAINER ( vbox), 10); entry_data_capture = gtk_entry_new_with_max_length ( DATA_GW_CAPTURE_MAX_SIZE); gtk_signal_connect ( GTK_OBJECT ( entry_data_capture), "activate", GTK_SIGNAL_FUNC ( ok), w); /* Store data capture reference */ gtk_widget_ref ( entry_data_capture); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_GW_CAPTURE_BOX_DATA_CAPTURE, entry_data_capture, ( GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( text, text_utf8); gtk_entry_set_text ( GTK_ENTRY ( entry_data_capture), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( vbox), entry_data_capture, TRUE, TRUE, 0); GTK_WIDGET_SET_FLAGS ( entry_data_capture, GTK_CAN_FOCUS); gtk_widget_grab_focus ( entry_data_capture); gtk_entry_select_region ( GTK_ENTRY ( entry_data_capture), 0, -1); hbox = gtk_hbox_new ( TRUE, 10); gtk_container_add ( GTK_CONTAINER ( vbox), hbox); button = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_OK"), text_utf8); button_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( button)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( button, "clicked", accel, button_key, GDK_MOD1_MASK, 0); gtk_object_set_user_data ( GTK_OBJECT ( button), w); gtk_box_pack_start ( GTK_BOX ( hbox), button, TRUE, TRUE, 0); if ( ok != NULL ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : connecting the ok callback function...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_signal_connect ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( ok), w); } else { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : ok callback function is null\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_signal_connect_object ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w)); } button = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Cancel"), text_utf8); button_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( button)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( button, "clicked", accel, button_key, GDK_MOD1_MASK, 0); gtk_object_set_user_data ( GTK_OBJECT ( button), w); gtk_box_pack_start ( GTK_BOX ( hbox), button, TRUE, TRUE, 0); gtk_signal_connect_object ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w)); gtk_window_add_accel_group ( GTK_WINDOW ( w), accel); } if ( !GTK_WIDGET_VISIBLE ( w) ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : show the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_show_all ( w); } else { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : destroy the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_destroy ( w); } return w; } gchar * gw_capture_box_get_text ( GtkWindow *w) { GtkEntry *entry = NULL; gchar *text = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_GW_CAPTURE_BOX_DATA_CAPTURE))) != NULL) { g_strdup_from_gtk_text ( gtk_entry_get_text ( entry), text); #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : data capture = %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, text); #endif } } return text; } GtkWindow * gw_capture_box_get_main_window ( GtkWindow *w) { GtkWidget *parent = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { parent = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_GW_CAPTURE_BOX_PARENT_WINDOW); } if ( parent == NULL ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : parent window is null\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } return GTK_WINDOW ( parent); } gint gw_capture_box_destroy ( GtkWindow *w, GtkWidget **self_window) { gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (w != NULL) && ( self_window != NULL) ) { gtk_widget_destroyed ( GTK_WIDGET ( w), self_window); result = 0; } return result; } gwhere-0.2.3/src/gui/gwcapturebox.h0000744000175000017500000000654710023202520015674 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwcapturebox.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to text field window box. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwcapturebox.c * @author Author */ #ifndef GW_GUI_GW_CAPTURE_BOX_H #define GW_GUI_GW_CAPTURE_BOX_H /*! * @function gw_capture_box_create * @abstract Creates a capture window box. * @discussion This function creates a capture window box. If the validate callback function * is NULL, the window is destroyed when the user clicks validate the capture box. * @param w the parent window * @param title the window box title * @param subject the text which is displayed in the capture box * @param text the answer which is displayed in the field text * @param ok the function which will be call when user validate the capture box * @result the capture box window.
* Returns NULL when an error occured.
*/ GtkWidget * gw_capture_box_create ( GtkWindow *window, gchar *title, gchar *subject, gchar *text, GtkSignalFunc ok); /*! * @function gw_capture_box_get_text * @abstract Gets the text field. * @discussion This function gets the text field value. * It's a new allocated string and must free with g_free().
* @param w the capture box window * @result the filled text value of the capture box.
* Returns NULL when an error occured.
*/ gchar * gw_capture_box_get_text ( GtkWindow *w); /*! * @function gw_capture_box_get_main_window * @abstract Gets the parent window. * @discussion This function gets the parent window of the capture box. * @param w the capture box window * @result the parent window of the capture box.
* Returns NULL when an error occured.
*/ GtkWindow * gw_capture_box_get_main_window ( GtkWindow *w); /*! * @function gw_capture_box_destroy * @abstract Notifies the callback event of destroy. * @discussion This function notifies the callback event of destroy. * @param w the capture box window * @param seft_window pointer to the capture box window reference * @result the parent window of the capture box.
* Returns NULL when an error occured.
*/ gint gw_capture_box_destroy ( GtkWindow *w, GtkWidget **self_window); #endif gwhere-0.2.3/src/gui/gwcategorieseditbox.c0000744000175000017500000007546210247706151017242 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwcategorieseditbox.h" #include /* strcmp strlen */ #include "../gwapplicationmanager.h" #include "gtktextarea.h" #include "gwmsgbox.h" #include "gwnotebookmanagmentcallback.h" /*! @define GW_REF_CATEGORIES_EDIT_BOX_MAIN_WINDOW The main window */ #define GW_REF_CATEGORIES_EDIT_BOX_MAIN_WINDOW "gw_ref_gw_categories_edit_box_main_window" /*! @define GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_NAME_ENTRY The category name */ #define GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_NAME_ENTRY "gw_ref_gw_categories_edit_box_category_name_entry" /*! @define GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_NAME_ENTRY_TOOLTIPS The category name tooltips */ #define GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_NAME_ENTRY_TOOLTIPS "gw_ref_gw_categories_edit_box_category_name_entry_tooltips" /*! @define GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_DESCRIPTION_TEXT The category description */ #define GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_DESCRIPTION_TEXT "gw_ref_gw_categories_edit_box_category_description_text" /*! @define GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_DESCRIPTION_TEXT_TOOLTIPS The category description tooltips */ #define GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_DESCRIPTION_TEXT_TOOLTIPS "gw_ref_gw_categories_edit_box_category_description_text_tooltips" /*! @define GW_REF_CATEGORIES_EDIT_BOX_UPDATE_BUTTON_TOOLTIPS The update button tooltips */ #define GW_REF_CATEGORIES_EDIT_BOX_UPDATE_BUTTON_TOOLTIPS "gw_ref_gw_categories_edit_box_update_button_tooltips" /*! @define GW_REF_CATEGORIES_EDIT_BOX_UPDATE_BUTTON The update button */ #define GW_REF_CATEGORIES_EDIT_BOX_UPDATE_BUTTON "gw_ref_gw_categories_edit_box_update_button" /*! @define GW_REF_CATEGORIES_EDIT_BOX_REMOVE_BUTTON The remove button */ #define GW_REF_CATEGORIES_EDIT_BOX_REMOVE_BUTTON "gw_ref_gw_categories_edit_box_remove_button" /*! @define GW_REF_CATEGORIES_EDIT_BOX_ADD_UPDATE_BUTTON The add/update button */ #define GW_REF_CATEGORIES_EDIT_BOX_ADD_UPDATE_BUTTON "gw_ref_gw_categories_edit_box_add_update_button" /*! @define GW_REF_CATEGORIES_EDIT_BOX_ADD_UPDATE_BUTTON_TOOLTIPS The add/update button tooltips */ #define GW_REF_CATEGORIES_EDIT_BOX_ADD_UPDATE_BUTTON_TOOLTIPS "gw_ref_gw_categories_edit_box_add_update_button_tooltips" /*! @define GW_REF_CATEGORIES_EDIT_BOX_REMOVE_BUTTON_TOOLTIPS The remove button tooltips */ #define GW_REF_CATEGORIES_EDIT_BOX_REMOVE_BUTTON_TOOLTIPS "gw_ref_gw_categories_edit_box_remove_button_tooltips" /*! @define GW_REF_CATEGORIES_EDIT_BOX_CATEGORIES_LIST The list of categories */ #define GW_REF_CATEGORIES_EDIT_BOX_CATEGORIES_LIST "gw_ref_gw_categories_edit_box_categories_list" /*! @define GW_REF_CATEGORIES_EDIT_BOX_CLOSE_BUTTON_TOOLTIPS The close button tooltipd */ #define GW_REF_CATEGORIES_EDIT_BOX_CLOSE_BUTTON_TOOLTIPS "gw_ref_gw_categories_edit_box_close_button_toltips" GtkWindow * gw_categories_edit_box_create ( GtkWindow *window, GWDBCatalog *catalog) { /* This window must be single, this property may be changed */ static GtkWidget *w = NULL; GtkWidget *vb, *hb, *scr, *list, *bt, *hsp, *ent, *lbl, *frm, *txt; guint bt_key; GtkAccelGroup *accel; GtkTooltips *tips; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Init an accel group for shortcuts */ accel = gtk_accel_group_new ( ); /* Init tooltips */ tips = gtk_tooltips_new ( ); if ( !w ) { w = gtk_window_new ( GTK_WINDOW_TOPLEVEL); gtk_window_set_modal ( GTK_WINDOW ( w), TRUE); gtk_window_set_transient_for ( GTK_WINDOW ( w), window); gtk_window_set_position ( GTK_WINDOW ( w), GTK_WIN_POS_CENTER); gtk_window_set_policy ( GTK_WINDOW ( w), FALSE, FALSE, FALSE); g_strdup_to_gtk_text ( _( "Edit categories"), text_utf8); gtk_window_set_title ( GTK_WINDOW ( w), text_utf8); g_free ( text_utf8); gtk_container_set_border_width ( GTK_CONTAINER ( w), 5); gtk_object_set_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_MAIN_WINDOW, window); gtk_signal_connect ( GTK_OBJECT ( w), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroyed), &w); /* Vertical box */ vb = gtk_vbox_new ( FALSE, 10); gtk_container_add ( GTK_CONTAINER ( w), vb); /* Frame category description */ g_strdup_to_gtk_text ( _( "Categories list : "), text_utf8); frm = gtk_frame_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( vb), frm, TRUE, TRUE, 0); /* 1st horizontal box*/ hb = gtk_hbox_new ( TRUE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb), 5); gtk_container_add ( GTK_CONTAINER ( frm), hb); /* Scrolled panel */ scr = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( hb), scr, TRUE, TRUE, 0); /* Categories list */ list = gtk_clist_new ( 2); gtk_widget_set_usize ( list, 100, 100); /*gtk_widget_ref ( list);*/ gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_CATEGORIES_LIST, list, /*(GtkDestroyNotify)gtk_widget_unref*/NULL); /*gtk_signal_connect ( GTK_OBJECT ( list), "click_column", GTK_SIGNAL_FUNC ( gw_categories_edit_box_list_click_column), w);*/ gtk_signal_connect ( GTK_OBJECT ( list), "select_row", GTK_SIGNAL_FUNC ( gw_categories_edit_box_list_select_row), w); gtk_container_add ( GTK_CONTAINER ( scr), list); gtk_clist_set_column_width ( GTK_CLIST ( list), 0, 80); gtk_clist_set_column_width ( GTK_CLIST ( list), 1, 20); gtk_clist_column_titles_show ( GTK_CLIST ( list)); /* 1st column label */ g_strdup_to_gtk_text ( _( "Name"), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_clist_set_column_widget ( GTK_CLIST ( list), 0, lbl); /* 2nd column label */ g_strdup_to_gtk_text ( _( "Description"), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_clist_set_column_widget ( GTK_CLIST ( list), 1, lbl); /* 2nd horizontal box */ hb = gtk_hbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( vb), hb, TRUE, TRUE, 0); /* Update button */ bt = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Update"), text_utf8); bt_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); g_free ( text_utf8); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_UPDATE_BUTTON, bt, /*(GtkDestroyNotify)gtk_widget_unref*/NULL); gtk_widget_add_accelerator ( bt, "clicked", accel, bt_key, GDK_MOD1_MASK, 0); gtk_signal_connect ( GTK_OBJECT ( bt), "clicked", GTK_SIGNAL_FUNC ( gw_categories_edit_box_update_click), GTK_WINDOW ( w)); gtk_object_set_user_data ( GTK_OBJECT ( bt), w); gtk_box_pack_start ( GTK_BOX ( hb), bt, FALSE, TRUE, 5); g_strdup_to_gtk_text ( _( "Allows to update category properties of the selected category. Clicks on Add / Update button to save updates."), text_utf8); gtk_tooltips_set_tip ( tips, bt, text_utf8, GW_REF_CATEGORIES_EDIT_BOX_UPDATE_BUTTON_TOOLTIPS); g_free ( text_utf8); gtk_widget_set_sensitive ( GTK_WIDGET ( bt), FALSE); /* Remove button */ bt = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Remove"), text_utf8); bt_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); g_free ( text_utf8); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_REMOVE_BUTTON, bt, /*(GtkDestroyNotify) gtk_widget_unref)*/NULL); gtk_widget_add_accelerator ( bt, "clicked", accel, bt_key, GDK_MOD1_MASK, 0); gtk_signal_connect ( GTK_OBJECT ( bt), "clicked", GTK_SIGNAL_FUNC ( gw_categories_edit_box_remove_click), GTK_WINDOW ( w)); gtk_object_set_user_data ( GTK_OBJECT ( bt), w); gtk_box_pack_start ( GTK_BOX ( hb), bt, FALSE, TRUE, 5); g_strdup_to_gtk_text ( _( "Remove the selected category from categories list. This categories may removed only if there's not any item which uses this category."), text_utf8); gtk_tooltips_set_tip ( tips, bt, text_utf8, GW_REF_CATEGORIES_EDIT_BOX_REMOVE_BUTTON_TOOLTIPS); g_free ( text_utf8); gtk_widget_set_sensitive ( GTK_WIDGET ( bt), FALSE); /* 1st horizontal separator */ hsp = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb), hsp, TRUE, TRUE, 0); /* 3rd horizontal box */ hb = gtk_hbox_new ( FALSE, 0); gtk_box_pack_start ( GTK_BOX ( vb), hb, TRUE, TRUE, 0); /* Label for category name */ g_strdup_to_gtk_text ( _( "Category name : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb), lbl, FALSE, FALSE, 5); /* Field text for category name */ ent = gtk_entry_new ( ); /*gtk_widget_ref ( ent);*/ gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_NAME_ENTRY, ent, /*(GtkDestroyNotify)gtk_widget_unref*/NULL); gtk_signal_connect ( GTK_OBJECT ( ent), "changed", GTK_SIGNAL_FUNC ( gw_categories_edit_box_category_name_changed), w); gtk_box_pack_start ( GTK_BOX ( hb), ent, TRUE, TRUE, 5); g_strdup_to_gtk_text ( _( "Enter the name of the category."), text_utf8); gtk_tooltips_set_tip ( tips, ent, text_utf8, GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_NAME_ENTRY_TOOLTIPS); g_free ( text_utf8); /* Frame category description */ g_strdup_to_gtk_text ( _( "Description : "), text_utf8); frm = gtk_frame_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( vb), frm, TRUE, TRUE, 0); /* 4th horizontal box */ hb = gtk_hbox_new ( TRUE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb), 5); gtk_container_add ( GTK_CONTAINER ( frm), hb); /* Text scrollbar */ scr = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( hb), scr, TRUE, TRUE, 0); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scr), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); /* Text area for category description */ txt = gtk_text_area_new ( ); gtk_text_area_set_editable ( GTK_TEXT_AREA ( txt), TRUE); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_DESCRIPTION_TEXT, txt, /*(GtkDestroyNotify)gtk_widget_unref*/NULL); #if defined ( HAVE_GTK12) gtk_signal_connect ( GTK_OBJECT ( txt), "changed", GTK_SIGNAL_FUNC ( gw_categories_edit_box_category_description_changed), w); #elif defined ( HAVE_GTK20) g_signal_connect ( G_OBJECT ( gtk_text_view_get_buffer ( GTK_TEXT_VIEW ( txt))), "changed", GTK_SIGNAL_FUNC ( gw_categories_edit_box_category_description_changed), w); #endif gtk_container_add ( GTK_CONTAINER ( scr), txt); g_strdup_to_gtk_text ( _( "Enter the description of the category."), text_utf8); gtk_tooltips_set_tip ( tips, txt, text_utf8, GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_DESCRIPTION_TEXT_TOOLTIPS); g_free ( text_utf8); /* The Add/Update/Close button area */ hb = gtk_hbutton_box_new ( ); gtk_button_box_set_layout ( GTK_BUTTON_BOX ( hb), GTK_BUTTONBOX_END); gtk_button_box_set_spacing ( GTK_BUTTON_BOX ( hb), 5); gtk_box_pack_end ( GTK_BOX ( vb), hb, FALSE, FALSE, 0); /* Add/Update button */ bt = gtk_button_new_with_label ( ""); /* Is it not mandatory? */ /*g_strdup_to_gtk_text ( _( "Add"), text_utf8); gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); g_free ( text_utf8); */ /*gtk_widget_ref ( bt);*/ gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_ADD_UPDATE_BUTTON, bt, /*(GtkDestroyNotify)gtk_widget_unref*/NULL); g_strdup_to_gtk_text ( _( "Add / Update"), text_utf8); bt_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( bt, "clicked", accel, bt_key, GDK_MOD1_MASK, 0); gtk_signal_connect ( GTK_OBJECT ( bt), "clicked", GTK_SIGNAL_FUNC ( gw_categories_edit_box_add_update_click), w); gtk_object_set_user_data ( GTK_OBJECT ( bt), w); gtk_box_pack_start ( GTK_BOX ( hb), bt, TRUE, TRUE, 5); g_strdup_to_gtk_text ( _( "Save properties changes of category."), text_utf8); gtk_tooltips_set_tip ( tips, bt, text_utf8, GW_REF_CATEGORIES_EDIT_BOX_ADD_UPDATE_BUTTON_TOOLTIPS); g_free ( text_utf8); gtk_widget_set_sensitive ( GTK_WIDGET ( bt), FALSE); GTK_WIDGET_SET_FLAGS ( bt, GTK_CAN_FOCUS); GTK_WIDGET_SET_FLAGS ( bt, GTK_CAN_DEFAULT); gtk_widget_grab_default ( bt); /* Close button */ bt = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "Close"), text_utf8); bt_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( bt, "clicked", accel, bt_key, GDK_MOD1_MASK, 0); gtk_signal_connect_object ( GTK_OBJECT ( bt), "clicked", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w)); gtk_object_set_user_data ( GTK_OBJECT ( bt), w); gtk_box_pack_start ( GTK_BOX ( hb), bt, TRUE, TRUE, 5); g_strdup_to_gtk_text ( _( "Close the categories properties edit window."), text_utf8); gtk_tooltips_set_tip ( tips, bt, text_utf8, GW_REF_CATEGORIES_EDIT_BOX_CLOSE_BUTTON_TOOLTIPS); g_free ( text_utf8); GTK_WIDGET_SET_FLAGS ( bt, GTK_CAN_FOCUS); gtk_window_add_accel_group ( GTK_WINDOW ( w), accel); } if ( !GTK_WIDGET_VISIBLE ( w) ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : show the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_show_all ( w); } else { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : destroy the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_destroy ( w); } gw_categories_edit_box_load_categories_list ( GTK_WINDOW ( w)); return GTK_WINDOW ( w); } gint gw_categories_edit_box_load_categories_list ( GtkWindow *w) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCategory **categories = NULL; gint i = 0; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && context != NULL ) { plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); if ( (categories = plugin->gw_db_catalog_get_db_categories ( context)) != NULL ) { for ( i = 0; categories[i] != NULL; i++ ) { if ( strcmp ( _("none"), gw_db_category_get_name ( categories[i])) != 0 ) { gw_categories_edit_box_add_category ( w, categories[i]); } else { gw_db_category_free ( categories[i]); } } g_free ( categories); } result = 0; } gw_categories_edit_box_set_add_state ( w); return result; } gint gw_categories_edit_box_update_click ( GtkWidget *bt, GtkWindow *w) { GWDBCategory *category = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (category = gw_categories_edit_box_get_category ( w)) != NULL ) { gw_categories_edit_box_set_category_name ( w, gw_db_category_get_name ( category)); gw_categories_edit_box_set_category_description ( w, gw_db_category_get_description ( category)); gw_categories_edit_box_set_update_state ( w); result = 0; } } return result; } gint gw_categories_edit_box_remove_click ( GtkWidget *bt, GtkWindow *w) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCategory *category = NULL, *real_category = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (category = gw_categories_edit_box_get_category ( w)) != NULL ) { if ( context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL) { real_category = plugin->gw_db_catalog_get_db_category ( context, gw_db_category_get_ref ( category)); if ( gw_db_category_can_removed ( real_category)) { gw_categories_edit_box_remove_category ( w); gw_categories_edit_box_set_category_name ( w, ""); gw_categories_edit_box_set_category_description ( w, ""); gw_categories_edit_box_set_add_state ( w); gw_notebook_managment_refresh_categories ( gw_categories_edit_box_get_main_window ( w)); result = 0; } else { gw_msg_box_create ( w, _( "Remove category"), _( "Can't remove this category. It's used by an item.")); } gw_db_category_free ( real_category); } else { } } else {} // if ( gw_db_category_can_removed ( category) ) { // gw_categories_edit_box_remove_category ( w); // // gw_categories_edit_box_set_category_name ( w, ""); // gw_categories_edit_box_set_category_description ( w, ""); // // gw_categories_edit_box_set_add_state ( w); // // result = 0; // } else { // gw_msg_box_create ( w, _( "Remove category"), _( "Can't remove this category. It's used by an item.")); // } } } return result; } gint gw_categories_edit_box_add_update_click ( GtkWidget *bt, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( gw_categories_edit_box_get_isadd_state ( w) ) { gw_categories_edit_box_add_category ( w, NULL); gw_categories_edit_box_set_category_name ( w, ""); gw_categories_edit_box_set_category_description ( w, ""); gw_categories_edit_box_set_add_state ( w); gw_notebook_managment_refresh_categories ( gw_categories_edit_box_get_main_window ( w)); result = 0; } else if ( gw_categories_edit_box_get_isupdate_state ( w) ) { gw_categories_edit_box_update_category ( w); gw_categories_edit_box_set_category_name ( w, ""); gw_categories_edit_box_set_category_description ( w, ""); gw_categories_edit_box_set_add_state ( w); gw_notebook_managment_refresh_categories ( gw_categories_edit_box_get_main_window ( w)); result = 0; } else { /* If they're no state */ } } return result; } gboolean gw_categories_edit_box_list_select_row ( GtkCList *list, gint line, gint column, GdkEvent *event, GtkWindow *w) { GtkButton *bt = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { gw_categories_edit_box_set_category_name ( w, ""); gw_categories_edit_box_set_category_description ( w, ""); if ( (bt = gw_categories_edit_box_get_update_category_button ( w)) != NULL ) { gtk_widget_set_sensitive ( GTK_WIDGET ( bt), TRUE); } if ( (bt = gw_categories_edit_box_get_remove_category_button ( w)) != NULL ) { gtk_widget_set_sensitive ( GTK_WIDGET ( bt), TRUE); } gw_categories_edit_box_set_add_state ( w); result = TRUE; } return result; } gint gw_categories_edit_box_set_category_name ( GtkWindow *w, gchar *category_name) { GtkEntry *entry = NULL; gchar *text_utf8 = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (entry = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_NAME_ENTRY)) != NULL ) { g_strdup_to_gtk_text ( category_name, text_utf8); gtk_entry_set_text ( entry, text_utf8); g_free ( text_utf8); result = 0; } } return result; } gint gw_categories_edit_box_set_category_description ( GtkWindow *w, gchar *category_description) { GtkTextArea *txt = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (txt = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_DESCRIPTION_TEXT)) != NULL ) { gtk_text_area_clear ( GTK_TEXT_AREA ( txt)); gtk_text_area_insert ( GTK_TEXT_AREA ( txt), category_description); result = 0; } } return result; } gint gw_categories_edit_box_set_add_state ( GtkWindow *w) { GtkButton *bt = NULL; gchar *text_utf8 = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (bt = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_ADD_UPDATE_BUTTON)) != NULL ) { g_strdup_to_gtk_text ( _( "Add"), text_utf8); gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); g_free ( text_utf8); result = 0; } } return result; } gint gw_categories_edit_box_set_update_state ( GtkWindow *w) { GtkButton *bt = NULL; gchar *text_utf8 = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (bt = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_ADD_UPDATE_BUTTON)) != NULL ) { g_strdup_to_gtk_text ( _( "Update"), text_utf8); gtk_label_set_text ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); g_free ( text_utf8); result = 0; } } return result; } gint gw_categories_edit_box_add_category ( GtkWindow *w, GWDBCategory *p) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCategory *category = NULL; GtkCList *list = NULL; gchar *info[2]; guint row; gint result = -1; gchar *category_name = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { list = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_CATEGORIES_LIST); /* Does one have to leave the program if list is NULL? */ if ( p == NULL ) { category = gw_db_category_new ( ); category_name = gw_categories_edit_box_get_category_name ( w); if ( category_name != NULL ) { if ( strlen ( category_name) > 0 ) { if ( context != NULL) { plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); gw_db_category_set_name ( category, category_name); gw_db_category_set_description ( category, gw_categories_edit_box_get_category_description ( w)); plugin->gw_db_catalog_add_db_category ( context, category); } } else { g_free ( category_name); } } } else { category = p; } g_strdup_to_gtk_text ( gw_db_category_get_name ( category), info[0]); g_strdup_to_gtk_text ( gw_db_category_get_description ( category), info[1]); row = gtk_clist_append ( list, info); //FIXME memory leak // gtk_clist_set_row_data ( list, row, category); gtk_clist_set_row_data_full ( list, row, category, (GtkDestroyNotify)gw_db_category_free); g_free ( info[0]); g_free ( info[1]); result = 0; } return result; } gint gw_categories_edit_box_update_category ( GtkWindow *w) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCategory *category = NULL; GtkCList *list = NULL; gchar *text_utf8 = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && context != NULL ) { if ( (category = gw_categories_edit_box_get_category ( w)) != NULL ) { if ( (list = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_CATEGORIES_LIST)) != NULL ) { if ( list->selection != NULL ) { plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); gw_db_category_set_name ( category, gw_categories_edit_box_get_category_name ( w)); gw_db_category_set_description ( category, gw_categories_edit_box_get_category_description ( w)); plugin->gw_db_category_update ( context, category); g_strdup_to_gtk_text ( gw_db_category_get_name ( category), text_utf8); gtk_clist_set_text ( list, (gint)(list->selection->data), 0, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( gw_db_category_get_description ( category), text_utf8); gtk_clist_set_text ( list, (gint)(list->selection->data), 1, text_utf8); g_free ( text_utf8); result = 0; } } } } return result; } gint gw_categories_edit_box_remove_category ( GtkWindow *w) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCategory *category = NULL; GtkCList *list = NULL; /* Remove category isn't implemented yet. */ gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (category = gw_categories_edit_box_get_category ( w)) != NULL ) { if ( (list = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_CATEGORIES_LIST)) != NULL ) { if ( list->selection != NULL ) { if ( context != NULL) { plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); gtk_clist_remove ( list, (gint)(list->selection->data)); plugin->gw_db_catalog_remove_db_category ( context, gw_db_category_get_ref ( category)); result = 0; } } } } } return result; } GtkWindow * gw_categories_edit_box_get_main_window ( GtkWindow *w) { GtkWindow *window = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { window = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_MAIN_WINDOW); } return window; } GtkButton * gw_categories_edit_box_get_update_category_button ( GtkWindow *w) { GtkButton *bt = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { bt = GTK_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_UPDATE_BUTTON)); } return bt; } GtkButton * gw_categories_edit_box_get_remove_category_button ( GtkWindow *w) { GtkButton *bt = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { bt = GTK_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_REMOVE_BUTTON)); } return bt; } GtkButton * gw_categories_edit_box_get_add_update_category_button ( GtkWindow *w) { GtkButton *bt = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { bt = GTK_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_ADD_UPDATE_BUTTON)); } return bt; } GWDBCategory * gw_categories_edit_box_get_category ( GtkWindow *w) { GWDBCategory *category = NULL; GtkCList *list = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (list = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_CATEGORIES_LIST)) != NULL ) { if ( list->selection != NULL ) { category = gtk_clist_get_row_data ( list, (gint)(list->selection->data)); } } } return category; } gchar * gw_categories_edit_box_get_category_name ( GtkWindow *w) { GtkEntry *entry = NULL; gchar *category_name = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { entry = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_NAME_ENTRY); if ( entry != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( entry), category_name); } } return category_name; } gchar * gw_categories_edit_box_get_category_description ( GtkWindow *w) { GtkTextArea *txt = NULL; gchar *category_description = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { txt = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_CATEGORY_DESCRIPTION_TEXT); if ( txt != NULL ) { category_description = gtk_text_area_get_text ( GTK_TEXT_AREA ( txt)); } } return category_description; } gboolean gw_categories_edit_box_get_isadd_state ( GtkWindow *w) { GtkButton *bt = NULL; gchar *label = NULL; gchar *text_utf8 = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { bt = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_ADD_UPDATE_BUTTON); if ( bt != NULL ) { gtk_label_get ( GTK_LABEL ( GTK_BIN ( bt)->child), &label); g_strdup_to_gtk_text ( _( "Add"), text_utf8); if ( strcmp ( label, text_utf8) == 0 ) { result = TRUE; } g_free ( text_utf8); } } return result; } gboolean gw_categories_edit_box_get_isupdate_state ( GtkWindow *w) { GtkButton *bt = NULL; gchar *label = NULL; gchar *text_utf8 = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { bt = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CATEGORIES_EDIT_BOX_ADD_UPDATE_BUTTON); if ( bt != NULL ) { gtk_label_get ( GTK_LABEL ( GTK_BIN ( bt)->child), &label); g_strdup_to_gtk_text ( _( "Update"), text_utf8); if ( strcmp ( label, text_utf8) == 0 ) { result = TRUE; } g_free ( text_utf8); } } return result; } gboolean gw_categories_edit_box_category_name_changed ( GtkWidget *entry, GtkWindow *w) { GtkButton *bt = NULL; gboolean result = FALSE; gchar *category_name = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (bt = gw_categories_edit_box_get_add_update_category_button ( w)) != NULL ) { category_name = gw_categories_edit_box_get_category_name ( w); if ( (category_name != NULL) && (strlen ( category_name) > 0) ) { gtk_widget_set_sensitive ( GTK_WIDGET ( bt), TRUE); } else { gtk_widget_set_sensitive ( GTK_WIDGET ( bt), FALSE); } if ( category_name != NULL ) { g_free ( category_name); } } } return result; } gboolean gw_categories_edit_box_category_description_changed ( GtkWidget *text, GtkWindow *w) { GtkButton *bt = NULL; gboolean result = FALSE; gchar *category_name = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (bt = gw_categories_edit_box_get_add_update_category_button ( w)) != NULL ) { category_name = gw_categories_edit_box_get_category_name ( w); if ( (category_name != NULL) && (strlen ( category_name) > 0) ) { gtk_widget_set_sensitive ( GTK_WIDGET ( bt), TRUE); } else { gtk_widget_set_sensitive ( GTK_WIDGET ( bt), FALSE); } if ( category_name != NULL ) { g_free ( category_name); } } } return result; } gwhere-0.2.3/src/gui/gwcategorieseditbox.h0000744000175000017500000003066610215367036017244 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwcategorieseditbox.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.
* It's a GUI component to manage a list of categories.

* @abstract This is a GUI component to list categories of a catalog. * @author Sébastien LECACHEUR * @version 1.0 2001/08/25 * @see gwsupport.h * @see gwdata.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwcategories.c * @author Author */ #ifndef GW_GUI_GW_CATEGORIES_EDIT_BOX_H #define GW_GUI_GW_CATEGORIES_EDIT_BOX_H #include "data/gwdata.h" /*! * @function gw_categories_edit_box_create * @abstract Creates the GUI component * @discussion This function creates and displays the categories managment window.
* This window is modal. * @param window the main application window * @param catalog_info the catalog information data structure * @result a pointer to this window.
* Returns NULL when an error occured.
*/ GtkWindow * gw_categories_edit_box_create ( GtkWindow *window, GWDBCatalog *catalog); /*! * @function gw_categories_edit_box_load_categories_list * @abstract Loads the list of catalog categories. * @discussion This function loads the list of catalog categories in the categories managment window.
* @param w the categories managment window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_categories_edit_box_load_categories_list ( GtkWindow *w); /*! * @function gw_categories_edit_box_update_click * @abstract Allows to edit properties of the selected category. * @discussion This function allows to edit properties of the selected category.
* This function call when the user click on update button.
* @param w the categories managment window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_categories_edit_box_update_click ( GtkWidget *bt, GtkWindow *w); /*! * @function gw_categories_edit_box_remove_click * @abstract Removes the selected category from catalog. * @discussion This function removes the selected category from catalog.
* This function call when the user click on remove button.
* @param w the categories managment window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_categories_edit_box_remove_click ( GtkWidget *bt, GtkWindow *w); /*! * @function gw_categories_edit_box_add_update_click * @abstract Adds or Updates the current edited category. * @discussion This function adds or updates the current edited category.
* This function call when the user click on add/update button.
* Adds when the button state is add and updates when the button state is update.
* @param w the categories managment window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_categories_edit_box_add_update_click ( GtkWidget *bt, GtkWindow *w); /*! * @function gw_categories_edit_box_list_select_row * @abstract Updates the editing category properties. * @discussion This function updates the editing category properties. Clears all field in category properties.
* This function call when the user select one item in the category list.
* @param list the categories list * @param line the current line * @param column the current column * @param event the event that call the function * @param w the categories managment window * @result Return TRUE when it's done.
* Returns FALSE when an error occured.
*/ gboolean gw_categories_edit_box_list_select_row ( GtkCList *list, gint line, gint column, GdkEvent *event, GtkWindow *w); /*! * @function gw_categories_edit_box_set_category_name * @abstract Sets category name. * @discussion This function sets the category name in the edit category properties.
* @param w the categories managment window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_categories_edit_box_set_category_name ( GtkWindow *w, gchar *category_name); /*! * @function gw_categories_edit_box_set_category_description * @abstract Sets category description. * @discussion This function sets the category description in the edit category properties.
* @param w the categories managment window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_categories_edit_box_set_category_description ( GtkWindow *w, gchar *category_description); /*! * @function gw_categories_edit_box_set_add_state * @abstract Sets Add/Update button in Add mode. * @discussion This function sets in "Add mode" the add/update button.
* @param w the categories managment window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_categories_edit_box_set_add_state ( GtkWindow *w); /*! * @function gw_categories_edit_box_set_update_state * @abstract Sets Add/Update button in Update mode. * @discussion This function sets in "Update mode" the add/update button.
* @param w the categories managment window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_categories_edit_box_set_update_state ( GtkWindow *w); /*! * @function gw_categories_edit_box_add_category * @abstract Adds a category to the categories list. * @discussion This function adds a category to the categories list.
* If category is null adds the current edited category.
* @param w the categories managment window * @param category the category data structure to add * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_categories_edit_box_add_category ( GtkWindow *w, GWDBCategory *category); /*! * @function gw_categories_edit_box_update_category * @abstract Updates a category to the catagories list. * @discussion This function updates a category to the categories list.
* @param w the categories managment window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_categories_edit_box_update_category ( GtkWindow *w); /*! * @function gw_categories_edit_box_remove_category * @abstract Removes from categories list the selected category. * @discussion This function removes the selected category from categories list.
* @param w the categories managment window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_categories_edit_box_remove_category ( GtkWindow *w); /*! * @function gw_categories_edit_box_get_main_window * @abstract Gets the main window * @discussion This function gets the main application window.
* @param w the categories managment window * @result a pointer to the main window.
* Returns NULL when an error occured.
*/ GtkWindow * gw_categories_edit_box_get_main_window ( GtkWindow *w); /*! * @function gw_categories_edit_box_get_update_category_button * @abstract Gets the update category button * @discussion This function gets the update category button.
* @param w the categories managment window * @result a pointer to the update category button.
* Returns NULL when an error occured. */ GtkButton * gw_categories_edit_box_get_update_category_button ( GtkWindow *w); /*! * @function gw_categories_edit_box_get_remove_category_button * @abstract Gets the remove category button * @discussion This function gets the remove category button.
* @param w the categories managment window * @result a pointer to the remove category button.
* Returns NULL when an error occured. */ GtkButton * gw_categories_edit_box_get_remove_category_button ( GtkWindow *w); /*! * @function gw_categories_edit_box_get_add_update_category_button * @abstract Gets the add/update category button * @discussion This function gets the add/update category button.
* @param w the categories managment window * @result a pointer to the add/update category button.
* Returns NULL when an error occured. */ GtkButton * gw_categories_edit_box_get_add_update_category_button ( GtkWindow *w); /*! * @function gw_categories_edit_box_get_category * @abstract Gets the selected category. * @discussion This function gets the selected category.
* @param w the categories managment window * @result pointer to data structure of the selected category.
* Returns NULL when an error occured. */ GWDBCategory * gw_categories_edit_box_get_category ( GtkWindow *w); /*! * @function gw_categories_edit_box_get_category_name * @abstract Gets current edited category name. * @discussion This function gets the current edited category name. * It's a new allocated string and must be freed with g_free().
* @param w the categories managment window * @result the current edited name.
* Returns NULL when an error occured. */ gchar * gw_categories_edit_box_get_category_name ( GtkWindow *w); /*! * @function gw_categories_edit_box_get_category_description * @abstract Gets current edited category description. * @discussion This function gets the current edited category description. * It's a new allocated string and must be freed with g_free().
* @param w the categories managment window * @result the current edited description.
* Returns NULL when an error occured. */ gchar * gw_categories_edit_box_get_category_description ( GtkWindow *w); /*! * @function gw_categories_edit_box_get_isadd_state * @abstract Checks if Add/Update button is in "Add mode". * @discussion This function checks if add/upadte button is in "Add mode".
* @param w the categories managment window * @result Returns TRUE if it is in "Add mode".
* Returns FALSE when an error occured. */ gboolean gw_categories_edit_box_get_isadd_state ( GtkWindow *w); /*! * @function gw_categories_edit_box_get_isupdate_state * @abstract Checks if Add/Update button is in "Update mode". * @discussion This function checks if add/upadte button is in "Upadte mode".
* @param w the categories managment window * @result Returns TRUE if it is in "Update mode".
* Returns FALSE when an error occured. */ gboolean gw_categories_edit_box_get_isupdate_state ( GtkWindow *w); /*! * @function gw_categories_edit_box_category_name_changed * @abstract Updates the add/update button when the category name changed. * @discussion This function updates the add/update button when the category name changed.
* @param w the categories edit box window * @result an error code.
* Returns always FALSE at this time. */ gboolean gw_categories_edit_box_category_name_changed ( GtkWidget *entry, GtkWindow *w); /*! * @function gw_categories_edit_box_category_description_changed * @abstract Updates the add/update button when the category description changed. * @discussion This function updates the add/update button when the category description changed.
* @param w the categories edit box window * @result an error code.
* Returns always FALSE at this time. */ gboolean gw_categories_edit_box_category_description_changed ( GtkWidget *entry, GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwcomboboxcategories.c0000744000175000017500000002011010247706151017370 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwcomboboxcategories.h" #include /* strcmp */ #include "../gwapplicationmanager.h" #include "../gwpluginsmanager.h" /*! @define GW_REF_CMB_BOX_CATEGORIES_CMB The real combo */ #define GW_REF_CMB_BOX_CATEGORIES_CMB "gw_ref_cmb_box_categories_cmb" GtkHBox * gw_combo_box_categories_create ( GtkWindow *w, gchar *title, GWDBCatalog *catalog) { GtkWidget *hb, *lbl, *cmb; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Vertical box for categories */ hb = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb), 2); /* Title label for categories */ if ( title != NULL ) { g_strdup_to_gtk_text ( title, text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb), lbl, FALSE, FALSE, 0); } /* Combo box for categories */ cmb = gtk_combo_new ( ); gtk_widget_ref ( cmb); gtk_combo_set_use_arrows_always ( GTK_COMBO ( cmb), TRUE); gtk_object_set_data_full ( GTK_OBJECT ( hb), GW_REF_CMB_BOX_CATEGORIES_CMB, cmb, (GtkDestroyNotify) gtk_widget_unref); gtk_entry_set_editable ( GTK_ENTRY ( GTK_COMBO ( cmb)->entry), FALSE); gtk_box_pack_start ( GTK_BOX ( hb), cmb, TRUE, TRUE, 0); return GTK_HBOX ( hb); } gint gw_combo_box_categories_load ( GtkHBox *cbc) { GList *categories = NULL; GList *glist = NULL; GtkCombo *cmb = NULL; gchar *text_utf8 = NULL; gint result = -1; gint i = 0; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (cmb = gw_combo_box_categories_get_combo ( cbc)) != NULL ) { if ( (glist = gw_combo_box_categories_get_categories ( cbc)) == NULL ) { glist = g_list_append ( glist, ""); gtk_combo_set_popdown_strings ( cmb, glist); result = -1; } else { glist = g_list_first ( glist); while ( glist != g_list_last ( glist)) { categories = g_list_append ( categories, gw_db_category_get_name ( (GWDBCategory*)glist->data)); glist = g_list_next ( glist); } categories = g_list_append ( categories, gw_db_category_get_name ( glist->data)); if ( categories != NULL ) { gtk_combo_set_popdown_strings ( cmb, categories); } if ( categories != NULL ) { g_strdup_to_gtk_text ( g_list_first ( categories)->data, text_utf8); gtk_entry_set_text ( GTK_ENTRY ( cmb->entry), text_utf8); g_free ( text_utf8); result = 0; } else { /*gtk_entry_set_text ( GTK_ENTRY ( cmb->entry), _("none"));*/ result = -1; } glist = g_list_first ( glist); for ( i = 0; i < g_list_length ( glist); i++) { gw_db_category_free ( g_list_nth_data ( glist, i)); } g_list_free ( glist); g_list_free ( categories); } } return result; } gint category_ref_cmp ( gpointer src, gpointer dst) { GWDBCategory *category = src; if (src != NULL && gw_db_category_get_ref ( category) == dst) { return 0; } else { return -1; } } gint gw_combo_box_categories_set_selected_category ( GtkHBox *cbc, GWDBCategoryPK ref) { GList *categories = NULL; GList *selection = NULL; GtkCombo *cmb; gchar *text_utf8 = NULL; gint result = -1; gint i = 0; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (cbc != NULL) && (ref != NULL) ) { if ( (categories = gw_combo_box_categories_get_categories ( cbc)) != NULL ) { if ( (selection = g_list_find_custom ( categories, ref, (GCompareFunc)category_ref_cmp)) != NULL ) { cmb = gw_combo_box_categories_get_combo ( cbc); g_strdup_to_gtk_text ( gw_db_category_get_name ( selection->data), text_utf8); gtk_entry_set_text ( GTK_ENTRY ( cmb->entry), text_utf8); g_free ( text_utf8); result = 0; } for ( i = 0; i < g_list_length ( categories); i++) { gw_db_category_free ( g_list_nth_data ( categories, i)); } g_list_free ( categories); } } return result; } gint category_name_cmp ( gpointer src, gpointer dst) { GWDBCategory *category = src; gchar *name = dst; if ( dst != NULL && src != NULL && strcmp ( name, gw_db_category_get_name ( category)) == 0 ) { return 0; } else { return -1; } } gint gw_combo_box_categories_set_selected_category_name ( GtkHBox *cbc, gchar *name) { GList *categories = NULL; GList *selection = NULL; GtkCombo *cmb; gchar *text_utf8 = NULL; gint result = -1; gint i = 0; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (cbc != NULL) && (name != NULL) ) { if ( (categories = gw_combo_box_categories_get_categories ( cbc)) != NULL ) { if ( (selection = g_list_find_custom ( categories, name, (GCompareFunc)category_name_cmp)) != NULL ) { cmb = gw_combo_box_categories_get_combo ( cbc); g_strdup_to_gtk_text ( g_list_first ( selection)->data, text_utf8); gtk_entry_set_text ( GTK_ENTRY ( cmb->entry), text_utf8); g_free ( text_utf8); result = 0; } for ( i = 0; i < g_list_length ( categories); i++) { gw_db_category_free ( g_list_nth_data ( categories, i)); } g_list_free ( categories); } } return result; } GWDBCategory * gw_combo_box_categories_get_selected_category ( GtkHBox *cbc) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); gchar *name; GWDBCategory *category = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( cbc != NULL && context != NULL ) { name = gw_combo_box_categories_get_selected_category_name ( cbc); if ( name != NULL ) { plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); category = plugin->gw_db_catalog_get_db_category_by_name ( context, name); g_free ( name); } } return category; } gchar * gw_combo_box_categories_get_selected_category_name ( GtkHBox *cbc) { GtkCombo *cmb = NULL; gchar *category_name = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( cbc != NULL ) { if ( (cmb = gtk_object_get_data ( GTK_OBJECT ( cbc), GW_REF_CMB_BOX_CATEGORIES_CMB)) != NULL) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( cmb->entry)), category_name); } } return category_name; } GtkCombo * gw_combo_box_categories_get_combo ( GtkHBox *cbc) { GtkCombo *combo = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( cbc != NULL ) { combo = GTK_COMBO ( gtk_object_get_data ( GTK_OBJECT ( cbc), GW_REF_CMB_BOX_CATEGORIES_CMB)); } return combo; } GList * gw_combo_box_categories_get_categories ( GtkHBox *cbc) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCategory **categories = NULL; GList *result = NULL; gint i = 0; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( cbc != NULL && context != NULL) { plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); if ( (categories = plugin->gw_db_catalog_get_db_categories ( context)) != NULL ) { for ( i = 0; categories[i]!=NULL; i++) { result = g_list_append ( result, categories[i]); } g_free ( categories); } } return result; } gwhere-0.2.3/src/gui/gwcomboboxcategories.h0000744000175000017500000001252210227734256017412 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwcomboboxcategories.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.
* It's a GUI component to display a list of categories and select one of them.

* @abstract This is a GUI component to select a categoy. * @author Sébastien LECACHEUR * @version 1.0 2001/10/01 * @see gwsupport.h * @see gwdata.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwcomboboxcategories.c * @author Author */ #ifndef GW_GUI_GW_COMBO_BOX_CATEGORIES_H #define GW_GUI_GW_COMBO_BOX_CATEGORIES_H #include "data/gwdata.h" /*! * @function gw_combo_box_categories_create * @abstract Creates the GUI component * @discussion This function creates and displays the categories combo box.
* If title is null, no label are displayed.
* @param w the main application window * @param title the combo box title * @param catalog_info the catalog information data structure * @result a pointer to this combo box.
* Returns NULL when an error occured.
*/ GtkHBox * gw_combo_box_categories_create ( GtkWindow *w, gchar *title, GWDBCatalog *catalog); /*! * @function gw_combo_box_categories_load * @abstract Loads the list of catalog categories. * @discussion This function loads the list of catalog categories in the categories combo box.
* @param cbc the categories combo box * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_combo_box_categories_load ( GtkHBox *cbc); /*! * @function gw_combo_box_categories_set_selected_category * @abstract Sets the selected category. * @discussion This function sets the selected category in the combo box with the category information data structure.
* @param cbc the categories combo box to set selected category * @param category the category information data structure * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_combo_box_categories_set_selected_category ( GtkHBox *cbc, GWDBCategoryPK ref); /*! * @function gw_combo_box_categories_set_selected_category_name * @abstract Sets the selected category. * @discussion This function sets the selected category in the combo box with the category name.
* @param cbc the categories combo box to set selected category * @param name the name of the selected category * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_combo_box_categories_set_selected_category_name ( GtkHBox *cbc, gchar *name); /*! * @function gw_combo_box_categories_get_selected_category * @abstract Gets the selected category. * @discussion This function gets the selected category in the combo box.
* @param cbc the categories combo box to get selected category * @result pointer to data structure of the selected category.
* Returns NULL when an error occured.
*/ GWDBCategory * gw_combo_box_categories_get_selected_category ( GtkHBox *cbc); /*! * @function gw_combo_box_categories_get_selected_category_name * @abstract Gets the selected category name. * @discussion This function gets the selected category name in the combo box.
* It's a new allocated string and must free with g_free().
* @param cbc the categories combo box to get selected category * @result the name of the selected category.
* Returns NULL when an error occured.
*/ gchar * gw_combo_box_categories_get_selected_category_name ( GtkHBox *cbc); /*! * @function gw_combo_box_categories_get_combo * @abstract Gets the combo. * @discussion This function gets the categories combo of categories combo box.
* @param cbc the categories combo to get categories combo box * @result pointer to the combo.
* Returns NULL when an error occured.
*/ GtkCombo * gw_combo_box_categories_get_combo ( GtkHBox *cbc); /*! * @function gw_combo_box_categories_get_categories * @abstract Gets the categories list. * @discussion This function gets the categories list of categories combo box.
* @param cbc the categories combo box to get categories list * @result pointer to categories list.
* Returns NULL when an error occured.
*/ GList * gw_combo_box_categories_get_categories ( GtkHBox *cbc); #endif gwhere-0.2.3/src/gui/gwdialogbox.c0000744000175000017500000001245210112727766015502 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwdialogbox.h" /*! @define GW_REF_DIALOG_BOX_PARENT_WINDOW The parent window */ #define GW_REF_DIALOG_BOX_PARENT_WINDOW "gw_ref_dialog_box_parent_window" /*! @define GW_REF_DIALOG_BOX_USER_DATA The attached user data */ #define GW_REF_DIALOG_BOX_USER_DATA "gw_ref_dialog_box_user_data" GtkWidget * gw_dialog_box_create ( GtkWindow *window, gchar *title, gchar *text, GtkSignalFunc ok, GtkSignalFunc no, GtkSignalFunc cancel, gpointer data) { /*static */GtkWidget *w = NULL; GtkWidget *label; GtkWidget *button; guint button_key; GtkAccelGroup *accel; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( !w ) { accel = gtk_accel_group_new ( ); w = gtk_dialog_new ( ); if ( window != NULL ) { gtk_window_set_modal ( GTK_WINDOW ( w), TRUE); gtk_window_set_transient_for ( GTK_WINDOW ( w), GTK_WINDOW ( window)); gtk_object_set_data ( GTK_OBJECT ( w), GW_REF_DIALOG_BOX_PARENT_WINDOW, window); } if ( data != NULL ) { gtk_object_set_data ( GTK_OBJECT ( w), GW_REF_DIALOG_BOX_USER_DATA, data); } gtk_window_set_position ( GTK_WINDOW ( w), GTK_WIN_POS_CENTER); gtk_container_set_border_width ( GTK_CONTAINER ( w), 10); gtk_window_set_policy ( GTK_WINDOW ( w), FALSE, FALSE, TRUE); #ifdef HAVE_GTK12 gtk_signal_connect ( GTK_OBJECT ( w), "destroy", GTK_SIGNAL_FUNC ( gtk_widget_destroyed), &w); #endif g_strdup_to_gtk_text ( title, text_utf8); gtk_window_set_title ( GTK_WINDOW ( w), text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( text, text_utf8); label = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_misc_set_padding ( GTK_MISC ( label), 10, 10); gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG ( w)->vbox), label, TRUE, TRUE, 0); button = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_OK"), text_utf8); button_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( button)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( button, "clicked", accel, button_key, GDK_MOD1_MASK, 0); if ( ok != NULL ) { gtk_signal_connect ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( ok), w); } else { gtk_signal_connect_object ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w)); } gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG ( w)->action_area), button, TRUE, TRUE, 0); gtk_widget_grab_focus ( button); button = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _("_No"), text_utf8); button_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( button)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( button, "clicked", accel, button_key, GDK_MOD1_MASK, 0); if ( no != NULL ) { gtk_signal_connect ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( no), w); } else { gtk_signal_connect_object ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w)); } gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG ( w)->action_area), button, TRUE, TRUE, 0); button = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _("_Cancel"), text_utf8); button_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( button)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( button, "clicked", accel, button_key, GDK_MOD1_MASK, 0); if ( cancel != NULL ) { gtk_signal_connect ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( cancel), w); } else { gtk_signal_connect_object ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w)); } gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG ( w)->action_area), button, TRUE, TRUE, 0); gtk_window_add_accel_group ( GTK_WINDOW ( w), accel); } if ( !GTK_WIDGET_VISIBLE ( w) ) { gtk_widget_show_all ( w); } else { gtk_widget_destroy ( w); } return w; } gpointer gw_dialog_box_get_user_data ( GtkWindow *w) { gpointer data = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { data = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_DIALOG_BOX_USER_DATA); } return data; } GtkWindow * gw_dialog_box_get_parent_window ( GtkWindow *w) { GtkWindow *window = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { window = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_DIALOG_BOX_PARENT_WINDOW); } return window; } gwhere-0.2.3/src/gui/gwdialogbox.h0000744000175000017500000000545510023202520015465 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwdialogbox.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to diplay dialog box. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @link GWhere Web Site * @link GTK+ Web Site * @ref gwdialogbox.c * @author Author */ #ifndef GW_GUI_GW_DIALOG_BOX_H #define GW_GUI_GW_DIALOG_BOX_H /*! * @function gw_dialog_box_create * @abstract Creates a dialog window box. * @discussion This function creates a dialog window box. * @param window parent window (if is NULL, the dialog box is not modal * @param title the window box title * @param text the message which is displayed in the text area * @param ok the function which will be call when user validate the dialog box * @param no the function which will be call when user answer no to the dialog box * @param cancel the function which will be call when user cancel the dialog box * @param data user data (usefull for callback function) * @result the dialog box window.
* Returns NULL when an error occured. */ GtkWidget * gw_dialog_box_create ( GtkWindow *window, gchar *title, gchar *text, GtkSignalFunc ok, GtkSignalFunc no, GtkSignalFunc cancel, gpointer data); /*! * @function gw_dialog_box_get_user_data * @abstract Gets previously stored user data. * @discussion This function gets previously stored user data. * @param w dialog box window * @result user data */ gpointer gw_dialog_box_get_user_data ( GtkWindow *w); /*! * @function gw_dialog_box_get_parent_window * @abstract Gets the parent window. * @discussion This function gets the parent window of application. * @param w dialog box window * @result dialog box' parent window */ GtkWindow * gw_dialog_box_get_parent_window ( GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwfileselectionbox.c0000744000175000017500000001174610112721772017064 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwfileselectionbox.h" #include "../gwguimanager.h" /*! @define GW_REF_FILE_SELECTION_BOX_USER_DATA The attached user data */ #define GW_REF_FILE_SELECTION_BOX_USER_DATA "gw_ref_file_selection_box_user_data" GtkWidget * gw_file_selection_box_create ( gchar *title, gchar *filename, GtkSignalFunc ok, GtkSignalFunc cancel) { static GtkWidget *w = NULL; GtkWidget *button; GtkWindow *window = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( !w ) { window = gw_gui_manager_main_interface_get_main_window ( ); g_strdup_to_gtk_text ( title, text_utf8); w = gtk_file_selection_new ( text_utf8); g_free ( text_utf8); if ( filename != NULL ) { g_strdup_to_gtk_text ( filename, text_utf8); gtk_file_selection_set_filename ( GTK_FILE_SELECTION ( w), text_utf8); g_free ( text_utf8); } gtk_window_set_policy ( GTK_WINDOW ( w), FALSE, FALSE, TRUE); gtk_file_selection_hide_fileop_buttons ( GTK_FILE_SELECTION ( w)); gtk_window_set_modal ( GTK_WINDOW ( w), TRUE); gtk_window_set_transient_for ( GTK_WINDOW ( w), GTK_WINDOW ( window)); gtk_window_set_position ( GTK_WINDOW ( w), GTK_WIN_POS_CENTER); gtk_signal_connect ( GTK_OBJECT ( w), "destroy", GTK_SIGNAL_FUNC ( gtk_widget_destroyed), &w); gtk_button_set_relief ( GTK_BUTTON ( GTK_FILE_SELECTION ( w)->ok_button), GTK_RELIEF_HALF); if ( ok != NULL ) { gtk_signal_connect ( GTK_OBJECT ( GTK_FILE_SELECTION ( w)->ok_button), "clicked", GTK_SIGNAL_FUNC ( ok), w); } if ( cancel != NULL ) { gtk_signal_connect ( GTK_OBJECT ( GTK_FILE_SELECTION ( w)->cancel_button), "clicked", GTK_SIGNAL_FUNC ( cancel), w); } else { gtk_signal_connect_object ( GTK_OBJECT ( GTK_FILE_SELECTION ( w)->cancel_button), "clicked", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w)); } g_strdup_to_gtk_text ( _( "Hide file operations"), text_utf8); button = gtk_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_signal_connect ( GTK_OBJECT ( button), "clicked", (GtkSignalFunc) gw_file_selection_box_hide_fileops, (gpointer) w); gtk_box_pack_start ( GTK_BOX ( GTK_FILE_SELECTION ( w)->action_area), button, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Show file operation"), text_utf8); button = gtk_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_signal_connect_object ( GTK_OBJECT ( button), "clicked", (GtkSignalFunc) gtk_file_selection_show_fileop_buttons, (gpointer) w); gtk_box_pack_start ( GTK_BOX ( GTK_FILE_SELECTION ( w)->action_area), button, FALSE, FALSE, 0); } if ( !GTK_WIDGET_VISIBLE ( w) ) { gtk_widget_show_all ( w); } else { gtk_widget_destroy ( w); } return w; } GtkWidget * gw_file_selection_box_create_full ( gchar *title, gchar *filename, GtkSignalFunc ok, GtkSignalFunc cancel, gpointer data) { GtkWidget *fs = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif fs = gw_file_selection_box_create ( title, filename, ok, cancel); if ( fs != NULL ) { gtk_object_set_data ( GTK_OBJECT ( fs), GW_REF_FILE_SELECTION_BOX_USER_DATA, data); } return fs; } gboolean gw_file_selection_box_hide_fileops ( GtkWidget *widget, GtkFileSelection *fs) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { gtk_file_selection_hide_fileop_buttons ( fs); result = TRUE; } return result; } gboolean gw_file_selection_box_show_fileops ( GtkWidget *widget, GtkFileSelection *fs) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { gtk_file_selection_show_fileop_buttons ( fs); result = TRUE; } return result; } gpointer gw_file_selection_box_get_user_data ( GtkWindow *w) { gpointer data = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { data = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_FILE_SELECTION_BOX_USER_DATA); } return data; } gwhere-0.2.3/src/gui/gwfileselectionbox.h0000744000175000017500000000753310102541316017061 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwfileselectionbox.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to select a file. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwfileselectionbox.c * @author Author */ #ifndef GW_GUI_GW_FILE_SELECTION_BOX_H #define GW_GUI_GW_FILE_SELECTION_BOX_H /*! * @function gw_file_selection_box_create * @abstract Creates and shows a file selection window box. * @discussion This function creates and shows a file selection box. * @param title the file selection box title * @param filename the default file name * @param ok the function which will be call when user clicks on ok button * @param cancel the function which will be call when user clicks on cancel button * @result the file selection box.
* Returns NULL when an error occured. */ GtkWidget * gw_file_selection_box_create ( gchar *title, gchar *filename, GtkSignalFunc ok, GtkSignalFunc cancel); /*! * @function gw_file_selection_box_create_full * @abstract Creates and shows a file selection window box. * @discussion This function creates and shows a file selection box. * @param title the file selection box title * @param filename the default file name * @param ok the function which will be call when user clicks on ok button * @param cancel the function which will be call when user clicks on cancel button * @param data user data * @result the file selection box.
* Returns NULL when an error occured. */ GtkWidget * gw_file_selection_box_create_full ( gchar *title, gchar *filename, GtkSignalFunc ok, GtkSignalFunc cancel, gpointer data); /*! * @function gw_file_selection_box_hide_fileops * @abstract Hides the buttons bar. * @discussion This function hides the buttons bar. * @param w the button invoker * @param fs the file selection box * @result an error code.
* Returns TRUE when it's done.
* Returns FALSE when an error occured.
*/ gboolean gw_file_selection_box_hide_fileops ( GtkWidget *w, GtkFileSelection *fs); /*! * @function gw_file_selection_box_show_fileops * @abstract Shows the buttons bar. * @discussion This function shows the buttons bar. * @param w the button invoker * @param fs the file selection box * @result an error code.
* Returns TRUE when it's done.
* Returns FALSE when an error occured.
*/ gboolean gw_file_selection_box_show_fileops ( GtkWidget *w, GtkFileSelection *fs); /*! * @function gw_file_selection_box_get_user_data * @abstract Gets previously stored user data. * @discussion This function gets previously stored user data. * @param w dialog box window * @result user data */ gpointer gw_file_selection_box_get_user_data ( GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwgui.h0000744000175000017500000000532710023202520014277 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwgui.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is the main header for GUI components library. * @author Sébastien LECACHEUR * @version 1.0 2003/02/06 * @see gwsupport.h * @link GWhere Web Site * @author Author */ #ifndef GW_GUI_H #define GW_GUI_H #include #include "gwcapturebox.h" #include "gwcategorieseditbox.h" #include "gwcomboboxcategories.h" #include "gwdialogbox.h" #include "gwfileselectionbox.h" #include "gwmenu.h" #include "gwmenuaction.h" #include "gwmenuactioncallback.h" #include "gwmenufile.h" #include "gwmenufilecallback.h" #include "gwmenuhelp.h" #include "gwmenuhelpcallback.h" #include "gwmenuoptions.h" #include "gwmenuoptionscallback.h" #include "gwmenupopup.h" #include "gwmenupopupcallback.h" #include "gwmsgbox.h" #include "gwnotebook.h" #include "gwnotebookcallback.h" #include "gwnotebookcatalog.h" #include "gwnotebookcatalogcallback.h" #include "gwnotebookmanagment.h" #include "gwnotebookmanagmentcallback.h" #include "gwnotebooksearch.h" #include "gwnotebooksearchcallback.h" #include "gwprogressbarbox.h" #include "gwpropertiesbox.h" #include "gwpropertiesboxcallback.h" #include "gwsettingscatalogfile.h" #include "gwsettingsexplorer.h" #include "gwsettingsexplorerdisk.h" #include "gwsettingsexplorerfile.h" #include "gwsettingsgeneral.h" #include "gwsettingsgui.h" #include "gwsettingsinterface.h" #include "gwsettingsmail.h" #include "gwsettingswindowbox.h" #include "gwsettingswindowboxcallback.h" #include "gwstatusbar.h" #include "gwstatusbarcallback.h" #include "gwtextbox.h" #include "gwtoolbar.h" #include "gwwindowboxabout.h" #include "gwwindowboxmail.h" #include "gwwindowboxmailcallback.h" #endif gwhere-0.2.3/src/gui/gwmenu.c0000744000175000017500000000426010023202520014445 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwmenu.h" #include "gwmenufile.h" #include "gwmenuaction.h" #include "gwmenuoptions.h" #include "gwmenuhelp.h" #include "gwreferences.h" /*! @define GW_REF_MENU_BAR The menu bar reference */ #define GW_REF_MENU_BAR "gw_menu_bar" GtkWidget * gw_menu_create ( GtkWindow *w, GtkAccelGroup *ag, GtkWidget *parent) { GtkWidget *menu_bar; GtkWidget *menu_file = NULL; GtkWidget *menu_action = NULL; GtkWidget *menu_options = NULL; GtkWidget *menu_help = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Menu */ menu_bar = gtk_menu_bar_new ( ); gtk_widget_ref ( menu_bar); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR, menu_bar, (GtkDestroyNotify) gtk_widget_unref); /* File menu */ menu_file = gw_menu_file_create ( w, ag, menu_bar); gtk_container_add ( GTK_CONTAINER ( menu_bar), menu_file); /* Action menu */ menu_action = gw_menu_action_create ( w, ag, menu_bar); gtk_container_add ( GTK_CONTAINER ( menu_bar), menu_action); /* Options menu */ menu_options = gw_menu_options_create ( w, ag, menu_bar); gtk_container_add ( GTK_CONTAINER ( menu_bar), menu_options); /* Help menu */ menu_help = gw_menu_help_create ( w, ag, menu_bar); gtk_menu_item_right_justify ( GTK_MENU_ITEM ( menu_help)); gtk_container_add ( GTK_CONTAINER ( menu_bar), menu_help); return menu_bar; } gwhere-0.2.3/src/gui/gwmenu.h0000744000175000017500000000344210023202520014453 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwmenu.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for menu bar. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwmenu.c * @author Author */ #ifndef GW_GUI_GW_MENU_H #define GW_GUI_GW_MENU_H /*! * @function gw_menu_create * @abstract Creates a menu bar. * @discussion This function creates a menu bar. * @param w refence to the main window * @param ag accel group * @param parent reference to the container * @result the menu bar.
* Returns NULL when an error occured.
*/ GtkWidget * gw_menu_create ( GtkWindow *w, GtkAccelGroup *ag, GtkWidget *parent); #endif gwhere-0.2.3/src/gui/gwmenuaction.c0000744000175000017500000002006210023202520015641 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwmenuaction.h" #include #include "gwmenuactioncallback.h" /*! @define GW_REF_MENU_BAR_ACTION_MENU_HEADER The action menu header reference */ #define GW_REF_MENU_BAR_ACTION_MENU_HEADER "gw_menu_bar_action_menu_header" /*! @define GW_REF_MENU_BAR_ACTION_MENU The action menu reference */ #define GW_REF_MENU_BAR_ACTION_MENU "gw_menu_bar_action_menu" /*! @define GW_REF_MENU_BAR_ACTION_MENU_EXPAND_ALL The action menu -> expand all reference */ #define GW_REF_MENU_BAR_ACTION_MENU_EDIT_EXPAND_ALL "gw_menu_bar_action_menu_expand_all" /*! @define GW_REF_MENU_BAR_ACTION_MENU_EXPAND_DISKS The action menu -> expand disk reference */ #define GW_REF_MENU_BAR_ACTION_MENU_EDIT_EXPAND_DISKS "gw_menu_bar_action_menu_expand_disks" /*! @define GW_REF_MENU_BAR_ACTION_MENU_COLLAPSE_ALL The action menu -> collapse all reference */ #define GW_REF_MENU_BAR_ACTION_MENU_EDIT_COLLAPSE_ALL "gw_menu_bar_action_menu_collapse_all" /*! @define GW_REF_MENU_BAR_ACTION_MENU_SEPARATOR The action menu -> separator reference */ #define GW_REF_MENU_BAR_ACTION_MENU_SEPARATOR "gw_menu_bar_action_menu_separator" /*! @define GW_REF_MENU_BAR_ACTION_MENU_EDIT_CATEGORIES The action menu -> edit categories reference */ #define GW_REF_MENU_BAR_ACTION_MENU_EDIT_CATEGORIES "gw_menu_bar_action_menu_edit_categories" GtkWidget * gw_menu_action_create ( GtkWindow *w, GtkAccelGroup *ag, GtkWidget *parent) { GtkWidget *gw_menu_action_header = NULL; GtkWidget *menu_action = NULL; GtkWidget *gw_menu_action_expand_all = NULL; GtkWidget *gw_menu_action_expand_disks = NULL; GtkWidget *gw_menu_action_collapse_all = NULL; GtkWidget *gw_menu_action_edit_categories = NULL; GtkWidget *gw_menu_action_separator = NULL; GtkAccelGroup *gw_menu_action_ag = NULL; guint tmp_key; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Menu action header */ gw_menu_action_header = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Action"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_action_header)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_action_header, "activate-item", ag, tmp_key, GDK_MOD1_MASK, 0); #endif gtk_widget_ref ( gw_menu_action_header); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_ACTION_MENU_HEADER, gw_menu_action_header, (GtkDestroyNotify) gtk_widget_unref); menu_action = gtk_menu_new ( ); gtk_widget_ref ( menu_action); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_ACTION_MENU, menu_action, (GtkDestroyNotify) gtk_widget_unref); gtk_menu_item_set_submenu ( GTK_MENU_ITEM ( gw_menu_action_header), menu_action); #if defined ( HAVE_GTK12) gw_menu_action_ag = gtk_menu_ensure_uline_accel_group ( GTK_MENU ( menu_action)); #else gw_menu_action_ag = gtk_accel_group_new ( ); #endif /* Menu action -> expand all */ gw_menu_action_expand_all = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Expand all"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_action_expand_all)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_action_expand_all, "activate-item", gw_menu_action_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_action_expand_all); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_ACTION_MENU_EDIT_EXPAND_ALL, gw_menu_action_expand_all, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_action), gw_menu_action_expand_all); /* Needs to change keybord shortcut (already used) gtk_widget_add_accelerator ( gw_menu_action_expand_all, "activate", ag, GDK_e, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); */ gtk_signal_connect ( GTK_OBJECT ( gw_menu_action_expand_all), "activate", GTK_SIGNAL_FUNC ( gw_menu_action_expand_all_click), w); /* Menu action -> expand disks */ gw_menu_action_expand_disks = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "Expand only _disks"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_action_expand_disks)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_action_expand_disks, "activate-item", gw_menu_action_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_action_expand_disks); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_ACTION_MENU_EDIT_EXPAND_DISKS, gw_menu_action_expand_disks, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_action), gw_menu_action_expand_disks); gtk_widget_add_accelerator ( gw_menu_action_expand_disks, "activate", ag, GDK_d, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_signal_connect ( GTK_OBJECT ( gw_menu_action_expand_disks), "activate", GTK_SIGNAL_FUNC ( gw_menu_action_expand_disks_click), w); /* Menu action -> collapse */ gw_menu_action_collapse_all = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "C_ollapse all"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_action_collapse_all)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_action_collapse_all, "activate-item", gw_menu_action_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_action_collapse_all); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_ACTION_MENU_EDIT_COLLAPSE_ALL, gw_menu_action_collapse_all, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_action), gw_menu_action_collapse_all); /* Needs to change keybord shortcut (already used) gtk_widget_add_accelerator ( gw_menu_action_collapse_all, "activate", ag, GDK_o, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); */ gtk_signal_connect ( GTK_OBJECT ( gw_menu_action_collapse_all), "activate", GTK_SIGNAL_FUNC ( gw_menu_action_collapse_all_click), w); /* Menu action -> separator */ gw_menu_action_separator = gtk_menu_item_new ( ); gtk_widget_ref ( gw_menu_action_separator); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_ACTION_MENU_SEPARATOR, gw_menu_action_separator, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_action), gw_menu_action_separator); gtk_widget_set_sensitive ( gw_menu_action_separator, FALSE); /* Menu action -> edit categories */ gw_menu_action_edit_categories = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "Edit _categories"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_action_edit_categories)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_action_edit_categories, "activate-item", gw_menu_action_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_action_edit_categories); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_ACTION_MENU_EDIT_CATEGORIES, gw_menu_action_edit_categories, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_action), gw_menu_action_edit_categories); gtk_widget_add_accelerator ( gw_menu_action_edit_categories, "activate", ag, GDK_c, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_signal_connect ( GTK_OBJECT ( gw_menu_action_edit_categories), "activate", GTK_SIGNAL_FUNC ( gw_menu_action_edit_categories_click), w); return gw_menu_action_header; } gwhere-0.2.3/src/gui/gwmenuaction.h0000744000175000017500000000351110023202520015646 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwmmenuaction.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for menu file. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwmenufile.c * @author Author */ #ifndef GW_GUI_MENU_ACTION_H #define GW_GUI_MENU_ACTION_H /*! * @function gw_menu_action_create * @abstract Creates a menu action. * @discussion This function creates a menu action. * @param w refence to the main window * @param ag accel group * @param parent reference to the container * @result the menu action.
* Returns NULL when an error occured. */ GtkWidget * gw_menu_action_create ( GtkWindow *w, GtkAccelGroup *ag, GtkWidget *parent); #endif gwhere-0.2.3/src/gui/gwmenuactioncallback.c0000744000175000017500000000732710023202520017327 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwmenuactioncallback.h" #include "gwcategorieseditbox.h" #include "gwmsgbox.h" #include "../gwguimanager.h" gboolean gw_menu_action_expand_all_click ( GtkMenuItem *m, GtkWindow *w) { GtkCTree *tree = NULL; GtkCTreeNode *root = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (root = gw_gui_manager_main_interface_get_tree_root ( )) != NULL ) { if ( (tree = gw_gui_manager_main_interface_get_tree ( )) != NULL ) { gtk_clist_freeze ( GTK_CLIST ( tree)); gtk_ctree_expand_recursive ( tree, root); gtk_clist_thaw ( GTK_CLIST ( tree)); result = TRUE; } } } return result; } gboolean gw_menu_action_expand_disks_click ( GtkMenuItem *m, GtkWindow *w) { GtkCTree *tree = NULL; GtkCTreeNode *root = NULL; GtkCTreeNode *child = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (root = gw_gui_manager_main_interface_get_tree_root ( )) != NULL ) { if ( (tree = gw_gui_manager_main_interface_get_tree ( )) != NULL ) { gtk_clist_freeze ( GTK_CLIST ( tree)); child = GTK_CTREE_ROW ( root)->children; while ( child != NULL ) { gtk_ctree_collapse_recursive ( tree, child); child = GTK_CTREE_ROW ( child)->sibling; } gtk_ctree_expand_to_depth ( tree, root, 1); gtk_clist_thaw ( GTK_CLIST ( tree)); result = TRUE; } } } return result; } gboolean gw_menu_action_collapse_all_click ( GtkMenuItem *m, GtkWindow *w) { GtkCTree *tree = NULL; GtkCTreeNode *root = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (root = gw_gui_manager_main_interface_get_tree_root ( )) != NULL ) { if ( (tree = gw_gui_manager_main_interface_get_tree ( )) != NULL ) { gtk_clist_freeze ( GTK_CLIST ( tree)); gtk_ctree_collapse_recursive ( tree, root); gtk_clist_thaw ( GTK_CLIST ( tree)); result = TRUE; } } } return result; } gboolean gw_menu_action_edit_categories_click ( GtkMenuItem *m, GtkWindow *w) { GtkCTree *tree = NULL; GtkCTreeNode *root = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (root = gw_gui_manager_main_interface_get_tree_root ( )) != NULL ) { if ( (tree = gw_gui_manager_main_interface_get_tree ( )) != NULL ) { gw_categories_edit_box_create ( w, gtk_ctree_node_get_row_data ( tree, root)); result = TRUE; } } else { gw_msg_box_create ( w, _( "Edit categories"), _( "No catalog is opened : cannot edit categories")); } } return result; } gwhere-0.2.3/src/gui/gwmenuactioncallback.h0000744000175000017500000000654210023202520017332 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwmenuactioncallback.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a link component between menu action and functionalities. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwmenuactioncallback.c * @author Author */ #ifndef GW_GUI_GW_MENU_ACTION_CALLBACK_H #define GW_GUI_GW_MENU_ACTION_CALLBACK_H /*! * @function gw_menu_action_expand_all_click * @abstract Launches from menu action : expand all. * @discussion This function launches from the menu action the functionality : expand all. * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE if the event is submited correctly.
* Returns FALSE when an error occured.
*/ gboolean gw_menu_action_expand_all_click ( GtkMenuItem *m, GtkWindow *w); /*! * @function gw_menu_action_expand_disks_click * @abstract Launches from menu action : expand disk. * @discussion This function launches from the menu action the functionality : expand disk. * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE if the event is submited correctly.
* Returns FALSE when an error occured.
*/ gboolean gw_menu_action_expand_disks_click ( GtkMenuItem *m, GtkWindow *w); /*! * @function gw_menu_action_collapse_all_click * @abstract Launches from menu action : collapse all. * @discussion This function launches from the menu action the functionality : collapse all. * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE if the event is submited correctly.
* Returns FALSE when an error occured.
*/ gboolean gw_menu_action_collapse_all_click ( GtkMenuItem *m, GtkWindow *w); /*! * @function gw_menu_action_edit_categories_click * @abstract Launches from menu action : edit categories. * @discussion This function launches from the menu action the functionality : edit categories. * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE if the event is submited correctly.
* Returns FALSE when an error occured.
*/ gboolean gw_menu_action_edit_categories_click ( GtkMenuItem *m, GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwmenufile.c0000744000175000017500000005102210240240150015305 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwmenufile.h" #include #include "gwmenufilecallback.h" #include "gwreferences.h" /*! @define GW_REF_MENU_BAR_FILE_MENU_HEADER The file menu header reference */ #define GW_REF_MENU_BAR_FILE_MENU_HEADER "gw_menu_bar_file_menu_header" /*! @define GW_REF_MENU_BAR_FILE_MENU_NEW The file menu -> new reference */ #define GW_REF_MENU_BAR_FILE_MENU_NEW "gw_menu_bar_file_menu_new" /*! @define GW_REF_MENU_BAR_FILE_MENU_OPEN The file menu -> open reference */ #define GW_REF_MENU_BAR_FILE_MENU_OPEN "gw_menu_bar_file_menu_open" /*! @define GW_REF_MENU_BAR_FILE_MENU_SAVE The file menu -> save reference */ #define GW_REF_MENU_BAR_FILE_MENU_SAVE "gw_menu_bar_file_menu_save" /*! @define GW_REF_MENU_BAR_FILE_MENU_SAVEAS The file menu -> save as reference */ #define GW_REF_MENU_BAR_FILE_MENU_SAVEAS "gw_menu_bar_file_menu_saveas" /*! @define GW_REF_MENU_BAR_FILE_MENU_CLOSE The file menu -> close reference */ #define GW_REF_MENU_BAR_FILE_MENU_CLOSE "gw_menu_bar_file_menu_close" /*! @define GW_REF_MENU_BAR_FILE_MENU_SEPARATOR The file menu -> separator reference */ #define GW_REF_MENU_BAR_FILE_MENU_SEPARATOR "gw_menu_bar_file_menu_separator" /*! @define GW_REF_MENU_BAR_FILE_MENU_IMPORT The file menu -> import reference */ #define GW_REF_MENU_BAR_FILE_MENU_IMPORT "gw_menu_bar_file_menu_import" /*! @define GW_REF_MENU_BAR_FILE_MENU_EXPORT The file menu -> export reference */ #define GW_REF_MENU_BAR_FILE_MENU_EXPORT "gw_menu_bar_file_menu_export" /*! @define GW_REF_MENU_BAR_FILE_MENU_PROPERTIES The file menu -> properties reference */ #define GW_REF_MENU_BAR_FILE_MENU_PROPERTIES "gw_menu_bar_file_menu_properties" /*! @define GW_REF_MENU_BAR_FILE_MENU_RECENTS_FILES The file menu -> recents files reference */ #define GW_REF_MENU_BAR_FILE_MENU_RECENTS_FILES "gw_menu_bar_file_menu_recents_files" /*! @define GW_REF_MENU_BAR_FILE_MENU_EXIT The file menu -> exit reference */ #define GW_REF_MENU_BAR_FILE_MENU_EXIT "gw_menu_bar_file_menu_exit" /*! @define GW_REF_MENU_BAR_FILE_MENU The file menu reference */ #define GW_REF_MENU_BAR_FILE_MENU "gw_menu_bar_file_menu" GtkWidget * gw_menu_file_create ( GtkWindow *w, GtkAccelGroup *ag, GtkWidget *parent) { GtkWidget *gw_menu_file_header = NULL; GtkWidget *menu_file = NULL; GtkWidget *gw_menu_file_new = NULL; GtkWidget *gw_menu_file_open = NULL; GtkWidget *gw_menu_file_save = NULL; GtkWidget *gw_menu_file_saveas = NULL; GtkWidget *gw_menu_file_close = NULL; GtkWidget *gw_menu_file_separator = NULL; GtkWidget *gw_menu_file_import = NULL; GtkWidget *gw_menu_file_import_items = NULL; GtkWidget *gw_menu_file_export = NULL; GtkWidget *gw_menu_file_export_items = NULL; GtkWidget *gw_menu_file_properties = NULL; GtkWidget *gw_menu_file_recents_files = NULL; GtkWidget *gw_menu_file_recents_files_items = NULL; GtkWidget *gw_menu_file_exit = NULL; GtkAccelGroup *gw_menu_file_ag = NULL; guint tmp_key; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Menu file header */ gw_menu_file_header = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_File"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_file_header)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_file_header, "activate-item", ag, tmp_key, GDK_MOD1_MASK, 0); #endif gtk_widget_ref ( gw_menu_file_header); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_HEADER, gw_menu_file_header, (GtkDestroyNotify) gtk_widget_unref); menu_file = gtk_menu_new ( ); gtk_widget_ref ( menu_file); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU, menu_file, (GtkDestroyNotify) gtk_widget_unref); gtk_menu_item_set_submenu ( GTK_MENU_ITEM ( gw_menu_file_header), menu_file); #if defined ( HAVE_GTK12) gw_menu_file_ag = gtk_menu_ensure_uline_accel_group ( GTK_MENU ( menu_file)); #else gw_menu_file_ag = gtk_accel_group_new ( ); #endif /* Menu file -> new */ gw_menu_file_new = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_New"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_file_new)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_file_new, "activate-item", gw_menu_file_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_file_new); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_NEW, gw_menu_file_new, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_new); gtk_widget_add_accelerator ( gw_menu_file_new, "activate", ag, GDK_n, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_signal_connect ( GTK_OBJECT ( gw_menu_file_new), "activate", GTK_SIGNAL_FUNC ( gw_menu_file_new_click), w); /* Menu file -> open */ gw_menu_file_open = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Open"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_file_open)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_file_open, "activate-item", gw_menu_file_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_file_open); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_OPEN, gw_menu_file_open, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_open); gtk_widget_add_accelerator ( gw_menu_file_open, "activate", ag, GDK_o, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_signal_connect ( GTK_OBJECT ( gw_menu_file_open), "activate", GTK_SIGNAL_FUNC ( gw_menu_file_open_click), w); /* Menu file -> save */ gw_menu_file_save = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Save"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_file_save)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_file_save, "activate-item", gw_menu_file_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_file_save); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_SAVE, gw_menu_file_save, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_save); gtk_widget_add_accelerator ( gw_menu_file_save, "activate", ag, GDK_s, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_signal_connect ( GTK_OBJECT ( gw_menu_file_save), "activate", GTK_SIGNAL_FUNC ( gw_menu_file_save_click), w); /* Menu file -> save as */ gw_menu_file_saveas = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "Sav_e as"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_file_saveas)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_file_saveas, "activate-item", gw_menu_file_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_file_saveas); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_SAVEAS, gw_menu_file_saveas, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_saveas); gtk_widget_add_accelerator ( gw_menu_file_saveas, "activate", ag, GDK_e, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_signal_connect ( GTK_OBJECT ( gw_menu_file_saveas), "activate", GTK_SIGNAL_FUNC ( gw_menu_file_saveas_click), w); /* Menu file -> close */ gw_menu_file_close = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "C_lose"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_file_close)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_file_close, "activate-item", gw_menu_file_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_file_close); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_CLOSE, gw_menu_file_close, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_close); gtk_widget_add_accelerator ( gw_menu_file_close, "activate", ag, GDK_f, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_signal_connect ( GTK_OBJECT ( gw_menu_file_close), "activate",GTK_SIGNAL_FUNC ( gw_menu_file_close_click), w); /* Menu file -> separator */ gw_menu_file_separator = gtk_menu_item_new ( ); gtk_widget_ref ( gw_menu_file_separator); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_SEPARATOR, gw_menu_file_separator, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_separator); gtk_widget_set_sensitive ( gw_menu_file_separator, FALSE); /* Menu file -> import catalog */ gw_menu_file_import = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "Import"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_file_import)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_file_import, "activate-item", gw_menu_file_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_file_import); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_IMPORT, gw_menu_file_import, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_import); // gtk_widget_add_accelerator ( gw_menu_file_import, "activate", ag, GDK_m, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gw_menu_file_import_items = gtk_menu_new ( ); gtk_menu_item_set_submenu ( GTK_MENU_ITEM ( gw_menu_file_import), gw_menu_file_import_items); /* Menu file -> export catalog */ gw_menu_file_export = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "Export"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_file_export)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_file_export, "activate-item", gw_menu_file_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_file_export); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_EXPORT, gw_menu_file_export, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_export); // gtk_widget_add_accelerator ( gw_menu_file_export, "activate", ag, GDK_x, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gw_menu_file_export_items = gtk_menu_new ( ); gtk_menu_item_set_submenu ( GTK_MENU_ITEM ( gw_menu_file_export), gw_menu_file_export_items); /* Menu file -> separator */ gw_menu_file_separator = gtk_menu_item_new ( ); gtk_widget_ref ( gw_menu_file_separator); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_SEPARATOR, gw_menu_file_separator, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_separator); gtk_widget_set_sensitive ( gw_menu_file_separator, FALSE); /* Menu file -> properties */ gw_menu_file_properties = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Properties"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_file_properties)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_file_properties, "activate-item", gw_menu_file_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_file_properties); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_PROPERTIES, gw_menu_file_properties, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_properties); gtk_widget_add_accelerator ( gw_menu_file_properties, "activate", ag, GDK_p, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_signal_connect ( GTK_OBJECT ( gw_menu_file_properties), "activate", GTK_SIGNAL_FUNC ( gw_menu_file_properties_click), w); /* Menu file -> separator */ gw_menu_file_separator = gtk_menu_item_new ( ); gtk_widget_ref ( gw_menu_file_separator); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_SEPARATOR, gw_menu_file_separator, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_separator); gtk_widget_set_sensitive ( gw_menu_file_separator, FALSE); /* Menu file -> recents files */ gw_menu_file_recents_files = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Recents files"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_file_recents_files)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_file_recents_files, "activate-item", gw_menu_file_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_file_recents_files); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_RECENTS_FILES, gw_menu_file_recents_files, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_recents_files); gtk_widget_add_accelerator ( gw_menu_file_recents_files, "activate", ag, GDK_r, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gw_menu_file_recents_files_items = gtk_menu_new ( ); gtk_menu_item_set_submenu ( GTK_MENU_ITEM ( gw_menu_file_recents_files), gw_menu_file_recents_files_items); /* Menu file -> separator */ gw_menu_file_separator = gtk_menu_item_new ( ); gtk_widget_ref ( gw_menu_file_separator); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_SEPARATOR, gw_menu_file_separator, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_separator); gtk_widget_set_sensitive ( gw_menu_file_separator, FALSE); /* Menu file -> exit */ gw_menu_file_exit = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "E_xit"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_file_exit)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_file_exit, "activate-item", gw_menu_file_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_file_exit); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_EXIT, gw_menu_file_exit, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_file), gw_menu_file_exit); gtk_widget_add_accelerator ( gw_menu_file_exit, "activate", ag, GDK_x, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_signal_connect ( GTK_OBJECT ( gw_menu_file_exit), "activate", GTK_SIGNAL_FUNC ( gw_menu_file_exit_click), w); return gw_menu_file_header; } gboolean gw_menu_file_set_import ( GtkWindow *w, gchar **plugins) { gboolean result = FALSE; GtkMenuItem *import_menu = NULL; GtkWidget *menu_item_import = NULL; GtkWidget *import_submenu = NULL; guint i = 0; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (w != NULL) && (plugins != NULL) ) { import_menu = GTK_MENU_ITEM ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_IMPORT)); if ( import_menu != NULL ) { gtk_menu_item_remove_submenu ( import_menu); #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : Creating a new submenu...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif import_submenu = gtk_menu_new ( ); gtk_menu_item_set_submenu ( import_menu, import_submenu); for ( i = 0; plugins[i] != NULL; i++) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : Creating a new submenu item at %d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); g_print ( "*** GW - %s (%d) :: %s() : Creating a new submenu item => %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, plugins[i]); #endif g_strdup_to_gtk_text ( plugins[i], text_utf8); menu_item_import = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_container_add ( GTK_CONTAINER ( import_submenu), menu_item_import); gtk_signal_connect ( GTK_OBJECT ( menu_item_import), "activate", GTK_SIGNAL_FUNC ( gw_menu_file_import_item_click), plugins[i]); } gtk_widget_show_all ( GTK_WIDGET ( import_menu)); result = TRUE; } #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : import plugins are added.\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } return result; } gboolean gw_menu_file_set_export ( GtkWindow *w, gchar **plugins) { gboolean result = FALSE; GtkMenuItem *import_menu = NULL; GtkWidget *menu_item_import = NULL; GtkWidget *import_submenu = NULL; guint i = 0; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (w != NULL) && (plugins != NULL) ) { import_menu = GTK_MENU_ITEM ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_EXPORT)); if ( import_menu != NULL ) { gtk_menu_item_remove_submenu ( import_menu); #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : Creating a new submenu...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif import_submenu = gtk_menu_new ( ); gtk_menu_item_set_submenu ( import_menu, import_submenu); for ( i = 0; plugins[i] != NULL; i++) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : Creating a new submenu item at %d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); g_print ( "*** GW - %s (%d) :: %s() : Creating a new submenu item => %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, plugins[i]); #endif g_strdup_to_gtk_text ( plugins[i], text_utf8); menu_item_import = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_container_add ( GTK_CONTAINER ( import_submenu), menu_item_import); /* Warning use a gint value instead of a gpointer value!! */ gtk_signal_connect ( GTK_OBJECT ( menu_item_import), "activate", GTK_SIGNAL_FUNC ( gw_menu_file_export_item_click), /*GUINT_TO_POINTER ( i)*/g_strdup ( plugins[i])); } gtk_widget_show_all ( GTK_WIDGET ( import_menu)); result = TRUE; } #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : export plugins are added.\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } return result; } gboolean gw_menu_file_set_recents_files ( GtkWindow *w, gchar **files) { gboolean result = FALSE; GtkMenuItem *recents_files_menu = NULL; GtkWidget *menu_item_recents_files = NULL; GtkWidget *recents_files_submenu = NULL; guint i = 0; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (w != NULL) && (files != NULL) ) { recents_files_menu = GTK_MENU_ITEM ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_MENU_BAR_FILE_MENU_RECENTS_FILES)); if ( recents_files_menu != NULL ) { gtk_menu_item_remove_submenu ( recents_files_menu); #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : Creating a new submenu...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif recents_files_submenu = gtk_menu_new ( ); gtk_menu_item_set_submenu ( recents_files_menu, recents_files_submenu); for ( i = 0; files[i] != NULL; i++) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : Creating a new submenu item at %d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i); g_print ( "*** GW - %s (%d) :: %s() : Creating a new submenu item => %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, files[i]); #endif g_strdup_to_gtk_text ( files[i], text_utf8); menu_item_recents_files = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_container_add ( GTK_CONTAINER ( recents_files_submenu), menu_item_recents_files); /* Warning use a gint value instead of a gpointer value!! */ gtk_signal_connect ( GTK_OBJECT ( menu_item_recents_files), "activate", GTK_SIGNAL_FUNC ( gw_menu_file_recents_files_item_click), GUINT_TO_POINTER ( i)); } gtk_widget_show_all ( GTK_WIDGET ( recents_files_menu)); result = TRUE; } #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : recents opened catalog files are added.\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } return result; } gwhere-0.2.3/src/gui/gwmenufile.h0000744000175000017500000000460110216115544015326 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwmenufile.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for menu file. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwmenufile.c * @author Author */ #ifndef GW_GUI_GW_MENU_FILE_H #define GW_GUI_GW_MENU_FILE_H /*! * @function gw_menu_file_create * @abstract Creates a menu file. * @discussion This function creates a menu file. * @param w refence to the main window * @param ag accel group * @param parent reference to the container * @result the menu file.
* Returns NULL when an error occured. */ GtkWidget * gw_menu_file_create ( GtkWindow *w, GtkAccelGroup *ag, GtkWidget *parent); /*! * @function gw_menu_file_set_recents_files * @abstract Sets the list of recents opened files. * @discussion This function sets the list of recents opened files. * @param w refence to the main window * @param files list of files * @result an error code.
* Returns TRUE when it's done.
* Returns FALSE when an error occured.
*/ gboolean gw_menu_file_set_recents_files ( GtkWindow *w, gchar **files); gboolean gw_menu_file_set_import ( GtkWindow *w, gchar **plugins); gboolean gw_menu_file_set_export ( GtkWindow *w, gchar **plugins); #endif gwhere-0.2.3/src/gui/gwmenufilecallback.c0000744000175000017500000012620610247421307017005 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwmenufilecallback.h" #include /* strcmp strlen */ #include "data/gwdata.h" #include "res/gwres.h" #include "gwpropertiesbox.h" #include "gwstatusbar.h" #include "gwcapturebox.h" #include "gwwindowboxmail.h" #include "gwmsgbox.h" #include "gwdialogbox.h" #include "gwmsgbox.h" #include "gwfileselectionbox.h" #include "gwnotebookmanagmentcallback.h" #include "gwnotebookcatalog.h" #include "../gwhelper.h" #include "../gwcatalogmanager.h" #include "../gwapplicationmanager.h" #include "../gwguimanager.h" gboolean gw_menu_file_new_click ( GtkMenuItem *mi, GtkWindow *w) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; gchar *msg = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "creating new catalog ==> memory status : "); g_mem_profile ( ); #endif if ( gw_pm_get_current_catalog_plugin ( ) == NULL) { gw_msg_box_create ( w, _( "New catalog"), _( "There is no available catalog plugin")); } else if ( w != NULL ) { /* Checks if a catalog has been modified */ if ( gw_helper_db_catalog_is_open_and_modified ( ) ) { /* If has been modified, ask to save it before create new catalog */ plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); catalog = plugin->gw_db_catalog_get_db_catalog ( context); msg = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_helper_db_catalog_get_full_name ( catalog), "\n", NULL); gw_dialog_box_create ( w, _( "New file"), msg, GTK_SIGNAL_FUNC ( gw_menu_file_new_save_file_ok), GTK_SIGNAL_FUNC ( gw_menu_file_new_save_file_no), NULL, NULL); g_free ( msg); gw_db_catalog_free ( catalog); } else { /* Else ask the new catalog name */ gw_capture_box_create ( w, _( "New catalog"), _( "Enter catalog name"), "", GTK_SIGNAL_FUNC ( gw_menu_file_new_file_ok)); } } return TRUE; } gboolean gw_menu_file_open_click ( GtkMenuItem *mi, GtkWindow *w) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; gchar *msg = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( gw_pm_get_current_catalog_plugin ( ) == NULL) { gw_msg_box_create ( w, _( "Open catalog"), _( "There is no available catalog plugin")); } else if ( w != NULL ) { /* Checks if a catalog has been modified */ if ( gw_helper_db_catalog_is_open_and_modified ( ) ) { /* If has been modified, ask to save it before open an existing catalog */ plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); catalog = plugin->gw_db_catalog_get_db_catalog ( context); msg = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_helper_db_catalog_get_full_name ( catalog), "\n", NULL); gw_dialog_box_create ( w, _( "Open file"), msg, GTK_SIGNAL_FUNC ( gw_menu_file_open_save_file_ok), GTK_SIGNAL_FUNC ( gw_menu_file_open_save_file_no), NULL, NULL); g_free ( msg); gw_db_catalog_free ( catalog); } else { /* Else opens file selection box */ gw_file_selection_box_create ( _( "Open catalog"), NULL, (GtkSignalFunc)gw_menu_file_open_file_ok, (GtkSignalFunc)gw_menu_file_open_file_cancel); } } return TRUE; } gboolean gw_menu_file_close_click ( GtkMenuItem *mi, GtkWindow *w) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; gchar *msg = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "closing new catalog ==> memory status : "); g_mem_profile ( ); #endif /* Checks if a catalog has been modified */ if ( gw_helper_db_catalog_is_open_and_modified ( ) ) { /* If has been modified, ask to save it before close the current catalog */ plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); catalog = plugin->gw_db_catalog_get_db_catalog ( context); msg = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_helper_db_catalog_get_full_name ( catalog), "\n", NULL); gw_dialog_box_create ( w, _( "Close file"), msg, GTK_SIGNAL_FUNC ( gw_menu_file_close_save_file_ok), GTK_SIGNAL_FUNC ( gw_menu_file_close_save_file_no), NULL, NULL); g_free ( msg); gw_db_catalog_free ( catalog); } else if ( gw_helper_db_catalog_is_open ( ) ) { /* Else closes it */ gw_am_close_catalog ( FALSE); result = TRUE; } else { gw_msg_box_create ( w, _( "Close file"), _( "No catalog is opened")); } #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "new catalog closed ==> memory status : "); g_mem_profile ( ); #endif return result; } gboolean gw_menu_file_send_mail_click ( GtkMenuItem *mi, GtkWindow *w) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; gboolean result = FALSE; gchar *msg = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { /* Check if the mail options if configured. */ if ( gw_am_can_send_mail ( ) ) { /* Checks if a catalog has been modified */ if ( gw_helper_db_catalog_is_open_and_modified ( ) ) { /* If has been modified, ask to save it before send the current catalog by mail */ plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); catalog = plugin->gw_db_catalog_get_db_catalog ( context); msg = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_helper_db_catalog_get_full_name ( catalog), "\n", NULL); gw_dialog_box_create ( w, _( "Send file by mail"), msg, GTK_SIGNAL_FUNC ( gw_menu_file_send_mail_save_file_ok), GTK_SIGNAL_FUNC ( gw_menu_file_send_mail_save_file_no), NULL, NULL); g_free ( msg); gw_db_catalog_free ( catalog); } else if ( gw_helper_db_catalog_is_open ( ) ) { /* Else send it by mail */ plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); catalog = plugin->gw_db_catalog_get_db_catalog ( context); gw_mail_window_box_create ( w, gw_helper_db_catalog_get_full_name ( catalog)); gw_db_catalog_free ( catalog); } else { gw_msg_box_create ( w, _( "Send file by mail"), _( "No catalog is opened")); } result = TRUE; } else { gw_msg_box_create ( w, _( "Send file by mail"), _( "Please configure mail options in the settings in order to send mails.")); } } return result; } gboolean gw_menu_file_send_mail_save_file_ok ( GtkWidget *bt, GtkWindow *dg) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( dg != NULL) { /* Destroys the dialog box. */ gtk_widget_destroy ( GTK_WIDGET ( dg)); /* Checks if a catalog context is open */ if ( context != NULL) { plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); catalog = plugin->gw_db_catalog_get_db_catalog ( context); /* Checks if it's a new catalog (in this case his full name is "./[catalog_full_name]"). */ if ( gw_helper_db_catalog_is_new ( catalog)) { /* If it's a new catalog, asks a file name. */ gw_file_selection_box_create ( _( "Save as catalog"), gw_helper_db_catalog_get_usefull_name ( catalog), (GtkSignalFunc)gw_menu_file_send_mail_saveas_file_selection_ok, NULL); } else { /* Else save it directly and send it by mail. */ gw_menu_file_save_click ( NULL, NULL); /* Shows the mail window box. */ gw_mail_window_box_create ( window, gw_helper_db_catalog_get_full_name ( catalog)); } gw_db_catalog_free ( catalog); result = TRUE; } else { } } return result; } gboolean gw_menu_file_send_mail_save_file_no ( GtkWidget *bt, GtkWindow *dg) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( dg != NULL ) { /* Destroys the dialog box. */ gtk_widget_destroy ( GTK_WIDGET ( dg)); /* Checks if a catalog context is open */ if ( context != NULL) { plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); catalog = plugin->gw_db_catalog_get_db_catalog ( context); if ( gw_helper_db_catalog_is_new ( catalog)) { gw_msg_box_create ( window, _( "Send file by mail"), _( "The current catalog is never be saved, cannot send it")); } else { /* Shows the mail window box. */ gw_mail_window_box_create ( window, gw_db_catalog_get_db_name ( catalog)); } gw_db_catalog_free ( catalog); result = TRUE; } else { } } return result; } gboolean gw_menu_file_send_mail_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs) { GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; gboolean result = FALSE; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( GTK_FILE_SELECTION ( fs)->selection_entry)), text_utf8); if ( (strlen ( text_utf8) > 0 ) && (strcmp ( text_utf8, "") != 0) ) { // /* Updates informations of opened catalog. */ // catalog = ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_db_catalog ( gw_am_get_current_catalog_context ( )); /* Updates informations of opened catalog. */ switch ( gw_am_save_catalog ( gtk_file_selection_get_filename ( fs))) { case 0: break; case GWECATNOMODIFIED: break; case GWECATNOFILENAME: break; case GWECATCANNOTSAVE: break; default: break; } /* Closes the file selection box. */ gtk_widget_destroy ( GTK_WIDGET ( fs)); /* Shows the mail window box. */ plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); catalog = plugin->gw_db_catalog_get_db_catalog ( context); gw_mail_window_box_create ( window, gw_db_catalog_get_db_name ( catalog)); gw_db_catalog_free ( catalog); } g_free ( text_utf8); result = TRUE; } return result; } gboolean gw_menu_file_properties_click ( GtkMenuItem *mi, GtkWindow *w) { GtkCTree *tree = gw_gui_manager_main_interface_get_tree ( ); GtkCTreeNode *root = gw_gui_manager_main_interface_get_tree_root ( ); gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); root = gw_gui_manager_main_interface_get_tree_root ( ); /* Checks if a catalog is opened */ //TODO use helper functions if ( gw_am_get_current_catalog_context ( ) != NULL) { gw_properties_box_create_catalog ( mi, w, tree, root); return TRUE; } else { gw_msg_box_create ( w, _( "Catalog properties"), _( "No catalog is opened")); } } return result; } gboolean gw_menu_file_save_click ( GtkMenuItem *mi, GtkWindow *w) { gboolean result = FALSE; GWDBCatalog *catalog = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif //TODO use helper functions if ( gw_am_get_current_catalog_context ( ) != NULL) { switch ( gw_am_save_catalog ( NULL)) { case 0: result = TRUE; break; case GWECATNOMODIFIED: break; case GWECATNOFILENAME: //TODO should we set the catalog title as catalog file name by default in the file selection box?? catalog = ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_db_catalog ( gw_am_get_current_catalog_context ( )); gw_file_selection_box_create ( _( "Save as catalog"), gw_helper_db_catalog_get_usefull_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); gw_db_catalog_free ( catalog); break; case GWECATCANNOTSAVE: break; default: break; } } else { gw_msg_box_create ( w, _( "Save catalog"), _( "No catalog is opened")); } return result; } gboolean gw_menu_file_saveas_click ( GtkMenuItem *mi, GtkWindow *w) { GWDBCatalog *catalog = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Checks if a catalog is opened */ //TODO use helper functions if ( gw_am_get_current_catalog_context ( ) != NULL) { catalog = ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_db_catalog ( gw_am_get_current_catalog_context ( )); gw_file_selection_box_create ( _( "Save as catalog"), gw_helper_db_catalog_get_usefull_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); gw_db_catalog_free ( catalog); } else { gw_msg_box_create ( w, _( "Save as catalog"), _( "No catalog is opened")); } return TRUE; } gboolean gw_menu_file_exit_click ( GtkMenuItem *mi, GtkWindow *w) { GWDBCatalog *catalog = NULL; // GtkCTree *tree = NULL; // GtkCTreeNode *root = NULL; GtkWindow *window = NULL; gchar *msg[2]; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { window = gw_gui_manager_main_interface_get_main_window ( ); /* Checks if a catalog has been modified */ if ( gw_am_get_current_catalog_context ( ) != NULL ) { catalog = ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_db_catalog ( gw_am_get_current_catalog_context ( )); if ( catalog!=NULL && gw_db_catalog_is_modified ( catalog) ) { /* If has been modified, ask to save it before exit program */ msg[0] = g_strconcat ( _( "Quit "), PROJECT_NAME, NULL); // if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { // msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_db_name ( catalog), "\n", NULL); // } else { // msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_db_catalog_get_name ( catalog), "\n", NULL); // } msg[1] = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_helper_db_catalog_get_full_name ( catalog), "\n", NULL); gw_dialog_box_create ( window, msg[0], msg[1], GTK_SIGNAL_FUNC ( gw_menu_file_exit_save_file_ok), GTK_SIGNAL_FUNC ( gw_menu_file_exit_save_file_no), NULL, NULL); g_free ( msg[0]); g_free ( msg[1]); } else { /* Else exit program */ gw_menu_file_exit ( ); } } else { /* Else exit program */ gw_menu_file_exit ( ); } } return TRUE; } gboolean gw_menu_file_open_file_ok ( GtkObject *ob, GtkFileSelection *fs) { GWDBContext *context = gw_am_get_current_catalog_context ( ); // GWDBCatalog *catalog = ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_db_catalog ( gw_am_get_current_catalog_context ( )); gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : beginning...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( GTK_FILE_SELECTION ( fs)->selection_entry)), text_utf8); /* Checkes if a catalog has been selected */ if ( (strlen ( text_utf8) > 0) && (strcmp ( text_utf8, "") != 0) ) { gtk_widget_hide ( GTK_WIDGET ( fs)); //TODO use helper functions if ( context != NULL ) { /* If a catalog is opened, don't save it. Destroys the tree and remove the window title. */ #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : a catalog is already opened\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif // gw_notebook_catalog_ctree_destroy_all ( ); gw_am_close_catalog ( FALSE); } /* Loads the catalog. */ gw_am_load_catalog ( gtk_file_selection_get_filename ( fs)); gtk_widget_destroy ( GTK_WIDGET ( fs)); } g_free ( text_utf8); } return FALSE; } gboolean gw_menu_file_open_file_cancel ( GtkObject *ob, GtkFileSelection *fs) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL) { gtk_widget_destroy ( GTK_WIDGET ( fs)); return TRUE; } return FALSE; } gboolean gw_menu_file_new_file_ok ( GtkWidget *bt, GtkWindow *w) { gchar *name = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif name = gw_capture_box_get_text ( w); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : catalog name = %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, name); #endif if ( name != NULL && (strlen ( name) > 0) ) { /* Checks if a catalog is allready opened */ if ( gw_am_get_current_catalog_context ( ) != NULL ) { /* If is opened, closes it */ #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : a catalog is already opened\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gw_am_close_catalog ( FALSE); } else { } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : initializes the catalog data structure\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gw_am_new_catalog ( name); gtk_widget_destroy ( GTK_WIDGET ( w)); } if ( name != NULL) { g_free ( name); } #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "new catalog created ==> memory status : "); g_mem_profile ( ); #endif return TRUE; } gboolean gw_menu_file_new_save_file_ok ( GtkWidget *bt, GtkWindow *dg) { GWDBCatalog *catalog = ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_db_catalog ( gw_am_get_current_catalog_context ( )); GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_destroy ( GTK_WIDGET ( dg)); /* Checks if is a new catalog (in this case his full name is "./[catalog_full_name]"). */ if ( gw_helper_db_catalog_is_new ( catalog)) { // if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { /* If it's a new catalog, asks a file name. */ // gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); gw_file_selection_box_create ( _( "Save as catalog"), gw_helper_db_catalog_get_usefull_name ( catalog), (GtkSignalFunc)gw_menu_file_new_saveas_file_selection_ok, NULL); } else { /* Else save it directly and displays a fill box of new catalog */ gw_menu_file_save_click ( NULL, NULL); gw_capture_box_create ( window, _( "New catalog"), _( "Enter catalog name"), "", GTK_SIGNAL_FUNC ( gw_menu_file_new_file_ok)); } return TRUE; } gboolean gw_menu_file_new_save_file_no ( GtkWidget *bt, GtkWindow *dg) { GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( dg != NULL ) { gtk_widget_destroy ( GTK_WIDGET ( dg)); gw_capture_box_create ( window, _("New catalog"), _("Enter catalog name"), "", GTK_SIGNAL_FUNC ( gw_menu_file_new_file_ok)); result = TRUE; } return result; } gboolean gw_menu_file_new_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs) { GtkWindow *window = NULL; gchar *text_utf8[2]; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( GTK_FILE_SELECTION ( fs)->selection_entry)), text_utf8[0]); if ( (strlen ( text_utf8[0]) > 0) && (strcmp ( text_utf8[0], "") != 0) ) { /* Saves the catalog. */ g_strdup_from_gtk_text ( gtk_file_selection_get_filename ( fs), text_utf8[1]); switch ( gw_am_save_catalog ( text_utf8[1])) { case 0: break; case GWECATNOMODIFIED: break; case GWECATNOFILENAME: break; case GWECATCANNOTSAVE: break; default: break; } g_free ( text_utf8[1]); /* Close the file selection box and displays a new fill box of new catalog. */ gtk_widget_destroy ( GTK_WIDGET ( fs)); window = gw_gui_manager_main_interface_get_main_window ( ); gw_capture_box_create ( window, _("New catalog"), _("Enter catalog name"), "", GTK_SIGNAL_FUNC ( gw_menu_file_new_file_ok)); result = TRUE; } g_free ( text_utf8[0]); return result; } gboolean gw_menu_file_open_save_file_ok ( GtkWidget *bt, GtkWindow *dg) { GWDBCatalog *catalog = ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_db_catalog ( gw_am_get_current_catalog_context ( )); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_destroy ( GTK_WIDGET ( dg)); /* Checks if it's a new catalog (in this case his full name is ".[/catalog_full_name]"). */ if ( gw_helper_db_catalog_is_new ( catalog)) { // if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { /* If it's a new catalog, asks file name. */ // gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); gw_file_selection_box_create ( _( "Save as catalog"), gw_helper_db_catalog_get_usefull_name ( catalog), (GtkSignalFunc)gw_menu_file_open_saveas_file_selection_ok, NULL); } else { /* Else save it directly and displays a file selection box to select the catalog to open. */ gw_menu_file_save_click ( NULL, NULL); gw_file_selection_box_create ( _("Open catalog"), NULL, (GtkSignalFunc)gw_menu_file_open_file_ok, (GtkSignalFunc)gw_menu_file_open_file_cancel); } return TRUE; } gboolean gw_menu_file_open_save_file_no ( GtkWidget *bt, GtkWindow *dg) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( dg != NULL ) { gtk_widget_destroy ( GTK_WIDGET ( dg)); gw_file_selection_box_create ( _("Open catalog"), NULL, (GtkSignalFunc)gw_menu_file_open_file_ok, (GtkSignalFunc)gw_menu_file_open_file_cancel); result = TRUE; } return result; } gboolean gw_menu_file_open_recents_files_save_file_ok ( GtkWidget *bt, GtkWindow *dg) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; gpointer file_index = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif file_index = gw_dialog_box_get_user_data ( dg); gtk_widget_destroy ( GTK_WIDGET ( dg)); if ( context != NULL ) { plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); catalog = plugin->gw_db_catalog_get_db_catalog ( context); /* Checks if it's a new catalog (in this case his full name is ".[/catalog_full_name]"). */ if ( gw_helper_db_catalog_is_new ( catalog)) { gw_file_selection_box_create ( _( "Save as catalog"), gw_helper_db_catalog_get_usefull_name ( catalog), (GtkSignalFunc)gw_menu_file_open_recents_files_saveas_file_selection_ok, file_index); } else { /* Else save it directly and displays a file selection box to select the catalog to open. */ gw_menu_file_save_click ( NULL, NULL); /* Warning use a gint value instead of a gpointer value!! */ result = gw_am_load_catalog_from_recents_files ( GPOINTER_TO_UINT ( file_index)); } gw_db_catalog_free ( catalog); } else { /* Warning use a gint value instead of a gpointer value!! */ result = gw_am_load_catalog_from_recents_files ( GPOINTER_TO_UINT ( file_index)); } return result; } gboolean gw_menu_file_open_recents_files_save_file_no ( GtkWidget *bt, GtkWindow *dg) { gboolean result = FALSE; gpointer file_index = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( dg != NULL ) { file_index = gw_dialog_box_get_user_data ( dg); gtk_widget_destroy ( GTK_WIDGET ( dg)); gw_am_close_catalog ( FALSE); /* Warning use a gint value instead of a gpointer value!! */ result = gw_am_load_catalog_from_recents_files ( GPOINTER_TO_UINT ( file_index)); result = TRUE; } return result; } gboolean gw_menu_file_open_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs) { gboolean result = FALSE; gchar *text_utf8[2]; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( GTK_FILE_SELECTION ( fs)->selection_entry)), text_utf8[0]); if ( (strlen ( text_utf8[0]) > 0) && (strcmp ( text_utf8[0], "") != 0) ) { /* Save the catalog. */ g_strdup_from_gtk_text ( gtk_file_selection_get_filename ( fs), text_utf8[1]); switch ( gw_am_save_catalog ( text_utf8[1])) { case 0: result = TRUE; break; case GWECATNOMODIFIED: break; case GWECATNOFILENAME: break; case GWECATCANNOTSAVE: break; default: break; } g_free ( text_utf8[1]); /* Closes the file selection box and displays a new fill box of new catalog. */ gtk_widget_destroy ( GTK_WIDGET ( fs)); gw_file_selection_box_create ( _( "Open catalog"), NULL, (GtkSignalFunc)gw_menu_file_open_file_ok, (GtkSignalFunc)gw_menu_file_open_file_cancel); } g_free ( text_utf8[0]); } return result; } gboolean gw_menu_file_open_recents_files_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs) { gboolean result = FALSE; gchar *text_utf8[2]; gpointer file_index = NULL; gchar *catalog_path_name = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( GTK_FILE_SELECTION ( fs)->selection_entry)), text_utf8[0]); /* Gets the real file name in the recents opened catalogs list, because after saving the current opened catalog, the wanted catalog in the recents list (may) will not have the same index. */ file_index = gw_file_selection_box_get_user_data ( GTK_WINDOW ( fs)); /* Warning use a gint value instead of a gpointer value!! */ catalog_path_name = gw_am_get_catalog_path_name_from_recents_files ( GPOINTER_TO_UINT ( file_index)); if ( (strlen ( text_utf8[0]) > 0) && (strcmp ( text_utf8[0], "") != 0) ) { /* Save the catalog. */ g_strdup_from_gtk_text ( gtk_file_selection_get_filename ( fs), text_utf8[1]); switch ( gw_am_save_catalog ( text_utf8[1])) { case 0: result = TRUE; break; case GWECATNOMODIFIED: break; case GWECATNOFILENAME: break; case GWECATCANNOTSAVE: break; default: break; } g_free ( text_utf8[1]); /* Closes the file selection box and displays a new fill box of new catalog. */ gtk_widget_destroy ( GTK_WIDGET ( fs)); result = gw_am_load_catalog ( catalog_path_name); } g_free ( text_utf8[0]); if ( catalog_path_name != NULL ) { g_free ( catalog_path_name); } } return result; } gboolean gw_menu_file_save_file_ok ( GtkWidget *bt, GtkWindow *dg) { GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; // GtkCTree *tree = NULL; // GtkCTreeNode *root = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_destroy ( GTK_WIDGET ( dg)); /* Checks if it's a new catalog (in this case his full name is "./[catalog_full_name]"). */ if ( context != NULL ) { catalog = ((GWCatalogPlugin*)gw_db_context_get_plugin ( context))->gw_db_catalog_get_db_catalog ( context); if ( gw_helper_db_catalog_is_new ( catalog)) { // if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { /* If it's a new catalog, asks un file name. */ // gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); gw_file_selection_box_create ( _( "Save as catalog"), gw_helper_db_catalog_get_usefull_name ( catalog), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); } else { /* Else save it directly. */ gw_menu_file_save_click ( NULL, NULL); } } else { } result = TRUE; return result; } gboolean gw_menu_file_save_file_no ( GtkWidget *bt, GtkWindow *dg) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( dg != NULL ) { gtk_widget_destroy ( GTK_WIDGET ( dg)); result = TRUE; } return result; } gboolean gw_menu_file_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs) { gboolean result = FALSE; gchar *text_utf8[2]; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( GTK_FILE_SELECTION ( fs)->selection_entry)), text_utf8[0]); g_print("save as %s\n",text_utf8[0]); if ( (strlen ( text_utf8[0]) > 0) && (strcmp ( text_utf8[0], "") != 0) ) { /* Save the opened catalog. */ g_strdup_from_gtk_text ( gtk_file_selection_get_filename ( fs), text_utf8[1]); switch ( gw_am_save_catalog ( text_utf8[1])) { case 0: result = TRUE; break; case GWECATNOMODIFIED: break; case GWECATNOFILENAME: gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_db_catalog ( gw_am_get_current_catalog_context ( ))), (GtkSignalFunc)gw_menu_file_saveas_file_selection_ok, NULL); break; case GWECATCANNOTSAVE: break; default: break; } g_free ( text_utf8[1]); /* Closes the file selection box. */ gtk_widget_destroy ( GTK_WIDGET ( fs)); } g_free ( text_utf8[0]); return result; } gboolean gw_menu_file_close_save_file_ok ( GtkWidget *bt, GtkWindow *dg) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_destroy ( GTK_WIDGET ( dg)); if ( context != NULL ) { plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); catalog = plugin->gw_db_catalog_get_db_catalog ( context); /* Checks if it's a new catalog (in this case his full name is "./[catalog_full_name]"). */ if ( gw_helper_db_catalog_is_new ( catalog)) { /* If it's a new catalog, asks a file name. */ gw_file_selection_box_create ( _( "Save as catalog"), gw_helper_db_catalog_get_usefull_name ( catalog), (GtkSignalFunc)gw_menu_file_close_saveas_file_selection_ok, NULL); } else { /* Else save it directly and close it. */ gw_menu_file_save_click ( NULL, NULL); gw_am_close_catalog ( FALSE); } gw_db_catalog_free ( catalog); result = TRUE; } else { } return result; } gboolean gw_menu_file_close_save_file_no ( GtkWidget *bt, GtkWindow *dg) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( dg != NULL ) { gw_am_close_catalog ( FALSE); gtk_widget_destroy ( GTK_WIDGET ( dg)); result = TRUE; } return result; } gboolean gw_menu_file_close_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs) { GWDBCatalog *catalog = ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_db_catalog ( gw_am_get_current_catalog_context ( )); gboolean result = FALSE; gchar *text_utf8[2]; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( GTK_FILE_SELECTION ( fs)->selection_entry)), text_utf8[0]); if ( (strlen ( text_utf8[0]) > 0) && (strcmp ( text_utf8[0], "") != 0) ) { /* Updates informations of opened catalog. */ //TODO use helper functions if ( catalog != NULL ) { g_strdup_from_gtk_text ( gtk_file_selection_get_filename ( fs), text_utf8[1]); switch ( gw_am_save_catalog ( text_utf8[1]) ) { case 0: result = TRUE; break; case GWECATNOMODIFIED: break; case GWECATNOFILENAME: break; case GWECATCANNOTSAVE: break; default: break; } g_free ( text_utf8[1]); } else {} /* Closes the file selection box and closes the catalog. */ gtk_widget_destroy ( GTK_WIDGET ( fs)); gw_am_close_catalog ( FALSE); } g_free ( text_utf8[0]); return result; } gboolean gw_menu_file_exit_save_file_ok ( GtkWidget *bt, GtkWindow *dg) { GWDBCatalog *catalog = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_destroy ( GTK_WIDGET ( dg)); /* Checks if it's a new catalog (in this case his full name is "./[catalog_full_name]"). */ if ( gw_helper_db_catalog_is_new ( catalog)) { // if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { /* If it's a new catalog, asks a file name. */ // gw_file_selection_box_create ( _( "Save as catalog"), gw_db_catalog_get_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); gw_file_selection_box_create ( _( "Save as catalog"), gw_helper_db_catalog_get_usefull_name ( catalog), (GtkSignalFunc)gw_menu_file_exit_saveas_file_selection_ok, NULL); } else { /* Else save the catalog directly and exit program. */ gw_menu_file_save_click ( NULL, NULL); gw_menu_file_exit ( ); } result = TRUE; return result; } gboolean gw_menu_file_exit_save_file_no ( GtkWidget *bt, GtkWindow *dg) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( dg != NULL ) { gtk_widget_destroy ( GTK_WIDGET ( dg)); gw_menu_file_exit ( ); result = TRUE; } return result; } gboolean gw_menu_file_exit_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs) { gboolean result = FALSE; gchar *text_utf8[2]; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( GTK_FILE_SELECTION ( fs)->selection_entry)), text_utf8[0]); if ( (strlen ( text_utf8[0]) > 0) && (strcmp ( text_utf8[0], "") != 0) ) { /* Saves the catalog. */ g_strdup_from_gtk_text ( gtk_file_selection_get_filename ( fs), text_utf8[1]); switch ( gw_am_save_catalog ( text_utf8[1]) ) { case 0: result = TRUE; break; case GWECATNOMODIFIED: break; case GWECATNOFILENAME: break; case GWECATCANNOTSAVE: break; default: break; } g_free ( text_utf8[1]); /* Exits the program. */ gtk_widget_destroy ( GTK_WIDGET ( fs)); gw_menu_file_exit ( ); result = TRUE; } g_free ( text_utf8[0]); } return result; } void gw_menu_file_exit ( void) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Exit main program */ gw_am_close_catalog ( FALSE); gw_am_exit ( ); gtk_main_quit ( ); } gboolean gw_menu_file_import_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs) { GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); gboolean result = FALSE; gchar *short_db_name = NULL, *db_name = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( GTK_FILE_SELECTION ( fs)->selection_entry)), short_db_name); if ( short_db_name != NULL && strlen ( short_db_name) > 0 ) { /* Import the opened catalog */ g_strdup_from_gtk_text ( gtk_file_selection_get_filename ( fs), db_name); if ( gw_am_import_catalog_from ( gw_pm_get_current_catalog_plugin ( ), gw_pm_get_selected_import_catalog_plugin ( ), db_name, short_db_name) != -1) { gw_msg_box_create ( window, _( "Import catalog from"), _( "Catalog imported")); } else { gw_msg_box_create ( window, _( "Import catalog from"), _( "Catalog is not imported")); } if ( db_name != NULL) g_free ( db_name); /* Closes the file selection box. */ gtk_widget_destroy ( GTK_WIDGET ( fs)); /* Clears the selected catalog plugin to import */ gw_pm_set_selected_import_catalog_plugin ( NULL); result = TRUE; } else {} if ( short_db_name != NULL) g_free ( short_db_name); return result; } gboolean gw_menu_file_import_item_click ( GtkMenuItem *m, gpointer data) { GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); gchar *plugin_name = data; GWDBContext *context = gw_am_get_current_catalog_context ( ); gboolean result = FALSE; if ( context == NULL) { gw_pm_set_selected_import_catalog_plugin ( gw_pm_get_catalog_plugin ( plugin_name)); gw_file_selection_box_create ( _( "Import catalog from"), NULL, (GtkSignalFunc)gw_menu_file_import_file_selection_ok, NULL); result = TRUE; } else { gw_msg_box_create ( window, _( "Import catalog from"), _( "A catalog is already opened")); } return result; } gboolean gw_menu_file_export_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs) { GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); gboolean result = FALSE; gchar *short_db_name = NULL, *db_name = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( GTK_FILE_SELECTION ( fs)->selection_entry)), short_db_name); if ( short_db_name != NULL && strlen ( short_db_name) > 0 ) { /* Export the opened catalog */ g_strdup_from_gtk_text ( gtk_file_selection_get_filename ( fs), db_name); if ( gw_am_export_catalog_to ( gw_am_get_current_catalog_context ( ), gw_pm_get_selected_export_catalog_plugin ( ), db_name, short_db_name) != -1) { gw_msg_box_create ( window, _( "Export catalog to"), _( "Catalog exported")); } else { gw_msg_box_create ( window, _( "Export catalog to"), _( "Catalog is not exported")); } if ( db_name != NULL) g_free ( db_name); /* Closes the file selection box. */ gtk_widget_destroy ( GTK_WIDGET ( fs)); /* Clears the selected catalog plugin to export */ gw_pm_set_selected_export_catalog_plugin ( NULL); result = TRUE; } else {} if ( short_db_name != NULL) g_free ( short_db_name); return result; } gboolean gw_menu_file_export_item_click ( GtkMenuItem *m, gpointer data) { GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); gchar *plugin_name = data; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWCatalogPlugin *plugin = NULL; GWDBCatalog *catalog = NULL; gboolean result = FALSE; if ( context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL) { catalog = plugin->gw_db_catalog_get_db_catalog ( context); /* Sets the catalog plugin to export */ gw_pm_set_selected_export_catalog_plugin ( gw_pm_get_catalog_plugin ( plugin_name)); gw_file_selection_box_create ( _( "Export catalog to"), gw_helper_db_catalog_get_usefull_name ( catalog), (GtkSignalFunc)gw_menu_file_export_file_selection_ok, NULL); gw_db_catalog_free ( catalog); result = TRUE; } else {} } else { gw_msg_box_create ( window, _( "Export catalog to"), _( "No catalog is opened")); } return result; } gboolean gw_menu_file_recents_files_item_click ( GtkMenuItem *m, gpointer data) { GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; gboolean result = FALSE; gchar *msg = NULL; GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( gw_pm_get_current_catalog_plugin ( ) == NULL) { gw_msg_box_create ( window, _( "Open file"), _( "There is no available catalog plugin")); } else { /* Checks if a catalog context is open */ if ( context != NULL) { plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); catalog = plugin->gw_db_catalog_get_db_catalog ( context); /* Checks if a catalog has been modified */ if ( gw_db_catalog_is_modified ( catalog)) { /* If has been modified, ask to save it before open another catalog */ msg = g_strconcat ( _( "Would you want save catalog :\n\n"), gw_helper_db_catalog_get_full_name ( catalog), "\n", NULL); gw_dialog_box_create ( window, _( "Open file"), msg, GTK_SIGNAL_FUNC ( gw_menu_file_open_recents_files_save_file_ok), GTK_SIGNAL_FUNC ( gw_menu_file_open_recents_files_save_file_no), NULL, data); g_free ( msg); } else { gw_am_close_catalog ( FALSE); /* Warning use a gint value instead of a gpointer value!! */ result = gw_am_load_catalog_from_recents_files ( GPOINTER_TO_UINT ( data)); } gw_db_catalog_free ( catalog); } else { /* Warning use a gint value instead of a gpointer value!! */ result = gw_am_load_catalog_from_recents_files ( GPOINTER_TO_UINT ( data)); } } return result; } gwhere-0.2.3/src/gui/gwmenufilecallback.h0000744000175000017500000004053310216115544017007 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwmenufilecallback.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a link component between menu bar and functionalities. * @author Sébastien LECACHEUR * @version 1.0 2001/02/11 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwmenufilecallback.c * @author Author */ #ifndef GW_GUI_GW_MENU_FILE_CALLBACK_H #define GW_GUI_GW_MENU_FILE_CALLBACK_H /*! * @function gw_menu_file_new_click * @abstract Launches from menu file : new catalog. * @discussion This function launches from the menu file the functionality : new catalog. * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_new_click ( GtkMenuItem *mi, GtkWindow *w); /*! * @function gw_menu_file_open_click * @abstract Launches from menu file : open catalog. * @discussion This function launches from the menu file the functionality : open catalog. * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_open_click ( GtkMenuItem *mi, GtkWindow *w); /*! * @function gw_menu_file_save_click * @abstract Launches from menu file : save catalog. * @discussion This function launches from the menu file the functionality : save catalog. * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_save_click ( GtkMenuItem *mi, GtkWindow *w); /*! * @function gw_menu_file_saveas_click * @abstract Launches from menu file : save as catalog. * @discussion This function launches from the menu file the functionality : save as catalog. * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_saveas_click ( GtkMenuItem *mi, GtkWindow *w); /*! * @function gw_menu_file_close_click * @abstract Launches from menu file : close catalog. * @discussion This function launches from the menu file the functionality : close catalog. * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_close_click ( GtkMenuItem *mi, GtkWindow *w); /*! * @function gw_menu_file_send_mail_click * @abstract Launches from menu file : send catalog by mail. * @discussion This function launches from the menu file the functionality : send catalog by mail. * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_send_mail_click ( GtkMenuItem *mi, GtkWindow *w); /*! * @function gw_menu_file_properties_click * @abstract Launches from menu file : catalog properties. * @discussion This function launches from the menu file the functionality : catalog properties. * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_properties_click ( GtkMenuItem *mi, GtkWindow *w); /*! * @function gw_menu_file_exit_click * @abstract Launches from menu file : exit program. * @discussion This function launches from the menu file the functionality : exit program. * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_exit_click ( GtkMenuItem *mi, GtkWindow *w); /*! * @function gw_menu_file_open_file_ok * @abstract Opens the selected catalog. * @discussion This function is call when the user click on OK button in the file selection box. This function opens the selected catalog * @param ob gtk object invoker * @param fs the file selection box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_open_file_ok ( GtkObject *ob, GtkFileSelection *fs); /*! * @function gw_menu_file_open_file_cancel * @abstract Closes the file selection box. * @discussion This function is call when the user click on Cancel button in the file selection box. This function closes the file selection box * @param ob gtk object invoker * @param fs the file selection box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_open_file_cancel ( GtkObject *ob, GtkFileSelection *fs); /*! * @function gw_menu_file_new_file_ok * @abstract Creates a new catalog. * @discussion This function creates a new catalog * @param bt button invoker * @param w the capture box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_new_file_ok ( GtkWidget *bt, GtkWindow *w); /*! * @function gw_menu_file_new_save_file_ok * @abstract Saves the opened catalog and creates a new one. * @discussion This function saves the opened catalog and creates a new one * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_new_save_file_ok ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_new_save_file_no * @abstract Creates a new catalog without save the opened one. * @discussion This function creates a new catalog without save the opened one * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_new_save_file_no ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_new_saveas_file_selection_ok * @abstract Saves as file name the opened catalog and creates a new one. * @discussion This function saves as file name the opened catalog and creates a new one * @param bt button invoker * @param fs the file selection box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_new_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs); /*! * @function gw_menu_file_open_save_file_ok * @abstract Saves the opened catalog and opens one. * @discussion This function saves the opened catalog and opens one * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_open_save_file_ok ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_open_save_file_no * @abstract Opens a catalog without save the opened one. * @discussion This function opens a catalog without save the opened one * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_open_save_file_no ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_open_saveas_file_selection_ok * @abstract Saves as file name the opened catalog and opens one. * @discussion This function saves as file name the opened catalog and opens one * @param bt button invoker * @param fs the file selection box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_open_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs); /*! * @function gw_menu_file_open_recents_files_save_file_ok * @abstract Saves the opened catalog and opens one recent. * @discussion This function saves the opened catalog and opens one recent. * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_open_recents_files_save_file_ok ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_open_recents_files_save_file_no * @abstract Opens a catalog without save the opened one recent. * @discussion This function opens a catalog without save the opened one recent. * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_open_recents_files_save_file_no ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_open_recents_files_saveas_file_selection_ok * @abstract Saves as file name the opened catalog and opens one recent. * @discussion This function saves as file name the opened catalog and opens one recent. * @param bt button invoker * @param fs the file selection box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_open_recents_files_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs); /*! * @function gw_menu_file_save_file_ok * @abstract Saves the opened catalog. * @discussion This function saves the opened catalog * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_save_file_ok ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_save_file_no * @abstract Doesn't save the opened catalog. * @discussion This function doesn't save the opened catalog * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_save_file_no ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_saveas_file_selection_ok * @abstract Saves as file name the opened catalog. * @discussion This function saves as file name the opened catalog * @param bt button invoker * @param fs the file selection box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs); /*! * @function gw_menu_file_close_save_file_ok * @abstract Saves the opened catalog and close it. * @discussion This function saves the opened catalog and close it * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_close_save_file_ok ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_close_save_file_no * @abstract Closes a catalog without save it. * @discussion This function closes a catalog without save it * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_close_save_file_no ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_close_saveas_file_selection_ok * @abstract Saves as file name the opened catalog and closes it. * @discussion This function saves as file name the opened catalog and closes it * @param bt button invoker * @param fs the file selection box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_close_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs); /*! * @function gw_menu_file_send_mail_save_file_ok * @abstract Saves the opened catalog and sends it by mail. * @discussion This function saves the opened catalog and sends it by mail * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_send_mail_save_file_ok ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_send_mail_save_file_no * @abstract Sends a catalog by mail without save it. * @discussion This function sends a catalog by mail without save it * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_send_mail_save_file_no ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_send_mail_saveas_file_selection_ok * @abstract Saves as file name the opened catalog and sends it by mail. * @discussion This function saves as file name the opened catalog and sends it by mail * @param bt button invoker * @param fs the file selection box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_send_mail_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs); /*! * @function gw_menu_file_exit_save_file_ok * @abstract Saves the opened catalog and exits program. * @discussion This function saves the opened catalog and exits program * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_exit_save_file_ok ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_exit_save_file_no * @abstract Exits program without save the opened catalog. * @discussion This function exits program without save the opened catalog * @param bt button invoker * @param dg the dialog box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_exit_save_file_no ( GtkWidget *bt, GtkWindow *dg); /*! * @function gw_menu_file_exit_saveas_file_selection_ok * @abstract Saves as file name the opened catalog and exits program. * @discussion This function saves as file name the opened catalog and exits program * @param bt button invoker * @param fs the file selection box * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_exit_saveas_file_selection_ok ( GtkWidget *bt, GtkFileSelection *fs); /*! * @function gw_menu_file_exit * @abstract Exits program. * @discussion This function exits the program */ void gw_menu_file_exit ( void); /*! * @function gw_menu_file_recents_files_item_click * @abstract Loads the selected recent file. * @discussion This function loads the selected recent file. * @param m menu item invoker * @param data index, notes that it is a guint variable made with GUINT_TO_POINTER() * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_menu_file_recents_files_item_click ( GtkMenuItem *m, gpointer data); gboolean gw_menu_file_import_item_click ( GtkMenuItem *m, gpointer data); gboolean gw_menu_file_export_item_click ( GtkMenuItem *m, gpointer data); #endif gwhere-0.2.3/src/gui/gwmenuhelp.c0000744000175000017500000000707010023202520015320 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwmenuhelp.h" #include #include "gwmenuhelpcallback.h" #include "gwreferences.h" /*! @define GW_REF_MENU_BAR_HELP_MENU_HEADER The help menu header reference */ #define GW_REF_MENU_BAR_HELP_MENU_HEADER "gw_menu_bar_help_menu_header" /*! @define GW_REF_MENU_BAR_HELP_MENU The help menu reference */ #define GW_REF_MENU_BAR_HELP_MENU "gw_menu_bar_help_menu" /*! @define GW_REF_MENU_BAR_HELP_MENU_ABOUT The help menu -> about reference */ #define GW_REF_MENU_BAR_HELP_MENU_ABOUT "gw_menu_bar_help_menu_about" GtkWidget * gw_menu_help_create ( GtkWindow *w, GtkAccelGroup *ag, GtkWidget *parent) { GtkWidget *gw_menu_help_header = NULL; GtkWidget *menu_help = NULL; GtkWidget *gw_menu_help_about = NULL; GtkAccelGroup *gw_menu_help_ag = NULL; guint tmp_key; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Menu help header */ gw_menu_help_header = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Help"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_help_header)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_help_header, "activate-item", ag, tmp_key, GDK_MOD1_MASK, 0); #endif gtk_widget_ref ( gw_menu_help_header); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_HELP_MENU_HEADER, gw_menu_help_header, (GtkDestroyNotify) gtk_widget_unref); menu_help = gtk_menu_new ( ); gtk_widget_ref ( menu_help); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_HELP_MENU, menu_help, (GtkDestroyNotify) gtk_widget_unref); gtk_menu_item_set_submenu ( GTK_MENU_ITEM ( gw_menu_help_header), menu_help); #if defined ( HAVE_GTK12) gw_menu_help_ag = gtk_menu_ensure_uline_accel_group ( GTK_MENU ( menu_help)); #else gw_menu_help_ag = gtk_accel_group_new ( ); #endif /* Menu help -> about */ gw_menu_help_about = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "A_bout"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_help_about)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_help_about, "activate-item", gw_menu_help_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_help_about); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_HELP_MENU_ABOUT, gw_menu_help_about, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_help), gw_menu_help_about); gtk_widget_add_accelerator ( gw_menu_help_about, "activate", ag, GDK_b, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_signal_connect ( GTK_OBJECT ( gw_menu_help_about), "activate", GTK_SIGNAL_FUNC ( gw_menu_help_about_click), w); return gw_menu_help_header; } gwhere-0.2.3/src/gui/gwmenuhelp.h0000744000175000017500000000347610023202520015333 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwmenuhelp.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for menu help. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwmenuhelp.c * @author Author */ #ifndef GW_GUI_GW_MENU_HELP_H #define GW_GUI_GW_MENU_HELP_H /*! * @function gw_menu_help_create * @abstract Creates a menu help. * @discussion This function creates a menu help. * @param w refence to the main window * @param ag accel group * @param parent reference to the container * @result the menu help.
* Returns NULL when an error occured. */ GtkWidget * gw_menu_help_create ( GtkWindow *w, GtkAccelGroup *ag, GtkWidget *parent); #endif gwhere-0.2.3/src/gui/gwmenuhelpcallback.c0000744000175000017500000000232310023202520016771 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwmenuactioncallback.h" #include "gwwindowboxabout.h" #include "../gwguimanager.h" gboolean gw_menu_help_about_click ( GtkMenuItem *m, GtkWindow *w) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { gw_window_box_about_create ( w); result = TRUE; } return result; } gwhere-0.2.3/src/gui/gwmenuhelpcallback.h0000744000175000017500000000364010023202520017001 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwmenuhelpcallback.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a link component between menu help and functionalities. * @author Sébastien LECACHEUR * @version 1.0 2002/02/11 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwmenuhelpcallback.c * @author Author */ #ifndef GW_GUI_GW_MENU_HELP_CALLBACK_H #define GW_GUI_GW_MENU_HELP_CALLBACK_H /*! * @function gw_menu_help_about_click * @abstract Launches from menu help : about. * @discussion This function launches from the menu help the functionality : about * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE if the event is submited correctly.
* Returns FALSE when an error occured.
*/ gboolean gw_menu_help_about_click ( GtkMenuItem *m, GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwmenuoptions.c0000744000175000017500000000743410023202520016067 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwmenuoptions.h" #include #include "gwmenuoptionscallback.h" /*! @define GW_REF_MENU_BAR_OPTIONS_MENU_HEADER The options menu header reference */ #define GW_REF_MENU_BAR_OPTIONS_MENU_HEADER "gw_menu_bar_options_menu_header" /*! @define GW_REF_MENU_BAR_OPTIONS_MENU The options menu reference */ #define GW_REF_MENU_BAR_OPTIONS_MENU "gw_menu_bar_options_menu" /*! @define GW_REF_MENU_BAR_OPTIONS_MENU_SETTINGS The options menu -> settings reference */ #define GW_REF_MENU_BAR_OPTIONS_MENU_SETTINGS "gw_menu_bar_options_menu_settings" GtkWidget * gw_menu_options_create ( GtkWindow *w, GtkAccelGroup *ag, GtkWidget *parent) { GtkWidget *gw_menu_options_header = NULL; GtkWidget *menu_options = NULL; GtkWidget *gw_menu_options_settings = NULL; GtkAccelGroup *gw_menu_options_ag = NULL; guint tmp_key; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { /* Menu action header */ gw_menu_options_header = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Options"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_options_header)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_options_header, "activate-item", ag, tmp_key, GDK_MOD1_MASK, 0); #endif gtk_widget_ref ( gw_menu_options_header); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_OPTIONS_MENU_HEADER, gw_menu_options_header, (GtkDestroyNotify) gtk_widget_unref); menu_options = gtk_menu_new ( ); gtk_widget_ref ( menu_options); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_OPTIONS_MENU, menu_options, (GtkDestroyNotify) gtk_widget_unref); gtk_menu_item_set_submenu ( GTK_MENU_ITEM ( gw_menu_options_header), menu_options); #if defined ( HAVE_GTK12) gw_menu_options_ag = gtk_menu_ensure_uline_accel_group ( GTK_MENU ( menu_options)); #else gw_menu_options_ag = gtk_accel_group_new ( ); #endif /* Menu action -> edit categories */ gw_menu_options_settings = gtk_menu_item_new_with_label ( ""); g_strdup_to_gtk_text ( _( "Se_ttings"), text_utf8); tmp_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( gw_menu_options_settings)->child), text_utf8); g_free ( text_utf8); #if defined ( HAVE_GTK12) gtk_widget_add_accelerator ( gw_menu_options_settings, "activate-item", gw_menu_options_ag, tmp_key, 0, 0); #endif gtk_widget_ref ( gw_menu_options_settings); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MENU_BAR_OPTIONS_MENU_SETTINGS, gw_menu_options_settings, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( menu_options), gw_menu_options_settings); gtk_widget_add_accelerator ( gw_menu_options_settings, "activate", ag, GDK_t, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_signal_connect ( GTK_OBJECT ( gw_menu_options_settings), "activate", GTK_SIGNAL_FUNC ( gw_menu_options_settings_click), w); } return gw_menu_options_header; } gwhere-0.2.3/src/gui/gwmenuoptions.h0000744000175000017500000000343710023202520016073 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwmenuoptions.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for menu file. * @author Sébastien LECACHEUR * @version 1.0 2002/07/22 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwmenuoptions.c * @author Author */ #ifndef GW_GUI_MENU_OPTIONS_H #define GW_GUI_MENU_OPTIONS_H /*! * @function gw_menu_options_create * @abstract Creates a menu options. * @discussion This function creates a menu options. * @param w refence to the main window * @param ag accel group * @param parent reference to the container * @result the menu options */ GtkWidget * gw_menu_options_create ( GtkWindow *w, GtkAccelGroup *ag, GtkWidget *parent); #endif gwhere-0.2.3/src/gui/gwmenuoptionscallback.c0000744000175000017500000000230210023202520017531 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwmenuoptionscallback.h" #include "gwsettingswindowbox.h" gboolean gw_menu_options_settings_click ( GtkMenuItem *m, GtkWindow *w) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { gw_settings_window_box_create ( w); result = TRUE; } return result; } gwhere-0.2.3/src/gui/gwmenuoptionscallback.h0000744000175000017500000000370710023202520017550 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwmenuoptionscallback.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a link component between menu option and functionalities. * @author Sébastien LECACHEUR * @version 1.0 2002/07/22 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwmenuoptionscallback.c * @author Author */ #ifndef GW_GUI_GW_MENU_OPTIONS_CALLBACK_H #define GW_GUI_GW_MENU_OPTIONS_CALLBACK_H /*! * @function gw_menu_options_settings_click * @abstract Launches from menu options : settings. * @discussion This function launches from the menu options the functionality : settings. * @param m menu item invoker * @param w reference to the main window * @result Returns TRUE if the event is submited correctly.
* Returns FALSE when an error occured.
*/ gboolean gw_menu_options_settings_click ( GtkMenuItem *m, GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwmenupopup.c0000744000175000017500000003353510030365334015553 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwmenupopup.h" #include "gwmenufilecallback.h" #include "gwmenupopupcallback.h" #include "gwmsgbox.h" #include "../gwguimanager.h" GtkMenu * gw_menu_popup_create ( GtkWindow *w) { GtkWidget *menu = NULL; GtkWidget *menuitem = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif menu = gtk_menu_new ( ); g_strdup_to_gtk_text ( _( "New"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_file_new_click, w); g_strdup_to_gtk_text ( _( "Open"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_file_open_click, w); g_strdup_to_gtk_text ( _( "Save"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_file_save_click, w); g_strdup_to_gtk_text ( _( "Save as"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_file_saveas_click, w); g_strdup_to_gtk_text ( _( "Close"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_file_close_click, w); menuitem = gtk_menu_item_new ( ); gtk_menu_append ( GTK_MENU ( menu), menuitem); g_strdup_to_gtk_text ( _( "Exit"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_file_exit_click, w); return GTK_MENU ( menu); } GtkMenu * gw_menu_popup_create_and_show ( GtkWindow *w) { GtkMenu *menu = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL) { if ( (menu = gw_menu_popup_create ( w)) != NULL ) { gtk_widget_show_all ( GTK_WIDGET ( menu)); } } return menu; } GtkMenu * gw_menu_popup_catalog_create ( GtkCTreeNode *node, GtkWindow *w) { GtkWidget *menu = NULL; GtkWidget *menuitem = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif menu = gtk_menu_new ( ); g_strdup_to_gtk_text ( _( "Rename"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_rename, node); /* g_strdup_to_gtk_text ( _( "Add new disk"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_add_new_disk, node); */ g_strdup_to_gtk_text ( _( "Edit description"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_edit_description, node); g_strdup_to_gtk_text ( _( "Edit categories"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_edit_categories, node); menuitem = gtk_menu_item_new ( ); gtk_menu_append ( GTK_MENU ( menu), menuitem); g_strdup_to_gtk_text ( _( "New"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_file_new_click, w); g_strdup_to_gtk_text ( _( "Open"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_file_open_click, w); g_strdup_to_gtk_text ( _( "Save"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_file_save_click, w); g_strdup_to_gtk_text ( _( "Save as"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_file_saveas_click, w); g_strdup_to_gtk_text ( _( "Close"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_file_close_click, w); menuitem = gtk_menu_item_new ( ); gtk_menu_append ( GTK_MENU ( menu), menuitem); g_strdup_to_gtk_text ( _( "Properties"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_catalog_properties, node); return GTK_MENU ( menu); } GtkMenu * gw_menu_popup_catalog_create_and_show ( GtkCTreeNode *node, GtkWindow *w) { GtkMenu *menu = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL) { if ( (menu = gw_menu_popup_catalog_create ( node, w)) != NULL ) { gtk_widget_show_all ( GTK_WIDGET ( menu)); } } return menu; } GtkMenu * gw_menu_popup_disk_create ( GtkCTreeNode *node, GtkWindow *w) { GtkWidget *menu = NULL; GtkWidget *menuitem = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif menu = gtk_menu_new ( ); g_strdup_to_gtk_text ( _( "Move To..."), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_disk_move_to, node); g_strdup_to_gtk_text ( _( "Rename"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_disk_rename, node); g_strdup_to_gtk_text ( _( "Delete disk"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_disk_delete, node); g_strdup_to_gtk_text ( _( "Change volume label"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_disk_change_volume_label, node); g_strdup_to_gtk_text ( _( "Edit description"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_disk_edit_description, node); menuitem = gtk_menu_item_new ( ); gtk_menu_append ( GTK_MENU ( menu), menuitem); g_strdup_to_gtk_text ( _( "Properties"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_disk_properties, node); return GTK_MENU ( menu); } GtkMenu * gw_menu_popup_disk_create_and_show ( GtkCTreeNode *node, GtkWindow *w) { GtkMenu *menu = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL) { if ( (menu = gw_menu_popup_disk_create ( node, w)) != NULL ) { gtk_widget_show_all ( GTK_WIDGET ( menu)); } } return menu; } GtkMenu * gw_menu_popup_dir_create ( GtkCTreeNode *node, GtkWindow *w) { GtkWidget *menu = NULL; GtkWidget *menuitem = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif menu = gtk_menu_new ( ); g_strdup_to_gtk_text ( _( "Move To..."), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_folder_move_to, node); g_strdup_to_gtk_text ( _( "Rename"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_folder_rename, node); g_strdup_to_gtk_text ( _( "Edit description"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_folder_edit_description, node); g_strdup_to_gtk_text ( _( "Remove from catalog"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_folder_remove, node); menuitem = gtk_menu_item_new ( ); gtk_menu_append ( GTK_MENU ( menu), menuitem); g_strdup_to_gtk_text ( _( "Properties"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_folder_properties, node); return GTK_MENU ( menu); } GtkMenu * gw_menu_popup_dir_create_and_show ( GtkCTreeNode *node, GtkWindow *w) { GtkMenu *menu = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL) { if ( (menu = gw_menu_popup_dir_create ( node, w)) != NULL ) { gtk_widget_show_all ( GTK_WIDGET ( menu)); } } return menu; } GtkMenu * gw_menu_popup_file_create ( gpointer row, GtkWindow *w) { GtkWidget *menu = NULL; GtkWidget *menuitem = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { menu = gtk_menu_new ( ); if ( (menu != NULL) && (GPOINTER_TO_UINT ( row) >= 0) ) { g_strdup_to_gtk_text ( _( "Rename"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_file_rename, row); g_strdup_to_gtk_text ( _( "Edit description"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_file_edit_description, row); g_strdup_to_gtk_text ( _( "Remove from catalog"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_file_remove, row); menuitem = gtk_menu_item_new ( ); gtk_menu_append ( GTK_MENU ( menu), menuitem); g_strdup_to_gtk_text ( _( "Properties"), text_utf8); menuitem = gtk_menu_item_new_with_label ( text_utf8); g_free ( text_utf8); gtk_menu_append ( GTK_MENU ( menu), menuitem); gtk_signal_connect ( GTK_OBJECT ( menuitem), "activate", (GtkSignalFunc)gw_menu_popup_file_properties, row); } else { gw_msg_box_create ( w, _( "Edit file"), _( "Can't edit this file!!\n")); } } return GTK_MENU ( menu); } GtkMenu * gw_menu_popup_file_create_and_show ( gpointer row, GtkWindow *w) { GtkMenu *menu = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL) { if ( (menu = gw_menu_popup_file_create ( row, w)) != NULL ) { gtk_widget_show_all ( GTK_WIDGET ( menu)); } } return menu; } gwhere-0.2.3/src/gui/gwmenupopup.h0000744000175000017500000001452410023202520015542 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwmenupopup.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for menu popup. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwmenupopup.c * @author Author */ #ifndef GW_GUI_GW_MENU_POPUP_H #define GW_GUI_GW_MENU_POPUP_H /*! * @function gw_menu_popup_create * @abstract Creates the general popup menu. * @discussion This function creates the general popup menu. This * popup menu allows to open, close a catalog, exit program,... * @param w the main window application * @result the popup menu.
* Returns NULL when an error occured. */ GtkMenu * gw_menu_popup_create ( GtkWindow *w); /*! * @function gw_menu_popup_create_and_show * @abstract Creates the general popup menu and shows it. * @discussion This function creates the general popup menu and shows it. * This popup menu allows to open, close a catalog, exit program,... * @param w the main window application * @result the popup menu.
* Returns NULL when an error occured. */ GtkMenu * gw_menu_popup_create_and_show ( GtkWindow *w); /*! * @function gw_menu_popup_catalog_create * @abstract Creates the catalog popup menu. * @discussion This function creates the catalog popup menu. This popup * menu allows to open, close a catalog, exit program,... * and view catalog properties... * @param node the node in the tree where is the catalog root * @param w the main window application * @result the popup menu.
* Returns NULL when an error occured. */ GtkMenu * gw_menu_popup_catalog_create ( GtkCTreeNode *node, GtkWindow *w); /*! * @function gw_menu_popup_catalog_create_and_show * @abstract Creates the catalog popup menu and shows it. * @discussion This function creates the catalog popup menu and shows it. * This popup menu allows to open, close a catalog, exit * program,... and view catalog properties... * @param node the node in the tree where is the catalog root * @param w the main window application * @result the popup menu.
* Returns NULL when an error occured. */ GtkMenu * gw_menu_popup_catalog_create_and_show ( GtkCTreeNode *node, GtkWindow *w); /*! * @function gw_menu_popup_disk_create * @abstract Creates the disk popup menu. * @discussion This function creates the disk popup menu. This popup menu * allows to open, close a catalog, exit program,... and view * disk properties... * @param node the node in the tree where is the disk root * @param w the main window application * @result the popup menu.
* Returns NULL when an error occured. */ GtkMenu * gw_menu_popup_disk_create ( GtkCTreeNode *node, GtkWindow *w); /*! * @function gw_menu_popup_disk_create_and_show * @abstract Creates the disk popup menu and shows it. * @discussion This function creates the disk popup menu and shows it. * This popup menu allows to open, close a catalog, exit * program,... and view disk properties... * @param node the node in the tree where is the disk root * @param w the main window application * @result the popup menu.
* Returns NULL when an error occured. */ GtkMenu * gw_menu_popup_disk_create_and_show ( GtkCTreeNode *node, GtkWindow *w); /*! * @function gw_menu_popup_dir_create * @abstract Creates the folder popup menu. * @discussion This function creates the folder popup menu. This popup * menu allows to open, close a catalog, exit program,... * and view folder properties... * @param node the node in the tree where is the folder * @param w the main window application * @result the popup menu.
* Returns NULL when an error occured. */ GtkMenu * gw_menu_popup_dir_create ( GtkCTreeNode *node, GtkWindow *w); /*! * @function gw_menu_popup_dir_create_and_show * @abstract Creates the folder popup menu and shows it. * @discussion This function creates the folder popup menu and shows it. * This popup menu allows to open, close a catalog, exit * program,... and view folder properties... * @param node the node in the tree where is the folder * @param w the main window application * @result the popup menu.
* Returns NULL when an error occured. */ GtkMenu * gw_menu_popup_dir_create_and_show ( GtkCTreeNode *node, GtkWindow *w); /*! * @function gw_menu_popup_file_create * @abstract Creates the file popup menu. * @discussion This function creates the file popup menu. This popup menu * allows to open, close a catalog, exit program,... and view * file properties... * @param node the node in the tree where is the dis root * @param w the main window application * @result the popup menu.
* Returns NULL when an error occured. */ GtkMenu * gw_menu_popup_file_create ( gpointer row, GtkWindow *w); /*! * @function gw_menu_popup_file_create_and_show * @abstract Creates the file popup menu and shows it. * @discussion This function creates the file popup menu and shows it. * This popup menu allows to open, close a catalog, exit * program,... and view file properties... * @param node the node in the tree where is the dis root * @param w the main window application * @result the popup menu.
* Returns NULL when an error occured. */ GtkMenu * gw_menu_popup_file_create_and_show ( gpointer row, GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwmenupopupcallback.c0000744000175000017500000011174610267560215017240 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwmenupopupcallback.h" #include /* strlen strcmp */ #include "data/gwdata.h" #include "gwnotebookcatalog.h" #include "gwcategorieseditbox.h" #include "gwpropertiesbox.h" #include "gwcapturebox.h" #include "gwtextbox.h" #include "gwmsgbox.h" #include "../gwguimanager.h" #include "../gwapplicationmanager.h" #include "../gwpluginsmanager.h" #include "../gwhelper.h" /* I don't like globals variables. But it's in order to memorize last selected node and files list. */ GtkCTreeNode *node_gw_menu_popup_callback = NULL; //GList *files_gw_menu_popup_callback = NULL; GWDBFile *files_gw_menu_popup_callback = NULL; gboolean gw_menu_popup_catalog_rename ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkWindow *window = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL && context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { catalog = plugin->gw_db_catalog_get_db_catalog ( context); window = gw_gui_manager_main_interface_get_main_window ( ); node_gw_menu_popup_callback = node; gw_capture_box_create ( window, _( "Rename catalog"), _( "Enter new catalog name"), gw_db_catalog_get_name ( catalog), GTK_SIGNAL_FUNC ( gw_menu_popup_catalog_rename_ok)); gw_db_catalog_free ( catalog); result = TRUE; } } return result; } gboolean gw_menu_popup_catalog_rename_ok ( GtkWidget *w, GtkWidget *data) { gboolean result = FALSE; GtkCTree *tree = NULL; GtkCTreeNode *selection = NULL; guint8 spc; GdkBitmap *btmp; GdkPixmap *pxmp; gchar *tmp_name, *name; GtkWindow *window = NULL; gchar *text_utf8 = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( data != NULL && context != NULL ) { if ( (tmp_name = gw_capture_box_get_text ( GTK_WINDOW ( data))) != NULL) { if ( strlen ( tmp_name) > 0) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { catalog = plugin->gw_db_catalog_get_db_catalog ( context); tree = gw_gui_manager_main_interface_get_tree ( ); selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data); window = gw_gui_manager_main_interface_get_main_window ( ); gw_db_catalog_set_name ( catalog, g_strdup ( tmp_name)); plugin->gw_db_catalog_update ( context, catalog); g_strdup_to_gtk_text ( gw_db_catalog_get_name ( catalog), text_utf8); gw_db_catalog_free ( catalog); /* Updates the catalog name in the tree */ gtk_ctree_node_get_pixtext ( tree, node_gw_menu_popup_callback, 0, &name, &spc, &pxmp, &btmp); gtk_ctree_node_set_pixtext ( tree, node_gw_menu_popup_callback, 0, text_utf8, spc, pxmp, btmp); g_free ( text_utf8); /* Selects the selected item in the exploration tree to refresh the list of files. */ gtk_ctree_select ( tree, selection); result = TRUE; } } else { window = gw_gui_manager_main_interface_get_main_window ( ); gw_msg_box_create ( window, _("Rename catalog"), _("Invalid filled catalog name")); } g_free ( tmp_name); } gtk_widget_destroy ( data); node_gw_menu_popup_callback = NULL; result = TRUE; } return result; } gboolean gw_menu_popup_catalog_add_new_disk ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL ) { //TODO Must implement this function!! } return result; } gboolean gw_menu_popup_catalog_edit_description ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkWindow *window = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL && context != NULL ) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { catalog = plugin->gw_db_catalog_get_db_catalog ( context); window = gw_gui_manager_main_interface_get_main_window ( ); node_gw_menu_popup_callback = node; gw_text_box_create ( window, _( "Edit description"), _( "Catalog description"), gw_db_catalog_get_description ( catalog), GTK_SIGNAL_FUNC ( gw_menu_popup_catalog_edit_description_ok)); gw_db_catalog_free ( catalog); result = TRUE; } } return result; } gboolean gw_menu_popup_catalog_edit_description_ok ( GtkWidget *b, GtkWidget *w ) { gboolean result = FALSE; GtkCTree *tree = NULL; GtkCTreeNode *selection = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; gchar *tmp_description = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && context != NULL ) { if ( (tmp_description = gw_text_box_get_text ( w)) != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { catalog = plugin->gw_db_catalog_get_db_catalog ( context); tree = gw_gui_manager_main_interface_get_tree ( ); selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data); gw_db_catalog_set_description ( catalog, strlen(tmp_description)>0?g_strdup(tmp_description):NULL); plugin->gw_db_catalog_update ( context, catalog); gw_db_catalog_free ( catalog); /* Selects the selected item in the exploration tree to refresh the list of files. */ gtk_ctree_select ( tree, selection); result = TRUE; } g_free ( tmp_description); } gtk_widget_destroy ( w); node_gw_menu_popup_callback = NULL; } return result; } gboolean gw_menu_popup_catalog_edit_categories ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkCTree *tree = NULL; GWDBCatalog *catalog = NULL; GtkWindow *window = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); catalog = gtk_ctree_node_get_row_data ( tree, node); window = gw_gui_manager_main_interface_get_main_window ( ); gw_categories_edit_box_create ( window, catalog); result = TRUE; } return result; } gboolean gw_menu_popup_catalog_properties ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkWindow *window = NULL; GtkCTree *tree = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL ) { window = gw_gui_manager_main_interface_get_main_window ( ); tree = gw_gui_manager_main_interface_get_tree ( ); gw_properties_box_create_catalog ( m, window, tree, node); result = TRUE; } return result; } gboolean gw_menu_popup_disk_move_to ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkCTree *tree = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); if ( !GTK_CTREE_ROW ( node)->expanded ) { if ( node != NULL ) { gtk_ctree_expand ( tree, node); } } gtk_ctree_select ( GTK_CTREE ( tree), node); result = TRUE; } return result; } gboolean gw_menu_popup_disk_rename ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkCTree *tree = NULL; GtkWindow *window = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBDisk *disk = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL && context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); window = gw_gui_manager_main_interface_get_main_window ( ); disk = plugin->gw_db_catalog_get_db_disk ( context, gtk_ctree_node_get_row_data ( tree, node)); node_gw_menu_popup_callback = node; gw_capture_box_create ( window, _( "Rename disk"), _( "Enter new disk name"), gw_db_disk_get_name ( disk), GTK_SIGNAL_FUNC ( gw_menu_popup_disk_rename_ok)); gw_db_disk_free ( disk); result = TRUE; } } return result; } gboolean gw_menu_popup_disk_rename_ok ( GtkWidget *w, GtkWidget *data) { gboolean result = FALSE; guint8 spc; GdkBitmap *btmp; GdkPixmap *pxmp; gchar *tmp_name = NULL, *name = NULL; GtkCTree *tree = NULL; GtkCTreeNode *selection = NULL; GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBDisk *disk = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( data != NULL && context != NULL ) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data); if ( (tmp_name = gw_capture_box_get_text ( GTK_WINDOW ( data))) != NULL) { disk = plugin->gw_db_catalog_get_db_disk ( context, gtk_ctree_node_get_row_data ( tree, node_gw_menu_popup_callback)); if ( strlen ( tmp_name)>0 && strcmp ( tmp_name, gw_db_disk_get_name ( disk))!=0 ) { if ( gw_helper_db_disk_name_is_exist ( context, tmp_name)) { gw_msg_box_create ( window, _("Rename disk"), _("The filled disk name already exist in the current catalog")); } else { gw_db_disk_set_name ( disk, g_strdup ( tmp_name)); plugin->gw_db_disk_update ( context, disk); g_strdup_to_gtk_text ( tmp_name, text_utf8); gtk_ctree_node_get_pixtext ( tree, node_gw_menu_popup_callback, 0, &name, &spc, &pxmp, &btmp); gtk_ctree_node_set_pixtext ( tree, node_gw_menu_popup_callback, 0, text_utf8, spc, pxmp, btmp); g_free ( text_utf8); /* Selects the selected item in the exploration tree to refresh the list of files. */ gtk_ctree_select ( tree, selection); } } else { gw_msg_box_create ( window, _("Rename disk"), _("No new disk name was filled")); } g_free ( tmp_name); gw_db_disk_free ( disk); } else {} } else {} gtk_widget_destroy ( data); node_gw_menu_popup_callback = NULL; result = TRUE; } return result; } gboolean gw_menu_popup_disk_delete ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkWindow *w = NULL; GtkCList *clist_info = NULL; GtkCList *clist = NULL; GtkCTree *tree = NULL; GtkCTreeNode *parent = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL && context != NULL ) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); w = gw_gui_manager_main_interface_get_main_window ( ); parent = GTK_CTREE_ROW ( node)->parent; clist_info = gw_notebook_catalog_get_clist_explorer ( w); plugin->gw_db_catalog_remove_db_disk ( context, gtk_ctree_node_get_row_data ( tree, node)); clist = GTK_CLIST ( tree); gtk_clist_freeze ( clist); gtk_clist_freeze ( clist_info); gtk_clist_clear ( clist_info); gtk_ctree_remove_node ( tree, node); gtk_clist_thaw ( clist); gtk_clist_thaw ( clist_info); gtk_ctree_select ( GTK_CTREE ( tree), parent); result = TRUE; } } return result; } gboolean gw_menu_popup_disk_change_volume_label ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkCTree *tree = NULL; GtkWindow *window = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBDisk *disk = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL && context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); window = gw_gui_manager_main_interface_get_main_window ( ); disk = plugin->gw_db_catalog_get_db_disk ( context, gtk_ctree_node_get_row_data ( tree, node)); node_gw_menu_popup_callback = node; gw_capture_box_create ( window, _( "Change volume label"), _( "Enter new disk volume label"), gw_db_disk_get_volume ( disk), GTK_SIGNAL_FUNC ( gw_menu_popup_disk_change_volume_label_ok)); gw_db_disk_free ( disk); result = TRUE; } } return result; } gboolean gw_menu_popup_disk_change_volume_label_ok ( GtkWidget *w, GtkWidget *data) { gboolean result = FALSE; gchar *tmp_volume = NULL; GtkCTree *tree = NULL; GtkCTreeNode *selection = NULL; GtkWindow *window = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBDisk *disk = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( data != NULL && context != NULL ) { if ( (tmp_volume = gw_capture_box_get_text ( GTK_WINDOW ( data))) != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data); window = gw_gui_manager_main_interface_get_main_window ( ); disk = plugin->gw_db_catalog_get_db_disk ( context, gtk_ctree_node_get_row_data ( tree, node_gw_menu_popup_callback)); gw_db_disk_set_volume ( disk, g_strdup ( tmp_volume)); plugin->gw_db_disk_update ( context, disk); gw_db_disk_free ( disk); /* Selects the selected item in the exploration tree to refresh the list of files. */ gtk_ctree_select ( tree, selection); } g_free ( tmp_volume); } gtk_widget_destroy ( data); node_gw_menu_popup_callback = NULL; result = TRUE; } return result; } gboolean gw_menu_popup_disk_edit_description ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkCTree *tree = NULL; GtkWindow *window = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBDisk *disk = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL && context != NULL ) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); disk = plugin->gw_db_catalog_get_db_disk ( context, gtk_ctree_node_get_row_data ( tree, node)); window = gw_gui_manager_main_interface_get_main_window ( ); node_gw_menu_popup_callback = node; gw_text_box_create ( window, _( "Edit description"), _( "Disk description"), gw_db_disk_get_description ( disk), GTK_SIGNAL_FUNC ( gw_menu_popup_disk_edit_description_ok)); gw_db_disk_free ( disk); result = TRUE; } } return result; } gboolean gw_menu_popup_disk_edit_description_ok ( GtkWidget *b, GtkWidget *w ) { gboolean result = FALSE; GtkCTree *tree = NULL; GtkCTreeNode *selection = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBDisk *disk = NULL; gchar *tmp_description = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && context != NULL ) { if ( (tmp_description = gw_text_box_get_text ( w)) != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); disk = plugin->gw_db_catalog_get_db_disk ( context, gtk_ctree_node_get_row_data ( tree, node_gw_menu_popup_callback)); selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data); gw_db_disk_set_description ( disk, strlen(tmp_description)>0?g_strdup(tmp_description):NULL); plugin->gw_db_disk_update ( context, disk); gw_db_disk_free ( disk); /* Selects the selected item in the exploration tree to refresh the list of files. */ gtk_ctree_select ( tree, selection); result = TRUE; } g_free ( tmp_description); } gtk_widget_destroy ( w); node_gw_menu_popup_callback = NULL; } return result; } gboolean gw_menu_popup_disk_properties ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkWindow *window = NULL; GtkCTree *tree = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL ) { window = gw_gui_manager_main_interface_get_main_window ( ); tree = gw_gui_manager_main_interface_get_tree ( ); gw_properties_box_create_disk ( m, window, tree, node); result = TRUE; } return result; } gboolean gw_menu_popup_folder_move_to ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkCTree *tree = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); if ( !GTK_CTREE_ROW ( node)->expanded ) { if ( node != NULL ) { gtk_ctree_expand ( tree, node); } } gtk_ctree_select ( GTK_CTREE ( tree), node); result = TRUE; } return result; } gboolean gw_menu_popup_folder_rename ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkCTree *tree = NULL; GtkWindow *window = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBFile *file = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL && context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); window = gw_gui_manager_main_interface_get_main_window ( ); file = plugin->gw_db_catalog_get_db_file ( context, gtk_ctree_node_get_row_data ( tree, node)); node_gw_menu_popup_callback = node; gw_capture_box_create ( window, _( "Rename folder"), _( "Enter new folder name"), gw_db_file_get_name ( file), GTK_SIGNAL_FUNC ( gw_menu_popup_folder_rename_ok)); gw_db_file_free ( file); result = TRUE; } } return result; } gboolean gw_menu_popup_folder_rename_ok ( GtkWidget *w, GtkWidget *data) { gboolean result = FALSE; guint8 spc; GdkBitmap *btmp; GdkPixmap *pxmp; gchar *tmp_name = NULL, *name = NULL; GtkCTree *tree = NULL; GtkCTreeNode *selection = NULL; GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); gchar *text_utf8 = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBFile *file = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( data != NULL && context != NULL ) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data); if ( (tmp_name = gw_capture_box_get_text ( GTK_WINDOW ( data))) != NULL) { file = plugin->gw_db_catalog_get_db_file ( context, gtk_ctree_node_get_row_data ( tree, node_gw_menu_popup_callback)); /* Checks of the filled folder name isn't equals to the current folder name. */ if ( strlen ( tmp_name)>0 && strcmp ( tmp_name, gw_db_file_get_name ( file))!=0 ) { if ( gw_helper_db_file_name_is_exist ( context, gw_db_file_get_ref ( file), tmp_name) ) { gw_msg_box_create ( window, _("Rename folder"), _("The filled folder name already exist in the current folder")); } else { gw_db_file_set_name ( file, g_strdup ( tmp_name)); plugin->gw_db_file_update ( context, file); g_strdup_to_gtk_text ( tmp_name, text_utf8); gtk_ctree_node_get_pixtext ( tree, node_gw_menu_popup_callback, 0, &name, &spc, &pxmp, &btmp); gtk_ctree_node_set_pixtext ( tree, node_gw_menu_popup_callback, 0, text_utf8, spc, pxmp, btmp); g_free ( text_utf8); /* Selects the selected item in the exploration tree to refresh the list of files. */ gtk_ctree_select ( tree, selection); } } else { gw_msg_box_create ( window, _("Rename folder"), _("No new folder name was filled")); } g_free ( tmp_name); gw_db_file_free ( file); } else {} } else {} gtk_widget_destroy ( data); node_gw_menu_popup_callback = NULL; files_gw_menu_popup_callback = NULL; result = TRUE; } return result; } gboolean gw_menu_popup_folder_edit_description ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkCTree *tree = NULL; GtkWindow *window = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBFile *file = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL && context != NULL ) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); file = plugin->gw_db_catalog_get_db_file ( context, gtk_ctree_node_get_row_data ( tree, node)); window = gw_gui_manager_main_interface_get_main_window ( ); node_gw_menu_popup_callback = node; gw_text_box_create ( window, _( "Edit description"), _( "Folder description"), gw_db_file_get_description ( file), GTK_SIGNAL_FUNC ( gw_menu_popup_folder_edit_description_ok)); gw_db_file_free ( file); result = TRUE; } } return result; } gboolean gw_menu_popup_folder_edit_description_ok ( GtkWidget *b, GtkWidget *w ) { gboolean result = FALSE; GtkCTree *tree = NULL; GtkCTreeNode *selection = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBFile *file = NULL; gchar *tmp_description = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && context != NULL ) { if ( (tmp_description = gw_text_box_get_text ( w)) != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); file = plugin->gw_db_catalog_get_db_file ( context, gtk_ctree_node_get_row_data ( tree, node_gw_menu_popup_callback)); selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data); gw_db_file_set_description ( file, strlen(tmp_description)>0?g_strdup(tmp_description):NULL); plugin->gw_db_file_update ( context, file); gw_db_file_free ( file); /* Selects the selected item in the exploration tree to refresh the list of files. */ gtk_ctree_select ( tree, selection); result = TRUE; } g_free ( tmp_description); } gtk_widget_destroy ( w); node_gw_menu_popup_callback = NULL; } return result; } gboolean gw_menu_popup_folder_remove ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkWindow *w = NULL; GtkCList *clist_info = NULL; GtkCList *clist; GtkCTreeNode *tmp, *parent = NULL; GtkCTree *tree = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBFile *file = NULL, *tmp_file = NULL; GWDBDisk *disk = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL && context != NULL ) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { parent = GTK_CTREE_ROW ( node)->parent; w = gw_gui_manager_main_interface_get_main_window ( ); clist_info = gw_notebook_catalog_get_clist_explorer ( w); tree = gw_gui_manager_main_interface_get_tree ( ); //TODO very bad way!! /* Updates the folders size which contains the folder to delete. */ tmp = parent; file = plugin->gw_db_catalog_get_db_file ( context, gtk_ctree_node_get_row_data ( tree, node)); while ( GTK_CTREE_ROW ( GTK_CTREE_ROW ( tmp)->parent)->parent != NULL ) { tmp_file = plugin->gw_db_catalog_get_db_file ( context, gtk_ctree_node_get_row_data ( tree, tmp)); gw_db_file_set_size ( tmp_file, gw_db_file_get_size ( tmp_file) - gw_db_file_get_size ( file)); plugin->gw_db_file_update ( context, tmp_file); tmp = GTK_CTREE_ROW ( tmp)->parent; gw_db_file_free ( tmp_file); } /* Updates the disk size which contains the folder to delete. */ disk = plugin->gw_db_catalog_get_db_disk ( context, gtk_ctree_node_get_row_data ( tree, tmp)); gw_db_disk_set_full ( disk, gw_db_disk_get_full ( disk) - gw_db_file_get_size ( file)); plugin->gw_db_disk_update ( context, disk); gw_db_disk_free ( disk); plugin->gw_db_catalog_remove_db_file ( context, gw_db_file_get_ref ( file)); gw_db_file_free ( file); clist = GTK_CLIST ( tree); gtk_clist_freeze ( clist); gtk_clist_freeze ( clist_info); gtk_clist_clear ( clist_info); gtk_ctree_remove_node ( tree, node); gtk_clist_thaw ( clist); gtk_clist_thaw ( clist_info); gtk_ctree_select ( GTK_CTREE ( tree), parent); result = TRUE; } } return result; } gboolean gw_menu_popup_folder_properties ( GtkMenuItem *m, GtkCTreeNode *node) { gboolean result = FALSE; GtkWindow *window = NULL; GtkCTree *tree = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL ) { window = gw_gui_manager_main_interface_get_main_window ( ); tree = gw_gui_manager_main_interface_get_tree ( ); gw_properties_box_create_folder ( m, window, tree, node); result = TRUE; } return result; } gboolean gw_menu_popup_file_rename ( GtkMenuItem *m, gpointer row) { gboolean result = FALSE; GtkCTree *tree = NULL; GtkWindow *window = NULL; GtkCTreeNode *selection = NULL; GtkCList *clist_info = NULL; gchar *name = NULL; guint8 spc; GdkBitmap *btmp; GdkPixmap *pxmp; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( GPOINTER_TO_INT ( row ) >= 0 ) { tree = gw_gui_manager_main_interface_get_tree ( ); window = gw_gui_manager_main_interface_get_main_window ( ); clist_info = gw_notebook_catalog_get_clist_explorer ( window); /* Gets the file name. */ gtk_clist_get_pixtext ( GTK_CLIST ( clist_info), GPOINTER_TO_INT ( row), 0, &name, &spc, &btmp, &pxmp); g_strdup_from_gtk_text ( name, text_utf8); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : selected file is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, name); #endif /* Gets the parent folder. */ selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data); /* Gets file informations. */ files_gw_menu_popup_callback = (GWDBFile*)gtk_clist_get_row_data ( GTK_CLIST ( clist_info), GPOINTER_TO_INT ( row)); gw_capture_box_create ( window, _( "Rename file"), _( "Enter new file name"), text_utf8, GTK_SIGNAL_FUNC ( gw_menu_popup_file_rename_ok)); g_free ( text_utf8); result = TRUE; } return result; } gboolean gw_menu_popup_file_rename_ok ( GtkWidget *w, GtkWidget *data) { GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); gboolean result = FALSE; GWDBFile *file = NULL; GtkCTree *tree = NULL; GtkCTreeNode *selection = NULL; gchar *tmp_name = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( data != NULL && context != NULL ) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data); file = files_gw_menu_popup_callback; if ( (tmp_name = gw_capture_box_get_text ( GTK_WINDOW ( data))) != NULL) { /* Checks of the filled file name isn't equals to the current file name. */ if ( strlen ( tmp_name)>0 && strcmp ( tmp_name, gw_db_file_get_name ( file))!=0 ) { if ( gw_helper_db_file_name_is_exist ( context, gw_db_file_get_ref ( file), tmp_name) ) { gw_msg_box_create ( window, _("Rename file"), _("The filled file name already exist in the current folder")); } else { gw_db_file_set_name ( file, g_strdup ( tmp_name)); plugin->gw_db_file_update ( context, file); /* Selects the selected item in the exploration tree to refresh the list of files. */ gtk_ctree_select ( tree, selection); } } else { gw_msg_box_create ( window, _("Rename file"), _("No new file name was filled")); } g_free ( tmp_name); } else {} } else {} gtk_widget_destroy ( data); node_gw_menu_popup_callback = NULL; files_gw_menu_popup_callback = NULL; result = TRUE; } return result; } gboolean gw_menu_popup_file_edit_description ( GtkMenuItem *m, gpointer row) { gboolean result = FALSE; GtkWindow *w = NULL; GtkCList *clist_info = NULL; GtkCTreeNode *selection; gchar *name = NULL; guint8 spc; GdkBitmap *btmp; GdkPixmap *pxmp; GtkCTree *tree = NULL; GtkWindow *window = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( GPOINTER_TO_INT ( row ) >= 0 ) { tree = gw_gui_manager_main_interface_get_tree ( ); window = gw_gui_manager_main_interface_get_main_window ( ); w = gw_gui_manager_main_interface_get_main_window ( ); clist_info = gw_notebook_catalog_get_clist_explorer ( w); /* Gets the file name. */ gtk_clist_get_pixtext ( GTK_CLIST ( clist_info), GPOINTER_TO_INT ( row), 0, &name, &spc, &btmp, &pxmp); g_strdup_from_gtk_text ( name, text_utf8); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : selected file is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, name); #endif /* Gets the parent folder. */ selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data); /* Gets file informations. */ files_gw_menu_popup_callback = (GWDBFile*)gtk_clist_get_row_data ( GTK_CLIST ( clist_info), GPOINTER_TO_INT ( row)); g_free ( text_utf8); node_gw_menu_popup_callback = selection; gw_text_box_create ( window, _( "Edit description"), _( "File description"), gw_db_file_get_description ( files_gw_menu_popup_callback), GTK_SIGNAL_FUNC ( gw_menu_popup_file_edit_description_ok)); result = TRUE; } return result; } gboolean gw_menu_popup_file_edit_description_ok ( GtkWidget *b, GtkWidget *w ) { gboolean result = FALSE; GWDBFile *file = NULL; GtkCTree *tree = NULL; GtkCTreeNode *selection = NULL; gchar *text_utf8 = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data); file = files_gw_menu_popup_callback; text_utf8 = gw_text_box_get_text ( w); if ( (gw_db_file_get_description ( file) == NULL) || (strcmp ( text_utf8, gw_db_file_get_description ( file)) != 0) ) { /* If the filled description isn't equals to the file description. */ if ( strlen ( text_utf8) > 0 ) { gw_db_file_set_description ( file, g_strdup ( text_utf8)); } else { gw_db_file_set_description ( file, NULL); } ((GWCatalogPlugin*)gw_db_context_get_plugin ( context))->gw_db_file_update ( context, file); /* Indicates that catalog have been modified. */ catalog = ((GWCatalogPlugin*)gw_db_context_get_plugin ( context))->gw_db_catalog_get_db_catalog ( context); // gw_db_catalog_set_ismodified ( gtk_ctree_node_get_row_data ( tree, gw_folder_get_catalog ( tree, node_gw_menu_popup_callback)), TRUE); gw_db_catalog_set_ismodified ( catalog, TRUE); ((GWCatalogPlugin*)gw_db_context_get_plugin ( context))->gw_db_catalog_update ( context, catalog); } g_free ( text_utf8); gtk_widget_destroy ( w); /* Selects the selected item in the exploration tree to refresh the list of files. */ gtk_ctree_select ( tree, selection); node_gw_menu_popup_callback = NULL; files_gw_menu_popup_callback = NULL; result = TRUE; } return result; } gboolean gw_menu_popup_file_remove ( GtkMenuItem *m, gpointer row) { gboolean result = FALSE; GtkWindow *w = NULL; GtkCList *clist_info = NULL; GWDBFile *file = NULL; GtkCTreeNode *selection = NULL, *parent = NULL, *tmp = NULL; GtkCTree *tree = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBDisk *disk = NULL; GWDBFile *tmp_file = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( GPOINTER_TO_INT ( row ) >= 0 && context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); w = gw_gui_manager_main_interface_get_main_window ( ); clist_info = gw_notebook_catalog_get_clist_explorer ( w); /* Gets the file to delete. */ file = (GWDBFile*)gtk_clist_get_row_data ( GTK_CLIST ( clist_info), GPOINTER_TO_INT ( row)); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : selected file is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, gw_db_file_get_name ( file)); #endif /* Gets the parent folder. */ parent = selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data); /* Updates the folders size which contains the file to delete. */ tmp = parent; while ( GTK_CTREE_ROW ( GTK_CTREE_ROW ( tmp)->parent)->parent != NULL ) { tmp_file = plugin->gw_db_catalog_get_db_file ( context, gtk_ctree_node_get_row_data ( tree, tmp)); gw_db_file_set_size ( tmp_file, gw_db_file_get_size ( tmp_file) - gw_db_file_get_size ( file)); plugin->gw_db_file_update ( context, tmp_file); tmp = GTK_CTREE_ROW ( tmp)->parent; gw_db_file_free ( tmp_file); } /* Updates the disk size which contains the folder to delete. */ disk = plugin->gw_db_catalog_get_db_disk ( context, gtk_ctree_node_get_row_data ( tree, tmp)); gw_db_disk_set_full ( disk, gw_db_disk_get_full ( disk) - gw_db_file_get_size ( file)); plugin->gw_db_disk_update ( context, disk); gw_db_disk_free ( disk); plugin->gw_db_catalog_remove_db_file ( context, gw_db_file_get_ref ( file)); /* Selects the selected item in the exploration tree to refresh the list of files. */ gtk_ctree_select ( GTK_CTREE ( tree), selection); result = TRUE; } } return result; } gboolean gw_menu_popup_file_properties ( GtkMenuItem *m, gpointer row) { gboolean result = FALSE; GtkCList *clist_info = NULL; GtkCTreeNode *selection = NULL; GtkWindow *window = NULL; GtkCTree *tree = NULL; GWDBFile *file = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( GPOINTER_TO_INT ( row ) >= 0 ) { window = gw_gui_manager_main_interface_get_main_window ( ); tree = gw_gui_manager_main_interface_get_tree ( ); clist_info = gw_notebook_catalog_get_clist_explorer ( window); /* Gets the file to show properties. */ file = gtk_clist_get_row_data ( GTK_CLIST ( clist_info), GPOINTER_TO_INT ( row)); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : selected file (%d) is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, GPOINTER_TO_INT ( row), gw_db_file_get_name ( file)); #endif /* Gets the parent folder. */ selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data); gw_properties_box_create_file ( m, window, tree, selection, file); result = TRUE; } return result; } gwhere-0.2.3/src/gui/gwmenupopupcallback.h0000744000175000017500000003515110030414430017221 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwenupopupcallback.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a link component between menu popup and functionalities. * @author Sébastien LECACHEUR * @version 1.0 2002/02/11 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwmenupopupcallback.c * @author Author */ #ifndef GW_GUI_GW_MENU_POPUP_CALLBACK_H #define GW_GUI_GW_MENU_POPUP_CALLBACK_H /*! * @function gw_menu_popup_catalog_rename * @abstract Launches the renaming of a catalog. * @discussion This function launches the renaming of a catalog. * @param m menu item invoker * @param node node of the catalog in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_catalog_rename ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_catalog_rename_ok * @abstract Validates the renaming of a catalog. * @discussion This function validates the renaming of a catalog. * @param w button invoker * @param data the capture box * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_catalog_rename_ok ( GtkWidget *w, GtkWidget *data); /*! * @function gw_menu_popup_catalog_add_new_disk * @abstract Goes to add a new disk in the catalog. * @discussion This function goes to add a new disk in the catalog.
* Warning : not yet implemented!! * @param w button invoker * @param node node of the catalog in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_catalog_add_new_disk ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_catalog_edit_description * @abstract Launches the description edition of a catalog. * @discussion This function launches the description edition of a catalog. * @param m menu item invoker * @param node node of the catalog in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_catalog_edit_description ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_catalog_edit_description_ok * @abstract Validates the description edition of a catalog. * @discussion This function validates the description edition of a catalog. * @param b button invoker * @param w the text box * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_catalog_edit_description_ok ( GtkWidget *b, GtkWidget *w); /*! * @function gw_menu_popup_catalog_edit_categories * @abstract Launches the categories edition. * @discussion This function launches the categories edition. * @param m menu item invoker * @param node node of the catalog in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_catalog_edit_categories ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_catalog_properties * @abstract Shows the catalog properties. * @discussion This function shows the catalog properties. * @param m menu item invoker * @param node node of the catalog in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_catalog_properties ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_disk_move_to * @abstract Goes to the selected disk. * @discussion This function goes to the selected disk. * @param m menu item invoker * @param node node of the selected disk in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_disk_move_to ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_disk_rename * @abstract Launches the renaming of a disk. * @discussion This function launches the renaming of a disk. * @param m menu item invoker * @param node node of the disk in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_disk_rename ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_disk_rename_ok * @abstract Validates the renaming of a disk. * @discussion This function validates the renaming of a disk. * @param w button invoker * @param data the capture box * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_disk_rename_ok ( GtkWidget *w, GtkWidget *data); /*! * @function gw_menu_popup_disk_delete * @abstract Removes the selected disk from the catalog. * @discussion This function removes the selected disk from the catalog. * @param m menu item invoker * @param node node of the disk in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_disk_delete ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_disk_change_volume_label * @abstract Launches the volume label disk editing. * @discussion This function launches the volume label disk editing. * @param m menu item invoker * @param node node of the disk in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_disk_change_volume_label ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_disk_change_volume_label_ok * @abstract Validates the volume label disk editing. * @discussion This function validates the volume label disk editing. * @param w button invoker * @param data the capture box * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_disk_change_volume_label_ok ( GtkWidget *w, GtkWidget *data); /*! * @function gw_menu_popup_disk_edit_description * @abstract Launches the description edition of a disk. * @discussion This function launches the description edition of a disk. * @param m menu item invoker * @param node node of the disk in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_disk_edit_description ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_disk_edit_description_ok * @abstract Validates the description edition of a disk. * @discussion This function validates the description edition of a disk. * @param b button invoker * @param w the text box * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_disk_edit_description_ok ( GtkWidget *b, GtkWidget *w); /*! * @function gw_menu_popup_disk_properties * @abstract Shows the disk properties. * @discussion This function shows the disk properties. * @param m menu item invoker * @param node node of the disk in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_disk_properties ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_folder_move_to * @abstract Goes to the selected folder. * @discussion This function goes to the selected folder. * @param m menu item invoker * @param node node of the selected folder in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_folder_move_to ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_folder_rename * @abstract Launches the renaming of a folder. * @discussion This function launches the renaming of a folder. * @param m menu item invoker * @param node node of the folder in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_folder_rename ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_folder_rename_ok * @abstract Validates the renaming of a folder. * @discussion This function validates the renaming of a folder. * @param w button invoker * @param data the capture box * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_folder_rename_ok ( GtkWidget *w, GtkWidget *data); /*! * @function gw_menu_popup_folder_edit_description * @abstract Launches the description edition of a folder. * @discussion This function launches the description edition of a folder. * @param m menu item invoker * @param node node of the folder in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_folder_edit_description ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_folder_edit_description_ok * @abstract Validates the description edition of a folder. * @discussion This function validates the description edition of a folder. * @param b button invoker * @param w the text box * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_folder_edit_description_ok ( GtkWidget *b, GtkWidget *w); /*! * @function gw_menu_popup_folder_remove * @abstract Removes the selected folder from the catalog. * @discussion This function removes the selected folder from the catalog. * @param m menu item invoker * @param node node of the folder in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_folder_remove ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_folder_properties * @abstract Shows the folder properties. * @discussion This function shows the folder properties. * @param m menu item invoker * @param node node of the folder in the tree * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_folder_properties ( GtkMenuItem *m, GtkCTreeNode *node); /*! * @function gw_menu_popup_file_rename * @abstract Launches the renaming of a file name. * @discussion This function launches the renaming of a file name. * @param m menu item invoker * @param row row of the file in the list * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_file_rename ( GtkMenuItem *m, gpointer row); /*! * @function gw_menu_popup_file_rename_ok * @abstract Validates the renaming of a file name. * @discussion This function validates the renaming of a file name. * @param b button invoker * @param w the text box * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_file_rename_ok ( GtkWidget *b, GtkWidget *w); /*! * @function gw_menu_popup_file_edit_description * @abstract Launches the description edition of a file. * @discussion This function launches the description edition of a file. * @param m menu item invoker * @param row row of the file in the list * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_file_edit_description ( GtkMenuItem *m, gpointer row); /*! * @function gw_menu_popup_file_edit_description_ok * @abstract Validates the description edition of a file. * @discussion This function validates the description edition of a file. * @param b button invoker * @param w the text box * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_file_edit_description_ok ( GtkWidget *b, GtkWidget *w); /*! * @function gw_menu_popup_file_remove * @abstract Removes the selected file from the catalog. * @discussion This function removes the selected file from the catalog. * @param m menu item invoker * @param rowe row of the file in the list * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_file_remove ( GtkMenuItem *m, gpointer row); /*! * @function gw_menu_popup_file_properties * @abstract Shows the file properties. * @discussion This function shows the file properties. * @param m menu item invoker * @param row row of the file in the list * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_menu_popup_file_properties ( GtkMenuItem *m, gpointer row); #endif gwhere-0.2.3/src/gui/gwmsgbox.c0000744000175000017500000000656210473151422015024 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwmsgbox.h" GtkWindow * gw_msg_box_create ( GtkWindow *window, gchar *title, gchar *subject) { /*static */GtkWidget *w = NULL; GtkWidget *vbox,*label,*button,*hbox; GtkAccelGroup *accel; guint button_key; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : title=%s subject=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, title, subject); #endif if ( !w ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() new dialog window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif accel = gtk_accel_group_new ( ); w = gtk_window_new ( GTK_WINDOW_DIALOG); gtk_window_set_policy ( GTK_WINDOW ( w), FALSE, FALSE, TRUE); g_strdup_to_gtk_text ( title, text_utf8); gtk_window_set_title ( GTK_WINDOW ( w), text_utf8); g_free ( text_utf8); gtk_container_border_width ( GTK_CONTAINER ( w), 10); gtk_window_set_modal ( GTK_WINDOW ( w),TRUE); gtk_window_set_transient_for ( GTK_WINDOW ( w), window); gtk_window_set_position ( GTK_WINDOW ( w), GTK_WIN_POS_CENTER); #ifdef HAVE_GTK12 gtk_signal_connect ( GTK_OBJECT ( w), "destroy", GTK_SIGNAL_FUNC ( gtk_widget_destroyed), &w); #endif vbox = gtk_vbox_new ( TRUE, 10); gtk_container_add ( GTK_CONTAINER ( w), vbox); gtk_container_set_border_width ( GTK_CONTAINER ( vbox), 10); g_strdup_to_gtk_text ( subject, text_utf8); label = gtk_label_new ( text_utf8); gtk_label_set_text ( GTK_LABEL ( label), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( vbox), label, FALSE, FALSE, 0); /* The Ok button area */ hbox = gtk_hbutton_box_new ( ); gtk_button_box_set_layout ( GTK_BUTTON_BOX ( hbox), GTK_BUTTONBOX_EDGE); gtk_button_box_set_spacing ( GTK_BUTTON_BOX ( hbox), 5); gtk_box_pack_end ( GTK_BOX ( vbox), hbox, FALSE, FALSE, 0); button = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_OK"), text_utf8); button_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( button)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( button, "clicked", accel, button_key, GDK_MOD1_MASK, 0); gtk_object_set_user_data ( GTK_OBJECT ( button), w); gtk_box_pack_start ( GTK_BOX ( hbox), button, TRUE, FALSE, 0); gtk_signal_connect_object ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w)); GTK_WIDGET_SET_FLAGS ( button, GTK_CAN_FOCUS); gtk_widget_grab_focus ( button); gtk_window_add_accel_group ( GTK_WINDOW ( w), accel); } if ( !GTK_WIDGET_VISIBLE ( w)) { gtk_widget_show_all ( w); } else { gtk_widget_destroy ( w); } return GTK_WINDOW ( w); } gwhere-0.2.3/src/gui/gwmsgbox.h0000744000175000017500000000361110023202520015004 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwmsgbox.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to diplay message box. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @see gtk/gtk.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwmsgbox.c * @author Author */ #ifndef GW_GUI_GW_MSG_BOX_H #define GW_GUI_GW_MSG_BOX_H /*! * @function gw_msg_box_create * @abstract Creates the message box window. * @discussion This function creates the message box window. * This window can be destroyed by clicking on the OK button. * @param w main window * @param title the window title * @param msg the message to display * @result the message box.
* Returns NULL when an error occured. */ GtkWindow *gw_msg_box_create ( GtkWindow *w, gchar *title, gchar *msg); #endif gwhere-0.2.3/src/gui/gwnotebook.c0000744000175000017500000000376210023202520015327 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwnotebook.h" #include "gwnotebookcallback.h" #include "gwnotebookcatalog.h" #include "gwnotebooksearch.h" #include "gwnotebookmanagment.h" #include "gwreferences.h" GtkWidget * gw_notebook_create ( GtkWindow *w, GtkWidget *parent) { GtkWidget *notebook = NULL; GtkWidget *notebook_catalog = NULL; GtkWidget *notebook_search = NULL; GtkWidget *notebook_managment = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { notebook = gtk_notebook_new ( ); gtk_widget_ref ( notebook); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_NOTEBOOK, notebook,(GtkDestroyNotify) gtk_widget_unref); gtk_widget_show ( notebook); /* Notebook catalog */ notebook_catalog = gw_notebook_catalog_create_and_add ( w, GTK_NOTEBOOK ( notebook)); /* Notebook search */ notebook_search = gw_notebook_search_create_and_add ( w, GTK_NOTEBOOK ( notebook)); /* Notebook managment */ notebook_managment = gw_notebook_managment_create_and_add ( w, GTK_NOTEBOOK ( notebook)); gtk_signal_connect ( GTK_OBJECT ( notebook), "switch_page", GTK_SIGNAL_FUNC ( gw_notebook_page_switch), w); } return notebook; } gwhere-0.2.3/src/gui/gwnotebook.h0000744000175000017500000000345310023202520015331 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwnotebook.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for the main notebook. * @author Sébastien LECACHEUR * @version 1.0 2002/02/13 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwnotebook.c * @author Author */ #ifndef GW_GUI_GW_NOTEBOOK_H #define GW_GUI_GW_NOTEBOOK_H /*! * @function gw_notebook_create * @abstract Creates the main notebook. * @discussion This function creates the main notebook. * @param w refence to the main window * @param parent reference to the container * @result the main notebook bar.
* Returns NULL when an error occured. */ GtkWidget * gw_notebook_create ( GtkWindow *w, GtkWidget *parent); #endif gwhere-0.2.3/src/gui/gwnotebookcallback.c0000744000175000017500000000445010023202520016777 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwnotebookcallback.h" #include "gwnotebookcatalog.h" #include "gwnotebookmanagment.h" #include "gwnotebookmanagmentcallback.h" #include "gwstatusbarcallback.h" gboolean gw_notebook_page_switch ( GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, GtkWindow *w) { GtkCList *clist = NULL; gboolean result = FALSE; static gboolean first_load = TRUE; GtkCombo *cmb = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { switch ( page_num ) { case 0: clist = gw_notebook_catalog_get_clist_explorer ( w); gw_status_bar_set_catalog_explorer_page ( w, g_list_length ( clist->selection)); result = TRUE; break; case 1: clist = gw_notebook_catalog_get_clist_explorer ( w); gw_status_bar_set_catalog_search_page ( w, g_list_length ( clist->selection)); result = TRUE; break; case 2: gw_status_bar_set_catalog_managment_page ( w); /* Loads device informations at the first displaying managment tabbed pane. */ if ( first_load) { first_load = FALSE; if ( (cmb = gw_notebook_managment_get_combo_box_device ( w)) != NULL) { gtk_widget_grab_focus ( GTK_WIDGET ( GTK_OBJECT ( GTK_ENTRY ( GTK_COMBO ( cmb)->entry)))); gw_notebook_managment_select_device ( GTK_WIDGET ( GTK_OBJECT ( GTK_ENTRY ( GTK_COMBO ( cmb)->entry))), w); } } result = TRUE; break; default:return FALSE; break; } } return result; } gwhere-0.2.3/src/gui/gwnotebookcallback.h0000744000175000017500000000404710023202520017006 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwnotebookcallback.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component callback for the main notebook. * @author Sébastien LECACHEUR * @version 1.0 2002/02/13 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwnotebookcallback.c * @author Author */ #ifndef GW_GUI_GW_NOTEBOOK_CALLBACK_H #define GW_GUI_GW_NOTEBOOK_CALLBACK_H /*! * @function gw_notebook_page_switch * @abstract Updates the status bar when notebook switches pages. * @discussion This function updates the status bar when notebook switches pages * @param notebook notebook invoker * @param page page switched * @param page_num page number * @param w reference to the main window * @result an error code.
* Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_notebook_page_switch ( GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwnotebookcatalog.c0000744000175000017500000011064710247421307016701 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwnotebookcatalog.h" #include /* strcmp */ #include "gwnotebookcatalogcallback.h" #include "gwmenupopup.h" #include "gwnotebooksearch.h" #include "gwnotebookmanagmentcallback.h" #include "gwstatusbar.h" #include "gwreferences.h" #include "../gwguimanager.h" #include "../gwapplicationmanager.h" /*! @define GW_REF_NOTEBOOK_CATALOG_PANE The catalog pane */ #define GW_REF_NOTEBOOK_CATALOG_PANE "gw_ref_gw_notebook_catalog_pane" /*! @define GW_REF_NOTEBOOK_CATALOG_ARCHIVE_LABEL The the archive label in the scrollpane */ #define GW_REF_NOTEBOOK_CATALOG_ARCHIVE_LABEL "gw_ref_gw_notebook_catalog_archive_label" /*! @define GW_REF_NOTEBOOK_CATALOG_TREE_SCROLLPANE The tree scrollpane */ #define GW_REF_NOTEBOOK_CATALOG_TREE_SCROLLPANE "gw_ref_gw_notebook_catalog_tree_scrollpane" /*! @define GW_REF_NOTEBOOK_CATALOG_LIST_SCROLLPANE The list scrollpane */ #define GW_REF_NOTEBOOK_CATALOG_LIST_SCROLLPANE "gw_ref_gw_notebook_catalog_list_scrollpane" /*! @define GW_REF_NOTEBOOK_CATALOG_TABBED_PANE_LABEL The pabbed pane title */ #define GW_REF_NOTEBOOK_CATALOG_TABBED_PANE_LABEL "gw_ref_gw_notebook_catalog_tabbed_pane_label" GtkWidget * gw_notebook_catalog_create ( GtkWindow * window) { GtkCList *clist_info = NULL; GtkWidget *hpan_catalog; GtkWidget *lbl_archive; GtkWidget *scr_win_ctree, *scr_win_info_catalog; GtkWidget *ctree_catalog, *clist_info_catalog; GtkWidget *lbl_col00, *lbl_col01, *lbl_col02, *lbl_col03, *lbl_col04, *lbl_col05, *lbl_col06, *lbl_col07, *lbl_col08, *lbl_col09, *lbl_col10, *lbl_col11; gchar *text_utf8 = NULL; gint hpan_pos = 0; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Horizontal pane for the first notebook pane.*/ hpan_catalog = gtk_hpaned_new ( ); gtk_widget_ref ( hpan_catalog); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_CATALOG_PANE, hpan_catalog, (GtkDestroyNotify) gtk_widget_unref); /* Gets the saved value of the horizontal pane position. */ if ( (hpan_pos = gw_am_get_settings_tod ( GW_VALUE_APP_EXPLORER_HPAN_POSITION)) == -1 ) { hpan_pos = GW_VALUE_APP_EXPLORER_HPAN_POSITION_DEFAULT; } gtk_paned_set_position ( GTK_PANED ( hpan_catalog), hpan_pos); /* Catalog tree explorer */ scr_win_ctree = gtk_scrolled_window_new ( NULL, NULL); gtk_widget_ref ( scr_win_ctree); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_CATALOG_TREE_SCROLLPANE, scr_win_ctree, (GtkDestroyNotify) gtk_widget_unref); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scr_win_ctree), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_container_add ( GTK_CONTAINER ( hpan_catalog), scr_win_ctree); ctree_catalog = gtk_ctree_new ( 1, 0); gtk_widget_ref ( ctree_catalog); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_TREE, ctree_catalog, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( ctree_catalog), "button_press_event", GTK_SIGNAL_FUNC ( gw_notebook_catalog_ctree_button_press_event), NULL); // gtk_signal_connect ( GTK_OBJECT ( ctree_catalog), "tree_select_row", GTK_SIGNAL_FUNC ( gw_notebook_catalog_ctree_select_row), NULL); gtk_signal_connect_after ( GTK_OBJECT ( ctree_catalog), "tree_select_row", GTK_SIGNAL_FUNC ( gw_notebook_catalog_ctree_select_row), NULL); gtk_clist_set_selection_mode ( GTK_CLIST ( ctree_catalog), GTK_SELECTION_BROWSE); gtk_container_add ( GTK_CONTAINER ( scr_win_ctree), ctree_catalog); gtk_clist_set_column_width ( GTK_CLIST ( ctree_catalog), 0, 80); gtk_clist_set_column_auto_resize ( GTK_CLIST ( ctree_catalog), 0, TRUE); gtk_clist_column_titles_show ( GTK_CLIST ( ctree_catalog)); gtk_clist_set_column_justification ( GTK_CLIST ( ctree_catalog), 0, GTK_JUSTIFY_LEFT); gtk_clist_set_sort_column ( GTK_CLIST ( ctree_catalog), 0); gtk_clist_set_sort_type ( GTK_CLIST ( ctree_catalog), GTK_SORT_ASCENDING); gtk_clist_set_auto_sort ( GTK_CLIST ( ctree_catalog), TRUE); g_strdup_to_gtk_text ( _( "Archive"), text_utf8); lbl_archive = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( lbl_archive); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_CATALOG_ARCHIVE_LABEL, lbl_archive,(GtkDestroyNotify) gtk_widget_unref); gtk_label_set_justify ( GTK_LABEL ( lbl_archive), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment ( GTK_MISC ( lbl_archive), 0, 0.5); gtk_clist_set_column_widget ( GTK_CLIST ( ctree_catalog), 0, lbl_archive); /* List of catalog explorer. */ scr_win_info_catalog = gtk_scrolled_window_new ( NULL, NULL); gtk_widget_ref ( scr_win_info_catalog); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_CATALOG_LIST_SCROLLPANE, scr_win_info_catalog, (GtkDestroyNotify) gtk_widget_unref); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scr_win_info_catalog), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_container_add ( GTK_CONTAINER ( hpan_catalog), scr_win_info_catalog); clist_info_catalog = gtk_clist_new ( 12); clist_info = GTK_CLIST ( clist_info_catalog); gtk_widget_ref ( clist_info_catalog); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_CLIST_EXPLORER, clist_info_catalog,(GtkDestroyNotify) gtk_widget_unref); // gtk_signal_connect ( GTK_OBJECT ( clist_info_catalog), "resize-column", GTK_SIGNAL_FUNC ( gw_notebook_catalog_clist_column_resized), NULL); // gtk_signal_connect ( GTK_OBJECT ( clist_info_catalog), "click_column", GTK_SIGNAL_FUNC ( gw_notebook_catalog_column_sort), NULL); // gtk_signal_connect ( GTK_OBJECT ( clist_info_catalog), "button_press_event", GTK_SIGNAL_FUNC ( gw_notebook_catalog_clist_button_press_event), NULL); gtk_clist_set_selection_mode ( clist_info, GTK_SELECTION_BROWSE); gtk_container_add ( GTK_CONTAINER ( scr_win_info_catalog), clist_info_catalog); gtk_clist_column_titles_show ( clist_info); /* gtk_clist_set_column_justification ( clist_info, 1, GTK_JUSTIFY_CENTER); gtk_clist_set_column_justification ( clist_info, 2, GTK_JUSTIFY_CENTER); gtk_clist_set_column_justification ( clist_info, 3, GTK_JUSTIFY_CENTER); gtk_clist_set_column_justification ( clist_info, 4, GTK_JUSTIFY_RIGHT); gtk_clist_set_column_justification ( clist_info, 5, GTK_JUSTIFY_RIGHT); gtk_clist_set_column_justification ( clist_info, 6, GTK_JUSTIFY_RIGHT); gtk_clist_set_column_justification ( clist_info, 7, GTK_JUSTIFY_CENTER); gtk_clist_set_column_justification ( clist_info, 8, GTK_JUSTIFY_LEFT); gtk_clist_set_column_justification ( clist_info, 9, GTK_JUSTIFY_LEFT); gtk_clist_set_column_justification ( clist_info, 10, GTK_JUSTIFY_LEFT); gtk_clist_set_column_justification ( clist_info, 11, GTK_JUSTIFY_LEFT); */ gtk_clist_set_sort_column ( clist_info, 0); gtk_clist_set_sort_type ( clist_info, GTK_SORT_ASCENDING); gtk_clist_set_auto_sort ( clist_info, FALSE); lbl_col00 = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_info, 0, lbl_col00); lbl_col01 = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_info, 1, lbl_col01); lbl_col02 = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_info, 2, lbl_col02); lbl_col03 = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_info, 3, lbl_col03); lbl_col04 = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_info, 4, lbl_col04); lbl_col05 = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_info, 5, lbl_col05); lbl_col06 = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_info, 6, lbl_col06); lbl_col07 = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_info, 7, lbl_col07); lbl_col08 = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_info, 8, lbl_col08); lbl_col09 = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_info, 9, lbl_col09); lbl_col10 = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_info, 10, lbl_col10); lbl_col11 = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_info, 10, lbl_col11); gw_notebook_catalog_clist_explorer_set_column_title_disk ( ); gtk_signal_connect ( GTK_OBJECT ( clist_info_catalog), "resize-column", GTK_SIGNAL_FUNC ( gw_notebook_catalog_clist_column_resized), NULL); gtk_signal_connect ( GTK_OBJECT ( clist_info_catalog), "click_column", GTK_SIGNAL_FUNC ( gw_notebook_catalog_column_sort), NULL); gtk_signal_connect ( GTK_OBJECT ( clist_info_catalog), "button_press_event", GTK_SIGNAL_FUNC ( gw_notebook_catalog_clist_button_press_event), NULL); return hpan_catalog; } GtkWidget * gw_notebook_catalog_create_and_add ( GtkWindow * window, GtkNotebook * parent) { GtkWidget *tabbed_pane_catalog = NULL; GtkWidget *catalog_tabbed_pane_label; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( window != NULL ) { tabbed_pane_catalog = gw_notebook_catalog_create ( window); if ( tabbed_pane_catalog != NULL ) { gtk_container_add ( GTK_CONTAINER ( parent), tabbed_pane_catalog); /* Text label of the search tabbed pane. */ g_strdup_to_gtk_text ( _( "Catalog"), text_utf8); catalog_tabbed_pane_label = gtk_label_new ( text_utf8); g_free ( text_utf8); /* Store reference to the title of tabbed pane */ gtk_widget_ref ( catalog_tabbed_pane_label); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_CATALOG_TABBED_PANE_LABEL, catalog_tabbed_pane_label,(GtkDestroyNotify) gtk_widget_unref); gtk_notebook_set_tab_label ( parent, gtk_notebook_get_nth_page ( parent, 0), catalog_tabbed_pane_label); } } return tabbed_pane_catalog; } GtkCList * gw_notebook_catalog_get_clist_explorer ( GtkWindow *w) { GtkCList *clist_explorer = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { clist_explorer = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_CLIST_EXPLORER)); } return clist_explorer; } gint gw_notebook_catalog_clist_explorer_set_column_title_file ( void) { GtkWindow *w = NULL; GtkCList *clist = NULL; gchar *showed = NULL; gchar *text_utf8 = NULL; gint autoresize = -1; gint width = -1; gint i = 0; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif w = gw_gui_manager_main_interface_get_main_window ( ); clist = gw_notebook_catalog_get_clist_explorer ( w); if ( clist != NULL ) { gtk_clist_freeze ( clist); // gtk_signal_emit_stop_by_name ( GTK_OBJECT ( clist), "resize-column"); /* Sets columns width. */ if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION_DEFAULT, width); if ( (autoresize = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE)) == -1 ) { autoresize = GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE_DEFAULT; } /* Sets the autoresize mode. */ for ( i = 0; i < 11; i++) { /* Enabling auto-resize on a column disallows user-resizing of the column. */ if ( autoresize ) { gtk_clist_set_column_resizeable ( clist, i, FALSE); gtk_clist_set_column_auto_resize ( clist, i, TRUE); } else { gtk_clist_set_column_auto_resize ( clist, i, FALSE); gtk_clist_set_column_resizeable ( clist, i, TRUE); } } /* Sets columns title. */ g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION_DEFAULT, TRUE); } /* The last column should never be visible. */ gtk_clist_set_column_visibility ( clist, 11, FALSE); // gw_notebook_catalog_column_sort ( clist, clist->sort_column, GINT_TO_POINTER ( -1)); gw_notebook_catalog_set_column_sort ( clist, clist->sort_column); gtk_clist_thaw ( clist); return 0; } return -1; } gint gw_notebook_catalog_clist_explorer_set_column_title_disk ( void) { GtkWindow *w = NULL; GtkCList *clist = NULL; gchar *showed = NULL; gchar *text_utf8 = NULL; gint autoresize = -1; gint width = -1; gint i = 0; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif w = gw_gui_manager_main_interface_get_main_window ( ); clist = gw_notebook_catalog_get_clist_explorer ( w); if ( clist != NULL ) { gtk_clist_freeze ( clist); // gtk_signal_emit_stop_by_name ( GTK_OBJECT ( clist), "resize-column"); /* Sets columns width. */ if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_SIZE)) == -1 ) { width = GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION_DEFAULT, width); if ( (autoresize = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE)) == -1 ) { autoresize = GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE_DEFAULT; } /* Sets the autoresize mode. */ for ( i = 0; i < 11; i++) { /* Enabling auto-resize on a column disallows user-resizing of the column. */ if ( autoresize ) { gtk_clist_set_column_resizeable ( clist, i, FALSE); gtk_clist_set_column_auto_resize ( clist, i, TRUE); } else { gtk_clist_set_column_auto_resize ( clist, i, FALSE); gtk_clist_set_column_resizeable ( clist, i, TRUE); } } /* Sets columns title. */ g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION_DEFAULT, TRUE); } // gw_notebook_catalog_column_sort ( clist, clist->sort_column, GINT_TO_POINTER ( -1)); gw_notebook_catalog_set_column_sort ( clist, clist->sort_column); gtk_clist_thaw ( clist); return 0; } return -1; } GtkCTreeNode * gw_notebook_catalog_ctree_node_get_child ( GtkCTreeNode *node, gchar *name) { GtkCTreeNode *child = NULL; gchar *txt; guint8 spc; GdkBitmap *btmp; GdkPixmap *pxmp; GtkCTree *ctree = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL ) { child = GTK_CTREE_ROW ( node)->children; ctree = gw_gui_manager_main_interface_get_tree ( ); while ( child != NULL ) { if ( gtk_ctree_node_get_pixtext ( GTK_CTREE ( ctree), child, 0, &txt, &spc, &pxmp, &btmp) ) { g_strdup_from_gtk_text ( txt, text_utf8); if ( strcmp ( text_utf8, name) == 0 ) { g_free ( text_utf8); return child; } g_free ( text_utf8); } child = GTK_CTREE_ROW ( child)->sibling; } } return NULL; } gint gw_notebook_catalog_ctree_node_get_num_children ( GtkCTreeNode *node) { GtkCTreeNode *child = NULL; gint n = 0; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( node != NULL ) { child = GTK_CTREE_ROW ( node)->children; while ( child != NULL ) { n++; child = GTK_CTREE_ROW ( child)->sibling; } } return n; } gint gw_notebook_catalog_ctree_destroy_all ( void) { /* Destroys all explorer tree :'( */ GtkWindow *w = NULL; GtkCList *clist_info = NULL; GtkCList *clist_result = NULL; GtkCList *clist; GtkCTree *ctree = NULL; GtkCTreeNode *root = NULL; gint result = -1; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (w = gw_gui_manager_main_interface_get_main_window ( )) != NULL ) { clist_info = gw_notebook_catalog_get_clist_explorer ( w); clist_result = gw_notebook_search_get_clist_search ( w); ctree = gw_gui_manager_main_interface_get_tree ( ); root = gw_gui_manager_main_interface_get_tree_root ( ); gw_status_bar_put_messages ( w, _( "Closing catalog"), _( "Please wait...")); gw_gui_manager_main_interface_refresh ( ); clist = GTK_CLIST ( ctree); gtk_clist_freeze ( clist); gtk_clist_freeze ( clist_info); gtk_clist_freeze ( clist_result); gtk_clist_clear ( clist_info); gtk_clist_clear ( clist_result); gtk_ctree_remove_node ( ctree, root); root = NULL; gw_gui_manager_main_interface_set_tree_root ( root); gw_status_bar_put_messages ( w, "", ""); gtk_clist_thaw ( clist); gtk_clist_thaw ( clist_result); gtk_clist_thaw ( clist_info); gtk_window_set_title ( w, PROJECT_NAME); gw_status_bar_put_messages ( w, _( "Catalog closed"), ""); gw_notebook_managment_refresh_categories ( w); gw_gui_manager_main_interface_refresh ( ); result = 0; } #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "application is exited ==> memory status : "); g_mem_profile ( ); #endif return result; } gint gw_notebook_catalog_get_hpan_position ( GtkWindow *w) { gint position = -1; GtkPaned *hpan = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (hpan = GTK_PANED ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_CATALOG_PANE))) != NULL) { #ifdef HAVE_GTK20 position = gtk_paned_get_position ( hpan); #elif defined HAVE_GTK12 position = hpan->handle_xpos; #endif #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : hpan position = %d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, position); #endif } } return position; } gwhere-0.2.3/src/gui/gwnotebookcatalog.h0000744000175000017500000001226110023202520016661 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwnotebookcatalog.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for the pane of catalog explorer in the main notebook. * @author Sébastien LECACHEUR * @version 1.0 2002/02/13 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwnotebookcatalog.c * @author Author */ #ifndef GW_GUI_GW_NOTEBOOK_CATALOG_H #define GW_GUI_GW_NOTEBOOK_CATALOG_H /*! * @function gw_notebook_catalog_create * @abstract Creates a catalog explorer notebook pane. * @discussion This function creates a catalog explorer notebook pane. * @param w refence to the main window * @result the catalog explorer notebook pane.
* Returns NULL when an error occured. */ GtkWidget * gw_notebook_catalog_create ( GtkWindow *w); /*! * @function gw_notebook_catalog_create_and_add * @abstract Creates a catalog explorer notebook pane and adds it to the notebook. * @discussion This function creates a catalog explorer notebook pane and adds it to the notebook. * @param w refence to the main window * @param parent reference to the container * @result the catalog explorer notebook pane.
* Returns NULL when an error occured. */ GtkWidget * gw_notebook_catalog_create_and_add ( GtkWindow *w, GtkNotebook * parent); /*! * @function gw_notebook_catalog_get_clist_explorer * @abstract Gets the list of the catalog explorer. * @discussion This function gets the list of catalog explorer. * @param w refence to the main window * @result the list of catalog explorer.
* Returns NULL when an error occured. */ GtkCList * gw_notebook_catalog_get_clist_explorer ( GtkWindow *w); /*! * @function gw_notebook_catalog_clist_explorer_set_column_title_file * @abstract Sets the catalog clist explorer title column for files. * @discussion This function sets the catalog clist explorer title column for files. * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_catalog_clist_explorer_set_column_title_file ( void); /*! * @function gw_notebook_catalog_clist_explorer_set_column_title_disk * @abstract Sets the catalog clist explorer title column for disks. * @discussion This function sets the catalog clist explorer title column for disks. * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_catalog_clist_explorer_set_column_title_disk ( void); /*! * @function gw_notebook_catalog_ctree_node_get_child * @abstract Gets a special child in the node * @discussion This functions gets the child with a special name in the node.
* @param node the node to get the child * @param name the child name * @result Returns the node when search match.
* Returns NULL when don't find child or when an error occured. */ GtkCTreeNode * gw_notebook_catalog_ctree_node_get_child ( GtkCTreeNode *node, gchar *name); /*! * @function gw_notebook_catalog_ctree_node_get_num_children * @abstract Gets the number of children in the node * @discussion This functions gets the number of children in the node. Number of children is the number of subfolders in the folde.r
* @param node the node to get the number of children * @result the number of chidren.
* Returns -1 when an error occured. */ gint gw_notebook_catalog_ctree_node_get_num_children ( GtkCTreeNode *node); /*! * @function gw_notebook_catalog_ctree_destroy_all * @abstract Destroys the tree * @discussion This function destroys the tree and frees all datas structures used for catalog.
* This function is call when the user close a catalog. * @result Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_catalog_ctree_destroy_all ( void); /*! * @function gw_notebook_catalog_get_hpan_position * @abstract Gets the horizontal pane position * @discussion This function gets the horizontal pane position * @result Returns the horizontal pane position.
* Returns -1 when an error occured. */ gint gw_notebook_catalog_get_hpan_position ( GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwnotebookcatalogcallback.c0000744000175000017500000015146510247421307020361 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwnotebookcatalogcallback.h" #include /* strcmp strlen */ #include "tools/gwtools.h" #include "res/gwres.h" #include "data/gwdata.h" #include "gwstatusbar.h" #include "gwstatusbarcallback.h" #include "gwnotebookcatalog.h" #include "gwnotebooksearch.h" #include "gwnotebookmanagmentcallback.h" #include "gwmenupopup.h" #include "../gwapplicationmanager.h" #include "../gwguimanager.h" #include "../gwcatalogmanager.h" #include "../gwhelper.h" gint gw_catalog_compare_disk_int ( GtkCList *clist, const gpointer ptr1, const gpointer ptr2) { GWDBDisk *disk1 = NULL, *disk2 = NULL; int nb1 = -1, nb2 = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (ptr1!=NULL) && (ptr2!=NULL) ) { disk1 = (GWDBDisk*)(((GtkCListRow *)ptr1)->data); disk2 = (GWDBDisk*)(((GtkCListRow *)ptr2)->data); if ( (disk1!=NULL) && (disk2!=NULL) ) { switch ( clist->sort_column) { case GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION_DEFAULT: nb1 = gw_db_disk_get_num ( disk1); nb2 = gw_db_disk_get_num ( disk2); break; } } } return nb1 - nb2; } gint gw_catalog_compare_disk_gulong ( GtkCList *clist, const gpointer ptr1, const gpointer ptr2) { GWDBDisk *disk1 = NULL, *disk2 = NULL; gulong nb1 = 0, nb2 = 0; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (ptr1!=NULL) && (ptr2!=NULL) ) { disk1 = (GWDBDisk*)(((GtkCListRow *)ptr1)->data); disk2 = (GWDBDisk*)(((GtkCListRow *)ptr2)->data); if ( (disk1!=NULL) && (disk2!=NULL) ) { switch ( clist->sort_column) { case GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION_DEFAULT: nb1 = gw_db_disk_get_date ( disk1); nb2 = gw_db_disk_get_date ( disk2); break; } } } return nb1 - nb2; } gint gw_catalog_compare_disk_guint64 ( GtkCList *clist, const gpointer ptr1, const gpointer ptr2) { GWDBDisk *disk1 = NULL, *disk2 = NULL; guint64 nb1 = -1, nb2 = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (ptr1!=NULL) && (ptr2!=NULL) ) { disk1 = (GWDBDisk*)(((GtkCListRow *)ptr1)->data); disk2 = (GWDBDisk*)(((GtkCListRow *)ptr2)->data); if ( (disk1!=NULL) && (disk2!=NULL) ) { switch ( clist->sort_column) { case GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION_DEFAULT: nb1 = gw_db_disk_get_full ( disk1); nb2 = gw_db_disk_get_full ( disk2); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION_DEFAULT: nb1 = gw_db_disk_get_free ( disk1); nb2 = gw_db_disk_get_free ( disk2); break; } } } return nb1 - nb2; } gint gw_catalog_compare_disk_str ( GtkCList *clist, const gpointer ptr1, const gpointer ptr2) { GWDBDisk *disk1 = NULL, *disk2 = NULL; gchar *str1 = NULL, *str2 = NULL; gint result = 0; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (ptr1!=NULL) && (ptr2!=NULL) ) { disk1 = (GWDBDisk*)(((GtkCListRow *)ptr1)->data); disk2 = (GWDBDisk*)(((GtkCListRow *)ptr2)->data); if ( (disk1!=NULL) && (disk2!=NULL) ) { switch ( clist->sort_column) { case GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION_DEFAULT: str1 = gw_db_disk_get_name ( disk1); str2 = gw_db_disk_get_name ( disk2); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION_DEFAULT: str1 = gw_db_disk_get_fsname ( disk1); str2 = gw_db_disk_get_fsname ( disk2); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION_DEFAULT: str1 = gw_db_disk_get_path ( disk1); str2 = gw_db_disk_get_path ( disk2); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION_DEFAULT: str1 = gw_db_disk_get_fstype ( disk1); str2 = gw_db_disk_get_fstype ( disk2); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION_DEFAULT: str1 = gw_db_disk_get_volume ( disk1); str2 = gw_db_disk_get_volume ( disk2); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION_DEFAULT: str1 = gw_db_disk_get_serial ( disk1); str2 = gw_db_disk_get_serial ( disk2); break; //FIXME add support category name sort // case GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION_DEFAULT: str1 = gw_db_disk_get_category_name ( disk1); // str2 = gw_db_disk_get_category_name ( disk2); // break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION_DEFAULT: str1 = gw_db_disk_get_description ( disk1); str2 = gw_db_disk_get_description ( disk2); break; } if ( (str1!=NULL) && (str2!=NULL) ) { if ( gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_SORT_CASE_SENSITIVE) == 1 ) { result = strcmp ( str1, str2); } else { result = strcasecmp ( str1, str2); } } } } return result; } gint gw_catalog_compare_file_glong ( GtkCList *clist, const gpointer ptr1, const gpointer ptr2) { GWDBFile *file1 = NULL, *file2 = NULL; glong nb1 = -1, nb2 = -1; gboolean isfolder1 = FALSE, isfolder2 = FALSE; gchar *str_name1 = NULL, *str_name2 = NULL; gint result = 0; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (ptr1!=NULL) && (ptr2!=NULL) ) { file1 = (GWDBFile*)(((GtkCListRow *)ptr1)->data); file2 = (GWDBFile*)(((GtkCListRow *)ptr2)->data); if ( (file1!=NULL) && (file2!=NULL) ) { str_name1 = gw_db_file_get_name ( file1); str_name2 = gw_db_file_get_name ( file2); isfolder1 = gw_db_file_is_real_directory ( file1); isfolder2 = gw_db_file_is_real_directory ( file2); switch ( clist->sort_column) { case GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION_DEFAULT: nb1 = gw_db_file_get_inode ( file1); nb2 = gw_db_file_get_inode ( file2); break; } if ( (str_name1!=NULL) && (str_name2!=NULL) ) { if ( (strlen ( str_name1) == 2) && (strncmp ( str_name1, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?-2:2); } else { if ( (strlen ( str_name2) == 2) && (strncmp ( str_name2, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?2:-2); } else { result = (((gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER)==0)||(isfolder1==isfolder2))?(nb1-nb2):(isfolder2-isfolder1)); } } } } } return result; } gint gw_catalog_compare_file_gulong ( GtkCList *clist, const gpointer ptr1, const gpointer ptr2) { GWDBFile *file1 = NULL, *file2 = NULL; gulong nb1 = 0, nb2 = 0; gboolean isfolder1 = FALSE, isfolder2 = FALSE; gchar *str_name1 = NULL, *str_name2 = NULL; gint result = 0; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (ptr1!=NULL) && (ptr2!=NULL) ) { file1 = (GWDBFile*)(((GtkCListRow *)ptr1)->data); file2 = (GWDBFile*)(((GtkCListRow *)ptr2)->data); if ( (file1!=NULL) && (file2!=NULL) ) { str_name1 = gw_db_file_get_name ( file1); str_name2 = gw_db_file_get_name ( file2); isfolder1 = gw_db_file_is_real_directory ( file1); isfolder2 = gw_db_file_is_real_directory ( file2); switch ( clist->sort_column) { case GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION_DEFAULT: nb1 = gw_db_file_get_cdate ( file1); nb2 = gw_db_file_get_cdate ( file2); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION_DEFAULT: nb1 = gw_db_file_get_adate ( file1); nb2 = gw_db_file_get_adate ( file2); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION_DEFAULT: nb1 = gw_db_file_get_mdate ( file1); nb2 = gw_db_file_get_mdate ( file2); break; } if ( (str_name1!=NULL) && (str_name2!=NULL) ) { if ( (strlen ( str_name1) == 2) && (strncmp ( str_name1, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?-1000:1000); } else { if ( (strlen ( str_name2) == 2) && (strncmp ( str_name2, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?1000:-1000); } else { result = (((gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER)==0)||(isfolder1==isfolder2))?(nb1-nb2):(isfolder2-isfolder1)); } } } } } return result; } gint gw_catalog_compare_file_guint64 ( GtkCList *clist, const gpointer ptr1, const gpointer ptr2) { GWDBFile *file1 = NULL, *file2 = NULL; guint64 nb1 = 0, nb2 = 0; gboolean isfolder1 = FALSE, isfolder2 = FALSE; gchar *str_name1 = NULL, *str_name2 = NULL; gint result = 0; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (ptr1!=NULL) && (ptr2!=NULL) ) { file1 = (GWDBFile*)(((GtkCListRow *)ptr1)->data); file2 = (GWDBFile*)(((GtkCListRow *)ptr2)->data); if ( (file1!=NULL) && (file2!=NULL) ) { str_name1 = gw_db_file_get_name ( file1); str_name2 = gw_db_file_get_name ( file2); isfolder1 = gw_db_file_is_real_directory ( file1); isfolder2 = gw_db_file_is_real_directory ( file2); switch ( clist->sort_column) { case GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION_DEFAULT: nb1 = gw_db_file_get_size ( file1); nb2 = gw_db_file_get_size ( file2); break; } if ( (str_name1!=NULL) && (str_name2!=NULL) ) { if ( (strlen ( str_name1) == 2) && (strncmp ( str_name1, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?-2:2); } else { if ( (strlen ( str_name2) == 2) && (strncmp ( str_name2, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?2:-2); } else { result = (((gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER)==0)||(isfolder1==isfolder2))?(nb1-nb2):(isfolder2-isfolder1)); } } } } } return result; } gint gw_catalog_compare_file_str ( GtkCList *clist, const gpointer ptr1, const gpointer ptr2) { GWDBFile *file1 = NULL, *file2 = NULL; gchar *str_name1 = NULL, *str_name2 = NULL; gchar *str1 = NULL, *str2 = NULL; gboolean isfolder1 = FALSE, isfolder2 = FALSE; gint result = 0; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (ptr1!=NULL) && (ptr2!=NULL) ) { file1 = (GWDBFile*)(((GtkCListRow *)ptr1)->data); file2 = (GWDBFile*)(((GtkCListRow *)ptr2)->data); if ( (file1!=NULL) && (file2!=NULL) ) { str_name1 = gw_db_file_get_name ( file1); str_name2 = gw_db_file_get_name ( file2); isfolder1 = gw_db_file_is_real_directory ( file1); isfolder2 = gw_db_file_is_real_directory ( file2); switch ( clist->sort_column) { case GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT: str1 = str_name1; str2 = str_name2; break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION_DEFAULT: str1 = gw_db_file_get_rights_to_gchar ( file1); str2 = gw_db_file_get_rights_to_gchar ( file2); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION_DEFAULT: str1 = gw_db_file_get_owner ( file1); str2 = gw_db_file_get_owner ( file2); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION_DEFAULT: str1 = gw_db_file_get_group ( file1); str2 = gw_db_file_get_group ( file2); break; //FIXME add support category name sort // case GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION_DEFAULT: str1 = gw_db_file_get_category_name ( file1); // str2 = gw_db_file_get_category_name ( file2); // break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION_DEFAULT: str1 = gw_db_file_get_description ( file1); str2 = gw_db_file_get_description ( file2); break; } if ( (str_name1!=NULL) && (str_name2!=NULL) && (str1!=NULL) && (str2!=NULL) ) { if ( (strlen ( str_name1) == 2) && (strncmp ( str_name1, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?-2:2); } else { if ( (strlen ( str_name2) == 2) && (strncmp ( str_name2, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?2:-2); } else { if ( gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_SORT_CASE_SENSITIVE) == 1 ) { result = (((gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER)==0)||(isfolder1==isfolder2))?strcmp ( str1, str2):(isfolder2-isfolder1)); } else { result = (((gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER)==0)||(isfolder1==isfolder2))?strcasecmp ( str1, str2):(isfolder2-isfolder1)); } } } } if ( clist->sort_column == GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION_DEFAULT ) { if ( str1 != NULL ) { g_free ( str1); } if ( str2 != NULL ) { g_free ( str2); } } } } return result; } gint gw_notebook_catalog_set_column_sort ( GtkCList *clist, gint column) { GtkCTree *ctree = NULL; GtkCTreeNode *selection = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (clist!=NULL) && (column>-1) ) { /* Gets the selected item in the tree. */ if ( (ctree = gw_gui_manager_main_interface_get_tree ( )) != NULL ) { if ( (GTK_CLIST ( ctree)->selection != NULL) && ((selection = GTK_CTREE_NODE ( GTK_CLIST ( ctree)->selection->data)) != NULL) ) { if ( GTK_CTREE_ROW ( selection)->parent == NULL ) { /* User is in the catalog : this is a list of disks. */ switch ( column) { case GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_disk_str); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_disk_str); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_disk_str); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_disk_int); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_disk_str); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_disk_str); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_disk_guint64); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_disk_guint64); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_disk_gulong); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_disk_str); break; //FIXME compare category name case GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, NULL); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_disk_str); break; default: gtk_clist_set_compare_func ( clist, NULL); break; } } else { /* User is in a disk or a folder : this is a list of files. */ switch ( column) { case GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_file_str); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_file_str); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_file_str); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_file_str); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_file_guint64); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_file_glong); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_file_gulong); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_file_gulong); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_file_gulong); break; //FIXME compare category name case GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, NULL); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_file_str); break; default: gtk_clist_set_compare_func ( clist, NULL); break; } } } } result = 0; } return result; } gboolean gw_notebook_catalog_column_sort ( GtkCList *clist, gint column, gpointer data) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : column=%d data=%d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, column, GPOINTER_TO_INT ( data)); #endif if ( clist != NULL ) { if ( GPOINTER_TO_INT ( data) != -1 ) { if ( column == clist->sort_column ) { if ( clist->sort_type == GTK_SORT_ASCENDING ) { clist->sort_type = GTK_SORT_DESCENDING; } else { clist->sort_type = GTK_SORT_ASCENDING; } } else { gtk_clist_set_sort_column ( clist, column); } } gw_notebook_catalog_set_column_sort ( clist, column); if ( GPOINTER_TO_INT ( data) != -1 ) { gtk_clist_sort ( clist); } result = TRUE; } return result; } gboolean gw_notebook_catalog_clist_button_press_event ( GtkWidget *w, GdkEventButton *event) { GtkCList *clist_info = NULL; GtkCTreeNode *selection = NULL, *node = NULL, *child = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBDisk *disk = NULL; GWDBFile *file = NULL; GWDBFile **files = NULL; GdkEventButton *bev = event; gint row,col; GtkWindow *window = NULL; GtkCTree *ctree = NULL; GtkCTreeNode *root = NULL; gchar *tmp_date = NULL; gint i = 0, nb = 0; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Gets all needs references. */ window = gw_gui_manager_main_interface_get_main_window ( ); ctree = gw_gui_manager_main_interface_get_tree ( ); root = gw_gui_manager_main_interface_get_tree_root ( ); clist_info = gw_notebook_catalog_get_clist_explorer ( window); /* Checks if a catalog is opened. */ if ( root != NULL && context != NULL && (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL) { /* Ignores clicks on scrollbars. */ if ( event->window == GTK_CLIST ( clist_info)->clist_window ){ /* Gets the selected item in the tree. */ selection = GTK_CTREE_NODE ( GTK_CLIST ( ctree)->selection->data); /* Gets the selected item in the list. */ gtk_clist_get_selection_info ( clist_info, event->x, event->y, &row, &col); /* Stops the signal during the process. */ /* If uncomment this line, the item will not be selected. gtk_signal_emit_stop_by_name ( GTK_OBJECT ( clist_info), "button_press_event"); */ /* Checks the type of click */ switch ( event->type) { case GDK_BUTTON_PRESS: /* Single click */ /* Checks clicked bouton. */ switch ( event->button) { case 1: /* Left bouton */ if ( GTK_CTREE_ROW ( selection)->parent == NULL ) { /* User is in the catalog : he clicked on a disk. */ /* Gets informations attached to the line. */ if ( (disk = (GWDBDisk*)gtk_clist_get_row_data ( clist_info, row)) != NULL ) { /* User clicked on a disk. */ /* Updates the status bar. */ gw_status_bar_put_msg_disk ( window, gw_db_disk_get_name ( disk), gw_db_disk_get_fstype ( disk), gw_db_disk_get_capacity ( disk), gw_db_disk_get_free ( disk), (long double)gw_db_disk_get_full ( disk), 0); /* Must return FALSE to show the selected item with GTK+ 2.x (with bleu background) */ return FALSE; } else { /* If user clicked on a empty space. */ /* Must return FALSE to show the selected item with GTK+ 2.x (with bleu background) */ //FIXME why?? return TRUE; } } else { /* If user clicked on a folder or a file. */ /* Gets informations attached to the line. */ if ( (file = (GWDBFile*)gtk_clist_get_row_data ( GTK_CLIST ( clist_info), row)) == NULL ) { /* User clicked on a empty space. */ return TRUE; } else { /* If user clicked on an item. */ if ( gw_db_file_is_real_directory ( file) ) { /* If it's a folder. */ if ( (strlen ( gw_db_file_get_name ( file)) == 2) && (strncmp ( gw_db_file_get_name ( file), "..", 2) == 0) ) { /* If it's the parent folder. */ /* Updates the status bar. */ tmp_date = gw_helper_db_file_get_cdate_to_str ( file); gw_status_bar_put_msg_file ( window, gw_db_file_get_name ( file), gw_db_file_get_size ( file), tmp_date, 1); g_free ( tmp_date); /* Must return FALSE to show the selected item with GTK+ 2.x (with bleu background) */ return FALSE; } else { /* If it's an unspecified folder. */ /* Searches in the tree where is the selected folder. */ node = gw_notebook_catalog_ctree_node_get_child ( GTK_CTREE_NODE ( GTK_CLIST ( ctree)->selection->data), gw_db_file_get_name ( file)); file = plugin->gw_db_catalog_get_db_file ( context, gtk_ctree_node_get_row_data ( ctree, node)); // file = gtk_ctree_node_get_row_data ( ctree, node); /* Counts the number of files (to depth 1) in the given folder (except "." and ".." folders). */ if ( (files = plugin->gw_db_file_get_db_files ( context, gw_db_file_get_ref ( file))) != NULL ) { for ( i = 0; files[i] != NULL; i++) { nb++; if ( strlen ( gw_db_file_get_name ( files[i]))==1 && strcmp ( gw_db_file_get_name ( files[i]), ".")==0 ) {nb--;} if ( strlen ( gw_db_file_get_name ( files[i]))==2 && strcmp ( gw_db_file_get_name ( files[i]), "..")==0 ) {nb--;} gw_db_file_free(files[i]);files[i]=NULL; } g_free(files);files=NULL; } else { } /* Updates the status bar. */ gw_status_bar_put_msg_dir ( window, gw_db_file_get_name ( file), gw_db_file_get_size ( file), nb, gw_notebook_catalog_ctree_node_get_num_children ( node), 0); gw_db_file_free ( file); /* Must return FALSE to show the selected item with GTK+ 2.x (with bleu background) */ return FALSE; } } else { /* If it's a file. */ /* Updates a the status bar. */ tmp_date = gw_helper_db_file_get_cdate_to_str ( file); gw_status_bar_put_msg_file ( window, gw_db_file_get_name ( file), gw_db_file_get_size ( file), tmp_date, 1); g_free ( tmp_date); return FALSE; } } } break; case 2: /* Middle bouton */ break; case 3: /* Right bouton */ /* If it's a right click : displays the popup menu. */ if ( GTK_CTREE_ROW ( selection)->parent == NULL ) { /* User is in the catalog : he clicked on a disk. */ /* Gets informations attached to the line. */ if ( (disk = (GWDBDisk*)gtk_clist_get_row_data ( clist_info, row)) == NULL ) { /* User clicked on empty space. */ return TRUE; } else { /* Else if user clicked on a disk. */ /* Searches in the tree where is the selected disk. */ node = gw_notebook_catalog_ctree_node_get_child ( GTK_CTREE_NODE ( GTK_CLIST( ctree)->selection->data), gw_db_disk_get_name ( disk)); /* Displays the popup menu. */ gtk_menu_popup ( gw_menu_popup_disk_create_and_show ( node, window), NULL, NULL, NULL, NULL, bev->button, bev->time); return TRUE; } } else { /* User clicked on a folder or a file. */ /* Gets informations attached to the line. */ if ( (file = (GWDBFile*)gtk_clist_get_row_data ( GTK_CLIST ( clist_info), row)) == NULL ) { /* If user clicked on empty space. */ return TRUE; } else { /* Else if user clicked on an item. */ if ( gw_db_file_is_directory ( file) ) { /* If it's a folder. */ if ( (strlen ( gw_db_file_get_name ( file)) == 2) && (strncmp ( gw_db_file_get_name ( file), "..", 2) == 0) ) { /* If it's the parent folder. */ return TRUE; } else { /* Else if it's an unspecified folder. */ /* Searches in the tree where is the selected folder. */ node = gw_notebook_catalog_ctree_node_get_child ( GTK_CTREE_NODE ( GTK_CLIST ( ctree)->selection->data), gw_db_file_get_name ( file)); /* Displays the popup menu. */ gtk_menu_popup ( gw_menu_popup_dir_create_and_show ( node, window), NULL, NULL, NULL, NULL, bev->button, bev->time); return TRUE; } } else { /* If it's a file which is selected. */ /* Displays the popup menu. */ gtk_menu_popup ( gw_menu_popup_file_create_and_show ( GINT_TO_POINTER ( row), window), NULL, NULL, NULL, NULL, bev->button, bev->time); return TRUE; } } } break; default:break; } break; case GDK_2BUTTON_PRESS: /* Double click*/ /* Checks clicked bouton. */ switch ( event->button) { case 1: /* Left bouton */ /* To prevent that double click generates a signal in excess. */ gdk_event_get ( ); /* Checks the type of selected item. */ if ( GTK_CTREE_ROW ( selection)->parent == NULL ) { /* User is in the catalog : he clicked on a disk. */ /* Gets informations attached to the line. */ if ( (disk = (GWDBDisk*)gtk_clist_get_row_data ( clist_info, row)) != NULL ) { /* Really clicked on a disk. */ if ( !GTK_CTREE_ROW ( selection)->expanded ) { gtk_ctree_expand ( ctree, selection); } /* Searches in the tree where is the selected disk. */ child = GTK_CTREE_ROW ( selection)->children; while ( child != NULL ) { if ( gw_db_disk_get_ref ( disk) == gtk_ctree_node_get_row_data ( ctree, child)) { // if ( strcmp ( gw_db_disk_get_name ( tmp_disk), gw_db_disk_get_name ( disk)) == 0 ) { gtk_ctree_select ( ctree, child); return TRUE; } child = GTK_CTREE_NODE_NEXT ( child); return TRUE; } } else { /* Clicked in empty space. */ return TRUE; } } else { /* Else if user clicked on a folder or a file. */ /* Gets informations attached to the line. */ if ( (file = (GWDBFile*)gtk_clist_get_row_data ( clist_info, row)) != NULL ) { /* Really clicked on an item. */ if ( gw_db_file_is_directory ( file) ) { /* If it's a folder. */ if ( (strlen ( gw_db_file_get_name ( file)) == 2) && (strncmp ( gw_db_file_get_name ( file), "..", 2) == 0) ) { /* If it's the parent folder. */ child = GTK_CTREE_ROW ( selection)->parent; if ( child != root ) { gtk_ctree_select ( ctree, child); } return TRUE; } else { /* Else if it's an unspecified folder. */ if ( !GTK_CTREE_ROW ( selection)->expanded ) { gtk_ctree_expand ( ctree, selection); } /* Searches in the tree where is the selected folder. */ child = GTK_CTREE_ROW ( selection)->children; while ( child != NULL ) { if ( gw_db_file_get_ref ( file) == gtk_ctree_node_get_row_data ( ctree, child)) { // if ( strcmp ( gw_db_file_get_name ( gtk_ctree_node_get_row_data ( ctree, child)), gw_db_file_get_name ( file)) == 0 ) { gtk_ctree_select ( ctree, child); return TRUE; } child = GTK_CTREE_NODE_NEXT ( child); } return TRUE; } } else { /* If it's a file. */ tmp_date = gw_helper_db_file_get_cdate_to_str ( file); gw_status_bar_put_msg_file ( window, gw_db_file_get_name ( file), gw_db_file_get_size ( file), tmp_date, 1); g_free ( tmp_date); return TRUE; } } else { /* If user clicked in empty space. */ return TRUE; } } break; case 2: /* Middle bouton */ break; case 3: /* Right bouton */ break; default:break; } break; default: break; } } else { } } else { } return FALSE; } gint gw_notebook_catalog_clist_column_resized ( GtkCList *clist, gint column, gint width, gpointer user_data) { GtkCTreeNode *root = gw_gui_manager_main_interface_get_tree_root ( ); GtkCTree *ctree = NULL; GtkCTreeNode *selection = NULL; gint result = -1; gint autoresize = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (root!=NULL) && (clist!=NULL) && (column>-1) ) { if ( (autoresize = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE)) == -1 ) { autoresize = GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE_DEFAULT; } /* Saves the column width only if the autoresize mode is desactivated. */ if ( autoresize == FALSE ) { /* Gets the selected item in the tree. */ if ( (ctree = gw_gui_manager_main_interface_get_tree ( )) != NULL ) { if ( (GTK_CLIST ( ctree)->selection != NULL) && ((selection = GTK_CTREE_NODE ( GTK_CLIST ( ctree)->selection->data)) != NULL) ) { if ( GTK_CTREE_ROW ( selection)->parent == NULL ) { /* User is in the catalog : this is a list of disks. */ switch ( column) { case GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_SIZE, g_strdup_printf ( "%d", width)); break; default: break; } result = 0; } else { /* User is in a disk or a folder : this is a list of files. */ switch ( column) { case GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_SIZE, g_strdup_printf ( "%d", width)); break; default: break; } result = 0; } } else {} } else {} } } return result; } gboolean gw_notebook_catalog_ctree_button_press_event ( GtkWidget *w, GdkEventButton *event) { GtkCList *clist; GtkCTreeNode *node; gint row, col; GdkEventButton *bev = event; GtkCTree *ctree = NULL; GtkWindow *window = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif ctree = gw_gui_manager_main_interface_get_tree ( ); window = gw_gui_manager_main_interface_get_main_window ( ); clist = GTK_CLIST ( w); /* Ignores clicks on scrollbars. */ if ( event->window == GTK_CLIST ( clist)->clist_window ) { gtk_clist_get_selection_info ( GTK_CLIST ( clist), event->x, event->y, &row, &col); node = GTK_CTREE_NODE ( g_list_nth ( clist->row_list, row)); /* Stops the signal during the process, except for single left click in order expand or collapse node with click on the cross node. */ if ( !((event->type == GDK_BUTTON_PRESS) && (event->button == 1)) ) { gtk_signal_emit_stop_by_name ( GTK_OBJECT ( ctree), "button_press_event"); } switch ( event->type) { case GDK_BUTTON_PRESS: /* Single click. */ switch ( event->button) { case 1: if ( node != NULL ) { /* If user didn't click in the empty space : select the row. */ gtk_ctree_select ( ctree, node); } return FALSE; break; case 2: break; case 3: /* Displays the popup menu. */ if ( node == NULL ) { /* If user clicked in the empty space. */ gtk_menu_popup ( gw_menu_popup_create_and_show ( window), NULL, NULL, NULL, NULL, bev->button, bev->time); return TRUE; } else { /* Selects the item for more user visibility. */ gtk_ctree_select ( ctree, node); gw_gui_manager_main_interface_refresh ( ); if ( GTK_CTREE_ROW ( node)->parent == NULL ) { /* If user clicked on a catalog. */ gtk_menu_popup ( gw_menu_popup_catalog_create_and_show ( node, window), NULL, NULL, NULL, NULL, bev->button, bev->time); return TRUE; } else if ( GTK_CTREE_ROW ( GTK_CTREE_ROW ( node)->parent)->parent == NULL ) { /* If user clicked on a disk. */ gtk_menu_popup ( gw_menu_popup_disk_create_and_show ( node, window), NULL, NULL, NULL, NULL, bev->button, bev->time); return TRUE; } else { /* If user clicked on a folder. */ gtk_menu_popup ( gw_menu_popup_dir_create_and_show ( node, window), NULL, NULL, NULL, NULL, bev->button, bev->time); return TRUE; } } return TRUE; break; default: break; } break; case GDK_2BUTTON_PRESS: /* Double click. */ switch ( event->button) { case 1: /* Prevents from double click to generate too many signals. */ gdk_event_get ( ); /* Checks if user didn't click in the empty space. */ if ( node != NULL ) { /* Opens or closes the node. */ if ( GTK_CTREE_ROW ( node)->expanded ) { gtk_ctree_collapse ( ctree, node); } else { gtk_ctree_expand ( ctree, node); } gtk_ctree_select ( ctree, node); } else {} return /*TRUE*/FALSE; break; case 2: break; case 3: break; default: break; } break; default: /* Unknown click. */ break; } } else { return TRUE; } return FALSE; } gboolean gw_notebook_catalog_ctree_select_row ( GtkCTree *ctree, GtkCTreeNode *node, gint column, gpointer g) { GtkCList *clist_info = NULL; gchar *info[12]; gint i, row, compt = 0, compt_file = 0; double size = 0; GtkWindow *window = NULL; GtkCTreeNode *root = NULL; gchar *text_utf8 = NULL; gchar *tmp_date = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBDisk **disks = NULL; GWDBDisk *disk = NULL; GWDBFile **files = NULL; GWDBFile *file = NULL; gint j = 0; gboolean result = FALSE; GWDBCategory *category = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif window = gw_gui_manager_main_interface_get_main_window ( ); root = gw_gui_manager_main_interface_get_tree_root ( ); clist_info = gw_notebook_catalog_get_clist_explorer ( window); /* Checks if the catalog is loaded and selected node exists */ if ( root != NULL && node != NULL) { /* Stop the signal during the process. */ gtk_signal_emit_stop_by_name ( GTK_OBJECT ( ctree), "tree_select_row"); /* Freezes informations table */ gtk_clist_freeze ( clist_info); gtk_clist_clear ( clist_info); plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); /* Updates list */ #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : updates list\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Checks the type of selected node */ if ( GTK_CTREE_ROW ( node)->parent == NULL ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : catalog selected\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* If a catalog is selected, must to display disk list */ gw_notebook_catalog_clist_explorer_set_column_title_disk ( ); if ( (disks = plugin->gw_db_catalog_get_db_disks ( context)) != NULL) { for ( i = 0; disks[i] != NULL; i++) { category = plugin->gw_db_catalog_get_db_category ( context, gw_db_disk_get_category ( disks[i])); compt++; size = size + gw_db_disk_get_full ( disks[i]); g_strdup_to_gtk_text ( gw_db_disk_get_name ( disks[i]), info[GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION_DEFAULT]); g_strdup_to_gtk_text ( gw_db_disk_get_fsname ( disks[i]), info[GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION_DEFAULT]); g_strdup_to_gtk_text ( gw_db_disk_get_path ( disks[i]), info[GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION_DEFAULT]); text_utf8 = g_strdup_printf ( "%d", gw_db_disk_get_num ( disks[i])); g_strdup_to_gtk_text ( text_utf8, info[GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION_DEFAULT]); g_free ( text_utf8); g_strdup_to_gtk_text ( gw_db_disk_get_fstype ( disks[i]), info[GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION_DEFAULT]); g_strdup_to_gtk_text ( gw_db_disk_get_volume ( disks[i]), info[GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION_DEFAULT]); text_utf8 = gw_ui64_byte_to_str_format ( gw_db_disk_get_capacity ( disks[i])); g_strdup_to_gtk_text ( text_utf8, info[GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION_DEFAULT]); g_free ( text_utf8); text_utf8 = gw_ui64_byte_to_str_format ( gw_db_disk_get_free ( disks[i])); g_strdup_to_gtk_text ( text_utf8, info[GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION_DEFAULT]); g_free ( text_utf8); tmp_date = gw_helper_db_disk_get_date_to_str ( disks[i]); g_strdup_to_gtk_text ( tmp_date, info[GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION_DEFAULT]); g_free ( tmp_date); g_strdup_to_gtk_text ( gw_db_disk_get_serial ( disks[i]), info[GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION_DEFAULT]); g_strdup_to_gtk_text ( gw_db_category_get_name ( category), info[GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION_DEFAULT]); g_strdup_to_gtk_text ( gw_db_disk_get_description ( disks[i]), info[GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION_DEFAULT]); gw_str_replace_char ( info[GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION_DEFAULT], '\n', ' '); row = gtk_clist_append ( clist_info, info); gtk_clist_set_row_data_full ( clist_info, row, disks[i], (GtkDestroyNotify)gw_db_disk_free); gtk_clist_set_pixtext ( clist_info, row, 0, info[0], 5, gw_helper_db_disk_get_pixmap ( disks[i]), gw_helper_db_disk_get_bitmap ( disks[i])); /* Frees memory used by info. */ for ( j = 0; j < 11; j++) { g_free ( info[j]); } gw_db_category_free ( category); } g_free ( disks); } /* Displays in the status bar the informations about the selected item. */ gw_status_bar_put_msg_catalog ( window, ctree, root, compt, size); result = TRUE; } else { if ( GTK_CTREE_ROW ( node)->parent == root ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : disk selected\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* If a disk is selected, must to display folders and files list */ gw_notebook_catalog_clist_explorer_set_column_title_file ( ); if ( (disk = plugin->gw_db_catalog_get_db_disk ( context, gtk_ctree_node_get_row_data ( ctree, node))) != NULL ) { if ( (files = plugin->gw_db_disk_get_db_files ( context, gw_db_disk_get_ref ( disk))) != NULL ) { } else {} } else {} } else { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : folder selected\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* If a folder is selected, must to display folders and files list */ gw_notebook_catalog_clist_explorer_set_column_title_file ( ); if ( (file = plugin->gw_db_catalog_get_db_file ( context, gtk_ctree_node_get_row_data ( ctree, node))) != NULL ) { if ( (files = plugin->gw_db_file_get_db_files ( context, gw_db_file_get_ref ( file))) != NULL ) { } else {} } else {} } if ( files != NULL ) { for ( i = 0; files[i] != NULL; i++) { /* Don't display the "." folder */ if ( strcmp ( gw_db_file_get_name ( files[i]), ".") != 0) { category = plugin->gw_db_catalog_get_db_category ( context, gw_db_file_get_category ( files[i])); compt++; size = size + gw_db_file_get_size ( files[i]); g_strdup_to_gtk_text ( gw_db_file_get_name ( files[i]), info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT]); tmp_date = gw_db_file_get_rights_to_gchar ( files[i]); g_strdup_to_gtk_text ( tmp_date, info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION_DEFAULT]); g_free ( tmp_date); if ( gw_db_file_get_owner ( files[i])!=NULL && strlen ( gw_db_file_get_owner ( files[i])) != 0 ) { g_strdup_to_gtk_text ( gw_db_file_get_owner ( files[i]), info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION_DEFAULT]); } else { g_strdup_to_gtk_text ( _( "unknown owner"), info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION_DEFAULT]); } if ( gw_db_file_get_group ( files[i])!=NULL && strlen ( gw_db_file_get_group ( files[i])) != 0 ) { g_strdup_to_gtk_text ( gw_db_file_get_group ( files[i]), info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION_DEFAULT]); } else { g_strdup_to_gtk_text ( _( "unknown group"), info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION_DEFAULT]); } text_utf8 = gw_ui64_byte_to_str_format ( gw_db_file_get_size ( files[i])); g_strdup_to_gtk_text ( text_utf8, info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION_DEFAULT]); g_free ( text_utf8); text_utf8 = g_strdup_printf ( "%ld", gw_db_file_get_inode ( files[i])); g_strdup_to_gtk_text ( text_utf8, info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION_DEFAULT]); g_free ( text_utf8); tmp_date = gw_helper_db_file_get_cdate_to_str ( files[i]); g_strdup_to_gtk_text ( tmp_date, info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION_DEFAULT]); g_free ( tmp_date); tmp_date = gw_helper_db_file_get_mdate_to_str ( files[i]); g_strdup_to_gtk_text ( tmp_date, info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION_DEFAULT]); g_free ( tmp_date); tmp_date = gw_helper_db_file_get_adate_to_str ( files[i]); g_strdup_to_gtk_text ( tmp_date, info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION_DEFAULT]); g_free ( tmp_date); g_strdup_to_gtk_text ( gw_db_category_get_name ( category), info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION_DEFAULT]); g_strdup_to_gtk_text ( gw_db_file_get_description ( files[i]), info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION_DEFAULT]); gw_str_replace_char ( info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION_DEFAULT], '\n', ' '); g_strdup_to_gtk_text ( NULL, info[11]); if ( strcmp ( gw_db_file_get_name ( files[i]), "..") == 0) { compt_file++; row = gtk_clist_prepend ( clist_info, info); gtk_clist_set_row_data_full ( clist_info, row, files[i], (GtkDestroyNotify)gw_db_file_free); gtk_clist_set_pixtext ( clist_info, row, 0, info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT], 5, PixParentFolder, MskParentFolder); } else { row = gtk_clist_append ( clist_info, info); gtk_clist_set_row_data_full ( clist_info, row, files[i], (GtkDestroyNotify)gw_db_file_free); if ( gw_db_file_is_directory ( files[i])) { //TODO test if it is a locked folder... //gtk_clist_set_pixtext ( clist_info, row, 0, info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT], 5, PixLockedFolder, MskLockedFolder); gtk_clist_set_pixtext ( clist_info, row, 0, info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT], 5, PixFolder, MskFolder); } else { compt_file++; gtk_clist_set_pixtext ( clist_info, row, 0, info[GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT], 5, PixFile, MskFile); } } /* Frees memory used by info. */ for ( j = 0; j < 11; j++) { g_free ( info[j]); } gw_db_category_free ( category); } else { gw_db_file_free ( files[i]); } } g_free ( files); } else { //TODO what should we do?? } if ( GTK_CTREE_ROW ( node)->parent == root ) { /* Displays in the status bar the informations about the selected item. */ gw_status_bar_put_msg_disk ( window, gw_db_disk_get_name ( disk), gw_db_disk_get_fstype ( disk), gw_db_disk_get_capacity ( disk), gw_db_disk_get_free ( disk), size, compt - 1); gw_db_disk_free ( disk); } else { /* Displays in the status bar the informations about the selected item. */ gw_status_bar_put_msg_dir ( window, gw_db_file_get_name ( file), size, compt_file - 1, compt - compt_file, compt - 1); gw_db_file_free ( file); } } /* Updates the list */ gtk_clist_sort ( clist_info); gtk_clist_thaw ( clist_info); result = TRUE; } else {} return result; } gwhere-0.2.3/src/gui/gwnotebookcatalogcallback.h0000744000175000017500000001237510211414603020352 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwnotebookcatalogcallback.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is the graphical catalog explorer component. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwnotebookcatalogcallback.c * @author Author */ #ifndef GW_GUI_GW_NOTEBOOK_CATALOG_CALLBACK_H #define GW_GUI_GW_NOTEBOOK_CATALOG_CALLBACK_H /*! * @function gw_notebook_catalog_set_column_sort * @abstract Sets the sort algorithm. * @discussion This function sets the sort algorithm. * @param clist catalog file list clist * @param column column to sort * @result Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_catalog_set_column_sort ( GtkCList *clist, gint column); /*! * @function gw_notebook_catalog_column_sort * @abstract Sorts the column as ascending or descending. * @discussion This function sorts the column as ascending or descending. * @param clist catalog file list clist * @param column column to sort * @param data unused at time * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_notebook_catalog_column_sort ( GtkCList *clist, gint column, gpointer data); /*! * @function gw_notebook_catalog_clist_button_press_event * @abstract Loads the list of files. * @discussion This function loads the list of files whitch are in the * selected folder or disk (or loads the list of disk if is * a catalog that was selected).
* This function call when the user click on a item in the * list of file (or disk).
* @param w the source widget event * @param event the event * @result Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_notebook_catalog_clist_button_press_event ( GtkWidget *w, GdkEventButton *event); /*! * @function gw_notebook_catalog_clist_column_resized * @abstract Saves the column width. * @discussion This function saves the column width.
* This function call when the user click on a item in the * list of file (or disk).
* @param clist the column list source invoker * @param column the column number * @param width the new column width * @param data unused data * @result Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_catalog_clist_column_resized ( GtkCList *clist, gint column, gint width, gpointer data); /*! * @function gw_notebook_catalog_ctree_button_press_event * @abstract Loads the list of files. * @discussion This function loads the list of files whitch are in the * selected folder or disk (or loads the list of disk if is * a catalog that was selected).
* This function call when the user click on a item in the * tree.
* @param w the source widget event * @param event the event * @result Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_notebook_catalog_ctree_button_press_event ( GtkWidget *w, GdkEventButton *event); /*! * @function gw_notebook_catalog_ctree_select_row * @abstract Loads the list of files. * @discussion This function loads the list of files whitch are in the * selected folder or disk (or loads the list of disk if is * a catalog that was selected).
* This function call when the user select on a item in the * tree.
* @param ctree the tree * @param noeud the node selected * @param colonne the column * @param p a void pointer (in order to send datas structure). * @result Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_notebook_catalog_ctree_select_row ( GtkCTree *ctree, GtkCTreeNode *noeud, gint colonne, gpointer g); /*! * @function gw_notebook_catalog_ctree_node_get_folder_size * @abstract Gets the size of folder * @discussion This functions gets the size of the selected folder.
* @param ctree the tree where is the folder * @param node the node * @result the size of folder.
* Returns 0 when an error occured.
*/ //gulong gw_notebook_catalog_ctree_node_get_folder_size ( GtkCTree *ctree, GtkCTreeNode *node); #endif gwhere-0.2.3/src/gui/gwnotebookmanagment.c0000744000175000017500000014212110247421307017226 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwnotebookmanagment.h" #include /* strncmp */ #include #include "tools/gwtools.h" #include "data/gwdata.h" #include "gwcomboboxcategories.h" #include "gwnotebookmanagmentcallback.h" #include "../gwapplicationmanager.h" #include "../gwguimanager.h" #include "../gwsupermount.h" /*! @define GW_REF_NOTEBOOK_MANAGMENT_TABBED_PANE_LABEL The pabbed pane title */ #define GW_REF_NOTEBOOK_MANAGMENT_TABBED_PANE_LABEL "gw_ref_gw_notebook_managment_tabbed_pane_label" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_ENTRY_DEVICE_DIR The combo box entry for device directory */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_ENTRY_DEVICE_DIR "ref_gw_gui_gw_notebook_managment_combo_box_entry_device_dir" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_ENTRY_DEVICE_NAME The entry for device name*/ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_ENTRY_DEVICE_NAME "ref_gw_gui_gw_notebook_managment_entry_device_name" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_ENTRY_DEVICE_NUMBER_ARCHIVE The entry for number archive */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_ENTRY_DEVICE_NUMBER_ARCHIVE "ref_gw_gui_gw_notebook_managment_entry_device_number_archive" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_ENTRY_DEVICE_CATEGORY The combo box entry for category */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_ENTRY_DEVICE_CATEGORY "ref_gw_gui_gw_notebook_managment_combo_box_entry_device_category" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_DISPLAY_INFO The check box for option display information */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_DISPLAY_INFO "ref_gw_gui_gw_notebook_managment_check_display_info" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_AUTO_MOUNT The check box for option automount */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_AUTO_MOUNT "ref_gw_gui_gw_notebook_managment_check_auto_mount" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EJECT The check box for option auto eject */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EJECT "ref_gw_gui_gw_notebook_managment_check_eject" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_CATEGORY_RECURSIVE The check box for option set category recursively */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_CATEGORY_RECURSIVE "ref_gw_gui_gw_notebook_managment_check_category_recursive" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EXPLORE_TREE_STRUCTURE The check box for option explore tree structure */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EXPLORE_TREE_STRUCTURE "ref_gw_gui_gw_notebook_managment_check_explore_tree_structure" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EXPLORE_ARCHIVE The check box for option explore archive files */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EXPLORE_ARCHIVE "ref_gw_gui_gw_notebook_managment_check_explore_archive" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_MAKE_DESCRIPTION The check box for option automake description */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_MAKE_DESCRIPTION "ref_gw_gui_gw_notebook_managment_check_make_description" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_USE_DISK_LABEL The check box for option use disk label as name */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_USE_DISK_LABEL "ref_gw_gui_gw_notebook_managment_check_use_disk_label" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_USE_PATTERN The check box for option use pattern to generate disk name */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_USE_PATTERN "ref_gw_gui_gw_notebook_managment_check_use_pattern" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_DEVICE The combo box for device selection */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_DEVICE "ref_gw_gui_gw_notebook_managment_combo_box_device" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_CATEGORY The combo box for category selection */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_CATEGORY "ref_gw_gui_gw_notebook_managment_combo_box_category" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_INFO The label of device information */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_INFO "ref_gw_gui_gw_notebook_managment_label_display_info_info" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_TYPE The label of device type */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_TYPE "ref_gw_gui_gw_notebook_managment_label_display_info_type" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_MOUNTED The label of device mount status */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_MOUNTED "ref_gw_gui_gw_notebook_managment_label_display_info_mounted" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_VOLUME The label of device volume name */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_VOLUME "ref_gw_gui_gw_notebook_managment_label_display_info_volume" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_SERIAL_NUMBER The label of device serial number */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_SERIAL_NUMBER "ref_gw_gui_gw_notebook_managment_label_display_info_serial_number" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_CAPACITY The label of device capacity */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_CAPACITY "ref_gw_gui_gw_notebook_managment_label_display_info_capacity" /*! @define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_FREE_SPACE the label of device free space */ #define REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_FREE_SPACE "ref_gw_gui_gw_notebook_managment_label_display_info_free_space" GtkWidget * gw_notebook_managment_create ( GtkWindow * window) { GtkWidget *vb_tabbed_pane = NULL; GtkWidget *hb_control; GtkWidget *frm_new_disk_control; GtkWidget *vb_new_disk_control; GtkWidget *hb_disk_selection; GtkWidget *lbl_disk_selection; GtkWidget *cmb_disk_selection; GtkWidget *entry_cmb_disk_selection; GtkWidget *hseparator; GtkWidget *hb_number_archive; GtkWidget *lbl_number_archive; GtkWidget *entry_number_archive; GtkWidget *hb_disk_name; GtkWidget *lbl_disk_name; GtkWidget *entry_disk_name; GtkHBox *cmb_categories; GtkWidget *hb_device_file; GtkWidget *lbl_device_file; GtkWidget *hb_device_type; GtkWidget *lbl_device_type; #ifdef HAVE_MOUNT_SYSTEM GtkWidget *hb_device_ismounted; GtkWidget *lbl_device_ismounted; #endif GtkWidget *hb_device_volume_name; GtkWidget *lbl_device_volume_name; GtkWidget *hb_device_serial_number; GtkWidget *lbl_device_serial_number; GtkWidget *hb_device_capacity; GtkWidget *lbl_device_capacity; GtkWidget *hb_device_free_space; GtkWidget *lbl_device_free_space; GtkWidget *frm_options; GtkWidget *vb_options; GtkWidget *chk_display_device_info; #ifdef HAVE_MOUNT_SYSTEM GtkWidget *chk_automount_device; #endif GtkWidget *chk_explore_tree_structure; GtkWidget *chk_explore_archive_files; GtkWidget *chk_auto_eject_device; GtkWidget *chk_category_recursively; GtkWidget *chk_auto_make_description; GtkWidget *chk_use_disk_label; GtkWidget *chk_use_pattern; GtkWidget *bt_start_device_scan; GtkTooltips *tooltips_group; GtkCTree *tree = NULL; GtkCTreeNode *root = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( window != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); root = gw_gui_manager_main_interface_get_tree_root ( ); /* Inits tooltips group */ tooltips_group = gtk_tooltips_new ( ); /* Vertical box of the managment tabbed pane. */ vb_tabbed_pane = gtk_vbox_new ( FALSE, 0); /* Horizontal box for controls (text field, checks buttons, ...). */ hb_control = gtk_hbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_control, TRUE, TRUE, 0); /* Frame of new disk control */ g_strdup_to_gtk_text ( _( "New disk"), text_utf8); frm_new_disk_control = gtk_frame_new ( text_utf8); g_free ( text_utf8); gtk_container_set_border_width ( GTK_CONTAINER ( frm_new_disk_control), 10); gtk_box_pack_start ( GTK_BOX ( hb_control), frm_new_disk_control, FALSE, TRUE, 0); /* Vertical box for new disk control */ vb_new_disk_control = gtk_vbox_new ( FALSE, 0); gtk_container_add ( GTK_CONTAINER ( frm_new_disk_control), vb_new_disk_control); /* Horizontal box for media selection */ hb_disk_selection = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_disk_selection), 10); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), hb_disk_selection, TRUE, TRUE, 0); g_strdup_to_gtk_text ( _( "Select the media that will be added as disk to your catalog."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, hb_disk_selection, text_utf8, NULL); g_free ( text_utf8); /* Label for media selection */ g_strdup_to_gtk_text ( _( "Select media : "), text_utf8); lbl_disk_selection = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_disk_selection), lbl_disk_selection, FALSE, FALSE, 0); /* ComboBox to select media */ cmb_disk_selection = gtk_combo_new ( ); gtk_widget_ref ( cmb_disk_selection); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_DEVICE, cmb_disk_selection, (GtkDestroyNotify) gtk_widget_unref); gtk_combo_set_use_arrows_always ( GTK_COMBO ( cmb_disk_selection), TRUE); gtk_entry_set_editable ( GTK_ENTRY ( GTK_COMBO ( cmb_disk_selection)->entry), FALSE); /* Loads the list of devices */ gw_notebook_managment_load_device_list ( window); /* To fix : when user click on combo's button, the first item of the list is selected automaticaly. This emits the "changed" event!! */ gtk_signal_connect_after ( GTK_OBJECT ( GTK_ENTRY ( GTK_COMBO ( cmb_disk_selection)->entry)), "changed", GTK_SIGNAL_FUNC ( gw_notebook_managment_select_device), GTK_WINDOW ( window)); gtk_box_pack_start ( GTK_BOX ( hb_disk_selection), cmb_disk_selection, TRUE, TRUE, 0); /* Entry of ComboBox to select disk */ entry_cmb_disk_selection = GTK_COMBO ( cmb_disk_selection)->entry; gtk_widget_ref ( entry_cmb_disk_selection); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_ENTRY_DEVICE_DIR, entry_cmb_disk_selection, (GtkDestroyNotify) gtk_widget_unref); /* Horizontal separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), hseparator, TRUE, TRUE, 0); /* Horizontal box for number archive */ hb_number_archive = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_number_archive), 10); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), hb_number_archive, TRUE, TRUE, 0); g_strdup_to_gtk_text ( _( "Enter the number of the new disk. This number can help you with the history of your catalog."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, hb_number_archive, text_utf8, NULL); g_free ( text_utf8); /* Label for number archive */ g_strdup_to_gtk_text ( _( "Archive N# : "), text_utf8); lbl_number_archive = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_number_archive), lbl_number_archive, FALSE, FALSE, 0); /* Entry for number archive */ entry_number_archive = gtk_entry_new ( ); gtk_widget_ref ( entry_number_archive); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_ENTRY_DEVICE_NUMBER_ARCHIVE, entry_number_archive, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_number_archive), entry_number_archive, TRUE, TRUE, 0); /* Horizontal box for disk name */ hb_disk_name = gtk_hbox_new ( FALSE, 0); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), hb_disk_name, TRUE, TRUE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_disk_name), 10); g_strdup_to_gtk_text ( _( "Enter the name of the new disk. This name will be appear in your catalog."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, hb_disk_name, text_utf8, NULL); g_free ( text_utf8); /* Label for disk name */ g_strdup_to_gtk_text ( _( "Name : "), text_utf8); lbl_disk_name = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_disk_name), lbl_disk_name, FALSE, FALSE, 0); /* Entry for disk name */ entry_disk_name = gtk_entry_new ( ); gtk_widget_ref ( entry_disk_name); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_ENTRY_DEVICE_NAME, entry_disk_name, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_disk_name), entry_disk_name, TRUE, TRUE, 0); gtk_signal_connect ( GTK_OBJECT ( entry_disk_name), "activate", GTK_SIGNAL_FUNC ( gw_notebook_managment_scan_click), window); /* Horizontal separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), hseparator, TRUE, TRUE, 0); /* ComboBox for category selection */ /* It's not mandatory to encode to UTF-8 because gw_combo_box_categories_create() encodes itself. */ cmb_categories = gw_combo_box_categories_create ( window, _( "Category : "), gtk_ctree_node_get_row_data ( tree, root)); gtk_widget_ref ( GTK_WIDGET ( cmb_categories)); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_CATEGORY, GTK_WIDGET ( cmb_categories), (GtkDestroyNotify) gtk_widget_unref); gw_combo_box_categories_load ( cmb_categories); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), GTK_WIDGET ( cmb_categories), TRUE, TRUE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( cmb_categories), 10); g_strdup_to_gtk_text ( _( "Select the category to apply to the disk which will be added (even if the option is checked)."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, GTK_WIDGET ( cmb_categories), text_utf8, NULL); g_free ( text_utf8); /* Horizontal separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), hseparator, TRUE, TRUE, 0); /* Horizontal box for device file information */ hb_device_file = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_device_file), 5); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), hb_device_file, TRUE, TRUE, 0); g_strdup_to_gtk_text ( _( "Give the device file of the selected media."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, hb_device_file, text_utf8, NULL); g_free ( text_utf8); /* Device file information label */ g_strdup_to_gtk_text ( _( "Info : "), text_utf8); lbl_device_file = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( lbl_device_file); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_INFO, lbl_device_file, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_device_file), lbl_device_file, FALSE, FALSE, 0); /* Horizontal box for device type information */ hb_device_type = gtk_hbox_new ( FALSE, 0); gtk_widget_show ( hb_device_type); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), hb_device_type, TRUE, TRUE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_device_type), 5); g_strdup_to_gtk_text ( _( "Give the type of the selected media (ex : ext2, ext3, vfat, ntfs, ...)."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, hb_device_type, text_utf8, NULL); g_free ( text_utf8); /* Device type information label */ g_strdup_to_gtk_text ( _( "Type : "), text_utf8); lbl_device_type = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( lbl_device_type); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_TYPE, lbl_device_type, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_device_type), lbl_device_type, FALSE, FALSE, 0); #ifdef HAVE_MOUNT_SYSTEM /* Horizontal box for media mount state information */ hb_device_ismounted = gtk_hbox_new ( FALSE, 0); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), hb_device_ismounted, TRUE, TRUE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_device_ismounted), 5); g_strdup_to_gtk_text ( _( "Display if the selected media is mounted or no."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, hb_device_ismounted, text_utf8, NULL); g_free ( text_utf8); /* Media mount state information label */ g_strdup_to_gtk_text ( _( "Mounted : "), text_utf8); lbl_device_ismounted = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( lbl_device_ismounted); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_MOUNTED, lbl_device_ismounted, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_device_ismounted), lbl_device_ismounted, FALSE, FALSE, 0); #endif /* Horizontal box for media volume name information */ hb_device_volume_name = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_device_volume_name), 5); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), hb_device_volume_name, TRUE, TRUE, 0); g_strdup_to_gtk_text ( _( "Give the volume name of the selected media (only if is mounted)."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, hb_device_volume_name, text_utf8, NULL); g_free ( text_utf8); /* Media volume information label */ g_strdup_to_gtk_text ( _( "Volume : "), text_utf8); lbl_device_volume_name = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( lbl_device_volume_name); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_VOLUME, lbl_device_volume_name, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_device_volume_name), lbl_device_volume_name, FALSE, FALSE, 0); /* Horizontal box for media serial number information */ hb_device_serial_number = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_device_serial_number), 5); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), hb_device_serial_number, TRUE, TRUE, 0); g_strdup_to_gtk_text ( _( "Give the serial number of the selected media (only if is mounted). This number is a manufacture number."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, hb_device_serial_number, text_utf8, NULL); g_free ( text_utf8); /* Media serial number information label */ g_strdup_to_gtk_text ( _( "Serial N# : "), text_utf8); lbl_device_serial_number = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( lbl_device_serial_number); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_SERIAL_NUMBER, lbl_device_serial_number, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_device_serial_number), lbl_device_serial_number, FALSE, FALSE, 0); /* Horizontal box for media capacity information */ hb_device_capacity = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_device_capacity), 5); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), hb_device_capacity, TRUE, TRUE, 0); g_strdup_to_gtk_text ( _( "Give the full space of the selected media (only if is mounted)."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, hb_device_capacity, text_utf8, NULL); g_free ( text_utf8); /* Media capacity information label */ g_strdup_to_gtk_text ( _( "Capacity : "), text_utf8); lbl_device_capacity = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( lbl_device_capacity); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_CAPACITY, lbl_device_capacity, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_device_capacity), lbl_device_capacity, FALSE, FALSE, 0); /* Horizontal box for media free space information */ hb_device_free_space = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_device_free_space), 5); gtk_box_pack_start ( GTK_BOX ( vb_new_disk_control), hb_device_free_space, TRUE, TRUE, 0); g_strdup_to_gtk_text ( _( "Give the free space of the selected media (only if is mounted)."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, hb_device_free_space, text_utf8, NULL); g_free ( text_utf8); /* Media free space information label */ g_strdup_to_gtk_text ( _( "Free space : "), text_utf8); lbl_device_free_space = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( lbl_device_free_space); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_FREE_SPACE, lbl_device_free_space, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_device_free_space), lbl_device_free_space, FALSE, FALSE, 0); /* Frame for scan options */ g_strdup_to_gtk_text ( _( "Options"), text_utf8); frm_options = gtk_frame_new ( text_utf8); g_free ( text_utf8); gtk_container_set_border_width ( GTK_CONTAINER ( frm_options), 10); gtk_box_pack_start ( GTK_BOX ( hb_control), frm_options, TRUE, TRUE, 0); /* Vertical box of the frame options */ vb_options = gtk_vbox_new ( FALSE, 0); gtk_container_add ( GTK_CONTAINER ( frm_options), vb_options); /* Check button for the displaying of media information */ g_strdup_to_gtk_text ( _( "Display info"), text_utf8); chk_display_device_info = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_display_device_info); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_DISPLAY_INFO, chk_display_device_info, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_display_device_info), "clicked", GTK_SIGNAL_FUNC ( gw_notebook_managment_refresh_info), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_display_device_info), 5); gtk_box_pack_start ( GTK_BOX ( vb_options), chk_display_device_info, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Displays selected media informations as path, capacity, free space, label,..."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_display_device_info, text_utf8, NULL); g_free ( text_utf8); #ifdef HAVE_MOUNT_SYSTEM /* Check button for the automount */ g_strdup_to_gtk_text ( _("Automount"), text_utf8); chk_automount_device = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_automount_device); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_AUTO_MOUNT, chk_automount_device, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_automount_device), "clicked", GTK_SIGNAL_FUNC (gw_notebook_managment_option_automount_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_automount_device), 5); gtk_box_pack_start ( GTK_BOX ( vb_options), chk_automount_device, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Mount the media if it wasn't mounted. And unmount after the media even if it was mounted before the scan."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_automount_device, text_utf8, NULL); g_free ( text_utf8); #endif /* Check button for the exploring of tree structure */ g_strdup_to_gtk_text ( _( "Explore tree structure of the media."), text_utf8); chk_explore_tree_structure = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_explore_tree_structure); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EXPLORE_TREE_STRUCTURE, chk_explore_tree_structure, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_explore_tree_structure), "clicked", GTK_SIGNAL_FUNC (gw_notebook_managment_option_explore_tree_structure_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_explore_tree_structure), 5); gtk_box_pack_start ( GTK_BOX ( vb_options), chk_explore_tree_structure, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Keep this option checked to scan all folders and files informations."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_explore_tree_structure, text_utf8, NULL); g_free ( text_utf8); /* Check button for the exploring of archive files */ g_strdup_to_gtk_text ( _( "Explore archive files (.tar, .gz, .zip, ...)"), text_utf8); chk_explore_archive_files = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_explore_archive_files); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EXPLORE_ARCHIVE, chk_explore_archive_files, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_explore_archive_files), "clicked", GTK_SIGNAL_FUNC (gw_notebook_managment_option_explore_archive_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_explore_archive_files), 5); gtk_box_pack_start ( GTK_BOX ( vb_options), chk_explore_archive_files, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Not yet implemented!!\nExplore all archives, as it was a directory. Archives are tarred or gzipped files."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_explore_archive_files, text_utf8, NULL); g_free ( text_utf8); /* Check button for the auto eject */ g_strdup_to_gtk_text ( _( "Eject media if possible"), text_utf8); chk_auto_eject_device = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_auto_eject_device); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EJECT, chk_auto_eject_device, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_auto_eject_device), "clicked", GTK_SIGNAL_FUNC (gw_notebook_managment_option_eject_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_auto_eject_device), 5); gtk_box_pack_start ( GTK_BOX ( vb_options), chk_auto_eject_device, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Eject the media if possible (CD-ROM...), even if the tray was closed. This is enable only if automount is enable!!"), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_auto_eject_device, text_utf8, NULL); g_free ( text_utf8); /* Check button for setting category recursively */ g_strdup_to_gtk_text ( _( "Sets category recursive"), text_utf8); chk_category_recursively = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_category_recursively); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_CATEGORY_RECURSIVE, chk_category_recursively, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_category_recursively), "clicked", GTK_SIGNAL_FUNC (gw_notebook_managment_option_category_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_category_recursively), 5); gtk_box_pack_start ( GTK_BOX ( vb_options), chk_category_recursively, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Apply selected category to all items in the disk to add (disk, folders and files)."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_category_recursively, text_utf8, NULL); g_free ( text_utf8); /* Check button for the auto make description */ g_strdup_to_gtk_text ( _( "Auto make description"), text_utf8); chk_auto_make_description = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_auto_make_description); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_MAKE_DESCRIPTION, chk_auto_make_description, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_auto_make_description), "clicked", GTK_SIGNAL_FUNC (gw_notebook_managment_option_description_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_auto_make_description), 5); gtk_box_pack_start ( GTK_BOX ( vb_options), chk_auto_make_description, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Make auto description of file (file format description, image size for xmp or jpg, etc...)."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_auto_make_description, text_utf8, NULL); g_free ( text_utf8); /* Check button for the using a pattern to generate disk name */ g_strdup_to_gtk_text ( _( "Use an advanced pattern to generate disk name"), text_utf8); chk_use_pattern = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_use_pattern); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_USE_PATTERN, chk_use_pattern, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_use_pattern), "clicked", GTK_SIGNAL_FUNC (gw_notebook_managment_option_use_pattern_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_use_pattern), 5); gtk_box_pack_start ( GTK_BOX ( vb_options), chk_use_pattern, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "You can fill extra tags to generate a disk name with disk information :\n- %% : %\n- %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ...\n- %l : media volume label\n- %t : media type\n- %s : serial number"), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_use_pattern, text_utf8, NULL); g_free ( text_utf8); /* Check button for the using media label */ g_strdup_to_gtk_text ( _( "Use media volume name as disk name (only when disk name is empty)"), text_utf8); chk_use_disk_label = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_use_disk_label); gtk_object_set_data_full ( GTK_OBJECT ( window), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_USE_DISK_LABEL, chk_use_disk_label, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_use_disk_label), "clicked", GTK_SIGNAL_FUNC (gw_notebook_managment_option_use_disk_label_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_use_disk_label), 5); gtk_box_pack_start ( GTK_BOX ( vb_options), chk_use_disk_label, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "If you didn't enter disk name and if your selected media has a volume name, the media volume name will be applied as disk name."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_use_disk_label, text_utf8, NULL); g_free ( text_utf8); /* The add disk button to start the media scanning */ g_strdup_to_gtk_text ( _( "Add disk"), text_utf8); bt_start_device_scan = gtk_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_signal_connect ( GTK_OBJECT ( bt_start_device_scan), "clicked", GTK_SIGNAL_FUNC ( gw_notebook_managment_scan_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( bt_start_device_scan), 5); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), bt_start_device_scan, FALSE, FALSE, 0); /* Loads the list of devices */ /* Do not still load device info at time. gw_notebook_managment_load_device_list ( window); */ /* Loads the list of categories */ gw_combo_box_categories_load ( cmb_categories); /* Fills the pattern to use for disk name */ if ( gw_am_get_settings_tol ( GW_VALUE_APP_DISK_SCAN_USE_PATTERN) == 1) { gw_notebook_managment_set_device_name ( window, gw_am_get_settings ( GW_VALUE_APP_DISK_SCAN_PATTERN)); } } return vb_tabbed_pane; } GtkWidget * gw_notebook_managment_create_and_add ( GtkWindow *window, GtkNotebook *parent) { GtkWidget *tabbed_pane = NULL; GtkWidget *managment_tabbed_pane_label; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( window != NULL ) { tabbed_pane = gw_notebook_managment_create ( window); if ( (parent != NULL) && (tabbed_pane != NULL) ) { gtk_container_add ( GTK_CONTAINER ( parent), tabbed_pane); /* Text label of the managment tabbed pane. */ g_strdup_to_gtk_text ( _( "Management"), text_utf8); managment_tabbed_pane_label = gtk_label_new ( text_utf8); g_free ( text_utf8); /* Store reference to the title of tabbed pane */ gtk_widget_ref ( managment_tabbed_pane_label); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_MANAGMENT_TABBED_PANE_LABEL, managment_tabbed_pane_label,(GtkDestroyNotify) gtk_widget_unref); gtk_notebook_set_tab_label ( parent, gtk_notebook_get_nth_page ( parent, 2), managment_tabbed_pane_label); } } return tabbed_pane; } gint gw_notebook_managment_set_device_dir ( GtkWindow *w, gchar *device_dir) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* To do. */ return -1; } gint gw_notebook_managment_set_device_name ( GtkWindow *w, gchar *device_name) { GtkEntry *ent = NULL; gchar *text_utf8 = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (w != NULL) && (device_name != NULL) ) { if ( (ent = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_ENTRY_DEVICE_NAME)) != NULL) { g_strdup_to_gtk_text ( device_name, text_utf8); gtk_entry_set_text ( ent, text_utf8); g_free ( text_utf8); result = 0; } } return result; } gint gw_notebook_managment_set_device_number ( GtkWindow *w, gchar *device_number) { GtkEntry *ent = NULL; gchar *text_utf8 = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (w != NULL) && (device_number != NULL) ) { if ( (ent = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_ENTRY_DEVICE_NUMBER_ARCHIVE)) != NULL) { g_strdup_to_gtk_text ( device_number, text_utf8); gtk_entry_set_text ( ent, text_utf8); g_free ( text_utf8); result = 0; } } return result; } gint gw_notebook_managment_set_device_category ( GtkWindow *w, gchar *device_category) { GtkHBox *cmb; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (w != NULL) && (device_category != NULL) ) { if ( (cmb = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_ENTRY_DEVICE_CATEGORY)) != NULL ) { /* Doesn't encode to UTF-8, one should not!! */ gw_combo_box_categories_set_selected_category_name ( cmb, device_category); result = 0; } } return result; } gint gw_notebook_managment_set_option_display_info ( GtkWindow *w, gboolean b) { GtkToggleButton *chk = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_DISPLAY_INFO)) != NULL ) { gtk_toggle_button_set_active ( chk, b); result = 0; } } return result; } gint gw_notebook_managment_set_option_automount ( GtkWindow *w, gboolean b) { GtkToggleButton *chk = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_AUTO_MOUNT)) != NULL ) { gtk_toggle_button_set_active ( chk, b); result = 0; } } return result; } gint gw_notebook_managment_set_option_eject ( GtkWindow *w, gboolean b) { GtkToggleButton *chk = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EJECT)) != NULL ) { gtk_toggle_button_set_active ( chk, b); result = 0; } } return result; } gint gw_notebook_managment_set_option_category_recursive ( GtkWindow *w, gboolean b) { GtkToggleButton *chk = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_CATEGORY_RECURSIVE)) != NULL ) { gtk_toggle_button_set_active ( chk, b); result = 0; } } return result; } gint gw_notebook_managment_set_option_explore_tree_structure ( GtkWindow *w, gboolean b) { GtkToggleButton *chk = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EXPLORE_TREE_STRUCTURE)) != NULL ) { gtk_toggle_button_set_active ( chk, b); result = 0; } } return result; } gint gw_notebook_managment_set_option_explore_archive ( GtkWindow *w, gboolean b) { GtkToggleButton *chk = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EXPLORE_ARCHIVE)) != NULL ) { gtk_toggle_button_set_active ( chk, b); result = 0; } } return result; } gint gw_notebook_managment_set_option_make_description ( GtkWindow *w, gboolean b) { GtkToggleButton *chk = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_MAKE_DESCRIPTION)) != NULL ) { gtk_toggle_button_set_active ( chk, b); result = 0; } } return result; } gint gw_notebook_managment_set_option_use_pattern ( GtkWindow *w, gboolean b) { GtkToggleButton *chk = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_USE_PATTERN)) != NULL ) { gtk_toggle_button_set_active ( chk, b); result = 0; } } return result; } gint gw_notebook_managment_set_option_use_disk_label ( GtkWindow *w, gboolean b) { GtkToggleButton *chk = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_USE_DISK_LABEL)) != NULL ) { gtk_toggle_button_set_active ( chk, b); result = 0; } } return result; } gchar * gw_notebook_managment_get_device_dir ( GtkWindow *w) { GtkEntry *ent = NULL; gchar *device_dir = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (ent = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_ENTRY_DEVICE_DIR)) != NULL) { g_strdup_from_gtk_text ( gtk_entry_get_text ( ent), device_dir); } } #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : device_dir=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, device_dir); #endif return device_dir; } gchar * gw_notebook_managment_get_device_name ( GtkWindow *w) { GtkEntry *ent = NULL; gchar *device_name = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (ent = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_ENTRY_DEVICE_NAME)) != NULL) { g_strdup_from_gtk_text ( gtk_entry_get_text ( ent), device_name); } } #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : device_name=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, device_name); #endif return device_name; } gchar * gw_notebook_managment_get_device_number ( GtkWindow *w) { GtkEntry *ent = NULL; gchar * device_number = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (ent = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_ENTRY_DEVICE_NUMBER_ARCHIVE)) != NULL) { g_strdup_from_gtk_text ( gtk_entry_get_text ( ent), device_number); } #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : device_number=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, device_number); #endif return device_number; } gchar * gw_notebook_managment_get_device_category ( GtkWindow *w) { GtkEntry *ent = NULL; gchar * device_category = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (ent = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_ENTRY_DEVICE_CATEGORY)) != NULL) { g_strdup_from_gtk_text ( gtk_entry_get_text ( ent), device_category); } } #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : device_category=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, device_category); #endif return device_category; } gboolean gw_notebook_managment_get_option_display_info ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_DISPLAY_INFO)) != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_managment_get_option_automount ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_AUTO_MOUNT)) != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_managment_get_option_eject ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EJECT)) != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : eject option is %d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, result); #endif } } return result; } gboolean gw_notebook_managment_get_option_category_recursive ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_CATEGORY_RECURSIVE)) != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_managment_get_option_explore_tree_structure ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EXPLORE_TREE_STRUCTURE)) != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_managment_get_option_explore_archive ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_EXPLORE_ARCHIVE)) != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_managment_get_option_make_description ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_MAKE_DESCRIPTION)) != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_managment_get_option_use_pattern ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_USE_PATTERN)) != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_managment_get_option_use_disk_label ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_CHECK_USE_DISK_LABEL)) != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } GtkHBox * gw_notebook_managment_get_combo_box_categories ( GtkWindow *w) { GtkHBox *hbox = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { hbox = GTK_HBOX ( gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_CATEGORY)); } return hbox; } GtkCombo * gw_notebook_managment_get_combo_box_device ( GtkWindow *w) { GtkCombo *cmb_device = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { cmb_device = GTK_COMBO ( gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_COMBO_BOX_DEVICE)); } return cmb_device; } GtkLabel * gw_notebook_managment_get_label_device_info ( GtkWindow *w) { GtkLabel *label = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { label = GTK_LABEL ( gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_INFO)); } return label; } GtkLabel * gw_notebook_managment_get_label_device_type ( GtkWindow *w) { GtkLabel *label = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { label = GTK_LABEL ( gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_TYPE)); } return label; } GtkLabel * gw_notebook_managment_get_label_device_mounted ( GtkWindow *w) { GtkLabel *label = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { label = GTK_LABEL ( gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_MOUNTED)); } return label; } GtkLabel * gw_notebook_managment_get_label_device_volume ( GtkWindow *w) { GtkLabel *label = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { label = GTK_LABEL ( gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_VOLUME)); } return label; } GtkLabel * gw_notebook_managment_get_label_device_serial_number ( GtkWindow *w) { GtkLabel *label = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { label = GTK_LABEL ( gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_SERIAL_NUMBER)); } return label; } GtkLabel * gw_notebook_managment_get_label_device_capacity ( GtkWindow *w) { GtkLabel *label = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { label = GTK_LABEL ( gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_CAPACITY)); } return label; } GtkLabel * gw_notebook_managment_get_label_device_free_space ( GtkWindow *w) { GtkLabel *label = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { label = GTK_LABEL ( gtk_object_get_data ( GTK_OBJECT ( w), REF_GW_GUI_NOTEBOOK_MANAGMENT_LABEL_DISPLAY_INFO_FREE_SPACE)); } return label; } gwhere-0.2.3/src/gui/gwnotebookmanagment.h0000744000175000017500000004250710023202520017224 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwnotebookmanagment.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to manage disks. * @author Sébastien LECACHEUR * @author Grégory BLOQUEL * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwnotebookmanagment.c * @author Author */ #ifndef GW_GUI_GW_NOTEBOOK_MANAGMENT_H #define GW_GUI_GW_NOTEBOOK_MANAGMENT_H /*! * @function gw_notebook_managment_create * @abstract Creates a tabbed pane for disk managment. * @discussion This function creates a tabbed pane for disk managment. * @param w main window * @result the tabbed pane
* Returns NULL when an error occured. */ GtkWidget * gw_notebook_managment_create ( GtkWindow *w); /*! * @function gw_notebook_managment_create_and_add * @abstract Creates a tabbed pane for disk managment and adds to the container. * @discussion This function creates a tabbed pane for disk managment and add to the container. * @param w main window * @param parent parent notebook container * @result the tabbed pane
* Returns NULL when an error occured. */ GtkWidget * gw_notebook_managment_create_and_add ( GtkWindow *w, GtkNotebook *parent); /*! * @function gw_notebook_managment_set_device_dir * @abstract Sets the device folder path. * @discussion This function sets the device folder path.
* Warning : this function do nothing at time!! * @param w main window * @param device_dir the device folder path * @result an error code
* Returns 0 when it's done.
* Returns -1 otherwise or when an error occured. */ gint gw_notebook_managment_set_device_dir ( GtkWindow *w, gchar *device_dir); /*! * @function gw_notebook_managment_set_device_name * @abstract Sets the device name. * @discussion This function sets the device name. * @param w main window * @param device_name the device name * @result an error code
* Returns 0 when it's done.
* Returns -1 otherwise or when an error occured. */ gint gw_notebook_managment_set_device_name ( GtkWindow *w, gchar *device_name); /*! * @function gw_notebook_managment_set_device_number * @abstract Sets the device number archive. * @discussion This function sets the device number archive. * @param w main window * @param device_number the device number archive * @result an error code
* Returns 0 when it's done.
* Returns -1 otherwise or when an error occured. */ gint gw_notebook_managment_set_device_number ( GtkWindow *w, gchar *device_number); /*! * @function gw_notebook_managment_set_device_category * @abstract Sets the device selected category name. * @discussion This function sets the device selected category name. * @param w main window * @param device_category the device selected catagory name * @result an error code
* Returns 0 when it's done.
* Returns -1 otherwise or when an error occured. */ gint gw_notebook_managment_set_device_category ( GtkWindow *w, gchar *device_category); /*! * @function gw_notebook_managment_set_option_automount * @abstract Activates or desactivates the automount option. * @discussion This function activates or desactivates the automount option. * @param w main window * @param b TRUE to activate or FALSE to desactivate * @result an error code
* Returns 0 when it's done.
* Returns -1 otherwise or when an error occured. */ gint gw_notebook_managment_set_option_automount ( GtkWindow *w, gboolean b); /*! * @function gw_notebook_managment_set_option_display_info * @abstract Activates or desactivates the diplaying informations option. * @discussion This function activates or desactivates the displaying informations option. * @param w main window * @param b TRUE to activate or FALSE to desactivate * @result an error code
* Returns 0 when it's done.
* Returns -1 otherwise or when an error occured. */ gint gw_notebook_managment_set_option_display_info ( GtkWindow *w, gboolean b); /*! * @function gw_notebook_managment_set_option_eject * @abstract Activates or desactivates the auto-eject CD-Rom option. * @discussion This function activates or desactivates the auto-eject CD-Rom option. * @param w main window * @param b TRUE to activate or FALSE to desactivate * @result an error code
* Returns 0 when it's done.
* Returns -1 otherwise or when an error occured. */ gint gw_notebook_managment_set_option_eject ( GtkWindow *w, gboolean b); /*! * @function gw_notebook_managment_set_option_category_recursive * @abstract Activates or desactivates the recursively category setting option. * @discussion This function activates or desactivates the recursively category setting option. * @param w main window * @param b TRUE to activate or FALSE to desactivate * @result an error code
* Returns 0 when it's done.
* Returns -1 otherwise or when an error occured. */ gint gw_notebook_managment_set_option_category_recursive ( GtkWindow *w, gboolean b); /*! * @function gw_notebook_managment_set_option_explore_tree_structure * @abstract Activates or desactivates the tree structure exploration option. * @discussion This function activates or desactivates the tree structure exploration option. * @param w main window * @param b TRUE to activate or FALSE to desactivate * @result an error code
* Returns 0 when it's done.
* Returns -1 otherwise or when an error occured. */ gint gw_notebook_managment_set_option_explore_tree_structure ( GtkWindow *w, gboolean b); /*! * @function gw_notebook_managment_set_option_explore_archive * @abstract Activates or desactivates the archives exploration option. * @discussion This function activates or desactivates the archives exploration option. * @param w main window * @param b TRUE to activate or FALSE to desactivate * @result an error code
* Returns 0 when it's done.
* Returns -1 otherwise or when an error occured. */ gint gw_notebook_managment_set_option_explore_archive ( GtkWindow *w, gboolean b); /*! * @function gw_notebook_managment_set_option_make_description * @abstract Activates or desactivates the auto-extracting informations from files option. * @discussion This function activates or desactivates the auto-extracting informations from files option. * @param w main window * @param b TRUE to activate or FALSE to desactivate * @result an error code
* Returns 0 when it's done.
* Returns -1 otherwise or when an error occured. */ gint gw_notebook_managment_set_option_make_description ( GtkWindow *w, gboolean b); /*! * @function gw_notebook_managment_set_option_use_pattern * @abstract Activates or desactivates the using of an advnaced pattern to generate disk name option. * @discussion This function activates or desactivates the using of an advnaced pattern to generate disk name option. * @param w main window * @param b TRUE to activate or FALSE to desactivate * @result an error code
* Returns 0 when it's done.
* Returns -1 otherwise or when an error occured. */ gint gw_notebook_managment_set_option_use_pattern ( GtkWindow *w, gboolean b); /*! * @function gw_notebook_managment_set_option_use_disk_label * @abstract Activates or desactivates the using disk label as disk name option. * @discussion This function activates or desactivates the using disk label as disk name option. * @param w main window * @param b TRUE to activate or FALSE to desactivate * @result an error code
* Returns 0 when it's done.
* Returns -1 otherwise or when an error occured. */ gint gw_notebook_managment_set_option_use_disk_label ( GtkWindow *w, gboolean b); /*! * @function gw_notebook_managment_get_device_dir * @abstract Gets the selected device path. * @discussion This function gets the selected device path. * @param w main window * @result the device path. Should be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_notebook_managment_get_device_dir ( GtkWindow *w); /*! * @function gw_notebook_managment_get_device_name * @abstract Gets the device name. * @discussion This function gets the device name. * @param w main window * @result the device name. Should be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_notebook_managment_get_device_name ( GtkWindow *w); /*! * @function gw_notebook_managment_get_device_number * @abstract Gets the device number archive. * @discussion This function gets the device number archive. * @param w main window * @result the device number archive. Should be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_notebook_managment_get_device_number ( GtkWindow *w); /*! * @function gw_notebook_managment_get_device_category * @abstract Gets the selected device category name. * @discussion This function gets the selected device category name. * @param w main window * @result the device category name. Should be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_notebook_managment_get_device_category ( GtkWindow *w); /*! * @function gw_notebook_managment_get_option_display_info * @abstract Gets the displaying informations option value. * @discussion This function gets the displaying informations option value. * @param w main window * @result Returns TRUE when the option if activated.
* Returns FALSE otherwise or when an error occured. */ gboolean gw_notebook_managment_get_option_display_info ( GtkWindow *w); /*! * @function gw_notebook_managment_get_option_automount * @abstract Gets the automount option value. * @discussion This function gets the automount option value. * @param w main window * @result Returns TRUE when the option if activated.
* Returns FALSE otherwise or when an error occured. */ gboolean gw_notebook_managment_get_option_automount ( GtkWindow *w); /*! * @function gw_notebook_managment_get_option_eject * @abstract Gets the auto-eject CD-Rom option value. * @discussion This function gets the auto-eject CD-Rom option value. * @param w main window * @result Returns TRUE when the option if activated.
* Returns FALSE otherwise or when an error occured. */ gboolean gw_notebook_managment_get_option_eject ( GtkWindow *w); /*! * @function gw_notebook_managment_get_option_category_recursive * @abstract Gets the recursively category setting option value. * @discussion This function gets the recursively category setting option value. * @param w main window * @result Returns TRUE when the option if activated.
* Returns FALSE otherwise or when an error occured. */ gboolean gw_notebook_managment_get_option_category_recursive ( GtkWindow *w); /*! * @function gw_notebook_managment_get_option_explore_tree_structure * @abstract Gets the tree structure exploration option value. * @discussion This function gets the tree structure exploration option value. * @param w main window * @result Returns TRUE when the option if activated.
* Returns FALSE otherwise or when an error occured. */ gboolean gw_notebook_managment_get_option_explore_tree_structure ( GtkWindow *w); /*! * @function gw_notebook_managment_get_option_explore_archive * @abstract Gets the archives exploration option value. * @discussion This function gets the archives exploration option value. * @param w main window * @result Returns TRUE when the option if activated.
* Returns FALSE otherwise or when an error occured. */ gboolean gw_notebook_managment_get_option_explore_archive ( GtkWindow *w); /*! * @function gw_notebook_managment_get_option_make_description * @abstract Gets the auto-extract informations from files option value. * @discussion This function gets the auto-extract informations from files option value. * @param w main window * @result Returns TRUE when the option if activated.
* Returns FALSE otherwise or when an error occured. */ gboolean gw_notebook_managment_get_option_make_description ( GtkWindow *w); /*! * @function gw_notebook_managment_get_option_use_pattern * @abstract Gets the using of an advanced pattern to generate disk name option value. * @discussion This function gets the using of an advanced pattern to generate disk name option value. * @param w main window * @result Returns TRUE when the option if activated.
* Returns FALSE otherwise or when an error occured. */ gboolean gw_notebook_managment_get_option_use_pattern ( GtkWindow *w); /*! * @function gw_notebook_managment_get_option_use_disk_label * @abstract Gets the using disk label as disk name option value. * @discussion This function gets the using disk label as disk name option value. * @param w main window * @result Returns TRUE when the option if activated.
* Returns FALSE otherwise or when an error occured. */ gboolean gw_notebook_managment_get_option_use_disk_label ( GtkWindow *w); /*! * @function gw_notebook_managment_get_combo_box_categories * @abstract Gets the combo box categories. * @discussion This function gets the combo box categories. * @param w main window * @result the combo box categories.
* Returns NULL when an error occured. */ GtkHBox * gw_notebook_managment_get_combo_box_categories ( GtkWindow *w); /*! * @function gw_notebook_managment_get_combo_box_device * @abstract Gets the combo devices list. * @discussion This function gets the combo devices list. * @param w main window * @result the combo devices list.
* Returns NULL when an error occured. */ GtkCombo * gw_notebook_managment_get_combo_box_device ( GtkWindow *w); /*! * @function gw_notebook_managment_get_label_device_info * @abstract Gets the label of device informations. * @discussion This function gets the combo devices list. * @param w main window * @result the label.
* Returns NULL when an error occured. */ GtkLabel * gw_notebook_managment_get_label_device_info ( GtkWindow *w); /*! * @function gw_notebook_managment_get_label_device_type * @abstract Gets the label of device type. * @discussion This function gets the combo devices list. * @param w main window * @result the label.
* Returns NULL when an error occured. */ GtkLabel * gw_notebook_managment_get_label_device_type ( GtkWindow *w); /*! * @function gw_notebook_managment_get_label_device_mounted * @abstract Gets the label of device mount status. * @discussion This function gets the combo devices list. * @param w main window * @result the label.
* Returns NULL when an error occured. */ GtkLabel * gw_notebook_managment_get_label_device_mounted ( GtkWindow *w); /*! * @function gw_notebook_managment_get_label_device_volume * @abstract Gets the label of device volume name. * @discussion This function gets the combo devices list. * @param w main window * @result the label.
* Returns NULL when an error occured. */ GtkLabel * gw_notebook_managment_get_label_device_volume ( GtkWindow *w); /*! * @function gw_notebook_managment_get_label_device_serial_number * @abstract Gets the label of device serial number. * @discussion This function gets the combo devices list. * @param w main window * @result the label.
* Returns NULL when an error occured. */ GtkLabel * gw_notebook_managment_get_label_device_serial_number ( GtkWindow *w); /*! * @function gw_notebook_managment_get_label_device_capacity * @abstract Gets the label of device full capacity. * @discussion This function gets the combo devices list. * @param w main window * @result the label.
* Returns NULL when an error occured. */ GtkLabel * gw_notebook_managment_get_label_device_capacity ( GtkWindow *w); /*! * @function gw_notebook_managment_get_label_device_free_space * @abstract Gets the label of device free space. * @discussion This function gets the combo devices list. * @param w main window * @result the label.
* Returns NULL when an error occured. */ GtkLabel * gw_notebook_managment_get_label_device_free_space ( GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwnotebookmanagmentcallback.c0000744000175000017500000006753710247706151020727 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwnotebookmanagmentcallback.h" #include /* strcmp strlen */ #include #include "data/gwdata.h" #include "tools/gwtools.h" #include "res/gwres.h" #include "gwcomboboxcategories.h" #include "gwnotebookmanagment.h" #include "gwcapturebox.h" #include "gwprogressbarbox.h" #include "gwmsgbox.h" #include "../gwapplicationmanager.h" #include "../gwguimanager.h" #include "../gwdevicemanager.h" #include "../gwsupermount.h" #include "../gwhelper.h" #include "../gwcatalogmanager.h" gint gw_notebook_managment_load_device_list ( GtkWindow *w) { GList *devices = NULL, *tmp = NULL; GtkCombo *cmb = NULL; gint result = -1; gchar *selected_device = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { devices = gw_get_drives_list ( devices); if ( devices != NULL ) { cmb = gw_notebook_managment_get_combo_box_device ( w); if ( cmb != NULL ) { gtk_combo_set_popdown_strings ( cmb, devices); /* Selects default device : mnt/cdrom */ if ( (selected_device = gw_am_get_settings ( GW_VALUE_APP_DISK_SELECTED)) == NULL ) { selected_device = GW_VALUE_APP_DISK_SELECTED_DEFAULT; } if ( (tmp = g_list_find_custom ( devices, selected_device, (GCompareFunc)strcmp)) == NULL) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : select default device = %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, selected_device); #endif tmp = g_list_first ( devices); } else {} //FIXME Is it necessary to encode to UTF-8 ? g_strdup_to_gtk_text ( tmp->data, text_utf8); gtk_entry_set_text ( GTK_ENTRY ( cmb->entry), text_utf8); g_free ( text_utf8); if ( devices != NULL ) { g_list_foreach ( devices, (GFunc)g_free, NULL); g_list_free ( devices); } result = 0; } } } return result; } gboolean gw_notebook_managment_scan_click ( GtkWidget *bt, GtkWindow *window) { GtkWindow *msg = NULL; gint num_archive = 0, form_num; gchar *name = NULL, *disk_name = NULL, *dir = NULL, *num = NULL, *tmp = NULL, *index = NULL, *str_num = NULL, *str_form_num = NULL, *str_form_num_value = NULL; struct vfs_stats *vfs = NULL; GWDBCategory *category = NULL; gboolean has_been_mounted = FALSE; gboolean has_been_ejected = FALSE; GtkCTree *tree = NULL; GtkCTreeNode *root = NULL; struct scan_disk_info *scan_disk = NULL; GtkWindow *progress_bar = NULL; gboolean result = FALSE; gfloat disk_size = 0.0; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( window != NULL ) { if ( gw_pm_get_current_catalog_plugin ( ) == NULL) { gw_msg_box_create ( window, _( "New catalog"), _( "There is no available catalog plugin")); } else { tree = gw_gui_manager_main_interface_get_tree ( ); root = gw_gui_manager_main_interface_get_tree_root ( ); dir = gw_notebook_managment_get_device_dir ( window); name = gw_notebook_managment_get_device_name ( window); num = gw_notebook_managment_get_device_number ( window); vfs = vfs_stats_new ( ); if ( vfs != NULL ) { gw_dm_device_load_to_vfs_stats ( vfs, dir); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT vfs_stats_display ( vfs); g_print ( "*** GW - %s (%d) :: %s() : checking if device can be mounted\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Checks if the device can be mounted */ #if defined ( HAVE_MOUNT_SYSTEM) if ( (gw_dm_disk_is_mounted_from_vfs_stats ( vfs) == FALSE) && (gw_notebook_managment_get_option_automount ( window) == FALSE) ) { #else if ( (gw_dm_disk_is_mounted_from_vfs_stats ( vfs) == FALSE) ) { #endif #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : device is not mounted\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif msg = gw_msg_box_create ( window, _( "Add disk"), _( "The disk hasn't been added : there are not mounted media")); result = FALSE; } else if ( gw_dm_disk_can_mounted_from_vfs_stats ( vfs) == FALSE ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : cannot mount device\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif msg = gw_msg_box_create ( window, _( "Add disk"), _( "The disk hasn't been added : cannot mount media")); result = FALSE; } else { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : device is mounted or can be mounted\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Gets archive number */ num_archive = gw_helper_db_disk_get_num_archive ( context, num); /* If the "use label disk" is activated AND the filled disk name is empty, must try to get the disk label in order to replace the disk name. */ if ( ((name == NULL) || ((strlen ( name) == 0) && (strcmp ( name, "") == 0))) && (gw_notebook_managment_get_option_use_disk_label ( window) == TRUE) ) { if ( vfs_stats_get_label ( vfs) != NULL ) { if ( name != NULL ) { g_free ( name); name = NULL; } name = g_strdup ( vfs_stats_get_label ( vfs)); } } /* If it must generates the disk name. */ if ( gw_am_get_settings_tol ( GW_VALUE_APP_DISK_SCAN_USE_PATTERN) == 1) { /* Saves the new advanced pattern. */ gw_am_set_settings ( GW_VALUE_APP_DISK_SCAN_PATTERN, gw_notebook_managment_get_device_name ( window)); /* Generate disk name from advanced pattern : - %% : % - %n : number archive (can use prefix to prefixed by 0 : %.4n give 0001, 0002, 0003, ..., 0091, ... - %l : disk volume label - %t : disk type - %s : serial number */ index = name; while ( (index = strchr ( index, '%')) != NULL ) { if ( sscanf ( index, "%%.%dn", &form_num) == 1 ) { str_form_num = g_strdup_printf ( "%%0.%dd", form_num); str_form_num_value = g_strdup_printf ( str_form_num, num_archive); g_free ( str_form_num); str_form_num = g_strdup_printf ( "%%.%dn", form_num); if ( (tmp = gw_str_replace_str ( name, str_form_num, str_form_num_value)) != NULL ) { g_free ( name); index = name = tmp; } else { index = name; } g_free ( str_form_num); g_free ( str_form_num_value); } else { index++; } } str_num = g_strdup_printf ( "%d", num_archive); if ( (tmp = gw_str_replace_str ( name, "%n", str_num)) != NULL ) { g_free ( name); name = tmp; } g_free ( str_num); if ( (tmp = gw_str_replace_str ( name, "%l", vfs_stats_get_label ( vfs))) != NULL ) { g_free ( name); name = tmp; } if ( (tmp = gw_str_replace_str ( name, "%t", vfs_stats_get_type ( vfs))) != NULL ) { g_free ( name); name = tmp; } if ( (tmp = gw_str_replace_str ( name, "%s", vfs_stats_get_serial_number ( vfs))) != NULL ) { g_free ( name); name = tmp; } if ( (tmp = gw_str_replace_str ( name, "%%", "%")) != NULL ) { g_free ( name); name = tmp; } } /* Puts a mapping on the disk name */ disk_name = gw_helper_db_disk_get_name ( context, name); /* Checkes if the catalog is opened */ if ( root == NULL || context == NULL ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : no catalog is opened\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* If no catalog is opened */ gw_capture_box_create ( window, _("Add new disk"), _("Enter catalog name"), _("New catalog"), GTK_SIGNAL_FUNC ( gw_capture_box_catalog_name_ok)); result = FALSE; } else { /* If a catalog is opened */ if ( gw_notebook_managment_get_option_category_recursive ( window) == TRUE ) { category = gw_combo_box_categories_get_selected_category ( gw_notebook_managment_get_combo_box_categories ( window)); } else { plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); category = plugin->gw_db_catalog_get_db_category_by_name ( context, _( "none")); // category = gw_db_catalog_get_category ( gw_combo_box_categories_get_catalog_info ( gw_notebook_managment_get_combo_box_categories ( window)), _( "none")); } if ( (disk_name == NULL) || (strlen ( disk_name) == 0) ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : disk name isn't filled\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* If no disk name is filled */ gw_capture_box_create ( window, _("Add disk"), _("Enter disk name"), (tmp = gw_helper_db_disk_get_name ( context, _("New disk"))), GTK_SIGNAL_FUNC ( gw_capture_box_disk_name_ok)); g_free ( tmp); result = FALSE; } else { /* Adds the disk with the disk name filled */ if ( gw_dm_disk_is_mounted_from_vfs_stats ( vfs) || ((has_been_mounted = gw_dm_disk_mount_from_vfs_stats ( vfs)) == TRUE)) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : the disk is going to be added\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* If device is allready mounted or if has been mounted */ scan_disk = scan_disk_info_new ( ); scan_disk_info_set_vfs ( scan_disk, vfs); scan_disk_info_set_disk_name ( scan_disk, g_strdup ( disk_name)); scan_disk_info_set_disk_num_archive ( scan_disk, num_archive); scan_disk_info_set_disk_category_ref ( scan_disk, gw_db_category_get_ref ( category)); scan_disk_info_set_explore_tree_structure ( scan_disk, gw_notebook_managment_get_option_explore_tree_structure ( window)); scan_disk_info_set_explore_archive ( scan_disk, gw_notebook_managment_get_option_explore_archive ( window)); scan_disk_info_set_make_description ( scan_disk, gw_notebook_managment_get_option_make_description ( window)); scan_disk_info_set_scan_disk_set_current_statment ( scan_disk, &gw_notebook_managment_set_current_statment); disk_size = vfs_stats_get_total_used_space ( vfs); progress_bar = gw_progress_bar_box_create ( window, _( "Scanning"), _( "Adding disk is working"), _( "Please wait"), disk_size, gw_notebook_managment_stop_scan_disk, scan_disk); gw_gui_manager_main_interface_refresh ( ); scan_disk_info_set_statment_controler ( scan_disk, progress_bar); if ( gw_cm_add_disk ( scan_disk) != -1 ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : the disk has been correctly added\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gw_progress_bar_box_set_text ( progress_bar, _( "The disk has been added")); gw_progress_bar_box_set_ok_state ( progress_bar); result = TRUE; } else { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : the disk hasn't been correctly added\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gw_progress_bar_box_set_text ( progress_bar, scan_disk_info_get_error_msg ( scan_disk)); gw_progress_bar_box_set_ok_state ( progress_bar); result = FALSE; } gw_db_category_free ( category); #if defined ( HAVE_MOUNT_SYSTEM) if ( has_been_mounted == TRUE ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : try to umount device\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Umounts only if device didn't mounted before */ gw_dm_disk_umount_from_vfs_stats ( vfs); #endif /* Eject CD-Rom if option checked */ if ( gw_notebook_managment_get_option_eject ( window) == TRUE ) { has_been_ejected = gw_drive_eject ( dir); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : the device has%s been ejected\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, (has_been_ejected?"":"n't")); #endif } #if defined ( HAVE_MOUNT_SYSTEM) } #endif /* Don't free scan_disk because progress_bar_box need it, scan_disk must be freed when progress_bar_box destroyed. */ } else { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : device cannot be mounted, adding canceled\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* The device cannot be mounted */ gw_msg_box_create ( window, _( "Add disk"), _( "Mount failed\n")); result = FALSE; } /* Clears all field zone here, because the action "Scan" didn't meet using error as : - no opened catalog - no media selected - no disk name selected or unabble to generate it */ if ( gw_am_get_settings_tol ( GW_VALUE_APP_DISK_SCAN_USE_PATTERN) == 1) { gw_notebook_managment_set_device_name ( window, gw_am_get_settings ( GW_VALUE_APP_DISK_SCAN_PATTERN)); } else { gw_notebook_managment_set_device_name ( window, ""); } gw_notebook_managment_set_device_number ( window, ""); } /* Don't clear field zones here because, the user may be didn't fill disk name. */ } /* Don't clear field zones here because, the user may be didn't open catalog. */ g_free ( disk_name); } } g_free ( dir); g_free ( name); g_free ( num); vfs_stats_free ( vfs); } } return result; } gint gw_notebook_managment_select_device ( GtkWidget *entry, GtkWindow *w) { GtkLabel *l; gchar *text, *msg; #ifdef HAVE_MOUNT_SYSTEM gboolean mounted = FALSE; #endif gboolean disk_in_drive = FALSE; struct vfs_stats *vfs = NULL; gint result = -1; gchar *selected_device = NULL; gchar *text_utf8 = NULL; GtkCombo *cmb = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (entry != NULL) && (w != NULL) ) { cmb = gw_notebook_managment_get_combo_box_device ( w); if ( !gw_notebook_managment_get_option_display_info ( w) || !GTK_WIDGET_HAS_FOCUS ( entry)) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : no display device informations\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif l = gw_notebook_managment_get_label_device_info ( w); g_strdup_to_gtk_text ( _( "Info : "), text_utf8); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); l = gw_notebook_managment_get_label_device_type ( w); g_strdup_to_gtk_text ( _( "Type : "), text_utf8); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); #ifdef HAVE_MOUNT_SYSTEM l = gw_notebook_managment_get_label_device_mounted ( w); g_strdup_to_gtk_text ( _( "Mounted : "), text_utf8); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); #endif l = gw_notebook_managment_get_label_device_volume ( w); g_strdup_to_gtk_text ( _( "Volume : "), text_utf8); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); l = gw_notebook_managment_get_label_device_serial_number ( w); g_strdup_to_gtk_text ( _( "Serial number : "), text_utf8); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); l = gw_notebook_managment_get_label_device_capacity ( w); g_strdup_to_gtk_text ( _( "Capacity : "), text_utf8); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); l = gw_notebook_managment_get_label_device_free_space ( w); g_strdup_to_gtk_text ( _( "Free space : "), text_utf8); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); result = 0; } else { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : device informations are going to be displayed\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif vfs = vfs_stats_new ( ); if ( vfs != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( entry)), selected_device); #if defined ( HAVE_MOUNT_SYSTEM) gw_dm_device_load_to_vfs_stats ( vfs, selected_device); /* Checks if device is mounted */ mounted = gw_dm_disk_is_mounted_from_vfs_stats ( vfs); disk_in_drive = gw_dm_disk_can_mounted_from_vfs_stats ( vfs); #else if ( (disk_in_drive = gw_dm_is_disk_in_drive ( selected_device)) == TRUE ) { gw_dm_device_load_to_vfs_stats ( vfs, selected_device); } #endif text = g_strconcat ( _( "Info : "), disk_in_drive?vfs_stats_get_name ( vfs):_( "no drive"), NULL); l = gw_notebook_managment_get_label_device_info ( w); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); if ( disk_in_drive ) { msg = g_strdup ( vfs_stats_get_type ( vfs)); if ( msg == NULL ) { msg = g_strdup ( _( "unknown")); } } else { msg = g_strdup ( _( "no drive")); } text = g_strconcat ( _( "Type : "), msg, NULL); g_free ( msg); l = gw_notebook_managment_get_label_device_type ( w); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); #ifdef HAVE_MOUNT_SYSTEM l = gw_notebook_managment_get_label_device_mounted ( w); text = g_strconcat ( _( "Mounted : "), mounted?_( "Yes"):_( "No"), NULL); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); #endif if ( disk_in_drive ) { if ( ( msg = g_strdup ( vfs_stats_get_label ( vfs)) ) == NULL ) { msg = g_strdup ( _( "No label")); } } else { msg = g_strdup ( _( "no drive")); } l = gw_notebook_managment_get_label_device_volume ( w); text = g_strconcat ( _( "Volume name : "), disk_in_drive?msg:_("no drive"), NULL); g_free ( msg); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); l = gw_notebook_managment_get_label_device_serial_number ( w); text = g_strconcat ( _( "Serial number : "), disk_in_drive?vfs_stats_get_serial_number ( vfs):_( "no drive"), NULL); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); l = gw_notebook_managment_get_label_device_capacity ( w); text_utf8 = NULL; text = g_strconcat ( _( "Capacity : "), disk_in_drive?(text_utf8 = gw_ui64_byte_to_str_format ( vfs_stats_get_total_capacity ( vfs))):_( "no drive"), NULL); if ( text_utf8 != NULL ) { g_free ( text_utf8); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); l = gw_notebook_managment_get_label_device_free_space ( w); text_utf8 = NULL; text = g_strconcat ( _( "Free space : "), disk_in_drive?(text_utf8 = gw_ui64_byte_to_str_format ( vfs_stats_get_total_free_space ( vfs))):_( "no drive"), NULL); if ( text_utf8 != NULL ) { g_free ( text_utf8); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( l, text_utf8); g_free ( text_utf8); result = 0; g_free ( selected_device); } vfs_stats_free ( vfs); } } return result; } gint gw_notebook_managment_refresh_info ( GtkWidget *chk, GtkWindow *w) { GtkCombo *cmb = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL ) { gw_am_set_settings ( GW_VALUE_APP_DISK_DISPLAY_INFO, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); } if ( w != NULL ) { if ( (cmb = gw_notebook_managment_get_combo_box_device ( w)) != NULL) { result = gw_notebook_managment_select_device ( GTK_WIDGET ( GTK_OBJECT ( GTK_ENTRY ( GTK_COMBO ( cmb)->entry))), w); } } return result; } gint gw_notebook_managment_refresh_categories ( GtkWindow *w) { GtkHBox *cmb; GtkCTree *tree = NULL; GtkCTreeNode *root = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); root = gw_gui_manager_main_interface_get_tree_root ( ); cmb = gw_notebook_managment_get_combo_box_categories ( w); gw_combo_box_categories_load ( cmb); result = 0; } return result; } gboolean gw_notebook_managment_stop_scan_disk ( GtkObject *obj, gpointer data) { struct scan_disk_info *scan_disk = NULL; GtkWindow *progress_bar_box = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( data != NULL ) { scan_disk = (struct scan_disk_info*)data; progress_bar_box = GTK_WINDOW ( scan_disk_info_get_statment_controler ( scan_disk)); if ( gw_progress_bar_box_get_isok_state ( progress_bar_box)) { gtk_widget_destroy ( GTK_WIDGET ( progress_bar_box)); /* The scan_disk data is freed here and not in the gw_notebook_managment_scan_clik(). */ scan_disk_info_free ( scan_disk); result = TRUE; } else if ( gw_progress_bar_box_get_iscancel_state ( progress_bar_box) ) { scan_disk_info_set_stop ( scan_disk, TRUE); gw_progress_bar_box_set_text ( progress_bar_box, _( "the disk adding is canceled")); gw_progress_bar_box_set_ok_state ( progress_bar_box); result = TRUE; } else { result = FALSE; } } return result; } gint gw_notebook_managment_set_current_statment ( gpointer w, gfloat current) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { gw_progress_bar_box_add_value ( (GtkWindow*)w, current); gw_gui_manager_main_interface_refresh ( ); result = 0; } return result; } gint gw_capture_box_catalog_name_ok ( GtkWidget *w, gpointer data) { gchar *name = NULL; GtkWindow *window = NULL; GtkCTree *tree = NULL; GtkCTreeNode *root = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( data != NULL ) { name = gw_capture_box_get_text ( data); if ( name != NULL && ( strlen ( name) > 0) ) { /* If catalog name is filled : update catalog informations */ window = gw_gui_manager_main_interface_get_main_window ( ); tree = gw_gui_manager_main_interface_get_tree ( ); root = gw_gui_manager_main_interface_get_tree_root ( ); if ( window != NULL ) { gw_am_new_catalog ( name); /* Destroys the capture box and relaunches the scan */ gtk_widget_destroy ( data); gw_notebook_managment_scan_click ( NULL, window); result = 0; } } else { gw_msg_box_create ( window, _( "Add disk"), _( "Please select a catalog name\n")); result = -1; } if ( name != NULL ) { g_free ( name); } } return result; } gint gw_capture_box_disk_name_ok ( GtkWidget *w, gpointer data) { gchar *disk_name; GtkWindow *window = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( data != NULL ) { window = gw_gui_manager_main_interface_get_main_window ( ); if ( window != NULL ) { disk_name = gw_capture_box_get_text ( data); gw_notebook_managment_set_device_name ( window, disk_name); g_free ( disk_name); /* Destroys the capture box and relaunches the scan */ gtk_widget_destroy ( data); gw_notebook_managment_scan_click ( NULL, window); result = 0; } } return result; } gint gw_notebook_managment_option_explore_tree_structure_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_DISK_SCAN_EXPLORE_TREE_STRUCTURE, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); result = 0; } return result; } gint gw_notebook_managment_option_explore_archive_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_DISK_SCAN_EXPLORE_ARCHIVE, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); result = 0; } return result; } gint gw_notebook_managment_option_category_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_DISK_SCAN_CATEGORY, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); result = 0; } return result; } gint gw_notebook_managment_option_description_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_DISK_SCAN_DESCRIPTION, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); result = 0; } return result; } gint gw_notebook_managment_option_use_disk_label_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_DISK_SCAN_LABEL, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); result = 0; } return result; } gint gw_notebook_managment_option_use_pattern_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_DISK_SCAN_USE_PATTERN, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); if ( gw_am_get_settings_tol ( GW_VALUE_APP_DISK_SCAN_USE_PATTERN) == 1) { gw_notebook_managment_set_device_name ( w, gw_am_get_settings ( GW_VALUE_APP_DISK_SCAN_PATTERN)); } else { gw_notebook_managment_set_device_name ( w, ""); } result = 0; } return result; } gint gw_notebook_managment_option_automount_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_DISK_AUTOMOUNT, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); result = 0; } return result; } gint gw_notebook_managment_option_eject_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_DISK_EJECT, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); result = 0; } return result; } gwhere-0.2.3/src/gui/gwnotebookmanagmentcallback.h0000744000175000017500000002320610023202520020674 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwnotebookmanagmentcallback.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI callack component to manage disks. * @author Sébastien LECACHEUR * @author Grégory BLOQUEL * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwnotebookmanagmentcallback.c * @author Author */ #ifndef GW_GUI_GW_NOTEBOOK_MANAGMENT_CALLBACK_H #define GW_GUI_GW_NOTEBOOK_MANAGMENT_CALLBACK_H /*! * @function gw_notebook_managment_load_device_list * @abstract Loads the device list. * @discussion This function loads the device list into the combo box. * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_managment_load_device_list ( GtkWindow *w); /*! * @function gw_notebook_managment_scan_click * @abstract Scans the device. * @discussion This function scans the device. This function is called when * the user click on the scan button. * @param bt button invoker * @param w main window * @result an error code.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_notebook_managment_scan_click ( GtkWidget *bt, GtkWindow *w); /*! * @function gw_notebook_managment_select_device * @abstract Displays informations for selected device. * @discussion This function displays informations for selected device. This * function is called when the user selected a device in the * device list. * @param cmb combo device list * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_managment_select_device ( GtkWidget *cmb, GtkWindow *w); /*! * @function gw_notebook_managment_refresh_info * @abstract Refreshes informations for selected device. * @discussion This function refreshes informations for selected device. This * function is called when the user selected the option display * information on device. * @param chk check button invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_managment_refresh_info ( GtkWidget *chk, GtkWindow *w); /*! * @function gw_notebook_managment_refresh_categories * @abstract Refreshes the list of categories. * @discussion This function refreshes the list of categories * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_managment_refresh_categories ( GtkWindow *w); /*! * @function gw_notebook_managment_stop_scan_disk * @abstract Stops the scan of device. * @discussion This function stops the scan of device. * @param obj event invoker * @param data an object (scan_disk_info) * @result an error code.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_notebook_managment_stop_scan_disk ( GtkObject *obj, gpointer data); /*! * @function gw_notebook_managment_set_current_statment * @abstract Stops the scan of device. * @discussion This function stops the scan of device. * @param p progress bar box * @param current current statment of processing * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_managment_set_current_statment ( gpointer p, gfloat current); /*! * @function gw_capture_box_catalog_name_ok * @abstract Creates a new catalog and relaunches the disk scanning. * @discussion This function creates a new catalog and relaunches the disk scanning. * @param w button invoker * @param data capture box * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_capture_box_catalog_name_ok ( GtkWidget *w, gpointer data); /*! * @function gw_capture_box_disk_name_ok * @abstract Filled the disk name and relaunches the disk scanning. * @discussion This function filled the disk name and relaunches the disk scanning. * @param w button invoker * @param data capture box * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_capture_box_disk_name_ok ( GtkWidget *w, gpointer data); /*! * @function gw_notebook_managment_option_explore_tree_structure_click * @abstract Saves the tree structure exploration option. * @discussion This function saves the tree structure exploration option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_managment_option_explore_tree_structure_click ( GtkToggleButton *chk, GtkWindow *w); /*! * @function gw_notebook_managment_option_explore_archive_click * @abstract Saves the archives exploration option. * @discussion This function saves the archives exploration option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_managment_option_explore_archive_click ( GtkToggleButton *chk, GtkWindow *w); /*! * @function gw_notebook_managment_option_category_click * @abstract Saves the recursively category setting option. * @discussion This function saves the recursively category setting option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_managment_option_category_click ( GtkToggleButton *chk, GtkWindow *w); /*! * @function gw_notebook_managment_option_description_click * @abstract Saves the auto-extract description from files option. * @discussion This function saves the auto-extract description from files option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_managment_option_description_click ( GtkToggleButton *chk, GtkWindow *w); /*! * @function gw_notebook_managment_option_use_disk_label_click * @abstract Saves the using volume name as disk name option. * @discussion This function saves the using volume name as disk name option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_managment_option_use_disk_label_click ( GtkToggleButton *chk, GtkWindow *w); /*! * @function gw_notebook_managment_option_use_pattern_click * @abstract Saves the using an advanced pattern to generate disk name option. * @discussion This function saves an advanced pattern to generate disk name option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_managment_option_use_pattern_click ( GtkToggleButton *chk, GtkWindow *w); /*! * @function gw_notebook_managment_option_automount_click * @abstract Saves the automount option. * @discussion This function saves the automount option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_managment_option_automount_click ( GtkToggleButton *chk, GtkWindow *w); /*! * @function gw_notebook_managment_option_eject_click * @abstract Saves the auto-eject CD-Rom option. * @discussion This function saves the auto-eject CD-Rom option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_managment_option_eject_click ( GtkToggleButton *chk, GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwnotebooksearch.c0000744000175000017500000012504310247421307016530 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwnotebooksearch.h" #include /* strncmp */ #include "../gwapplicationmanager.h" #include "../gwguimanager.h" #include "gwnotebooksearchcallback.h" /*! @define GW_REF_NOTEBOOK_SEARCH_TABBED_PANE_LABEL The pabbed pane title */ #define GW_REF_NOTEBOOK_SEARCH_TABBED_PANE_LABEL "gw_ref_gw_notebook_search_tabbed_pane_label" /*! @define GW_REF_NOTEBOOK_SEARCH_ENTRY The search text entry */ #define GW_REF_NOTEBOOK_SEARCH_ENTRY "gw_notebook_search_entry" /*! @define GW_REF_NOTEBOOK_START_SEARCH_BUTTON The start search button */ #define GW_REF_NOTEBOOK_START_SEARCH_BUTTON "gw_notebook_start_search_button" /*! @define GW_REF_NOTEBOOK_CLEAR_BUTTON The clear results button */ #define GW_REF_NOTEBOOK_CLEAR_BUTTON "gw_notebook_clear_button" /*! @define GW_REF_NOTEBOOK_SEARCH_USE_CASE_SENSITIVE_CHECK_BUTTON The use case or uncase sensitive check button */ #define GW_REF_NOTEBOOK_SEARCH_USE_CASE_SENSITIVE_CHECK_BUTTON "gw_ref_gw_notebook_search_use_case_sensitive_check_button" /*! @define GW_REF_NOTEBOOK_SEARCH_USE_CASE_SENSITIVE_TOOL_TIPS The use case or uncase sensitive tooltips */ #define GW_REF_NOTEBOOK_SEARCH_USE_CASE_SENSITIVE_TOOL_TIPS "gw_ref_gw_notebook_search_use_case_sensitive_tool_tips" /*! @define GW_REF_NOTEBOOK_SEARCH_USE_KEY_WORDS_RADIO_BUTTON The use or not key words radio button */ #define GW_REF_NOTEBOOK_SEARCH_USE_KEY_WORDS_RADIO_BUTTON "gw_ref_gw_notebook_search_use_key_words_radio_button" /*! @define GW_REF_NOTEBOOK_SEARCH_USE_KEY_WORDS_TOOL_TIPS The use or not key words radio button */ #define GW_REF_NOTEBOOK_SEARCH_USE_KEY_WORDS_TOOL_TIPS "gw_ref_gw_notebook_search_use_key_words_tool_tips" /*! @define GW_REF_NOTEBOOK_SEARCH_USE_WILDCARDS_RADIO_BUTTON The use or not wildcards radio button */ #define GW_REF_NOTEBOOK_SEARCH_USE_WILDCARDS_RADIO_BUTTON "gw_ref_gw_notebook_search_use_wildcards_radio_button" /*! @define GW_REF_NOTEBOOK_SEARCH_USE_WILDCARDS_TOOL_TIPS The use or not wildcards radio button */ #define GW_REF_NOTEBOOK_SEARCH_USE_WILDCARDS_TOOL_TIPS "gw_ref_gw_notebook_search_use_wildcards_tool_tips" /*! @define GW_REF_NOTEBOOK_SEARCH_USE_REGULAR_EXPRESSION_RADIO_BUTTON The use or not regular expression radio button */ #define GW_REF_NOTEBOOK_SEARCH_USE_REGULAR_EXPRESSION_RADIO_BUTTON "gw_ref_gw_notebook_search_use_regular_expression_radio_button" /*! @define GW_REF_NOTEBOOK_SEARCH_USE_REGULAR_EXPRESSION_TOOL_TIPS The use or not regular expression radio button */ #define GW_REF_NOTEBOOK_SEARCH_USE_REGULAR_EXPRESSION_TOOL_TIPS "gw_ref_gw_notebook_search_use_regular_expression_tool_tips" /*! @define GW_REF_NOTEBOOK_SEARCH_MATCH_FILE_CHECK_BUTTON The match file check button */ #define GW_REF_NOTEBOOK_SEARCH_MATCH_FILE_CHECK_BUTTON "gw_ref_gw_notebook_search_match_file_check_button" /*! @define GW_REF_NOTEBOOK_SEARCH_MATCH_FILE_TOOL_TIPS The match file tooltips */ #define GW_REF_NOTEBOOK_SEARCH_MATCH_FILE_TOOL_TIPS "gw_ref_gw_notebook_search_match_file_tool_tips" /*! @define GW_REF_NOTEBOOK_SEARCH_MATCH_FOLDER_CHECK_BUTTON The match folder check button */ #define GW_REF_NOTEBOOK_SEARCH_MATCH_FOLDER_CHECK_BUTTON "gw_ref_gw_notebook_search_match_folder_check_button" /*! @define GW_REF_NOTEBOOK_SEARCH_MATCH_FOLDER_TOOL_TIPS The match folder tooltips */ #define GW_REF_NOTEBOOK_SEARCH_MATCH_FOLDER_TOOL_TIPS "gw_ref_gw_notebook_search_match_folder_tool_tips" /*! @define GW_REF_NOTEBOOK_SEARCH_MATCH_DISK_CHECK_BUTTON The match disk check button */ #define GW_REF_NOTEBOOK_SEARCH_MATCH_DISK_CHECK_BUTTON "gw_ref_gw_notebook_search_match_disk_check_button" /*! @define GW_REF_NOTEBOOK_SEARCH_MATCH_DISK_TOOL_TIPS The match disk tooltips */ #define GW_REF_NOTEBOOK_SEARCH_MATCH_DISK_TOOL_TIPS "gw_ref_gw_notebook_search_match_disk_tool_tis" /*! @define GW_REF_NOTEBOOK_SEARCH_MATCH_CATEGORY_CHECK_BUTTON The match category check button */ #define GW_REF_NOTEBOOK_SEARCH_MATCH_CATEGORY_CHECK_BUTTON "gw_ref_gw_notebook_search_match_category_check_button" /*! @define GW_REF_NOTEBOOK_SEARCH_MATCH_CATEGORY_TOOL_TIPS The match category tooltips */ #define GW_REF_NOTEBOOK_SEARCH_MATCH_CATEGORY_TOOL_TIPS "gw_ref_gw_notebook_search_match_category_tool_tips" /*! @define GW_REF_NOTEBOOK_SEARCH_MATCH_DESCRIPTION_CHECK_BUTTON The match description check button */ #define GW_REF_NOTEBOOK_SEARCH_MATCH_DESCRIPTION_CHECK_BUTTON "gw_ref_gw_notebook_search_match_description_check_button" /*! @define GW_REF_NOTEBOOK_SEARCH_MATCH_DESCRIPTION_TOOL_TIPS The match description tooltips */ #define GW_REF_NOTEBOOK_SEARCH_MATCH_DESCRIPTION_TOOL_TIPS "gw_ref_gw_notebook_search_match_description_tool_tips" /*! @define GW_REF_NOTEBOOK_SEARCH_CLIST_SEARCH The result list of search */ #define GW_REF_NOTEBOOK_SEARCH_CLIST_SEARCH "gw_ref_gw_notebook_search_clist_search" GtkWidget * gw_notebook_search_create ( GtkWindow * window) { GtkCList *clist_result = NULL; GtkWidget *vb_tabbed_pane; GtkWidget *hb_control; GtkWidget *lbl_search; GtkWidget *entry_search_string; GtkWidget *bt_search, *bt_clear; GtkWidget *chk_bt_case_sensitive; GtkWidget *vb_options,*hb_options1,*hb_options1_bis,*hb_options2; GtkWidget *chk_match_file; GtkWidget *chk_match_folder; GtkWidget *chk_match_disk; GtkWidget *chk_match_category; GtkWidget *chk_match_description; GtkWidget *hb_search_result; GtkWidget *scrolled_result_list; GtkWidget *clist_search_result; GtkWidget *lbl_title_col; GtkTooltips *tooltips_group; gchar *text_utf8 = NULL; GtkWidget *radio_search_type,*radio_search_type2,*radio_search_type3,*frm_search_type,*vb_search_type; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Inits the accel group for keystroke shortcuts. */ tooltips_group = gtk_tooltips_new ( ); /* Vertical box of the search tabbed pane. */ vb_tabbed_pane = gtk_vbox_new ( FALSE, 0); /* Horizontal box for controls (checkes boxes, buttons, ...). */ hb_control = gtk_hbox_new ( FALSE, 10); gtk_container_set_border_width ( GTK_CONTAINER ( hb_control), 10); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_control, FALSE, TRUE, 0); /* Horizontal box for search options. */ vb_options = gtk_vbox_new ( FALSE, 10); gtk_container_set_border_width ( GTK_CONTAINER ( vb_options), 0); gtk_box_pack_start ( GTK_BOX ( hb_control), vb_options, TRUE, TRUE, 0); /* Horizontal box for search options. */ hb_options1 = gtk_hbox_new ( FALSE, 10); gtk_container_set_border_width ( GTK_CONTAINER ( hb_options1), 0); gtk_box_pack_start ( GTK_BOX ( vb_options), hb_options1, FALSE, TRUE, 0); /* Horizontal box for search options. */ hb_options2 = gtk_hbox_new ( FALSE, 10); gtk_container_set_border_width ( GTK_CONTAINER ( hb_options2), 0); gtk_box_pack_start ( GTK_BOX ( vb_options), hb_options2, FALSE, TRUE, 0); lbl_search = gtk_label_new ( _( "Search : ")); gtk_box_pack_start ( GTK_BOX ( /*hb_control*/hb_options1), lbl_search, FALSE, FALSE, 0); /* Text area to search. */ entry_search_string = gtk_entry_new ( ); gtk_signal_connect ( GTK_OBJECT ( entry_search_string), "activate", GTK_SIGNAL_FUNC ( gw_notebook_search_search_string_activate), window); gtk_signal_connect ( GTK_OBJECT ( entry_search_string), "activate", GTK_SIGNAL_FUNC ( gw_notebook_search_search_button_click), window); /* Store reference to the search string */ gtk_widget_ref ( entry_search_string); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_SEARCH_ENTRY, entry_search_string, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_options1), entry_search_string, TRUE, TRUE, 0); GTK_WIDGET_SET_FLAGS ( entry_search_string, GTK_CAN_FOCUS); gtk_widget_grab_focus ( entry_search_string); /* Horizontal sub box for search options. */ hb_options1_bis = gtk_hbox_new ( TRUE, 10); gtk_container_set_border_width ( GTK_CONTAINER ( hb_options1_bis), 0); gtk_box_pack_start ( GTK_BOX ( hb_options1), hb_options1_bis, FALSE, TRUE, 0); /* Start search button. */ g_strdup_to_gtk_text ( _( "Search"), text_utf8); bt_search = gtk_button_new_with_label ( text_utf8); g_free ( text_utf8); /* Store reference to the start search button. */ gtk_widget_ref ( bt_search); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_START_SEARCH_BUTTON, bt_search,(GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( _("The search can be case sensitive. The wildcards search supports character \"*\".\nExample : img*.bmp or *.htm\nThe key words search accepts a list of obligatory words."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, bt_search, text_utf8, NULL); g_free ( text_utf8); gtk_signal_connect ( GTK_OBJECT ( bt_search), "clicked", GTK_SIGNAL_FUNC ( gw_notebook_search_search_button_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( bt_search), 5); gtk_box_pack_start ( GTK_BOX ( hb_options1_bis), bt_search, TRUE, TRUE, 0); /* Clear results button. */ g_strdup_to_gtk_text ( _( "Clear"), text_utf8); bt_clear = gtk_button_new_with_label ( text_utf8); g_free ( text_utf8); /* Store reference to the clear results button. */ gtk_widget_ref ( bt_clear); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_CLEAR_BUTTON, bt_clear,(GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( _("Clears all search results"), text_utf8); gtk_tooltips_set_tip ( tooltips_group, bt_clear, text_utf8, NULL); g_free ( text_utf8); gtk_signal_connect ( GTK_OBJECT ( bt_clear), "clicked", GTK_SIGNAL_FUNC ( gw_notebook_search_clear_button_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( bt_clear), 5); gtk_box_pack_start ( GTK_BOX ( hb_options1_bis), bt_clear, TRUE, TRUE, 0); /* Case/uncase sensitive check buton. */ g_strdup_to_gtk_text ( _( "Case sensitive"), text_utf8); chk_bt_case_sensitive = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); /* Store reference to the case or uncase sensitive check button. */ gtk_widget_ref ( chk_bt_case_sensitive); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_SEARCH_USE_CASE_SENSITIVE_CHECK_BUTTON, chk_bt_case_sensitive, (GtkDestroyNotify) gtk_widget_unref); gtk_container_set_border_width ( GTK_CONTAINER ( chk_bt_case_sensitive), 5); gtk_box_pack_start ( GTK_BOX ( hb_options1_bis), chk_bt_case_sensitive, FALSE, FALSE, 0); gtk_signal_connect ( GTK_OBJECT ( chk_bt_case_sensitive), "clicked", GTK_SIGNAL_FUNC (gw_notebook_search_option_use_case_sensitive_click), window); g_strdup_to_gtk_text ( _( "The search can be be or not case sensitive.\nIn case sensitive \"File.txt\" doesn't match with \"file.txt\". But in uncase sensitive it matches."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_bt_case_sensitive, text_utf8, GW_REF_NOTEBOOK_SEARCH_USE_CASE_SENSITIVE_TOOL_TIPS); g_free ( text_utf8); /* Create the radio button group for search type. */ g_strdup_to_gtk_text ( _( "Search type"), text_utf8); frm_search_type = gtk_frame_new ( text_utf8); g_free ( text_utf8); gtk_container_set_border_width ( GTK_CONTAINER ( frm_search_type), 10); gtk_box_pack_start ( GTK_BOX ( hb_control), frm_search_type, FALSE, TRUE, 0); vb_search_type = gtk_vbox_new ( FALSE, 0); gtk_container_add ( GTK_CONTAINER ( frm_search_type), vb_search_type); g_strdup_to_gtk_text ( _("Key words"), text_utf8); radio_search_type = gtk_radio_button_new_with_label_from_widget ( NULL, text_utf8); g_free ( text_utf8); gtk_widget_ref ( radio_search_type); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_SEARCH_USE_KEY_WORDS_RADIO_BUTTON, radio_search_type, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( radio_search_type), "clicked", GTK_SIGNAL_FUNC (gw_notebook_search_option_search_type_click), GINT_TO_POINTER ( SEARCH_TYPE_KEY_WORDS)); gtk_container_set_border_width ( GTK_CONTAINER ( radio_search_type), 5); gtk_box_pack_start ( GTK_BOX ( vb_search_type), radio_search_type, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Enter a list of key words which all must be containted is the matched files."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, radio_search_type, text_utf8, GW_REF_NOTEBOOK_SEARCH_USE_KEY_WORDS_TOOL_TIPS); g_free ( text_utf8); g_strdup_to_gtk_text ( _("Wildcards"), text_utf8); radio_search_type2 = gtk_radio_button_new_with_label_from_widget ( GTK_RADIO_BUTTON ( radio_search_type), text_utf8); g_free ( text_utf8); gtk_widget_ref ( radio_search_type2); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_SEARCH_USE_WILDCARDS_RADIO_BUTTON, radio_search_type2, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( radio_search_type2), "clicked", GTK_SIGNAL_FUNC (gw_notebook_search_option_search_type_click), GINT_TO_POINTER ( SEARCH_TYPE_WILDCARDS)); gtk_container_set_border_width ( GTK_CONTAINER ( radio_search_type2), 5); gtk_box_pack_start ( GTK_BOX ( vb_search_type), radio_search_type2, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Enter the full wildcards pattern. This pattern can contains \"?\" and \"*\" caracters."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, radio_search_type2, text_utf8, GW_REF_NOTEBOOK_SEARCH_USE_WILDCARDS_TOOL_TIPS); g_free ( text_utf8); g_strdup_to_gtk_text ( _("Regular expression"), text_utf8); radio_search_type3 = gtk_radio_button_new_with_label_from_widget ( GTK_RADIO_BUTTON ( radio_search_type2), text_utf8); g_free ( text_utf8); gtk_widget_ref ( radio_search_type3); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_SEARCH_USE_REGULAR_EXPRESSION_RADIO_BUTTON, radio_search_type3, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( radio_search_type3), "clicked", GTK_SIGNAL_FUNC (gw_notebook_search_option_search_type_click), GINT_TO_POINTER ( SEARCH_TYPE_REGEX)); gtk_container_set_border_width ( GTK_CONTAINER ( radio_search_type3), 5); gtk_box_pack_start ( GTK_BOX ( vb_search_type), radio_search_type3, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Can use regular expression. See documentation for more information."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, radio_search_type3, text_utf8, GW_REF_NOTEBOOK_SEARCH_USE_REGULAR_EXPRESSION_TOOL_TIPS); g_free ( text_utf8); /* Match file check buton. */ g_strdup_to_gtk_text ( _( "File"), text_utf8); chk_match_file = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_match_file); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_SEARCH_MATCH_FILE_CHECK_BUTTON, chk_match_file, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_match_file), "clicked", GTK_SIGNAL_FUNC (gw_notebook_search_option_match_file_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_match_file), 5); gtk_box_pack_start ( GTK_BOX ( hb_options2), chk_match_file, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "The search matches with files name."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_match_file, text_utf8, GW_REF_NOTEBOOK_SEARCH_MATCH_FILE_TOOL_TIPS); g_free ( text_utf8); /* Match folder check buton. */ g_strdup_to_gtk_text ( _( "Folder"), text_utf8); chk_match_folder = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_match_folder); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_SEARCH_MATCH_FOLDER_CHECK_BUTTON, chk_match_folder, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_match_folder), "clicked", GTK_SIGNAL_FUNC (gw_notebook_search_option_match_folder_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_match_folder), 5); gtk_box_pack_start ( GTK_BOX ( hb_options2), chk_match_folder, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "The search matches with folders name."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_match_folder, text_utf8, GW_REF_NOTEBOOK_SEARCH_MATCH_FOLDER_TOOL_TIPS); g_free ( text_utf8); /* Match disk check buton. */ g_strdup_to_gtk_text ( _( "Disk"), text_utf8); chk_match_disk = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_match_disk); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_SEARCH_MATCH_DISK_CHECK_BUTTON, chk_match_disk, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_match_disk), "clicked", GTK_SIGNAL_FUNC (gw_notebook_search_option_match_disk_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_match_disk), 5); gtk_box_pack_start ( GTK_BOX ( hb_options2), chk_match_disk, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "The search matches with disks name."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_match_disk, text_utf8, GW_REF_NOTEBOOK_SEARCH_MATCH_DISK_TOOL_TIPS); g_free ( text_utf8); /* Match category check buton. */ g_strdup_to_gtk_text ( _( "Category"), text_utf8); chk_match_category = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_match_category); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_SEARCH_MATCH_CATEGORY_CHECK_BUTTON, chk_match_category, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_match_category), "clicked", GTK_SIGNAL_FUNC (gw_notebook_search_option_match_category_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_match_category), 5); gtk_box_pack_start ( GTK_BOX ( hb_options2), chk_match_category, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "The search matches with categories name."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_match_category, text_utf8, GW_REF_NOTEBOOK_SEARCH_MATCH_CATEGORY_TOOL_TIPS); g_free ( text_utf8); /* Match description check buton. */ g_strdup_to_gtk_text ( _( "Description"), text_utf8); chk_match_description = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_match_description); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_SEARCH_MATCH_DESCRIPTION_CHECK_BUTTON, chk_match_description, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( chk_match_description), "clicked", GTK_SIGNAL_FUNC (gw_notebook_search_option_match_description_click), window); gtk_container_set_border_width ( GTK_CONTAINER ( chk_match_description), 5); gtk_box_pack_start ( GTK_BOX ( hb_options2), chk_match_description, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "The search matches with descriptions."), text_utf8); gtk_tooltips_set_tip ( tooltips_group, chk_match_description, text_utf8, GW_REF_NOTEBOOK_SEARCH_MATCH_DESCRIPTION_TOOL_TIPS); g_free ( text_utf8); /* Horizontal box to display search result. */ hb_search_result = gtk_hbox_new ( FALSE, 0); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_search_result, TRUE, TRUE, 0); /* Scrolled result list. */ scrolled_result_list = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( hb_search_result), scrolled_result_list, TRUE, TRUE, 0); /* List of search result. */ clist_search_result = gtk_clist_new ( 7); clist_result = GTK_CLIST ( clist_search_result); /* Store reference to the result search list. */ gtk_widget_ref ( clist_search_result); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_SEARCH_CLIST_SEARCH, clist_search_result,(GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( clist_search_result), "resize-column", GTK_SIGNAL_FUNC ( gw_notebook_search_clist_column_resized), NULL); gtk_signal_connect ( GTK_OBJECT ( clist_search_result), "click_column", GTK_SIGNAL_FUNC ( gw_notebook_search_column_sort), NULL); gtk_signal_connect ( GTK_OBJECT ( clist_search_result), "select_row", GTK_SIGNAL_FUNC ( gw_notebook_search_select_row), window); gtk_container_add ( GTK_CONTAINER ( scrolled_result_list), clist_search_result); gtk_clist_column_titles_show ( clist_result); gtk_clist_set_column_justification ( clist_result, 1, GTK_JUSTIFY_CENTER); gtk_clist_set_column_justification ( clist_result, 2, GTK_JUSTIFY_LEFT); gtk_clist_set_column_justification ( clist_result, 3, GTK_JUSTIFY_RIGHT); gtk_clist_set_column_justification ( clist_result, 4, GTK_JUSTIFY_RIGHT); gtk_clist_set_column_justification ( clist_result, 5, GTK_JUSTIFY_LEFT); gtk_clist_set_column_justification ( clist_result, 6, GTK_JUSTIFY_LEFT); gtk_clist_set_sort_column ( clist_result, 0); gtk_clist_set_sort_type ( clist_result, GTK_SORT_ASCENDING); gtk_clist_set_auto_sort ( clist_result, TRUE); lbl_title_col = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_result, 0, lbl_title_col); lbl_title_col = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_result, 1, lbl_title_col); lbl_title_col = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_result, 2, lbl_title_col); lbl_title_col = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_result, 3, lbl_title_col); lbl_title_col = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_result, 4, lbl_title_col); lbl_title_col = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_result, 5, lbl_title_col); lbl_title_col = gtk_label_new ( NULL); gtk_clist_set_column_widget ( clist_result, 6, lbl_title_col); gw_notebook_search_clist_search_set_column_title ( ); return vb_tabbed_pane; } GtkWidget * gw_notebook_search_create_and_add ( GtkWindow *window, GtkNotebook *parent) { GtkWidget *tabbed_pane_search = NULL; GtkWidget *search_tabbed_pane_label; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( window != NULL ) { tabbed_pane_search = gw_notebook_search_create ( window); if ( tabbed_pane_search != NULL ) { gtk_container_add ( GTK_CONTAINER ( parent), tabbed_pane_search); /* Text label of the search tabbed pane. */ g_strdup_to_gtk_text ( _( "Search"), text_utf8); search_tabbed_pane_label = gtk_label_new ( text_utf8); g_free ( text_utf8); /* Store reference to the title of tabbed pane */ gtk_widget_ref ( search_tabbed_pane_label); gtk_object_set_data_full ( GTK_OBJECT ( window), GW_REF_NOTEBOOK_SEARCH_TABBED_PANE_LABEL, search_tabbed_pane_label,(GtkDestroyNotify) gtk_widget_unref); gtk_notebook_set_tab_label ( parent, gtk_notebook_get_nth_page ( parent, 1), search_tabbed_pane_label); } } return tabbed_pane_search; } gchar * gw_notebook_search_get_search_text ( GtkWindow *w) { GtkEntry *search_entry = NULL; gchar *search_text = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { search_entry = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_ENTRY); if ( search_entry != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( search_entry), search_text); } } return search_text; } GtkCList * gw_notebook_search_get_clist_search ( GtkWindow *w) { GtkCList *clist_search = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { clist_search = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_CLIST_SEARCH)); } return clist_search; } gboolean gw_notebook_search_set_search_text ( GtkWindow *w, gchar *text) { GtkEntry *search_entry = NULL; gchar *search_text = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { search_entry = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_ENTRY); if ( search_entry != NULL ) { g_strdup_to_gtk_text ( text, search_text); gtk_entry_set_text ( search_entry, search_text); result = TRUE; } } return result; } gboolean gw_notebook_search_set_option_case_sensitive ( GtkWindow *w, gboolean case_sensitive) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_USE_CASE_SENSITIVE_CHECK_BUTTON); if ( chk != NULL ) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( chk), case_sensitive); result = TRUE; } } return result; } gboolean gw_notebook_search_set_option_key_words ( GtkWindow *w, gboolean key_words) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_USE_KEY_WORDS_RADIO_BUTTON); if ( chk != NULL ) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( chk), key_words); result = TRUE; } } return result; } gboolean gw_notebook_search_set_option_wildcards ( GtkWindow *w, gboolean wildcards) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_USE_WILDCARDS_RADIO_BUTTON); if ( chk != NULL ) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( chk), wildcards); result = TRUE; } } return result; } gboolean gw_notebook_search_set_option_regular_expression ( GtkWindow *w, gboolean regex) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_USE_REGULAR_EXPRESSION_RADIO_BUTTON); if ( chk != NULL ) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( chk), regex); result = TRUE; } } return result; } gboolean gw_notebook_search_set_option_search_type ( GtkWindow *w, gint search_type) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif switch ( search_type) { case SEARCH_TYPE_KEY_WORDS: result = gw_notebook_search_set_option_key_words ( w, TRUE); break; case SEARCH_TYPE_WILDCARDS: result = gw_notebook_search_set_option_wildcards ( w, TRUE); break; case SEARCH_TYPE_REGEX: result = gw_notebook_search_set_option_regular_expression ( w, TRUE); break; default: break; } return result; } gboolean gw_notebook_search_set_option_match_file ( GtkWindow *w, gboolean match_file) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_MATCH_FILE_CHECK_BUTTON); if ( chk != NULL ) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( chk), match_file); result = TRUE; } } return result; } gboolean gw_notebook_search_set_option_match_folder ( GtkWindow *w, gboolean match_folder) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_MATCH_FOLDER_CHECK_BUTTON); if ( chk != NULL ) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( chk), match_folder); result = TRUE; } } return result; } gboolean gw_notebook_search_set_option_match_disk ( GtkWindow *w, gboolean match_disk) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_MATCH_DISK_CHECK_BUTTON); if ( chk != NULL ) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( chk), match_disk); result = TRUE; } } return result; } gboolean gw_notebook_search_set_option_match_category ( GtkWindow *w, gboolean match_category) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_MATCH_CATEGORY_CHECK_BUTTON); if ( chk != NULL ) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( chk), match_category); result = TRUE; } } return result; } gboolean gw_notebook_search_set_option_match_description ( GtkWindow *w, gboolean match_description) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_MATCH_DESCRIPTION_CHECK_BUTTON); if ( chk != NULL ) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( chk), match_description); result = match_description; } } return result; } gboolean gw_notebook_search_get_option_case_sensitive ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_USE_CASE_SENSITIVE_CHECK_BUTTON); if ( chk != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_search_get_option_key_words ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_USE_KEY_WORDS_RADIO_BUTTON); if ( chk != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_search_get_option_wildcards ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_USE_WILDCARDS_RADIO_BUTTON); if ( chk != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_search_get_option_regular_expression ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_USE_REGULAR_EXPRESSION_RADIO_BUTTON); if ( chk != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gint gw_notebook_search_get_option_search_type ( GtkWindow *w) { GtkToggleButton *chk = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_USE_KEY_WORDS_RADIO_BUTTON); if ( (chk != NULL) && (gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)) == TRUE) ) { result = SEARCH_TYPE_KEY_WORDS; } chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_USE_WILDCARDS_RADIO_BUTTON); if ( (chk != NULL) && (gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)) == TRUE) ) { result = SEARCH_TYPE_WILDCARDS; } chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_USE_REGULAR_EXPRESSION_RADIO_BUTTON); if ( (chk != NULL) && (gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)) == TRUE) ) { result = SEARCH_TYPE_REGEX; } } return result; } gboolean gw_notebook_search_get_option_match_file ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_MATCH_FILE_CHECK_BUTTON); if ( chk != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_search_get_option_match_folder ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_MATCH_FOLDER_CHECK_BUTTON); if ( chk != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_search_get_option_match_disk ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_MATCH_DISK_CHECK_BUTTON); if ( chk != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_search_get_option_match_category ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_MATCH_CATEGORY_CHECK_BUTTON); if ( chk != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gboolean gw_notebook_search_get_option_match_description ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_NOTEBOOK_SEARCH_MATCH_DESCRIPTION_CHECK_BUTTON); if ( chk != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } struct user_quick_search * gw_notebook_search_get_user_quick_search ( GtkWindow *w) { struct user_quick_search *user_qs = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { user_qs = user_quick_search_new ( ); user_quick_search_set_pattern ( user_qs, gw_notebook_search_get_search_text ( w)); user_quick_search_set_case_sensitive ( user_qs, gw_notebook_search_get_option_case_sensitive ( w)); user_quick_search_set_type ( user_qs, gw_notebook_search_get_option_search_type ( w)); user_quick_search_set_match_file ( user_qs, gw_notebook_search_get_option_match_file ( w)); user_quick_search_set_match_folder ( user_qs, gw_notebook_search_get_option_match_folder ( w)); user_quick_search_set_match_disk ( user_qs, gw_notebook_search_get_option_match_disk ( w)); user_quick_search_set_match_category ( user_qs, gw_notebook_search_get_option_match_category ( w)); user_quick_search_set_match_description ( user_qs, gw_notebook_search_get_option_match_description ( w)); } return user_qs; } gint gw_notebook_search_clist_search_set_column_title ( void) { GtkWindow *w = NULL; GtkCList *clist = NULL; gchar *showed = NULL; gchar *text_utf8 = NULL; gint autoresize = -1; gint width = -1; gint i =0; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif w = gw_gui_manager_main_interface_get_main_window ( ); clist = gw_notebook_search_get_clist_search ( w); if ( clist != NULL ) { /* Sets columns width. */ if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_NAME_SIZE)) == -1 ) { width = GW_VALUE_APP_SEARCH_COLUMN_NAME_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_DISK_SIZE)) == -1 ) { width = GW_VALUE_APP_SEARCH_COLUMN_DISK_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_PATH_SIZE)) == -1 ) { width = GW_VALUE_APP_SEARCH_COLUMN_PATH_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_SIZE_SIZE)) == -1 ) { width = GW_VALUE_APP_SEARCH_COLUMN_SIZE_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_DATE_SIZE)) == -1 ) { width = GW_VALUE_APP_SEARCH_COLUMN_DATE_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_SIZE)) == -1 ) { width = GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION_DEFAULT, width); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_SIZE)) == -1 ) { width = GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_SIZE_DEFAULT; } gtk_clist_set_column_width ( clist, GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION_DEFAULT, width); /* Sets columns width. */ if ( (autoresize = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_AUTORESIZE)) == -1 ) { autoresize = GW_VALUE_APP_SEARCH_COLUMN_AUTORESIZE_DEFAULT; } /* Sets the autoresize mode. */ for ( i = 0; i < 7; i++) { /* Enabling auto-resize on a column disallows user-resizing of the column. */ if ( autoresize ) { gtk_clist_set_column_auto_resize ( clist, i, TRUE); } else { gtk_clist_set_column_resizeable ( clist, i, TRUE); } } /* Sets columns title. */ g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_DISK_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE), text_utf8); gtk_clist_set_column_title ( clist, GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION_DEFAULT, text_utf8); g_free ( text_utf8); if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_SEARCH_COLUMN_NAME_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_SEARCH_COLUMN_DISK_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_SEARCH_COLUMN_PATH_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_SEARCH_COLUMN_SIZE_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_SEARCH_COLUMN_DATE_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION_DEFAULT, TRUE); } if ( ((showed = gw_am_get_settings ( GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_SHOW)) != NULL) && (strncmp ( showed, "0", 1) == 0) ) { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION_DEFAULT, FALSE); } else { gtk_clist_set_column_visibility ( clist, GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION_DEFAULT, TRUE); } gw_notebook_search_set_column_sort ( clist, clist->sort_column); return 0; } return -1; } gwhere-0.2.3/src/gui/gwnotebooksearch.h0000744000175000017500000003222610023202520016517 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwnotebooksearch.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for the pane of search engine. * @author Sébastien LECACHEUR * @version 1.0 2002/02/13 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwnotebooksearch.c * @author Author */ #ifndef GW_GUI_GW_NOTEBOOK_SEARCH_H #define GW_GUI_GW_NOTEBOOK_SEARCH_H #include "data/gwdata.h" /*! * @function gw_notebook_search_create * @abstract Creates a search engine notebook pane. * @discussion This function creates a search engine notebook pane. * @param w main window * @result the search engine notebook pane.
* Returns NULL when an error occured. */ GtkWidget * gw_notebook_search_create ( GtkWindow *w); /*! * @function gw_notebook_search_create_and_add * @abstract Creates a search engine notebook pane and adds it to the notebook. * @discussion This function creates a search engine notebook pane and adds it to the notebook. * @param w main window * @param parent the container * @result the search engine notebook pane.
* Returns NULL when an error occured. */ GtkWidget * gw_notebook_search_create_and_add ( GtkWindow *w, GtkNotebook * parent); /*! * @function gw_notebook_search_get_clist_search * @abstract Gets the list of the search engine. * @discussion This function gets the list of search engine. * @param w refence to the main window * @result the list of search engine.
* Returns NULL when an error occured. */ GtkCList * gw_notebook_search_get_clist_search ( GtkWindow *w); /*! * @function gw_notebook_search_get_search_text * @abstract Gets the search string. * @discussion This function gets the search string. This string may be empty. * @param w refence to the main window * @result the search string of search engine. Must be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_notebook_search_get_search_text ( GtkWindow *w); /*! */ gboolean gw_notebook_search_set_search_text ( GtkWindow *w, gchar *text); /*! * @function gw_notebook_search_set_option_case_sensitive * @abstract Sets the search to case sensitive. * @discussion This function sets the search to case sensitive. * @param w refence to the main window * @param case_sensitive TRUE to activate case sensitive otherwise FALSE * @result Returns TRUE when it is done. * Returns FALSE when an error occured. */ gboolean gw_notebook_search_set_option_case_sensitive ( GtkWindow *w, gboolean case_sensitive); /*! * @function gw_notebook_search_set_option_key_words * @abstract Sets the search to use key words. * @discussion This function sets the search to use key words. * @param w refence to the main window * @param key_words TRUE to activate key words search otherwise FALSE * @result Returns TRUE when it is done. * Returns FALSE when an error occured. */ gboolean gw_notebook_search_set_option_key_words ( GtkWindow *w, gboolean key_words); /*! * @function gw_notebook_search_set_option_wildcards * @abstract Sets the search to use wildcards. * @discussion This function sets the search to use wilcards. * @param w refence to the main window * @param wildcards TRUE to activate wilcards search otherwise FALSE * @result Returns TRUE when it is done. * Returns FALSE when an error occured. */ gboolean gw_notebook_search_set_option_wildcards ( GtkWindow *w, gboolean wildcards); /*! * @function gw_notebook_search_set_option_regular_expression * @abstract Sets the search to use regular expression. * @discussion This function sets the search to use regular expression. * @param w refence to the main window * @param regex TRUE to activate regural expression search otherwise FALSE * @result Returns TRUE when it is done. * Returns FALSE when an error occured. */ gboolean gw_notebook_search_set_option_regular_expression ( GtkWindow *w, gboolean regex); /*! * @function gw_notebook_search_set_option_search_type * @abstract Sets the search type. * @discussion This function sets the search type. * @param w refence to the main window * @param search_type SEARCH_TYPE_KEY_WORDS,SEARCH_TYPE_WILDCARDS * or SEARCH_TYPE_REGEX * @result Returns TRUE when it is done. * Returns FALSE when an error occured. */ gboolean gw_notebook_search_set_option_search_type ( GtkWindow *w, gint search_type); /*! * @function gw_notebook_search_set_option_match_file * @abstract Sets the search to matches with files * @discussion This function sets the search to matches with files name. * @param w refence to the main window * @param match_file TRUE to match with files otherwise FALSE * @result Returns TRUE when it is done. * Returns FALSE when an error occured. */ gboolean gw_notebook_search_set_option_match_file ( GtkWindow *w, gboolean match_file); /*! * @function gw_notebook_search_set_option_match_folder * @abstract Sets the search to matches with folders * @discussion This function sets the search to matches with folders name. * @param w refence to the main window * @param match_folder TRUE to match with folders otherwise FALSE * @result Returns TRUE when it is done. * Returns FALSE when an error occured. */ gboolean gw_notebook_search_set_option_match_folder ( GtkWindow *w, gboolean match_folder); /*! * @function gw_notebook_search_set_option_match_disk * @abstract Sets the search to matches with disks * @discussion This function sets the search to matches with disks name. * @param w refence to the main window * @param match_disk TRUE to match with disks otherwise FALSE * @result Returns TRUE when it is done. * Returns FALSE when an error occured. */ gboolean gw_notebook_search_set_option_match_disk ( GtkWindow *w, gboolean match_disk); /*! * @function gw_notebook_search_set_option_match_category * @abstract Sets the search to matches with categories * @discussion This function sets the search to matches with categories. * @param w refence to the main window * @param match_category TRUE to match with categories otherwise FALSE * @result Returns TRUE when it is done. * Returns FALSE when an error occured. */ gboolean gw_notebook_search_set_option_match_category ( GtkWindow *w, gboolean match_category); /*! * @function gw_notebook_search_set_option_match_description * @abstract Sets the search to matches with descriptions * @discussion This function sets the search to matches with descriptions. * @param w refence to the main window * @param match_description TRUE to match with descriptions otherwise FALSE * @result Returns TRUE when it is done. * Returns FALSE when an error occured. */ gboolean gw_notebook_search_set_option_match_description ( GtkWindow *w, gboolean math_description); /*! * @function gw_notebook_search_clist_search_set_column_title * @abstract Sets the columns properties * @discussion This function sets the columns properties * @result Returns 0 when it is done. * Returns -1 when an error occured. */ gint gw_notebook_search_clist_search_set_column_title ( void); /*! * @function gw_notebook_search_get_option_case_sensitive * @abstract Gets if the search is case sensitive. * @discussion This function gets if the search is case sensitive. * @param w refence to the main window * @result Returns TRUE if the search is case sensitive else returns FALSE.
* Returns FALSE when an error occured. */ gboolean gw_notebook_search_get_option_case_sensitive ( GtkWindow *w); /*! * @function gw_notebook_search_get_option_key_words * @abstract Gets if the search use key words. * @discussion This function gets if the search use key words. * @param w refence to the main window * @result Returns TRUE if the search use key words else returns FALSE.
* Returns FALSE when an error occured.
*/ gboolean gw_notebook_search_get_option_key_words ( GtkWindow *w); /*! * @function gw_notebook_search_get_option_wildcards * @abstract Gets if the search use wildcards. * @discussion This function gets if the search use wilcards. * @param w refence to the main window * @result Returns TRUE if the search use wildcards else returns FALSE.
* Returns FALSE when an error occured.
*/ gboolean gw_notebook_search_get_option_wildcards ( GtkWindow *w); /*! * @function gw_notebook_search_get_option_regular_expression * @abstract Gets if the search use regular expression. * @discussion This function gets if the search use regular expression. * @param w refence to the main window * @result Returns TRUE if the search use regular expression else returns FALSE.
* Returns FALSE when an error occured.
*/ gboolean gw_notebook_search_get_option_regular_expression ( GtkWindow *w); /*! * @function gw_notebook_search_get_option_search_type * @abstract Gets the search type. * @discussion This function gets the search type. * @param w refence to the main window * @result Returns SEARCH_TYPE_KEY_WORDS,SEARCH_TYPE_WILDCARDS or SEARCH_TYPE_REGEX.
* Returns -1 when an error occured.
*/ gint gw_notebook_search_get_option_search_type ( GtkWindow *w); /*! * @function gw_notebook_search_get_option_match_file * @abstract Gets if the search matches with file * @discussion This function gets if the search matches with files name. * @param w refence to the main window * @result Returns TRUE if the search matches with files else returns FALSE.
* Returns FALSE when an error occured. */ gboolean gw_notebook_search_get_option_match_file ( GtkWindow *w); /*! * @function gw_notebook_search_get_option_match_folder * @abstract Gets if the search matches with folder * @discussion This function gets if the search matches with folders name. * @param w refence to the main window * @result Returns TRUE if the search matches with folders else returns FALSE.
* Returns FALSE when an error occured. */ gboolean gw_notebook_search_get_option_match_folder ( GtkWindow *w); /*! * @function gw_notebook_search_get_option_match_disk * @abstract Gets if the search matches with disk * @discussion This function gets if the search matches with disks name. * @param w refence to the main window * @result Returns TRUE if the search matches with disks else returns FALSE.
* Returns FALSE when an error occured. */ gboolean gw_notebook_search_get_option_match_disk ( GtkWindow *w); /*! * @function gw_notebook_search_get_option_match_category * @abstract Gets if the search matches with categories * @discussion This function gets if the search matches with categories. * @param w refence to the main window * @result Returns TRUE if the search matches with categories else returns FALSE.
* Returns FALSE when an error occured. */ gboolean gw_notebook_search_get_option_match_category ( GtkWindow *w); /*! * @function gw_notebook_search_get_option_match_description * @abstract Gets if the search matches with descriptions * @discussion This function gets if the search matches with descriptions. * @param w refence to the main window * @result Returns TRUE if the search matches with descriptions else returns FALSE.
* Returns FALSE when an error occured. */ gboolean gw_notebook_search_get_option_match_description ( GtkWindow *w); /*! * @function gw_notebook_search_get_user_quick_search * @abstract Gets the user quick search informations * @discussion This function gets the user quick search informations. * Warning : this function allocates a new struct user_quick_search * must free this structure after. * @param w refence to the main window * @result the user quick search structure. Must be freed with user_quick_search_free().
* Returns NULL when an error occured. */ struct user_quick_search * gw_notebook_search_get_user_quick_search ( GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwnotebooksearchcallback.c0000744000175000017500000004265610472700626020221 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwnotebooksearchcallback.h" #include /* strncmp strcasecmp */ #include "gwnotebooksearch.h" #include "gwstatusbar.h" #include "gwstatusbarcallback.h" #include "gwmsgbox.h" #include "data/gwdata.h" #include "../gwapplicationmanager.h" #include "../gwsearchengine.h" #include "../gwguimanager.h" gint gw_catalog_compare_search_gulong ( GtkCList *clist, const gpointer ptr1, const gpointer ptr2) { struct search_item_info *search_item_info1 = NULL, *search_item_info2 = NULL; gulong nb1 = 0, nb2 = 0; gint type1, type2; gchar *str_name1 = NULL, *str_name2 = NULL; gint result = 0; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (ptr1!=NULL) && (ptr2!=NULL) ) { search_item_info1 = (struct search_item_info*)(((GtkCListRow *)ptr1)->data); search_item_info2 = (struct search_item_info*)(((GtkCListRow *)ptr2)->data); if ( (search_item_info1!=NULL) && (search_item_info2!=NULL) ) { str_name1 = search_item_info_get_name ( search_item_info1); str_name2 = search_item_info_get_name ( search_item_info2); type1 = search_item_info_get_type ( search_item_info1); type2 = search_item_info_get_type ( search_item_info2); switch ( clist->sort_column) { case GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION_DEFAULT: nb1 = search_item_info_get_date ( search_item_info1); nb2 = search_item_info_get_date ( search_item_info2); break; } if ( (str_name1!=NULL) && (str_name2!=NULL) ) { if ( (strlen ( str_name1) == 2) && (strncmp ( str_name1, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?-2:2); } else { if ( (strlen ( str_name2) == 2) && (strncmp ( str_name2, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?2:-2); } else { result = (((gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_SORT_BY_TYPE)==0)||(type1==type2))?(nb1-nb2):(type1-type2)); } } } } } return result; } gint gw_catalog_compare_search_gui64long ( GtkCList *clist, const gpointer ptr1, const gpointer ptr2) { struct search_item_info *search_item_info1 = NULL, *search_item_info2 = NULL; guint64 nb1 = 0, nb2 = 0; gint type1, type2; gchar *str_name1 = NULL, *str_name2 = NULL; gint result = 0; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (ptr1!=NULL) && (ptr2!=NULL) ) { search_item_info1 = (struct search_item_info*)(((GtkCListRow *)ptr1)->data); search_item_info2 = (struct search_item_info*)(((GtkCListRow *)ptr2)->data); if ( (search_item_info1!=NULL) && (search_item_info2!=NULL) ) { str_name1 = search_item_info_get_name ( search_item_info1); str_name2 = search_item_info_get_name ( search_item_info2); type1 = search_item_info_get_type ( search_item_info1); type2 = search_item_info_get_type ( search_item_info2); switch ( clist->sort_column) { case GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION_DEFAULT: nb1 = search_item_info_get_size ( search_item_info1); nb2 = search_item_info_get_size ( search_item_info2); break; } if ( (str_name1!=NULL) && (str_name2!=NULL) ) { if ( (strlen ( str_name1) == 2) && (strncmp ( str_name1, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?-2:2); } else { if ( (strlen ( str_name2) == 2) && (strncmp ( str_name2, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?2:-2); } else { result = (((gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_SORT_BY_TYPE)==0)||(type1==type2))?(nb1-nb2):(type1-type2)); } } } } } return result; } gint gw_catalog_compare_search_str ( GtkCList *clist, const gpointer ptr1, const gpointer ptr2) { struct search_item_info *search_item_info1 = NULL, *search_item_info2 = NULL; gchar *str_name1 = NULL, *str_name2 = NULL; gchar *str1 = NULL, *str2 = NULL; gboolean type1 = FALSE, type2 = FALSE; gint result = 0; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (ptr1!=NULL) && (ptr2!=NULL) ) { search_item_info1 = (struct search_item_info*)(((GtkCListRow *)ptr1)->data); search_item_info2 = (struct search_item_info*)(((GtkCListRow *)ptr2)->data); if ( (search_item_info1!=NULL) && (search_item_info2!=NULL) ) { str_name1 = search_item_info_get_name ( search_item_info1); str_name2 = search_item_info_get_name ( search_item_info2); type1 = search_item_info_get_type ( search_item_info1); type2 = search_item_info_get_type ( search_item_info2); switch ( clist->sort_column) { case GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION_DEFAULT: str1 = str_name1; str2 = str_name2; break; case GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION_DEFAULT: str1 = search_item_info_get_disk ( search_item_info1); str2 = search_item_info_get_disk ( search_item_info2); break; case GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION_DEFAULT: str1 = search_item_info_get_path ( search_item_info1); str2 = search_item_info_get_path ( search_item_info2); break; case GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION_DEFAULT: str1 = search_item_info_get_category_name ( search_item_info1); str2 = search_item_info_get_category_name ( search_item_info2); break; case GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION_DEFAULT: str1 = search_item_info_get_description ( search_item_info1); str2 = search_item_info_get_description ( search_item_info2); break; } if ( (str_name1!=NULL) && (str_name2!=NULL) && (str1!=NULL) && (str2!=NULL) ) { if ( (strlen ( str_name1) == 2) && (strncmp ( str_name1, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?-2:2); } else { if ( (strlen ( str_name2) == 2) && (strncmp ( str_name2, "..", 2) == 0) ) { result = (clist->sort_type==GTK_SORT_ASCENDING?2:-2); } else { if ( gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_SORT_CASE_SENSITIVE) == 1 ) { result = (((gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_SORT_BY_TYPE)==0)||(type1==type2))?strcmp ( str1, str2):(type1-type2)); } else { result = (((gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_SORT_BY_TYPE)==0)||(type1==type2))?strcasecmp ( str1, str2):(type1-type2)); } } } } } } return result; } gboolean gw_notebook_search_column_sort ( GtkCList *clist, gint column, gpointer data) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( clist != NULL ) { if ( GPOINTER_TO_INT ( data) != -1 ) { if ( column == clist->sort_column ) { if ( clist->sort_type == GTK_SORT_ASCENDING ) { clist->sort_type = GTK_SORT_DESCENDING; } else { clist->sort_type = GTK_SORT_ASCENDING; } } else { gtk_clist_set_sort_column ( clist, column); } } gw_notebook_search_set_column_sort ( clist, column); if ( GPOINTER_TO_INT ( data) != -1 ) { gtk_clist_sort ( clist); } result = TRUE; } return result; } gboolean gw_notebook_search_search_string_activate ( GtkWidget *entry, GtkWindow *w) { gboolean result = FALSE; gchar *text = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( entry != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( entry)), text); gw_am_set_settings ( GW_VALUE_APP_SEARCH_STRING, text); result = TRUE; } } return result; } gboolean gw_notebook_search_search_button_click ( GtkWidget *bt, GtkWindow *w) { gboolean result = FALSE; struct user_quick_search *user_qs = NULL; gulong founded = 0; gchar *msg = NULL; GtkWindow *window = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { /* saves the new filled search string */ gw_am_set_settings ( GW_VALUE_APP_SEARCH_STRING, gw_notebook_search_get_search_text ( w)); if ( gw_gui_manager_main_interface_get_tree_root ( ) != NULL ) { /* Allocate user_quick_search structure, had to free this structure after */ user_qs = gw_notebook_search_get_user_quick_search ( w); window = gw_gui_manager_main_interface_get_main_window ( ); gw_status_bar_put_messages ( window, _( "Search in catalog"), _( "Please wait...")); gw_gui_manager_main_interface_refresh ( ); founded = search_engine_search_in_disk ( w, user_qs); msg = g_strdup_printf ( _("%lu item(s) founded."), founded); gw_status_bar_put_messages ( window, _( "Search result"), msg); g_free ( msg); /* Free the user_quick_search struture. */ user_quick_search_free ( user_qs); if ( founded == 0 ) { gw_msg_box_create ( w, _( "Search result"), _( "No item matched.")); /* Doesn't use it at time. It should be configured in the settings. */ /* gdk_beep ( );*/ gw_am_beep ( ); } result = TRUE; } else { gw_msg_box_create ( w, _( "Searching..."), _( "Cannot start searching : no catalog loaded")); result = FALSE; } } return result; } gboolean gw_notebook_search_clear_button_click ( GtkWidget *bt, GtkWindow *w) { gboolean result = FALSE; GtkCList *clist = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (clist = gw_notebook_search_get_clist_search ( w)) != NULL ) { gtk_clist_freeze ( clist); gtk_clist_clear ( clist); gtk_clist_thaw ( clist); result = TRUE; } } return result; } gboolean gw_notebook_search_select_row ( GtkCList *clist, gint line, gint column, GdkEventButton *event, GtkWindow *w) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( clist != NULL && w != NULL ) { gw_status_bar_set_catalog_search_page ( w, g_list_length ( clist->selection)); result = TRUE; } return result; } gint gw_notebook_search_option_use_case_sensitive_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_SEARCH_CASE_SENSITIVE, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); result = 0; } return result; } gint gw_notebook_search_option_search_type_click ( GtkToggleButton *chk, gpointer search_type) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_SEARCH_TYPE, g_strdup_printf ( "%d", GPOINTER_TO_INT ( search_type))); result = 0; } return result; } gint gw_notebook_search_option_match_file_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_SEARCH_FILE_NAME, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); result = 0; } return result; } gint gw_notebook_search_option_match_folder_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_SEARCH_FOLDER_NAME, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); result = 0; } return result; } gint gw_notebook_search_option_match_disk_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_SEARCH_DISK_NAME, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); result = 0; } return result; } gint gw_notebook_search_option_match_category_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_SEARCH_CATEGORY_NAME, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); result = 0; } return result; } gint gw_notebook_search_option_match_description_click ( GtkToggleButton *chk, GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( chk != NULL) { gw_am_set_settings ( GW_VALUE_APP_SEARCH_DESCRIPTION, g_strdup_printf ( "%d", gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)))); result = 0; } return result; } gint gw_notebook_search_clist_column_resized ( GtkCList *clist, gint column, gint width, gpointer user_data) { gint result = -1; gint autoresize = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (autoresize = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE)) == -1 ) { autoresize = GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE_DEFAULT; } /* Saves the column width only if the autoresize mode is desactivated. */ if ( autoresize == FALSE ) { if ( (clist!=NULL) && (column>-1) ) { switch ( column) { case GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_SEARCH_COLUMN_NAME_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_SEARCH_COLUMN_DISK_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_SEARCH_COLUMN_PATH_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_SEARCH_COLUMN_SIZE_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_SEARCH_COLUMN_DATE_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_SIZE, g_strdup_printf ( "%d", width)); break; case GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION_DEFAULT: gw_am_set_settings ( GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_SIZE, g_strdup_printf ( "%d", width)); break; default: break; } result = 0; } } return result; } gint gw_notebook_search_set_column_sort ( GtkCList *clist, gint column) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (clist!=NULL) && (column>-1) ) { switch ( column) { case GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_search_str); break; case GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_search_str); break; case GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_search_str); break; case GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_search_gui64long); break; case GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_search_gulong); break; case GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_search_str); break; case GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION_DEFAULT: gtk_clist_set_compare_func ( clist, (GtkCListCompareFunc)gw_catalog_compare_search_str); break; default: gtk_clist_set_compare_func ( clist, NULL); break; } result = 0; } return result; } gwhere-0.2.3/src/gui/gwnotebooksearchcallback.h0000744000175000017500000001716010023202520020174 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwnotebooksearchcallback.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component callback for search engine notebook pane. * @author Sébastien LECACHEUR * @version 1.0 2002/02/13 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwnotebooksearchcallback.c * @author Author */ #ifndef GW_GUI_GW_NOTEBOOK_SEARCH_CALLBACK_H #define GW_GUI_GW_NOTEBOOK_SEARCH_CALLBACK_H /*! * @function gw_notebook_search_column_sort * @abstract Sorts the column as ascending or descending. * @discussion This function sorts the column as ascending or descending. * @param clist search result clist * @param column column to sort * @param data unused at time * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_notebook_search_column_sort ( GtkCList *clist, gint column, gpointer data); /*! * @function gw_notebook_search_search_string_activate * @abstract Saves the search string * @discussion This function saves the search string. * @param entry entry invoker * @param w main window * @result Returns TRUE is the search string is saved.
* Returns FALSE when an error occured. */ gboolean gw_notebook_search_search_string_activate ( GtkWidget *entry, GtkWindow *w); /*! * @function gw_notebook_search_search_button_click * @abstract Starts the search. * @discussion This function starts the search. * @param bt button invoker * @param w main window * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_notebook_search_search_button_click ( GtkWidget *bt, GtkWindow *w); /*! * @function gw_notebook_search_clear_button_click * @abstract Clears all search results. * @discussion This function clears all search results. * @param bt button invoker * @param w main window * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_notebook_search_clear_button_click ( GtkWidget *bt, GtkWindow *w); /*! * @function gw_notebook_search_select_row * @abstract Updates the status bar. * @discussion This function updates the status bar when a result item is selected. * @param clist search result clist * @param line selected item line * @param column selected item column * @param even event whitch invoke this function * @param w main window * @result Returns TRUE is the event submited correctly.
* Returns FALSE when an error occured. */ gboolean gw_notebook_search_select_row ( GtkCList *clist, gint line, gint column, GdkEventButton *event, GtkWindow *w); /*! * @function gw_notebook_search_option_use_case_sensitive_click * @abstract Saves ... option. * @discussion This function saves ... option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_search_option_use_case_sensitive_click ( GtkToggleButton *chk, GtkWindow *w); /*! */ gint gw_notebook_search_option_search_type_click ( GtkToggleButton *chk, gpointer search_type); /*! * @function gw_notebook_search_option_match_file_click * @abstract Saves ... option. * @discussion This function saves ... option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_search_option_match_file_click ( GtkToggleButton *chk, GtkWindow *w); /*! * @function gw_notebook_search_option_match_folder_click * @abstract Saves ... option. * @discussion This function saves ... option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_search_option_match_folder_click ( GtkToggleButton *chk, GtkWindow *w); /*! * @function gw_notebook_search_option_match_disk_click * @abstract Saves ... option. * @discussion This function saves ... option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_search_option_match_disk_click ( GtkToggleButton *chk, GtkWindow *w); /*! * @function gw_notebook_search_option_match_category_click * @abstract Saves ... option. * @discussion This function saves ... option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_search_option_match_category_click ( GtkToggleButton *chk, GtkWindow *w); /*! * @function gw_notebook_search_option_match_description_click * @abstract Saves ... option. * @discussion This function saves ... option. * This function is called when the user click on option check box. * @param chk check box invoker * @param w main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_search_option_match_description_click ( GtkToggleButton *chk, GtkWindow *w); /*! * @function gw_notebook_search_clist_column_resized * @abstract Saves the column width. * @discussion This function saves the column width.
* This function call when the user click resize any * column in the search.
* @param clist the column list source invoker * @param column the column number * @param width the new column width * @param data unused data * @result Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_search_clist_column_resized ( GtkCList *clist, gint column, gint width, gpointer data); /*! * @function gw_notebook_search_set_column_sort * @abstract Sets the sort algorithm. * @discussion This function sets the sort algorithm. * @param clist catalog file list clist * @param column column to sort * @result Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_notebook_search_set_column_sort ( GtkCList *clist, gint column); #endif gwhere-0.2.3/src/gui/gwprogressbarbox.c0000744000175000017500000004251110023202520016544 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwprogressbarbox.h" #include /* strcmp */ /*! @define GW_REF_PROGRESS_BAR_BOX_PARENT_WINDOW The parent window reference */ #define GW_REF_PROGRESS_BAR_BOX_PARENT_WINDOW "gw_ref_gw_progress_bar_box_parent_window" /*! @define GW_REF_PROGRESS_BAR_BOX_TEXT_INFO_LABEL The text info label to describe current processing */ #define GW_REF_PROGRESS_BAR_BOX_TEXT_INFO_LABEL "gw_ref_gw_progress_bar_box_text_info_label" /*! @define GW_REF_PROGRESS_BAR_BOX_PROGRESS_BAR The real progress bar */ #define GW_REF_PROGRESS_BAR_BOX_PROGRESS_BAR "gw_ref_gw_progress_bar_box_progress_bar" /*! @define GW_PROGRESS_BAR_BOX_PROGRESS_BAR_FORMAT_STRING The progress bar format string */ #define GW_PROGRESS_BAR_BOX_PROGRESS_BAR_FORMAT_STRING "%v / %u (%p %%)" /*! @define GW_REF_PROGRESS_BAR_BOX_OK_CANCEL_BUTTON The ok/cancel button */ #define GW_REF_PROGRESS_BAR_BOX_OK_CANCEL_BUTTON "gw_ref_gw_progress_bar_box_ok_cancel_button" /*! @define GW_REF_PROGRESS_BAR_BOX_OK_CANCEL_BUTTON_STATE The ok/cancel button state */ #define GW_REF_PROGRESS_BAR_BOX_OK_CANCEL_BUTTON_STATE "gw_ref_gw_progress_bar_box_ok_cancel_button_state" GtkWindow * gw_progress_bar_box_create ( GtkWindow *window, gchar *title, gchar *subject, gchar *text, gfloat max, func_stop_progress_t stop, gpointer p) { GtkWidget *w = NULL; GtkWidget *frame; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *file_name; GtkWidget *progress_bar = NULL; GtkWidget *button; guint button_key; GtkAccelGroup *accel = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, max); #endif /* Inits accel group for keystroke shortcuts */ accel = gtk_accel_group_new ( ); if ( !w ) { w = gtk_window_new ( GTK_WINDOW_DIALOG); gtk_window_set_policy ( GTK_WINDOW ( w), FALSE, FALSE, FALSE); g_strdup_to_gtk_text ( title, text_utf8); gtk_window_set_title ( GTK_WINDOW ( w), text_utf8); g_free ( text_utf8); gtk_container_border_width ( GTK_CONTAINER ( w), 5); gtk_window_set_modal ( GTK_WINDOW ( w),TRUE); gtk_window_set_transient_for ( GTK_WINDOW ( w), window); gtk_window_set_position ( GTK_WINDOW ( w), GTK_WIN_POS_CENTER); gtk_widget_ref ( GTK_WIDGET ( window)); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROGRESS_BAR_BOX_PARENT_WINDOW, window, (GtkDestroyNotify) gtk_widget_unref); if ( stop != NULL ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : connect signals on delete_event and destroy\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* These signals do nothing. In this way the window cannot be destroyed. What must be done when stop is NULL? */ gtk_signal_connect ( GTK_OBJECT ( w), "delete_event", GTK_SIGNAL_FUNC ( gw_progress_bar_box_signal_do_nothing), NULL); gtk_signal_connect ( GTK_OBJECT ( w), "destroy", GTK_SIGNAL_FUNC ( gw_progress_bar_box_signal_do_nothing), NULL); } g_strdup_to_gtk_text ( subject, text_utf8); frame = gtk_frame_new ( text_utf8); g_free ( text_utf8); gtk_container_add ( GTK_CONTAINER ( w), frame); vbox = gtk_vbox_new ( FALSE, 0); gtk_container_add ( GTK_CONTAINER ( frame), vbox); gtk_container_set_border_width ( GTK_CONTAINER ( vbox), 10); g_strdup_to_gtk_text ( text, text_utf8); file_name = gtk_label_new ( text_utf8); g_free ( text_utf8); /* Store the reference to the text info label to describe the current processing. */ gtk_widget_ref ( file_name); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROGRESS_BAR_BOX_TEXT_INFO_LABEL, file_name, (GtkDestroyNotify) gtk_widget_unref); gtk_label_set_justify ( GTK_LABEL ( file_name), GTK_JUSTIFY_LEFT); gtk_box_pack_start ( GTK_BOX ( vbox), file_name, TRUE, TRUE, 0); #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : creates the real progress bar\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif progress_bar = gtk_progress_bar_new ( ); /* Store reference to the real progress bar */ gtk_widget_ref ( progress_bar); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROGRESS_BAR_BOX_PROGRESS_BAR, progress_bar, (GtkDestroyNotify) gtk_widget_unref); /* Doesn't show the progress bar if max value is 0 */ if ( max > 0 ) { gtk_progress_configure ( GTK_PROGRESS ( progress_bar), 0, 0, max); gtk_progress_set_show_text ( GTK_PROGRESS ( progress_bar), TRUE); /* Set the format string of progess state visualization */ g_strdup_to_gtk_text ( GW_PROGRESS_BAR_BOX_PROGRESS_BAR_FORMAT_STRING, text_utf8); gtk_progress_set_format_string ( GTK_PROGRESS ( progress_bar), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( vbox), progress_bar, TRUE, TRUE, 0); } hbox = gtk_hbox_new ( TRUE, 10); gtk_container_add ( GTK_CONTAINER ( vbox), hbox); gtk_container_set_border_width ( GTK_CONTAINER ( hbox), 5); button = gtk_button_new_with_label ( ""); /* Store reference to the ok/cancel button */ gtk_widget_ref ( button); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROGRESS_BAR_BOX_OK_CANCEL_BUTTON, button, (GtkDestroyNotify) gtk_widget_unref); gw_progress_bar_box_set_state ( GTK_WINDOW ( w), STATE_CANCEL); g_strdup_to_gtk_text ( _( "_Cancel"), text_utf8); button_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( button)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( button, "clicked", accel, button_key, GDK_MOD1_MASK, 0); gtk_object_set_user_data ( GTK_OBJECT ( button), w); gtk_box_pack_start ( GTK_BOX ( hbox), button, TRUE, TRUE, 0); gtk_widget_grab_focus ( button); if ( stop != NULL ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : connect custom callback on ok/cancel button\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_signal_connect ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( stop), p); } else { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : connect standard callback on ok/cancel button\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_signal_connect ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( gw_progress_bar_box_ok_cancel_click), w); } gtk_window_add_accel_group ( GTK_WINDOW ( w), accel); } if ( !GTK_WIDGET_VISIBLE ( w) ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : show window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_show_all ( w); } else { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : destroy window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_destroy ( w); } return GTK_WINDOW ( w); } GtkWindow * gw_progress_bar_box_get_parent_window ( GtkWindow *w) { GtkWindow *parent = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { parent = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROGRESS_BAR_BOX_PARENT_WINDOW)); } return parent; } GtkProgress * gw_progress_bar_box_get_progress_bar ( GtkWindow *w) { GtkProgress *progress_bar = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { progress_bar = GTK_PROGRESS ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROGRESS_BAR_BOX_PROGRESS_BAR)); } return progress_bar; } GtkButton * gw_progress_bar_box_get_ok_cancel_button ( GtkWindow *w) { GtkButton *button = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { button = GTK_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROGRESS_BAR_BOX_OK_CANCEL_BUTTON)); } return button; } gboolean gw_progress_bar_box_get_iscancel_state ( GtkWindow *w) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL) { if ( gw_progress_bar_box_get_state ( w) == STATE_CANCEL ) { result = TRUE; } } return result; } gboolean gw_progress_bar_box_get_isok_state ( GtkWindow *w) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL) { if ( gw_progress_bar_box_get_state ( w) == STATE_OK ) { result = TRUE; } } return result; } gchar * gw_progress_bar_box_get_text ( GtkWindow *w) { GtkLabel *label = NULL; gchar *text = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (label = GTK_LABEL ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROGRESS_BAR_BOX_TEXT_INFO_LABEL))) != NULL ) { gtk_label_get ( label, &text); g_strdup_from_gtk_text ( text, text_utf8); } } return text_utf8; } gint gw_progress_bar_box_get_state ( GtkWindow *w) { gint state = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { state = GPOINTER_TO_INT ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROGRESS_BAR_BOX_OK_CANCEL_BUTTON_STATE)); } return state; } gfloat gw_progress_bar_box_get_value ( GtkWindow *w) { GtkProgress *progress_bar = NULL; gfloat value = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (progress_bar = gw_progress_bar_box_get_progress_bar ( w)) != NULL ) { value = gtk_progress_get_value ( progress_bar); } } return value; } gfloat gw_progress_bar_box_get_percentage ( GtkWindow *w) { GtkProgress *progress_bar = NULL; gfloat percentage = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (progress_bar = gw_progress_bar_box_get_progress_bar ( w)) != NULL ) { percentage = gtk_progress_get_current_percentage ( progress_bar); } } return percentage; } gint gw_progress_bar_box_set_value ( GtkWindow *w, gfloat value) { GtkProgress *progress_bar = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : new value is %g\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, value); #endif if ( w != NULL ) { if ( (progress_bar = gw_progress_bar_box_get_progress_bar ( w)) != NULL ) { gtk_progress_set_value ( progress_bar, value); result = 0; } } return result; } gint gw_progress_bar_box_add_value ( GtkWindow *w, gfloat value) { GtkProgress *progress_bar = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (progress_bar = gw_progress_bar_box_get_progress_bar ( w)) != NULL ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : new value is %e => %e\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, gtk_progress_get_value ( progress_bar) + value, gw_progress_bar_box_get_percentage ( w)); #endif gtk_progress_set_value ( progress_bar, gtk_progress_get_value ( progress_bar) + value); result = 0; } } return result; } gint gw_progress_bar_box_set_percentage ( GtkWindow *w, gfloat percentage) { GtkProgress *progress_bar = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (progress_bar = gw_progress_bar_box_get_progress_bar ( w)) != NULL ) { gtk_progress_set_percentage ( progress_bar, percentage); result = 0; } } return result; } gint gw_progress_bar_box_set_text ( GtkWindow *w, gchar *file_name) { GtkLabel *label = NULL; gchar *text_utf8 = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (label = GTK_LABEL ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROGRESS_BAR_BOX_TEXT_INFO_LABEL))) != NULL ) { g_strdup_to_gtk_text ( file_name, text_utf8); gtk_label_set_text ( label, text_utf8); g_free ( text_utf8); } result = 0; } return result; } gint gw_progress_bar_box_set_state ( GtkWindow *w, gint state) { gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { gtk_object_set_data ( GTK_OBJECT ( w), GW_REF_PROGRESS_BAR_BOX_OK_CANCEL_BUTTON_STATE, GINT_TO_POINTER ( state)); result = 0; } return result; } gint gw_progress_bar_box_set_ok_state ( GtkWindow *w) { GtkButton *bt = NULL; GtkAccelGroup *accel = NULL; guint button_key; gint result = -1; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { bt = gw_progress_bar_box_get_ok_cancel_button ( w); if ( bt != NULL ) { /* Inits new accel group for keystroke shortcuts */ accel = gtk_accel_group_new ( ); g_strdup_to_gtk_text ( _( "_Ok"), text_utf8); button_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( GTK_WIDGET ( bt), "clicked", accel, button_key, GDK_MOD1_MASK, 0); gtk_window_add_accel_group ( w, accel); gw_progress_bar_box_set_state ( w, STATE_OK); #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : button state is updated to ok\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif result = 0; } else { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : cannot update button state\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif result = -1; } } return result; } gint gw_progress_bar_box_set_cancel_state ( GtkWindow *w) { GtkButton *bt = NULL; GtkAccelGroup *accel = NULL; guint button_key; gint result = -1; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { bt = gw_progress_bar_box_get_ok_cancel_button ( w); if ( bt != NULL ) { /* Inits new accel groups for keystroke shortcuts */ accel = gtk_accel_group_new ( ); g_strdup_to_gtk_text ( _( "_Cancel"), text_utf8); button_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( bt)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( GTK_WIDGET ( bt), "clicked", accel, button_key, GDK_MOD1_MASK, 0); gtk_window_add_accel_group ( w, accel); gw_progress_bar_box_set_state ( w, STATE_CANCEL); #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : button state is updated to cancel\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif result = 0; } else { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : cannot update button state\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif result = -1; } } return result; } gboolean gw_progress_bar_box_ok_cancel_click ( GtkWidget *bt, GtkWindow *w) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( gw_progress_bar_box_get_isok_state ( w) ) { gw_progress_bar_box_ok_click ( bt, w); result = TRUE; } else { if ( gw_progress_bar_box_get_iscancel_state ( w) ) { gw_progress_bar_box_cancel_click ( bt, w); result = TRUE; } else { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : unknown state\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* If they're no state */ result = FALSE; }} } return result; } gboolean gw_progress_bar_box_ok_click ( GtkWidget *bt, GtkWindow *w) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return result; } gboolean gw_progress_bar_box_cancel_click ( GtkWidget *bt, GtkWindow *w) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return result; } gboolean gw_progress_bar_box_destroy ( GtkObject *w, gpointer *p) { gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return result; } gboolean gw_progress_bar_box_signal_do_nothing ( GtkObject *ob, gpointer p) { gboolean result = TRUE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return result; } gwhere-0.2.3/src/gui/gwprogressbarbox.h0000744000175000017500000002723110023202520016553 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef GW_GUI_PROGRESS_BAR_BOX_H #define GW_GUI_PROGRESS_BAR_BOX_H /*! * @header gwprogressbarbox.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* This is a dialog box window with a progress bar. It's usefull to indicate progress state of a process.
* @abstract This is a GUI component. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwprogressbarbox.c * @author Author */ /*! @define STATE_OK The ok state */ #define STATE_OK 1 /*! @define STATE_CANCEL The cancel state */ #define STATE_CANCEL 2 /*! * @typedef func_stop_progress_t * Specifies the type of the value stop function passed to * gw_progress_bar_box_create(). The function stop the progress * represented by the progress bar box. * @abstract Functions specification * @param ob the invoker * @param p the information structure which manage process */ typedef gboolean (*func_stop_progress_t)(GtkObject *ob, gpointer p); /*! * @function gw_progress_bar_box_create * @abstract Creates the progress bar box window. * @discussion This function creates the progress bar box window. If stop * is NULL the default function is * gw_progress_bar_box_ok_cancel_click().
* Doesn't show the progress bar when max is 0. * @param window parent window * @param title the window title * @param subject the window subject * @param text the message to display * @param max the maximum value of the progress bar * @param stop function to stop progress * @param p data to use with callbacks * @result the message box window.
* Returns NULL when an error occured. */ GtkWindow * gw_progress_bar_box_create ( GtkWindow *window, gchar *title, gchar *subject, gchar *text, gfloat max, func_stop_progress_t stop, gpointer p); /*! * @function gw_progress_bar_box_get_parent_window * @abstract Gets the parent window. * @discussion This function gets the parent window. * @param w the progress bar box window to get parent window * @result The parent window of the progress bar.
* Returns NULL when an error occured. */ GtkWindow * gw_progress_bar_box_get_parent_window ( GtkWindow *w); /*! * @function gw_progress_bar_box_get_progress_bar * @abstract Gets the real progress bar. * @discussion This function gets the real progress bar. * @param w the progress bar box window to get the real progress bar * @result The real progress bar.
* Returns NULL when an error occured. */ GtkProgress * gw_progress_bar_box_get_progress_bar ( GtkWindow *w); /*! * @function gw_progress_bar_box_get_ok_cancel_button * @abstract Gets the ok/cancel button. * @discussion This function gets the ok/cancel button. * @param w the progress bar box window to get the ok/cancel button * @result The ok/cancel button.
* Returns NULL when an error occured. */ GtkButton * gw_progress_bar_box_get_ok_cancel_button ( GtkWindow *w); /*! * @function gw_progress_bar_box_get_iscancel_state * @abstract Checks if Ok/Cancel button is in "Cancel mode". * @discussion This function checks if Ok/Cancel button is in "Cancel mode".
* @param w the progress bar box * @result is in "Cancel mode".
* Returns FALSE when an error occured. */ gboolean gw_progress_bar_box_get_iscancel_state ( GtkWindow *w); /*! * @function gw_progress_bar_box_get_isok_state * @abstract Checks if Ok/Cancel button is in "Ok mode". * @discussion This function checks if Ok/Cancel button is in "Ok mode".
* @param w the progress bar box * @result is in "Ok mode".
* Returns FALSE when an error occured. */ gboolean gw_progress_bar_box_get_isok_state ( GtkWindow *w); /*! * @function gw_progress_bar_box_get_text * @abstract Gets the text of the progress bar. * @discussion This function gets the text of the progress bar. * @param w the progress bar box window to get text * @result The text of the progress bar. Must be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_progress_bar_box_get_text ( GtkWindow *w); /*! * @function gw_progress_bar_box_get_state * @abstract Gets the state of the progress bar. * @discussion This function gets the state of the progress bar. * @param w the progress bar box window to get text * @result The state of the progress bar. It could be STATE_OK or STATE_CANCEL.
* Returns -1 when an error occured. */ gint gw_progress_bar_box_get_state ( GtkWindow *w); /*! * @function gw_progress_bar_box_get_value * @abstract Gets the value of the progress bar. * @discussion This function gets the value of the progress bar. * @param w the progress bar box window to get value * @result The value of the progress bar.
* Returns -1 when an error occured. */ gfloat gw_progress_bar_box_get_value ( GtkWindow *w); /*! * @function gw_progress_bar_box_get_percentage * @abstract Gets the percentage of the progress bar. * @discussion This function gets the percentage of the progress bar. * @param w the progress bar box window to get percentage * @result The percentage of the progress bar.
* Returns -1 when an error occured. */ gfloat gw_progress_bar_box_get_percentage ( GtkWindow *w); /*! * @function gw_progress_bar_box_set_value * @abstract Sets a value to the progress bar. * @discussion This function sets a value to the progress bar. * @param w the progress bar box window * @param value the value to set * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_progress_bar_box_set_value ( GtkWindow *w, gfloat value); /*! * @function gw_progress_bar_box_add_value * @abstract Add a value to current statment of the progress bar. * @discussion This function adds a value to current statment of the progress bar. * @param w the progress bar box window * @param value the value to set * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_progress_bar_box_add_value ( GtkWindow *w, gfloat value); /*! * @function gw_progress_bar_box_set_percentage * @abstract Sets a percentage to the progress bar. * @discussion This function sets a percentage to the progress bar. * @param w the progress bar box window * @param percentage the percentage to set * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_progress_bar_box_set_percentage ( GtkWindow *w, gfloat percentage); /*! * @function gw_progress_bar_box_set_text * @abstract Sets a text to the progress bar box. * @discussion This function sets a text to the progress bar box. * @param w the progress bar box window * @param text the text to set * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_progress_bar_box_set_text ( GtkWindow *w, gchar *file_name); /*! * @function gw_progress_bar_box_set_state * @abstract Sets the state of the progress bar box. * @discussion This function sets the state of the progress bar box. * @param w the progress bar box window * @param state the state of progress bar (STATE_OK or STATE_CANCEL) * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_progress_bar_box_set_state ( GtkWindow *w, gint state); /*! * @function gw_progress_bar_box_set_ok_state * @abstract Sets Ok/Cancel button in Ok mode. * @discussion This function sets in "Ok mode" the Ok/Cancel button.
* @param w the progress bar box * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_progress_bar_box_set_ok_state ( GtkWindow *w); /*! * @function gw_progress_bar_box_set_cancel_state * @abstract Sets Ok/Cancel button in Cancel mode. * @discussion This function sets in "Cancel mode" the Ok/Cancel button.
* @param w the progress bar box * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_progress_bar_box_set_cancel_state ( GtkWindow *w); /*! * @function gw_progress_bar_box_ok_cancel_click * @abstract Do Ok or Cancel for the progress bar box. * @discussion This function execute the ok or cancel function for * the progress bar box.
* This function call when the user click on ok/cancel * button.
* @param w the progress bar box * @result an error code.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_progress_bar_box_ok_cancel_click ( GtkWidget *bt, GtkWindow *w); /*! * @function gw_progress_bar_box_ok_click * @abstract Ok the progress bar box. * @discussion This function oks the progress bar box. This is the * default ok callback function.
* This function call when the user click on ok button, * but doesn't do nothing.
* @param w the progress bar box * @result an error code.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_progress_bar_box_ok_click ( GtkWidget *bt, GtkWindow *w); /*! * @function gw_progress_bar_box_cancel_click * @abstract Cancels the progress bar box. * @discussion This function cancels the progress bar box. this is * the default cancel callback function.
* This function call when the user click on cancel button, * but doesn't do nothing.
* @param w the progress bar box * @result an error code.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_progress_bar_box_cancel_click ( GtkWidget *bt, GtkWindow *w); /*! * @function gw_progress_bar_box_destroy * @abstract Destroys the progress bar box window. * @discussion This function destroys the progress bar box window.
* Warning : today this function doesn't do nothing. * Before implements this function, must to change the * signals connexions in gw_progress_bar_box_create(). * @param w the object invoker * @param p a pointer (free today) * @result Return TRUE when it's done.
* Returns FALSE when an error occured */ gboolean gw_progress_bar_box_destroy ( GtkObject *w, gpointer *p); /*! * @function gw_progress_bar_box_dignal_do_nothing * @abstract Does nothing. * @discussion This function doesn't do anything. It's must be connect * to a signal to cancel it. * @param ob the object invoker * @param p a pointer (free today) * @result Return TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_progress_bar_box_signal_do_nothing ( GtkObject *ob, gpointer p); #endif gwhere-0.2.3/src/gui/gwpropertiesbox.c0000744000175000017500000023766610243232213016436 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwpropertiesbox.h" #include #include /* strlen */ #include "tools/gwtools.h" #include "res/gwres.h" #include "gtktextarea.h" #include "gwpropertiesboxcallback.h" #include "gwcomboboxcategories.h" #include "../gwapplicationmanager.h" #include "../gwpluginsmanager.h" #include "../gwhelper.h" /*! @define GW_REF_PROPERTIES_BOX_PARENT_WINDOW The parent window reference */ #define GW_REF_PROPERTIES_BOX_PARENT_WINDOW "gw_ref_gw_properties_box_parent_window" /*! @define GW_REF_PROPERTIES_BOX_CATALOG_NAME_ENTRY The catalog name entry */ #define GW_REF_PROPERTIES_BOX_CATALOG_NAME_ENTRY "gw_ref_gw_properties_box_catalog_name_entry" /*! @define GW_REF_PROPERTIES_BOX_CATALOG_NAME_TOOLTIPS The catalog name tooltips */ #define GW_REF_PROPERTIES_BOX_CATALOG_NAME_TOOLTIPS "gw_ref_gw_properties_box_catalog_name_tooltips" /*! @define GW_REF_PROPERTIES_BOX_CATALOG_CATEGORIES_CMB_BOX The catalog categories combo box */ #define GW_REF_PROPERTIES_BOX_CATALOG_CATEGORIES_CMB_BOX "gw_ref_gw_properties_box_catalog_categories_cmb_box" /*! @define GW_REF_PROPERTIES_BOX_CATALOG_DESCRIPTION_TEXT The catalog description text */ #define GW_REF_PROPERTIES_BOX_CATALOG_DESCRIPTION_TEXT "gw_ref_gw_properties_box_catalog_description_text" /*! @define GW_REF_PROPERTIES_BOX_DISK_NAME_ENTRY The disk name entry */ #define GW_REF_PROPERTIES_BOX_DISK_NAME_ENTRY "gw_ref_gw_properties_box_disk_name_entry" /*! @define GW_REF_PROPERTIES_BOX_DISK_NAME_TOOLTIPS The disk name tooltips */ #define GW_REF_PROPERTIES_BOX_DISK_NAME_TOOLTIPS "gw_ref_gw_properties_box_disk_name_tooltips" /*! @define GW_REF_PROPERTIES_BOX_DISK_NUMBER_ARCHIVE_ENTRY The disk number archive entry */ #define GW_REF_PROPERTIES_BOX_DISK_NUMBER_ARCHIVE_ENTRY "gw_ref_gw_properties_box_disk_number_archive_entry" /*! @define GW_REF_PROPERTIES_BOX_DISK_NUMBER_ARCHIVE_TOOLTIPS The disk number archive tooltips */ #define GW_REF_PROPERTIES_BOX_DISK_NUMBER_ARCHIVE_TOOLTIPS "gw_ref_gw_properties_box_disk_number_archive_tooltips" /*! @define GW_REF_PROPERTIES_BOX_DISK_CATEGORIES_CMB_BOX The disk categories combo box */ #define GW_REF_PROPERTIES_BOX_DISK_CATEGORIES_CMB_BOX "gw_ref_gw_properties_box_disk_categories_cmb_box" /*! @define GW_REF_PROPERTIES_BOX_DISK_DESCRIPTION_TEXT The disk description text */ #define GW_REF_PROPERTIES_BOX_DISK_DESCRIPTION_TEXT "gw_ref_gw_properties_box_disk_description_text" /*! @define GW_REF_PROPERTIES_BOX_FOLDER_CATEGORIES_CMB_BOX The folder categories combo box */ #define GW_REF_PROPERTIES_BOX_FOLDER_CATEGORIES_CMB_BOX "gw_ref_gw_properties_box_folder_categories_cmb_box" /*! @define GW_REF_PROPERTIES_BOX_FOLDER_DESCRIPTION_TEXT The folder description text */ #define GW_REF_PROPERTIES_BOX_FOLDER_DESCRIPTION_TEXT "gw_ref_gw_properties_box_folder_description_text" /*! @define GW_REF_PROPERTIES_BOX_FILE_CATEGORIES_CMB_BOX The file categories combo box */ #define GW_REF_PROPERTIES_BOX_FILE_CATEGORIES_CMB_BOX "gw_ref_gw_properties_box_file_categories_cmb_box" /*! @define GW_REF_PROPERTIES_BOX_FILE_DESCRIPTION_TEXT The file description text */ #define GW_REF_PROPERTIES_BOX_FILE_DESCRIPTION_TEXT "gw_ref_gw_properties_box_file_description_text" /* I don't like globals variables, but how to take another way? */ GtkCTree *ctree_properties = NULL; GtkCTreeNode *node_properties = NULL; GWDBFile *file_properties = NULL; GtkWidget * gw_properties_box_create ( GtkWindow *window, GtkCTree *ctree, GtkCTreeNode *node, gint what, GWDBFile *file) { /* This is a single window, this properties may be changed */ static GtkWidget *w = NULL; GtkWidget *vb_properties; GtkWidget *notebook_properties; GtkWidget *hb_buttons; GtkWidget *button; guint button_key; GtkAccelGroup *accel = NULL; gchar *text_utf8 = NULL; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; GWDBDisk *disk = NULL; GWDBFile *folder = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Inits an accel group for keystroke shortcuts */ accel = gtk_accel_group_new ( ); if ( !w && context != NULL ) { plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); catalog = plugin->gw_db_catalog_get_db_catalog ( context); w = gtk_window_new ( GTK_WINDOW_TOPLEVEL); gtk_window_set_modal ( GTK_WINDOW ( w), TRUE); gtk_window_set_transient_for ( GTK_WINDOW ( w), window); gtk_window_set_position ( GTK_WINDOW ( w), GTK_WIN_POS_CENTER); g_strdup_to_gtk_text ( _( "Properties"), text_utf8); gtk_window_set_title ( GTK_WINDOW ( w), text_utf8); g_free ( text_utf8); gtk_container_set_border_width ( GTK_CONTAINER ( w), 5); /* Store parent window reference */ gtk_widget_ref ( w); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_PARENT_WINDOW, window, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( w), "destroy", GTK_SIGNAL_FUNC (gtk_widget_destroyed), &w); vb_properties = gtk_vbox_new ( FALSE, 0); gtk_container_add ( GTK_CONTAINER ( w), vb_properties); notebook_properties = gtk_notebook_new ( ); gtk_container_set_border_width ( GTK_CONTAINER ( notebook_properties), 5); gtk_box_pack_start ( GTK_BOX ( vb_properties), notebook_properties, TRUE, TRUE, 0); /* Creates tabbed panes switch of properties box kind */ switch ( what) { case GW_PROPERTIES_TYPE_CATALOG : ctree_properties = ctree; node_properties = node; gw_properties_box_create_notebook_panel_catalog_info ( GTK_WINDOW ( w), GTK_NOTEBOOK ( notebook_properties), ctree, node, catalog); break; case GW_PROPERTIES_TYPE_DISK : ctree_properties = ctree; node_properties = node; // gtk_ctree_node_get_pixtext ( ctree, GTK_CTREE_ROW ( node)->parent, 0, &name, &spc, &pxmp, &btmp); disk = plugin->gw_db_catalog_get_db_disk ( context, gtk_ctree_node_get_row_data ( ctree, node)); gw_properties_box_create_notebook_panel_disk_info ( GTK_WINDOW ( w), GTK_NOTEBOOK ( notebook_properties), ctree, node, catalog, disk); gw_properties_box_create_notebook_panel_catalog_info ( GTK_WINDOW ( w), GTK_NOTEBOOK ( notebook_properties), ctree, GTK_CTREE_ROW ( node)->parent, catalog); gw_db_disk_free ( disk); break; case GW_PROPERTIES_TYPE_FOLDER : ctree_properties = ctree; node_properties = node; // gtk_ctree_node_get_pixtext ( ctree, gw_folder_get_catalog ( ctree, node), 0, &name, &spc, &pxmp, &btmp); disk = plugin->gw_db_file_get_db_disk ( context, gtk_ctree_node_get_row_data ( ctree, node)); folder = plugin->gw_db_catalog_get_db_file ( context, gtk_ctree_node_get_row_data ( ctree, node)); gw_properties_box_create_notebook_panel_folder_info ( GTK_WINDOW ( w), GTK_NOTEBOOK ( notebook_properties), catalog, disk, folder); gw_properties_box_create_notebook_panel_disk_info ( GTK_WINDOW ( w), GTK_NOTEBOOK ( notebook_properties), ctree, gw_folder_get_disk ( ctree, node), catalog, disk); gw_properties_box_create_notebook_panel_catalog_info ( GTK_WINDOW ( w), GTK_NOTEBOOK ( notebook_properties), ctree, gw_folder_get_catalog ( ctree, node), catalog); gw_db_disk_free ( disk); gw_db_file_free ( folder); break; case GW_PROPERTIES_TYPE_FILE : ctree_properties = ctree; node_properties = node; file_properties = file; gw_properties_box_create_notebook_panel_file_info ( GTK_WINDOW ( w), GTK_NOTEBOOK ( notebook_properties), ctree, node, gtk_ctree_node_get_row_data ( ctree, gw_folder_get_catalog ( ctree, node)), file); if ( GTK_CTREE_ROW ( GTK_CTREE_ROW ( node)->parent)->parent != NULL ) { /* If file is not in the disk root */ // gtk_ctree_node_get_pixtext ( ctree, gw_folder_get_catalog ( ctree, node), 0, &name, &spc, &pxmp, &btmp); disk = plugin->gw_db_file_get_db_disk ( context, gtk_ctree_node_get_row_data ( ctree, node)); folder = plugin->gw_db_catalog_get_db_file ( context, gtk_ctree_node_get_row_data ( ctree, node)); gw_properties_box_create_notebook_panel_folder_info ( GTK_WINDOW ( w), GTK_NOTEBOOK ( notebook_properties), catalog, disk, folder); gw_properties_box_create_notebook_panel_disk_info ( GTK_WINDOW ( w), GTK_NOTEBOOK ( notebook_properties), ctree, gw_folder_get_disk ( ctree, node), catalog, disk); gw_properties_box_create_notebook_panel_catalog_info ( GTK_WINDOW ( w), GTK_NOTEBOOK ( notebook_properties), ctree, gw_folder_get_catalog ( ctree, node), catalog); gw_db_disk_free ( disk); gw_db_file_free ( folder); } else { /* Else if the file is in disk root */ // gtk_ctree_node_get_pixtext ( ctree, GTK_CTREE_ROW ( node)->parent, 0, &name, &spc, &pxmp, &btmp); disk = plugin->gw_db_catalog_get_db_disk ( context, gtk_ctree_node_get_row_data ( ctree, node)); gw_properties_box_create_notebook_panel_disk_info ( GTK_WINDOW ( w), GTK_NOTEBOOK ( notebook_properties), ctree, node, catalog, disk); gw_properties_box_create_notebook_panel_catalog_info ( GTK_WINDOW ( w), GTK_NOTEBOOK ( notebook_properties), ctree, gw_folder_get_catalog ( ctree, node), catalog); gw_db_disk_free ( disk); } break; default : break; } /* The OK/Cancel button area */ hb_buttons = gtk_hbutton_box_new ( ); gtk_button_box_set_layout ( GTK_BUTTON_BOX ( hb_buttons), GTK_BUTTONBOX_END); gtk_button_box_set_spacing ( GTK_BUTTON_BOX ( hb_buttons), 5); gtk_box_pack_end ( GTK_BOX ( vb_properties), hb_buttons, FALSE, FALSE, 0); button = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_OK"), text_utf8); button_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( button)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( button, "clicked", accel, button_key, GDK_MOD1_MASK, 0); gtk_object_set_user_data ( GTK_OBJECT ( button), w); gtk_box_pack_start ( GTK_BOX ( hb_buttons), button, TRUE, TRUE, 0); GTK_WIDGET_SET_FLAGS ( button, GTK_CAN_FOCUS); GTK_WIDGET_SET_FLAGS ( button, GTK_CAN_DEFAULT); gtk_widget_grab_default ( button); switch ( what) { case GW_PROPERTIES_TYPE_CATALOG : gtk_signal_connect ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( gw_properties_box_catalog_ok), w); break; case GW_PROPERTIES_TYPE_DISK : gtk_signal_connect ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( gw_properties_box_disk_ok), w); break; case GW_PROPERTIES_TYPE_FOLDER : gtk_signal_connect ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( gw_properties_box_folder_ok), w); break; case GW_PROPERTIES_TYPE_FILE : gtk_signal_connect ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( gw_properties_box_file_ok), w); break; default : break; } button = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Cancel"), text_utf8); button_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( button)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( button, "clicked", accel, button_key, GDK_MOD1_MASK, 0); gtk_object_set_user_data ( GTK_OBJECT ( button), w); gtk_box_pack_start ( GTK_BOX ( hb_buttons), button, TRUE, TRUE, 0); gtk_signal_connect_object ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w)); GTK_WIDGET_SET_FLAGS ( button, GTK_CAN_FOCUS); gtk_window_add_accel_group ( GTK_WINDOW ( w), accel); gw_db_catalog_free ( catalog); } if ( !GTK_WIDGET_VISIBLE ( w) ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : show the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_show_all ( w); } else { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : destroy the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_destroy ( w); } return w; } GtkWidget * gw_properties_box_create_catalog ( GtkMenuItem *m, GtkWindow *win, GtkCTree *ctree, GtkCTreeNode *node) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return gw_properties_box_create ( win, ctree, node, GW_PROPERTIES_TYPE_CATALOG, NULL); } GtkWidget * gw_properties_box_create_disk ( GtkMenuItem *m, GtkWindow *win, GtkCTree *ctree, GtkCTreeNode *node) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return gw_properties_box_create ( win, ctree, node, GW_PROPERTIES_TYPE_DISK, NULL); } GtkWidget * gw_properties_box_create_folder ( GtkMenuItem *m, GtkWindow *win, GtkCTree *ctree, GtkCTreeNode *node) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return gw_properties_box_create ( win, ctree, node, GW_PROPERTIES_TYPE_FOLDER, NULL); } GtkWidget * gw_properties_box_create_file ( GtkMenuItem *m, GtkWindow *win, GtkCTree *ctree, GtkCTreeNode *node, GWDBFile *file) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return gw_properties_box_create ( win, ctree, node, GW_PROPERTIES_TYPE_FILE, file); } GtkNotebook * gw_properties_box_create_notebook_panel_catalog_info ( GtkWindow *w, GtkNotebook *parent, GtkCTree *ctree, GtkCTreeNode *node, GWDBCatalog *catalog) { GtkWidget *vb_tabbed_pane; /* Vertical box of the tabbed pane */ GtkWidget *hb_1; /* 1st horizontal box */ GtkWidget *hb_2; /* 2nd horizontal box */ GtkWidget *hb_3; /* 3th horizontal box */ GtkWidget *vb_2_1; /* 1st vertical box of 2nd horizontal box*/ GtkWidget *vb_2_2; /* 2nd vertival box of 2nd horizontal box */ GtkWidget *vb_3_1; /* 1st vertical box of 3th horizontal box */ GtkWidget *vb_3_2; /* 2nd vertical box of 3th horizontal box */ GtkWidget *pix_ico_catalog; /* catalog icon */ GtkWidget *hb_empty; /* horizontal box (used for empty box) */ GtkWidget *lbl; /* label */ GtkWidget *entry; /* entry (filled area) */ GtkWidget *hseparator; /* horizontal separator */ GtkWidget *scrolled_area; /* scrolled window for text area */ GtkWidget *text_area; /* text area */ GtkHBox *cmb_categories; /* Categories combo box */ GtkTooltips *grp_tooltips; gchar *text = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Inits tooltips group */ grp_tooltips = gtk_tooltips_new ( ); /* Vertical box of the tabbed pane */ vb_tabbed_pane = gtk_vbox_new ( FALSE, 5); gtk_container_set_border_width ( GTK_CONTAINER ( vb_tabbed_pane), 10); gtk_container_add ( GTK_CONTAINER ( parent), vb_tabbed_pane); /* 1st horizontal box */ hb_1 = gtk_hbox_new ( FALSE, 5); gtk_container_set_border_width ( GTK_CONTAINER ( hb_1), 5); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_1, FALSE, FALSE, 0); /* Catalog icon */ pix_ico_catalog = gtk_pixmap_new ( PixCatalog, MskCatalog); gtk_box_pack_start ( GTK_BOX ( hb_1), pix_ico_catalog, FALSE, TRUE, 10); /* Filled area of catalog name */ entry = gtk_entry_new ( ); g_strdup_to_gtk_text ( gw_db_catalog_get_name ( catalog), text_utf8); gtk_entry_set_text ( GTK_ENTRY ( entry), text_utf8); g_free ( text_utf8); gtk_widget_ref ( entry); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_CATALOG_NAME_ENTRY, entry, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_1), entry, FALSE, TRUE, 0); g_strdup_to_gtk_text ( _( "Enter the name of the catalog."), text_utf8); gtk_tooltips_set_tip ( grp_tooltips, entry, text_utf8, GW_REF_PROPERTIES_BOX_CATALOG_NAME_TOOLTIPS); g_free ( text_utf8); /* Empty horizontal box */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( hb_1), hb_empty, TRUE, TRUE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* 2nd horizontal box*/ hb_2 = gtk_hbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_2, FALSE, FALSE, 0); /* 1st vertical box of 2nd horizontal box */ vb_2_1 = gtk_vbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( hb_2), vb_2_1, TRUE, TRUE, 0); /* Horizontal box for catalog file version */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* Catalog file version label */ g_strdup_to_gtk_text ( _( "Version : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strconcat ( _( "Version "), gw_db_catalog_get_version ( catalog), _( " built with "), gw_db_catalog_get_program_builder ( catalog), NULL); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for number of disks */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* Number of disks label */ g_strdup_to_gtk_text ( _("Disks in catalog : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "Disks in catalog : %d"), ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_nb_db_disks ( gw_am_get_current_catalog_context ( ))); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for total number of files */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* Total number of files label */ g_strdup_to_gtk_text ( _( "Total Files : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "Total Files : %ld"), ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_nb_db_files ( gw_am_get_current_catalog_context ( ))); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for total number of folders */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* Total number of files label */ g_strdup_to_gtk_text ( _( "Total Folders : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "Total Folders : %ld"), ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_nb_db_folders ( gw_am_get_current_catalog_context ( ))); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* 2nd vertical box of the 2nd horizontal box */ vb_2_2 = gtk_vbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( hb_2), vb_2_2, TRUE, TRUE, 0); /* Horizontal box for catalog size */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* Catalog size label */ g_strdup_to_gtk_text ( _( "File Size : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text_utf8 = NULL; text = g_strconcat ( _( "File Size : "), (text_utf8 = gw_ul_byte_to_str_format ( gw_db_catalog_get_size ( catalog))), NULL); if ( text_utf8 != NULL ) { g_free ( text_utf8); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for total capacity of catalog */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* Total capacity of catalog label */ g_strdup_to_gtk_text ( _( "Total Storage Space : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text_utf8 = NULL; text = g_strconcat ( _( "Total Storage Space : "), (text_utf8 = gw_ld_byte_to_str_format ( ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_capacity ( gw_am_get_current_catalog_context ( )))), NULL); if ( text_utf8 != NULL ) { g_free ( text_utf8); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for used space of catalog */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* Used space of catalog label */ g_strdup_to_gtk_text ( _( "Total Used Space : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text_utf8 = NULL; text = g_strconcat ( _( "Total Used Space : "), (text_utf8 = gw_ld_byte_to_str_format ( ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_full ( gw_am_get_current_catalog_context ( )))), NULL); if ( text_utf8 != NULL ) { g_free ( text_utf8); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Boite horizontale pour l'espace libre du catalogue */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* Free space of catalog label */ g_strdup_to_gtk_text ( _( "Total Free Space : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text_utf8 = NULL; text = g_strconcat ( _( "Total Free Space : "), (text_utf8 = gw_ld_byte_to_str_format ( ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_catalog_get_free ( gw_am_get_current_catalog_context ( )))), NULL); if ( text_utf8 != NULL ) { g_free ( text_utf8); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* Horizontal box for statistics */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_empty, FALSE, FALSE, 0); /* Statistics label */ lbl = gtk_label_new ( _( "Disk Statistics : ")); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* 3th horizontal box */ hb_3 = gtk_hbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_3, FALSE, FALSE, 0); /* 1st vertical box of the 3th horizontal box */ vb_3_1 = gtk_vbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( hb_3), vb_3_1, TRUE, TRUE, 0); /* Horizontal box for CD-Roms statistics */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_3_1), hb_empty, TRUE, TRUE, 0); /* CD-Roms statistics label */ g_strdup_to_gtk_text ( _( "CD-Rom : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "CD-Rom : %d"), gw_helper_db_catalog_get_nb_db_disk_of_type ( gw_am_get_current_catalog_context ( ), CDROM)); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for Audio CD statistics */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_3_1), hb_empty, TRUE, TRUE, 0); /* Audio CD statistics label */ g_strdup_to_gtk_text ( _( "Audio CD : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "Audio CD : %d"), gw_helper_db_catalog_get_nb_db_disk_of_type ( gw_am_get_current_catalog_context ( ), AUDIOCD)); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for HDs statistics */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_3_1), hb_empty, TRUE, TRUE, 0); /* HDs statistics label */ g_strdup_to_gtk_text ( _( "HD : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "HD : %d"), gw_helper_db_catalog_get_nb_db_disk_of_type ( gw_am_get_current_catalog_context ( ), HD)); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for floppies statistics */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_3_1), hb_empty, TRUE, TRUE, 0); /* Floppies statistics label */ g_strdup_to_gtk_text ( _( "Floppy : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "Floppy : %d"), gw_helper_db_catalog_get_nb_db_disk_of_type ( gw_am_get_current_catalog_context ( ), FLOPPY)); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for Zips statistics */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_3_1), hb_empty, TRUE, TRUE, 0); /* Zips statistics label */ g_strdup_to_gtk_text ( _( "Zip : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "Zip : %d"), gw_helper_db_catalog_get_nb_db_disk_of_type ( gw_am_get_current_catalog_context ( ), ZIP_DRIVE)); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* 2nd vertical box of 3th horizontal box */ vb_3_2 = gtk_vbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( hb_3), vb_3_2, TRUE, TRUE, 0); /* Horizontal box for tapes statistics */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_3_2), hb_empty, TRUE, TRUE, 0); /* Tape drive statistics label */ g_strdup_to_gtk_text ( _( "Tape : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "Tape : %d"), gw_helper_db_catalog_get_nb_db_disk_of_type ( gw_am_get_current_catalog_context ( ), TAPE_DRIVE)); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for network statistics */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_3_2), hb_empty, TRUE, TRUE, 0); /* Network drive statistics label */ g_strdup_to_gtk_text ( _( "Network : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "Network : %d"), gw_helper_db_catalog_get_nb_db_disk_of_type ( gw_am_get_current_catalog_context ( ), NETWORK_DRIVE)); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for Jaz statistics */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_3_2), hb_empty, TRUE, TRUE, 0); /* Jaz statistics label */ g_strdup_to_gtk_text ( _( "Jaz : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "Jaz : %d"), gw_helper_db_catalog_get_nb_db_disk_of_type ( gw_am_get_current_catalog_context ( ), JAZ_DRIVE)); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for others media */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_3_2), hb_empty, TRUE, TRUE, 0); /* Others media statistics label */ g_strdup_to_gtk_text ( _( "Other : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "Other : %d"), gw_helper_db_catalog_get_nb_db_disk_of_type ( gw_am_get_current_catalog_context ( ), NONE)); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Empty horizontal box */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_3_2), hb_empty, TRUE, TRUE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* Combo box for categories list */ cmb_categories = gw_combo_box_categories_create ( w, _( "Catalog categories : "), catalog); gtk_widget_ref ( GTK_WIDGET ( cmb_categories)); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_CATALOG_CATEGORIES_CMB_BOX, GTK_WIDGET ( cmb_categories), (GtkDestroyNotify) gtk_widget_unref); gw_combo_box_categories_load ( cmb_categories); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), GTK_WIDGET ( cmb_categories), FALSE, FALSE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* Horizontal box for description */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_empty, FALSE, FALSE, 0); /* Title description label */ g_strdup_to_gtk_text ( _( "Catalog Description : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Text area scrollbar */ scrolled_area = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), scrolled_area, TRUE, TRUE, 0); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrolled_area), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); /* Text area for description */ text_area = gtk_text_area_new ( ); gtk_text_area_set_editable ( GTK_TEXT_AREA ( text_area), TRUE); if ( (text = gw_db_catalog_get_description ( catalog)) != NULL) { gtk_text_area_insert ( GTK_TEXT_AREA ( text_area), text); } gtk_widget_ref ( text_area); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_CATALOG_DESCRIPTION_TEXT, text_area, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( scrolled_area), text_area); /* Tabbed pane label */ hb_empty = gtk_hbox_new ( FALSE, 0); pix_ico_catalog = gtk_pixmap_new ( PixCatalog, MskCatalog); gtk_box_pack_start ( GTK_BOX ( hb_empty), pix_ico_catalog, FALSE, TRUE, 0); gtk_misc_set_padding ( GTK_MISC ( pix_ico_catalog), 3, 1); g_strdup_to_gtk_text ( _( "Catalog Info"), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, TRUE, 0); gtk_widget_show_all ( hb_empty); gtk_notebook_set_tab_label ( GTK_NOTEBOOK ( parent), vb_tabbed_pane, hb_empty); return parent; } GtkNotebook * gw_properties_box_create_notebook_panel_disk_info ( GtkWindow *w, GtkNotebook *parent, GtkCTree *ctree, GtkCTreeNode *node, GWDBCatalog *catalog, GWDBDisk *disk) { GtkWidget *vb_tabbed_pane; /* Vertical box of the tabbed pane */ GtkWidget *hb_1; /* 1st horizontal box */ GtkWidget *hb_2; /* 2nd horizontal box */ GtkWidget *vb_2_1; /* 1st vertical box of 2nd horizontal box*/ GtkWidget *vb_2_2; /* 2nd vertival box of 2nd horizontal box */ GtkWidget *pix_ico_disk; /* disk icon */ GtkWidget *hb_empty; /* horizontal box (used for empty box) */ GtkWidget *lbl; /* label */ GtkWidget *entry; /* entry (filled area) */ GtkWidget *hseparator; /* horizontal separator */ GtkWidget *scrolled_area; /* scrolled window for text area */ GtkWidget *text_area; /* text area */ GtkHBox *cmb_categories; /* Categories combo box */ GtkTooltips *grp_tooltips; gchar *text; GdkPixmap *pix; GdkBitmap *msk; gchar *text_utf8 = NULL; gchar *tmp_date = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif // disk = gtk_ctree_node_get_row_data ( ctree, node); pix = gw_helper_db_disk_get_pixmap ( disk); msk = gw_helper_db_disk_get_bitmap ( disk); /* Inits tooltips groups */ grp_tooltips = gtk_tooltips_new ( ); /* Vertical box of the tabbed pane */ vb_tabbed_pane = gtk_vbox_new ( FALSE, 5); gtk_container_set_border_width ( GTK_CONTAINER ( vb_tabbed_pane), 10); gtk_container_add ( GTK_CONTAINER ( parent), vb_tabbed_pane); /* 1st horizontal box */ hb_1 = gtk_hbox_new ( FALSE, 5); gtk_container_set_border_width ( GTK_CONTAINER ( hb_1), 5); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_1, FALSE, FALSE, 0); /* Disk icon */ pix_ico_disk = gtk_pixmap_new ( pix, msk); gtk_box_pack_start ( GTK_BOX ( hb_1), pix_ico_disk, FALSE, TRUE, 10); /* Filled area of disk name */ entry = gtk_entry_new ( ); g_strdup_to_gtk_text ( gw_db_disk_get_name ( disk), text_utf8); gtk_entry_set_text ( GTK_ENTRY ( entry), text_utf8); g_free ( text_utf8); gtk_widget_ref ( entry); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_DISK_NAME_ENTRY, entry, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_1), entry, FALSE, TRUE, 0); g_strdup_to_gtk_text ( _( "Enter the name of the disk."), text_utf8); gtk_tooltips_set_tip ( grp_tooltips, entry, text_utf8, GW_REF_PROPERTIES_BOX_DISK_NAME_TOOLTIPS); g_free ( text_utf8); /* Empty horizontal box */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( hb_1), hb_empty, TRUE, TRUE, 0); /* Horizontal box for number archive */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( hb_1), hb_empty, FALSE, TRUE, 0); /* Number archive label */ g_strdup_to_gtk_text ( _( "Archive N# : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, TRUE, 0); /* Filled area of number archive */ entry = gtk_entry_new ( ); text = g_strdup_printf ( "%d", gw_db_disk_get_num ( disk)); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_entry_set_text ( GTK_ENTRY ( entry), text_utf8); g_free ( text_utf8); gtk_widget_ref ( entry); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_DISK_NUMBER_ARCHIVE_ENTRY, entry, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_empty), entry, FALSE, TRUE, 0); gtk_widget_set_usize ( entry, 40, 20); g_strdup_to_gtk_text ( _( "Enter the archive number of the disk."), text_utf8); gtk_tooltips_set_tip ( grp_tooltips, entry, text_utf8, GW_REF_PROPERTIES_BOX_DISK_NUMBER_ARCHIVE_TOOLTIPS); g_free ( text_utf8); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* 2nd horizontal box */ hb_2 = gtk_hbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_2, FALSE, FALSE, 0); /* 1st vertical box of the 2nd horizontal box */ vb_2_1 = gtk_vbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( hb_2), vb_2_1, TRUE, TRUE, 0); /* Horizontal box for disk type */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, FALSE, 0); /* Disk type label */ g_strdup_to_gtk_text ( _(" Type : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strconcat ( _( "Type : "), gw_db_disk_get_fstype ( disk), NULL); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for disk serial number */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, FALSE, FALSE, 0); /* Disk serial number label */ g_strdup_to_gtk_text ( _( "Serial : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strconcat ( _( "Serial : "), gw_db_disk_get_serial ( disk), NULL); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for disk volume name */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, FALSE, FALSE, 0); /* Disk volume name label */ g_strdup_to_gtk_text ( _( "Volume Label : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strconcat ( _( "Volume Label : "), gw_db_disk_get_volume ( disk), NULL); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for total number of files of disk */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, FALSE, FALSE, 0); /* Total number of files of disk label */ g_strdup_to_gtk_text ( _( "Total Files : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "Total Files : %ld"), ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_disk_get_nb_db_files ( gw_am_get_current_catalog_context ( ), gw_db_disk_get_ref ( disk))); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for total number of folders of disk */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, FALSE, FALSE, 0); /* Total number of folders of disk label */ g_strdup_to_gtk_text ( _( "Total Folders : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strdup_printf ( _( "Total Folders : %ld"), ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_disk_get_nb_db_folders ( gw_am_get_current_catalog_context ( ), gw_db_disk_get_ref ( disk))); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* 2nd vertical box of the 2nd horizontal box */ vb_2_2 = gtk_vbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( hb_2), vb_2_2, TRUE, TRUE, 0); /* Horizontal box for total capacity of disk */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, FALSE, FALSE, 0); /* Total capacity of disk label */ g_strdup_to_gtk_text ( _( "Total Capacity : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text_utf8 = NULL; text = g_strconcat ( _( "Total Capacity : "), (text_utf8 = gw_ui64_byte_to_str_format ( gw_db_disk_get_capacity ( disk))), NULL); if ( text_utf8 != NULL ) { g_free ( text_utf8); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for used space of disk */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, FALSE, FALSE, 0); /* Used space of disk label */ g_strdup_to_gtk_text ( _( "Used Space : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text_utf8 = NULL; text = g_strconcat ( _( "Used Space : "), (text_utf8 = gw_ui64_byte_to_str_format ( gw_db_disk_get_full ( disk))), NULL); if ( text_utf8 != NULL ) { g_free ( text_utf8); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for free space of disk */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, FALSE, FALSE, 0); /* Free space of disk label */ g_strdup_to_gtk_text ( _( "Free Space : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text_utf8 = NULL; text = g_strconcat ( _( "Free Space : "), (text_utf8 = gw_ui64_byte_to_str_format ( gw_db_disk_get_free ( disk))), NULL); if ( text_utf8 != NULL ) { g_free ( text_utf8); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Empty horizontal box */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, FALSE, FALSE, 0); /* Empty horizontal box */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, FALSE, FALSE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* Horizontal box for catalog name */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_empty, FALSE, FALSE, 0); /* Catalog name label */ g_strdup_to_gtk_text ( _( "Catalog Name : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); if ( gw_db_catalog_get_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_name ( catalog))>0) { text = g_strconcat ( _( "Catalog Name : "), gw_db_catalog_get_name ( catalog), NULL); } else if ( gw_db_catalog_get_short_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_short_db_name ( catalog))>0) { text = g_strconcat ( _( "Catalog Name : "), gw_db_catalog_get_short_db_name ( catalog), NULL); } else { text = g_strconcat ( _( "Catalog Name : "), _( "none"), NULL); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for adding date of disk */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_empty, FALSE, FALSE, 0); /* Adding date label of disk */ g_strdup_to_gtk_text ( _( "Update in catalog : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); tmp_date = gw_helper_db_disk_get_date_to_str ( disk); text = g_strconcat ( _( "Update in catalog : "), tmp_date, NULL); g_free ( tmp_date); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* Combo box for categories list */ cmb_categories = gw_combo_box_categories_create ( w, _( "Category : "), catalog); gtk_widget_ref ( GTK_WIDGET ( cmb_categories)); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_DISK_CATEGORIES_CMB_BOX, GTK_WIDGET ( cmb_categories), (GtkDestroyNotify) gtk_widget_unref); gw_combo_box_categories_load ( cmb_categories); gw_combo_box_categories_set_selected_category ( cmb_categories, gw_db_disk_get_category ( disk)); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), GTK_WIDGET ( cmb_categories), FALSE, FALSE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* Horizontal box for description */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_empty, FALSE, FALSE, 0); /* Title description label */ g_strdup_to_gtk_text ( _( "Disk Description : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Text area scrollbar */ scrolled_area = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), scrolled_area, TRUE, TRUE, 0); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrolled_area), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); /* Text area for description */ text_area = gtk_text_area_new ( ); gtk_text_area_set_editable ( GTK_TEXT_AREA ( text_area), TRUE); if ( (text = gw_db_disk_get_description ( disk)) != NULL) { gtk_text_area_insert ( GTK_TEXT_AREA ( text_area), text); } gtk_widget_ref ( text_area); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_DISK_DESCRIPTION_TEXT, text_area, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( scrolled_area), text_area); /* Tabbed pane label */ hb_empty = gtk_hbox_new ( FALSE, 0); pix_ico_disk = gtk_pixmap_new ( pix, msk); gtk_box_pack_start ( GTK_BOX ( hb_empty), pix_ico_disk, FALSE, TRUE, 0); gtk_misc_set_padding ( GTK_MISC ( pix_ico_disk), 3, 1); g_strdup_to_gtk_text ( _( "Disk Info"), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, TRUE, 0); gtk_widget_show_all ( hb_empty); gtk_notebook_set_tab_label ( GTK_NOTEBOOK ( parent), vb_tabbed_pane, hb_empty); return parent; } //GtkNotebook * gw_properties_box_create_notebook_panel_folder_info ( GtkWindow *w, GtkNotebook *parent, GtkCTree *ctree, GtkCTreeNode *node, GWDBCatalog *catalog) { GtkNotebook * gw_properties_box_create_notebook_panel_folder_info ( GtkWindow *w, GtkNotebook *parent, GWDBCatalog *catalog, GWDBDisk *disk, GWDBFile *folder) { GtkWidget *vb_tabbed_pane; /* Vertical box of the tabbed pane */ GtkWidget *hb_1; /* 1st horizontal box */ GtkWidget *hb_2; /* 2nd horizontal box */ GtkWidget *vb_2_1; /* 1st vertical box of 2nd horizontal box*/ GtkWidget *vb_2_2; /* 2nd vertival box of 2nd horizontal box */ GtkWidget *pix_ico_folder; /* folder icon */ GtkWidget *hb_empty; /* horizontal box (used for empty box) */ GtkWidget *lbl; /* label */ GtkWidget *hseparator; /* horizontal separator */ GtkWidget *scrolled_area; /* scrolled window for text area */ GtkWidget *text_area; /* text area */ GtkHBox *cmb_categories; /* Categories combo box */ GtkTooltips *grp_tooltips; gchar *text; gchar *text_utf8 = NULL; gchar *tmp_date = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Inits tooltips group */ grp_tooltips = gtk_tooltips_new ( ); /* Vertical box of the tabbed pane */ vb_tabbed_pane = gtk_vbox_new ( FALSE, 5); gtk_container_set_border_width ( GTK_CONTAINER ( vb_tabbed_pane), 10); gtk_container_add ( GTK_CONTAINER ( parent), vb_tabbed_pane); /* 1st horizontal box */ hb_1 = gtk_hbox_new ( FALSE, 5); gtk_container_set_border_width ( GTK_CONTAINER ( hb_1), 5); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_1, FALSE, FALSE, 0); /* Folder icon */ pix_ico_folder = gtk_pixmap_new ( PixFolder, MskFolder); gtk_box_pack_start ( GTK_BOX ( hb_1), pix_ico_folder, FALSE, TRUE, 10); /* Folder name label */ g_strdup_to_gtk_text ( _( "Folder Name"), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( gw_db_file_get_name ( folder), text_utf8); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_1), lbl, FALSE, TRUE, 0); /* Empty horizontal box */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( hb_1), hb_empty, TRUE, TRUE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* 2nd horizontal box */ hb_2 = gtk_hbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_2, FALSE, FALSE, 0); /* 1st vertical box of the 2nd horizontal box */ vb_2_1 = gtk_vbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( hb_2), vb_2_1, TRUE, TRUE, 0); /* Horizontal box for the folder type */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* The folder type label */ g_strdup_to_gtk_text ( _( "Type : (folder)"), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for the folder size */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* The folder size label */ g_strdup_to_gtk_text ( _( "Folder Size : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text_utf8 = NULL; text = g_strconcat ( _( "Folder Size : "), (text_utf8 = gw_l_byte_to_str_format ( gw_db_file_get_size ( folder))), NULL); if ( text_utf8 != NULL ) { g_free ( text_utf8); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for the folder creation date */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* The folder creation date label */ g_strdup_to_gtk_text ( _( "Created on : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); tmp_date = gw_helper_db_file_get_cdate_to_str ( folder); text = g_strconcat ( _( "Created on : "), tmp_date, NULL); g_free ( tmp_date); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for the folder last update date */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* the folder last update date label */ g_strdup_to_gtk_text ( _( "Last modified on : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); tmp_date = gw_helper_db_file_get_mdate_to_str ( folder); text = g_strconcat ( _( "Last modified on : "), tmp_date, NULL); g_free ( tmp_date); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for the folder last access date */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* The folder last access date label */ g_strdup_to_gtk_text ( _( "Last accessed on : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); tmp_date = gw_helper_db_file_get_adate_to_str ( folder); text = g_strconcat ( _( "Last accessed on : "), tmp_date, NULL); g_free ( tmp_date); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* 2nd vertical box of the 2nd horizontal box */ vb_2_2 = gtk_vbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( hb_2), vb_2_2, TRUE, TRUE, 0); /* Horizontal box for the folder rights */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* Folder rights label */ g_strdup_to_gtk_text ( _( "Rights : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); tmp_date = gw_db_file_get_rights_to_gchar ( folder); text = g_strconcat ( _( "Rights : "), tmp_date, NULL); g_free ( tmp_date); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for the folder owner name */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* The folder owner name label */ g_strdup_to_gtk_text ( _( "Owner : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); if ( (gw_db_file_get_owner ( folder) == NULL) || (strlen ( gw_db_file_get_owner ( folder)) == 0) ) { text = g_strconcat ( _( "Owner : "), _( "unknown owner"), NULL); } else { text = g_strconcat ( _( "Owner : "), gw_db_file_get_owner ( folder), NULL); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for the folder group name */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* The folder group name label */ g_strdup_to_gtk_text ( _( "Group : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); if ( (gw_db_file_get_group ( folder) == NULL) || (strlen ( gw_db_file_get_group ( folder)) == 0) ) { text = g_strconcat ( _( "Group : "), _( "unknown group"), NULL); } else { text = g_strconcat ( _( "Group : "), gw_db_file_get_group ( folder), NULL); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Empty horizontal box */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* Empty horizontal box */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* Horizontal box for the disk name */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_empty, FALSE, FALSE, 0); /* Disk name label */ g_strdup_to_gtk_text ( _( "Disk Name : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text = g_strconcat ( _( "Disk Name : "), gw_db_disk_get_name ( disk), " (", gw_db_disk_get_fstype ( disk), ")", NULL); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for the folder location */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_empty, FALSE, FALSE, 0); /* The folder location label */ g_strdup_to_gtk_text ( _( "Location on Disk : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text_utf8 = NULL; text = g_strconcat ( _( "Location on Disk : "), (text_utf8 = ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_file_get_location ( gw_am_get_current_catalog_context ( ), gw_db_file_get_ref ( folder))), NULL); if ( text_utf8 != NULL ) { g_free ( text_utf8); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* Combo box for categories list */ cmb_categories = gw_combo_box_categories_create ( w, _( "Category : "), catalog); gtk_widget_ref ( GTK_WIDGET ( cmb_categories)); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_FOLDER_CATEGORIES_CMB_BOX, GTK_WIDGET ( cmb_categories), (GtkDestroyNotify) gtk_widget_unref); gw_combo_box_categories_load ( cmb_categories); gw_combo_box_categories_set_selected_category ( cmb_categories, gw_db_file_get_category ( folder)); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), GTK_WIDGET ( cmb_categories), FALSE, FALSE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* Horizontal box for description */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_empty, FALSE, FALSE, 0); /* Title description label */ g_strdup_to_gtk_text ( _( "Folder Description : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Text area scrollbar */ scrolled_area = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), scrolled_area, TRUE, TRUE, 0); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrolled_area), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); /* Text area for description */ text_area = gtk_text_area_new ( ); gtk_text_area_set_editable ( GTK_TEXT_AREA ( text_area), TRUE); if ( (text = gw_db_file_get_description ( folder)) != NULL) { gtk_text_area_insert ( GTK_TEXT_AREA ( text_area), text); } gtk_widget_ref ( text_area); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_FOLDER_DESCRIPTION_TEXT, text_area, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( scrolled_area), text_area); /* Tabbed pane label */ hb_empty = gtk_hbox_new ( FALSE, 0); pix_ico_folder = gtk_pixmap_new ( PixFolder, MskFolder); gtk_box_pack_start ( GTK_BOX ( hb_empty), pix_ico_folder, FALSE, TRUE, 0); gtk_misc_set_padding ( GTK_MISC ( pix_ico_folder), 3, 1); g_strdup_to_gtk_text ( _( "Folder Info"), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, TRUE, 0); gtk_widget_show_all ( hb_empty); gtk_notebook_set_tab_label ( GTK_NOTEBOOK ( parent), vb_tabbed_pane, hb_empty); return parent; } GtkNotebook * gw_properties_box_create_notebook_panel_file_info ( GtkWindow *w, GtkNotebook *parent, GtkCTree *ctree, GtkCTreeNode *node, GWDBCatalog *catalog, GWDBFile *file) { GtkWidget *vb_tabbed_pane; /* Vertical box of the tabbed pane */ GtkWidget *hb_1; /* 1st horizontal box */ GtkWidget *hb_2; /* 2nd horizontal box */ GtkWidget *vb_2_1; /* 1st vertical box of 2nd horizontal box*/ GtkWidget *vb_2_2; /* 2nd vertival box of 2nd horizontal box */ GtkWidget *pix_ico_file; /* file icon */ GtkWidget *hb_empty; /* horizontal box (used for empty box) */ GtkWidget *lbl; /* label */ GtkWidget *hseparator; /* horizontal separator */ GtkWidget *scrolled_area; /* scrolled window for text area */ GtkWidget *text_area; /* text area */ GtkHBox *cmb_categories; /* Categories combo box */ GtkTooltips *grp_tooltips; gchar *text; gchar *text_utf8 = NULL; gchar *tmp_date = NULL; gchar *tmp = NULL; GWDBDisk *disk = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Inits tooltips group */ grp_tooltips = gtk_tooltips_new ( ); /* Vertical box of the tabbed pane */ vb_tabbed_pane = gtk_vbox_new ( FALSE, 5); gtk_container_set_border_width ( GTK_CONTAINER ( vb_tabbed_pane), 10); gtk_container_add ( GTK_CONTAINER ( parent), vb_tabbed_pane); /* 1st horizontal box */ hb_1 = gtk_hbox_new ( FALSE, 5); gtk_container_set_border_width ( GTK_CONTAINER ( hb_1), 5); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_1, FALSE, FALSE, 0); /* File icon */ pix_ico_file = gtk_pixmap_new ( PixFile, MskFile); gtk_box_pack_start ( GTK_BOX ( hb_1), pix_ico_file, FALSE, TRUE, 10); /* Folder name label */ g_strdup_to_gtk_text ( _( "File name : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); g_strdup_to_gtk_text ( gw_db_file_get_name ( file), text_utf8); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_1), lbl, FALSE, TRUE, 0); /* Empty horizontal box */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( hb_1), hb_empty, TRUE, TRUE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* 2nd horizontal box */ hb_2 = gtk_hbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_2, FALSE, FALSE, 0); /* 1st vertical box of the 2nd horizontal box */ vb_2_1 = gtk_vbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( hb_2), vb_2_1, TRUE, TRUE, 0); /* Horizontal box for file type */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* The file type label */ g_strdup_to_gtk_text ( _( "File type : not yet implemented!!"), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for file size */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* The file size label */ g_strdup_to_gtk_text ( _( "File Size : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text_utf8 = NULL; text = g_strdup_printf ( _( "File Size : %s (%s bytes)"), (text_utf8 = gw_l_byte_to_str_format ( gw_db_file_get_size ( file))), ( tmp = gw_ui64_byte_to_str_format ( gw_db_file_get_size ( file)))); if ( text_utf8 != NULL ) { g_free ( text_utf8); } if ( tmp != NULL ) { g_free ( tmp); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for file creation date */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* The file creation date label */ g_strdup_to_gtk_text ( _( "Created on : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); tmp_date = gw_helper_db_file_get_cdate_to_str ( file); text = g_strconcat ( _( "Created on : "), tmp_date, NULL); g_free ( tmp_date); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for file last modification date */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* The file last modification date lalbel */ g_strdup_to_gtk_text ( _( "Last modified on : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); tmp_date = gw_helper_db_file_get_mdate_to_str ( file); text = g_strconcat ( _( "Last modified on : "), tmp_date, NULL); g_free ( tmp_date); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for file last access date */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_1), hb_empty, TRUE, TRUE, 0); /* The file last access date label */ g_strdup_to_gtk_text ( _( "Last accessed on : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); tmp_date = gw_helper_db_file_get_adate_to_str ( file); text = g_strconcat ( _( "Last accessed on : "), tmp_date, NULL); g_free ( tmp_date); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* 2nd vertical box of the 2nd horizontal box */ vb_2_2 = gtk_vbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( hb_2), vb_2_2, TRUE, TRUE, 0); /* Horizontal box for file rights */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* the file rights label */ g_strdup_to_gtk_text ( _( "Rights : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); tmp_date = gw_db_file_get_rights_to_gchar ( file); text = g_strconcat ( _( "Rights : "), tmp_date, NULL); g_free ( tmp_date); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for file owner name */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* The file owner name label */ g_strdup_to_gtk_text ( _( "Owner : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); if ( (gw_db_file_get_owner ( file) == NULL) || (strlen ( gw_db_file_get_owner ( file)) == 0) ) { text = g_strconcat ( _( "Owner : "), _( "unknown owner"), NULL); } else { text = g_strconcat ( _( "Owner : "), gw_db_file_get_owner ( file), NULL); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for file group name */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* File group name label */ g_strdup_to_gtk_text ( _( "Group : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); if ( (gw_db_file_get_group ( file) == NULL) || (strlen ( gw_db_file_get_group ( file)) == 0) ) { text = g_strconcat ( _( "Group : "), _( "unknown group"), NULL); } else { text = g_strconcat ( _( "Group : "), gw_db_file_get_group ( file), NULL); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free (text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Empty horizontal box */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* Empty horizontal box */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_2_2), hb_empty, TRUE, TRUE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* Horizontal box for disk name */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_empty, FALSE, FALSE, 0); /* The disk name label */ g_strdup_to_gtk_text ( _( "Disk Name : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text_utf8 = NULL; disk = ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_file_get_db_disk ( gw_am_get_current_catalog_context ( ), gw_db_file_get_ref ( file)); text = g_strconcat ( _( "Disk Name : "), gw_db_disk_get_name ( disk), " (", gw_db_disk_get_fstype ( disk), ")", NULL); gw_db_disk_free ( disk); g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Horizontal box for the file location */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_empty, FALSE, FALSE, 0); /* The file location label */ g_strdup_to_gtk_text ( _( "Location on Disk : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); text_utf8 = NULL; text = g_strconcat ( _( "Location on Disk : "), (text_utf8 = ((GWCatalogPlugin*)gw_db_context_get_plugin ( gw_am_get_current_catalog_context ( )))->gw_db_file_get_location ( gw_am_get_current_catalog_context ( ), gw_db_file_get_ref ( file))), NULL); if ( text_utf8 != NULL ) { g_free ( text_utf8); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); gtk_label_set_text ( GTK_LABEL ( lbl), text_utf8); g_free (text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* Combo box for categories list */ cmb_categories = gw_combo_box_categories_create ( w, _( "Category : "), catalog); gtk_widget_ref ( GTK_WIDGET ( cmb_categories)); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_FILE_CATEGORIES_CMB_BOX, GTK_WIDGET ( cmb_categories), (GtkDestroyNotify) gtk_widget_unref); gw_combo_box_categories_load ( cmb_categories); gw_combo_box_categories_set_selected_category ( cmb_categories, gw_db_file_get_category ( file)); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), GTK_WIDGET ( cmb_categories), FALSE, FALSE, 0); /* Separator */ hseparator = gtk_hseparator_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hseparator, FALSE, FALSE, 0); /* Horizontal box for description */ hb_empty = gtk_hbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_empty), 2); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), hb_empty, FALSE, FALSE, 0); /* Title description label */ g_strdup_to_gtk_text ( _( "File Description : "), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, FALSE, 0); /* Text area scrollbar */ scrolled_area = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( vb_tabbed_pane), scrolled_area, TRUE, TRUE, 0); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrolled_area), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); /* Text area for description */ text_area = gtk_text_area_new ( ); gtk_text_area_set_editable ( GTK_TEXT_AREA ( text_area), TRUE); if ( (text = gw_db_file_get_description ( file)) != NULL) { gtk_text_area_insert ( GTK_TEXT_AREA ( text_area), text); } gtk_widget_ref ( text_area); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_FILE_DESCRIPTION_TEXT, text_area, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( scrolled_area), text_area); /* Tabbed pane label */ hb_empty = gtk_hbox_new ( FALSE, 0); pix_ico_file = gtk_pixmap_new ( PixFile, MskFile); gtk_box_pack_start ( GTK_BOX ( hb_empty), pix_ico_file, FALSE, TRUE, 0); gtk_misc_set_padding ( GTK_MISC ( pix_ico_file), 3, 1); g_strdup_to_gtk_text ( _( "File Info"), text_utf8); lbl = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( hb_empty), lbl, FALSE, TRUE, 0); gtk_widget_show_all ( hb_empty); gtk_notebook_set_tab_label ( GTK_NOTEBOOK ( parent), vb_tabbed_pane, hb_empty); return parent; } gchar * gw_properties_box_get_catalog_name ( GtkWidget *w) { GtkEntry *entry = NULL; gchar *catalog_name = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { entry = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_CATALOG_NAME_ENTRY); if ( entry != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( entry), catalog_name); } else {} } else {} return catalog_name; } /*GWDBCategory * gw_properties_box_get_catalog_category ( GtkWidget *w) { GtkWidget *cmb_box_categories = NULL; GWDBCategory *category = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { cmb_box_categories = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_CATALOG_CATEGORIES_CMB_BOX); if ( cmb_box_categories != NULL ) { category = gw_combo_box_categories_get_selected_category ( GTK_HBOX ( cmb_box_categories)); } } return category; }*/ gchar * gw_properties_box_get_catalog_description ( GtkWidget *w) { GtkTextArea *text_area = NULL; gchar *catalog_description = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { text_area = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_CATALOG_DESCRIPTION_TEXT); if ( text_area != NULL ) { catalog_description = gtk_text_area_get_text ( GTK_TEXT_AREA ( text_area)); } } return catalog_description; } gchar * gw_properties_box_get_disk_name ( GtkWidget *w) { GtkWidget *entry = NULL; gchar *disk_name = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { entry = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_DISK_NAME_ENTRY); if ( entry != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( entry)), disk_name); } } return disk_name; } gchar * gw_properties_box_get_disk_num ( GtkWidget *w) { GtkWidget *entry = NULL; gchar *disk_num = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { entry = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_DISK_NUMBER_ARCHIVE_ENTRY); if ( entry != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( entry)), disk_num); } } return disk_num; } GWDBCategoryPK gw_properties_box_get_disk_category_ref ( GtkWidget *w) { GtkWidget *cmb_box_categories = NULL; GWDBCategory *category = NULL; GWDBCategoryPK ref = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (cmb_box_categories = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_DISK_CATEGORIES_CMB_BOX)) != NULL) { if ( (category = gw_combo_box_categories_get_selected_category ( GTK_HBOX ( cmb_box_categories))) != NULL ) { ref = gw_db_category_get_ref ( category); gw_db_category_free ( category); } } } return ref; } gchar * gw_properties_box_get_disk_description ( GtkWidget *w) { GtkTextArea *text_area = NULL; gchar *disk_description = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { text_area = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_DISK_DESCRIPTION_TEXT); if ( text_area != NULL ) { disk_description = gtk_text_area_get_text ( GTK_TEXT_AREA ( text_area)); } } return disk_description; } GWDBCategoryPK gw_properties_box_get_folder_category_ref ( GtkWidget *w) { GtkWidget *cmb_box_categories = NULL; GWDBCategory *category = NULL; GWDBCategoryPK ref = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (cmb_box_categories = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_FOLDER_CATEGORIES_CMB_BOX)) != NULL ) { if ( (category = gw_combo_box_categories_get_selected_category ( GTK_HBOX ( cmb_box_categories))) != NULL ) { ref = gw_db_category_get_ref ( category); gw_db_category_free ( category); } } } return ref; } gchar * gw_properties_box_get_folder_description ( GtkWidget *w) { GtkTextArea *text_area = NULL; gchar *folder_description = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { text_area = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_FOLDER_DESCRIPTION_TEXT); if ( text_area != NULL ) { folder_description = gtk_text_area_get_text ( GTK_TEXT_AREA ( text_area)); } } return folder_description; } GWDBCategoryPK gw_properties_box_get_file_category_ref ( GtkWidget *w) { GtkWidget *cmb_box_categories = NULL; GWDBCategory *category = NULL; GWDBCategoryPK ref = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (cmb_box_categories = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_FILE_CATEGORIES_CMB_BOX)) != NULL) { if ( (category = gw_combo_box_categories_get_selected_category ( GTK_HBOX ( cmb_box_categories))) != NULL ) { ref = gw_db_category_get_ref ( category); gw_db_category_free ( category); } } } return ref; } gchar * gw_properties_box_get_file_description ( GtkWidget *w) { GtkTextArea *entry = NULL; gchar *file_description = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { entry = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_PROPERTIES_BOX_FILE_DESCRIPTION_TEXT); if ( entry != NULL ) { file_description = gtk_text_area_get_text ( GTK_TEXT_AREA ( entry)); } } return file_description; } gwhere-0.2.3/src/gui/gwpropertiesbox.h0000744000175000017500000002600310222307465016431 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwpropertiesbox.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for properties box. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @see gwdata.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwpropertiesbox.c * @author Author */ #ifndef GW_GUI_GW_PROPERTIES_BOX_H #define GW_GUI_GW_PROPERTIES_BOX_H #include "data/gwdata.h" /*! @define GW_PROPERTIES_TYPE_CATALOG The type "catalog" for properties box */ #define GW_PROPERTIES_TYPE_CATALOG 0 /*! @define GW_PROPERTIES_TYPE_DISK The type "disk" for properties box */ #define GW_PROPERTIES_TYPE_DISK 1 /*! @define GW_PROPERTIES_TYPE_FOLDER The type "folder" for properties box */ #define GW_PROPERTIES_TYPE_FOLDER 2 /*! @define GW_PROPERTIES_TYPE_FILE The type "file" for properties box */ #define GW_PROPERTIES_TYPE_FILE 3 /*! * @function gw_properties_box_create * @abstract Creates a properties box. * @discussion This function creates a properties box. Don't * use this generic function. It more careful to * use the following functions :
*
    *
  • gw_properties_box_create_catalog
  • *
  • gw_properties_box_create_disk
  • *
  • gw_properties_box_create_folder
  • *
  • gw_properties_box_create_file
  • *
* @param w main window * @param ctree catalog tree * @param node relative tree root node * @param what kind of properties box * @param files files list * @result the properties box.
* Returns NULL when an error occured. */ GtkWidget * gw_properties_box_create ( GtkWindow *w, GtkCTree *ctree, GtkCTreeNode *node, gint what, GWDBFile *file); /*! * @function gw_properties_box_create_catalog * @abstract Creates a catalog properties box. * @discussion This function creates a catalog properties box. * @param m invoker * @param w main window * @param ctree catalog tree * @param node catalog node in tree * @result the catalog properties box.
* Returns NULL when an error occured. */ GtkWidget * gw_properties_box_create_catalog ( GtkMenuItem *m, GtkWindow *w, GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_properties_box_create_disk * @abstract Creates a disk properties box. * @discussion This function creates a disk properties box. * @param m invoker * @param w main window * @param ctree catalog tree * @param node disk node in tree * @result the disk properties box.
* Returns NULL when an error occured. */ GtkWidget * gw_properties_box_create_disk ( GtkMenuItem *m, GtkWindow *w, GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_properties_box_create_folder * @abstract Creates a folder properties box. * @discussion This function creates a folder properties box. * @param m invoker * @param w main window * @param ctree catalog tree * @param node folder node in tree * @result the folder properties box.
* Returns NULL when an error occured. */ GtkWidget * gw_properties_box_create_folder ( GtkMenuItem *m, GtkWindow *w, GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_properties_box_create_file * @abstract Creates a file properties box. * @discussion This function creates a file properties box. * @param m invoker * @param w main window * @param ctree catalog tree * @param node file node in tree * @param files files list * @result the file properties box.
* Returns NULL when an error occured. */ GtkWidget * gw_properties_box_create_file ( GtkMenuItem *m, GtkWindow *w, GtkCTree *ctree, GtkCTreeNode *node, GWDBFile *files); /*! * @function gw_properties_box_create_notebook_panel_catalog_info * @abstract Creates a tabbed pane for catalog properties box. * @discussion This function creates a tabbed pane for catalog properties box. * @param w main window * @param notebook notebook * @param ctree catalog tree * @param node catalog node in tree * @param catalog_file_info catalog file info * @result the notebook.
* Returns NULL when an error occured. */ GtkNotebook * gw_properties_box_create_notebook_panel_catalog_info ( GtkWindow *w, GtkNotebook *notebook, GtkCTree *ctree, GtkCTreeNode *node, GWDBCatalog *catalog); /*! * @function gw_properties_box_create_notebook_panel_disk_info * @abstract Creates a tabbed pane for disk properties box. * @discussion This function creates a tabbed pane for disk properties box. * @param w main window * @param notebook notebook * @param ctree catalog tree * @param node disk node in tree * @param catalog_file_info catalog file info * @result the notebook.
* Returns NULL when an error occured. */ GtkNotebook * gw_properties_box_create_notebook_panel_disk_info ( GtkWindow *w, GtkNotebook *parent, GtkCTree *ctree, GtkCTreeNode *node, GWDBCatalog *catalog, GWDBDisk *disk); /*! * @function gw_properties_box_create_notebook_panel_folder_info * @abstract Creates a tabbed pane for folder properties box. * @discussion This function creates a tabbed pane for catalog properties box. * @param w main window * @param notebook notebook * @param ctree catalog tree * @param node folder node in tree * @param catalog_file_info catalog file info * @result the notebook.
* Returns NULL when an error occured. */ //GtkNotebook * gw_properties_box_create_notebook_panel_folder_info ( GtkWindow *w, GtkNotebook *notebook, GtkCTree *ctree, GtkCTreeNode *node, GWDBCatalog *catalog); GtkNotebook * gw_properties_box_create_notebook_panel_folder_info ( GtkWindow *w, GtkNotebook *notebook, GWDBCatalog *catalog, GWDBDisk *disk, GWDBFile *folder); /*! * @function gw_properties_box_create_notebook_panel_file_info * @abstract Creates a tabbed pane for file properties box. * @discussion This function creates a tabbed pane for file properties box. * @param w main window * @param notebook notebook * @param ctree catalog tree * @param node file node in tree * @param catalog_file_info catalog file info * @param files files list * @result the notebook.
* Returns NULL when an error occured. */ GtkNotebook * gw_properties_box_create_notebook_panel_file_info ( GtkWindow *w, GtkNotebook *notebook, GtkCTree *ctree, GtkCTreeNode *node, GWDBCatalog *catalog, GWDBFile *file); /*! * @function gw_properties_box_get_catalog_name * @abstract Gets the catalog name. * @discussion This function gets the catalog name. * @param w properties box * @result the catalog name. Must be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_properties_box_get_catalog_name ( GtkWidget *w); /*! * @function gw_properties_box_get_catalog_category * @abstract Gets the catalog category. * @discussion This function gets the catalog category. * @param w properties box * @result the catalog category.
* Returns NULL when an error occured. */ //GWDBCategory * gw_properties_box_get_catalog_category ( GtkWidget *w); /*! * @function gw_properties_box_get_catalog_description * @abstract Gets the catalog description. * @discussion This function gets the catalog description. * @param w properties box * @result the catalog description. Must be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_properties_box_get_catalog_description ( GtkWidget *w); /*! * @function gw_properties_box_get_disk_name * @abstract Gets the disk name. * @discussion This function gets the disk name. * @param w properties box * @result the disk name. Must be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_properties_box_get_disk_name ( GtkWidget *w); /*! * @function gw_properties_box_get_disk_num * @abstract Gets the disk archive number. * @discussion This function gets the disk archive number. * @param w properties box * @result the disk archive number. Must be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_properties_box_get_disk_num ( GtkWidget *w); /*! * @function gw_properties_box_get_disk_category * @abstract Gets the disk category. * @discussion This function gets the disk category. * @param w properties box * @result the disk category.
* Returns NULL when an error occured. */ GWDBCategoryPK gw_properties_box_get_disk_category_ref ( GtkWidget *w); /*! * @function gw_properties_box_get_disk_description * @abstract Gets the disk description. * @discussion This function gets the disk description. * @param w properties box * @result the disk description. Must be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_properties_box_get_disk_description ( GtkWidget *w); /*! * @function gw_properties_box_get_folder_category * @abstract Gets the folder category. * @discussion This function gets the folder category. * @param w properties box * @result the folder category.
* Returns NULL when an error occured. */ GWDBCategoryPK gw_properties_box_get_folder_category_ref ( GtkWidget *w); /*! * @function gw_properties_box_get_folder_description * @abstract Gets the folder description. * @discussion This function gets the folder description. * @param w properties box * @result the folder description. Must be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_properties_box_get_folder_description ( GtkWidget *w); /*! * @function gw_properties_box_get_file_category * @abstract Gets the file category. * @discussion This function gets the file category. * @param w properties box * @result the file category.
* Returns NULL when an error occured. */ GWDBCategoryPK gw_properties_box_get_file_category_ref ( GtkWidget *w); /*! * @function gw_properties_box_get_file_description * @abstract Gets the file description. * @discussion This function gets the file description. * @param w properties box * @result the file description. Must be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_properties_box_get_file_description ( GtkWidget *w); #endif gwhere-0.2.3/src/gui/gwpropertiesboxcallback.c0000744000175000017500000004275010247706151020112 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwpropertiesboxcallback.h" #include /* strtol */ #include /* strcmp */ #include "tools/gwtools.h" #include "gwpropertiesbox.h" #include "gwcomboboxcategories.h" #include "../gwpluginsmanager.h" #include "../gwapplicationmanager.h" #include "../gwhelper.h" /* I don't like globals variables, but how to take another way? */ extern GtkCTree *ctree_properties; extern GtkCTreeNode *node_properties; extern GWDBFile *file_properties; gboolean gw_properties_box_catalog_ok ( GtkWidget *b, GtkWidget *w) { GtkCTreeNode *selection = NULL; gboolean result = FALSE; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && context != NULL ) { selection = GTK_CTREE_NODE ( GTK_CLIST ( ctree_properties)->selection->data); if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL) { if ( (catalog = plugin->gw_db_catalog_get_db_catalog ( context)) != NULL) { /* Checks if must update catalog name */ gw_properties_box_catalog_name_check ( w, node_properties, catalog); /* Checks if must update catalog description */ gw_properties_box_catalog_description_check ( w, catalog); plugin->gw_db_catalog_update ( context, catalog); gw_db_catalog_free ( catalog); } gtk_widget_destroy ( w); /* Selectes the selected item in the exploration tree to update files informations */ gtk_ctree_select ( ctree_properties, selection); result = TRUE; } } return result; } gboolean gw_properties_box_disk_ok ( GtkWidget *b, GtkWidget *w) { GtkCTreeNode *selection = NULL; gboolean result = FALSE; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; GWDBDisk *disk = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && context != NULL ) { selection = GTK_CTREE_NODE ( GTK_CLIST ( ctree_properties)->selection->data); if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL) { /* Gets catalog and disk informations */ if ( (disk = plugin->gw_db_catalog_get_db_disk ( context, gtk_ctree_node_get_row_data ( ctree_properties, node_properties))) != NULL) { /* Checks if must update disk name */ gw_properties_box_disk_name_check ( w, node_properties, catalog, disk); /* Checks if must update disk number archive */ gw_properties_box_disk_num_archive_check ( w, node_properties, catalog, disk); /* Checks if must update disk category */ gw_properties_box_disk_category_check ( w, node_properties, catalog, disk); /* Checks if must update disk description */ gw_properties_box_disk_description_check ( w, node_properties, catalog, disk); plugin->gw_db_disk_update ( context, disk); gw_db_disk_free ( disk); } if ( (catalog = plugin->gw_db_catalog_get_db_catalog ( context)) != NULL) { /* Checks if must update catalog name */ gw_properties_box_catalog_name_check ( w, GTK_CTREE_ROW ( node_properties)->parent, catalog); /* Checks if must update catalog description */ gw_properties_box_catalog_description_check ( w, catalog); plugin->gw_db_catalog_update ( context, catalog); gw_db_catalog_free ( catalog); } gtk_widget_destroy ( w); /* Selectes the selected item in the exploration tree to update files informations */ gtk_ctree_select ( ctree_properties, selection); result = TRUE; } } return result; } gboolean gw_properties_box_folder_ok ( GtkWidget *b, GtkWidget *w) { GWDBFile *folder = NULL; GWDBDisk *disk = NULL; GtkCTreeNode *selection = NULL, *disk_node = NULL; gboolean result = FALSE; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && context != NULL ) { selection = GTK_CTREE_NODE ( GTK_CLIST ( ctree_properties)->selection->data); if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL) { disk_node = gw_folder_get_disk ( GTK_CTREE ( ctree_properties), node_properties); /* Gets catalog, disk and folder informations */ if ( (folder = plugin->gw_db_catalog_get_db_file ( context, gtk_ctree_node_get_row_data ( ctree_properties, node_properties))) != NULL) { /* Checks if must update folder category */ gw_properties_box_folder_category_check ( w, folder); /* Checks if must update folder description */ gw_properties_box_folder_description_check ( w, folder); plugin->gw_db_file_update ( context, folder); } if ( (disk = plugin->gw_db_file_get_db_disk ( context, gw_db_file_get_ref ( folder))) != NULL) { /* Checks if must update disk name */ gw_properties_box_disk_name_check ( w, disk_node, catalog, disk); /* Checks if must update disk number archive */ gw_properties_box_disk_num_archive_check ( w, disk_node, catalog, disk); /* Checks if must update disk category */ gw_properties_box_disk_category_check ( w, disk_node, catalog, disk); /* Checks if must update disk description */ gw_properties_box_disk_description_check ( w, disk_node, catalog, disk); plugin->gw_db_disk_update ( context, disk); gw_db_disk_free ( disk); } if ( (catalog = plugin->gw_db_catalog_get_db_catalog ( context)) != NULL) { /* Checks if must update catalog name */ gw_properties_box_catalog_name_check ( w, GTK_CTREE_ROW ( disk_node)->parent, catalog); /* Checks if must update catalog description */ gw_properties_box_catalog_description_check ( w, catalog); plugin->gw_db_catalog_update ( context, catalog); gw_db_catalog_free ( catalog); } if ( folder != NULL) { gw_db_file_free ( folder); } gtk_widget_destroy ( w); /* Selectes the selected item in the exploration tree to update files informations */ gtk_ctree_select ( ctree_properties, selection); result = TRUE; } } return result; } gboolean gw_properties_box_file_ok ( GtkWidget *b, GtkWidget *w) { GWDBFile *folder = NULL, *file = file_properties; GWDBDisk *disk = NULL; GtkCTreeNode *selection = NULL; GtkCTreeNode *folder_node = node_properties, *disk_node = NULL; gboolean result = FALSE; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && context != NULL ) { selection = GTK_CTREE_NODE ( GTK_CLIST ( ctree_properties)->selection->data); if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL) { disk_node = gw_folder_get_disk ( GTK_CTREE ( ctree_properties), folder_node); /* Gets catalog, disk, folder and file informations */ if ( file != NULL ) { /* Checks if must update file category */ gw_properties_box_file_category_check ( w, file); /* Checks if must update file description */ gw_properties_box_file_description_check ( w, file); plugin->gw_db_file_update ( context, file); } if ( (folder = plugin->gw_db_catalog_get_db_file ( context, gtk_ctree_node_get_row_data ( ctree_properties, folder_node))) != NULL) { /* Checks if must update folder category */ gw_properties_box_folder_category_check ( w, folder); /* Checks if must update folder description */ gw_properties_box_folder_description_check ( w, folder); plugin->gw_db_file_update ( context, folder); gw_db_file_free ( folder); } if ( (disk = plugin->gw_db_file_get_db_disk ( context, gw_db_file_get_ref ( file))) != NULL) { /* Checks if must update disk name */ gw_properties_box_disk_name_check ( w, disk_node, catalog, disk); /* Checks if must update disk number archive */ gw_properties_box_disk_num_archive_check ( w, disk_node, catalog, disk); /* Checks if must update disk category */ gw_properties_box_disk_category_check ( w, disk_node, catalog, disk); /* Checks if must update disk description */ gw_properties_box_disk_description_check ( w, disk_node, catalog, disk); plugin->gw_db_disk_update ( context, disk); gw_db_disk_free ( disk); } if ( (catalog = plugin->gw_db_catalog_get_db_catalog ( context)) != NULL) { /* Checks if must update catalog name */ gw_properties_box_catalog_name_check ( w, GTK_CTREE_ROW ( disk_node)->parent, catalog); /* Checks if must update catalog description */ gw_properties_box_catalog_description_check ( w, catalog); plugin->gw_db_catalog_update ( context, catalog); gw_db_catalog_free ( catalog); } gtk_widget_destroy ( w); /* Selectes the selected item in the exploration tree to update files informations */ gtk_ctree_select ( ctree_properties, selection); result = TRUE; } } return result; } gint gw_properties_box_catalog_name_check ( GtkWidget *w, GtkCTreeNode *node, GWDBCatalog *catalog) { guint8 spc; GdkBitmap *btmp; GdkPixmap *pxmp; gchar *catalog_name = NULL, *name = NULL, *text_utf8 = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && catalog != NULL) { if ( (catalog_name = gw_properties_box_get_catalog_name ( w)) != NULL) { //TODO The GUI updating should not be done here!! if ( strlen ( catalog_name) > 0 ) { /* If a name is displayed */ gw_db_catalog_set_name ( catalog, g_strdup ( catalog_name)); gtk_ctree_node_get_pixtext ( ctree_properties, node, 0, &name, &spc, &pxmp, &btmp); g_strdup_to_gtk_text ( gw_db_catalog_get_name ( catalog), text_utf8); gtk_ctree_node_set_pixtext ( ctree_properties, node, 0, text_utf8, spc, pxmp, btmp); g_free ( text_utf8); } else { gw_db_catalog_set_name ( catalog, NULL); gtk_ctree_node_get_pixtext ( ctree_properties, node, 0, &name, &spc, &pxmp, &btmp); g_strdup_to_gtk_text ( gw_db_catalog_get_short_db_name ( catalog), text_utf8); gtk_ctree_node_set_pixtext ( ctree_properties, node, 0, text_utf8, spc, pxmp, btmp); g_free ( text_utf8); } result = 0; g_free ( catalog_name); } } return result; } gint gw_properties_box_catalog_description_check ( GtkWidget *w, GWDBCatalog *catalog) { gint result = -1; gchar *catalog_description = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && catalog != NULL) { if ( (catalog_description = gw_properties_box_get_catalog_description ( w)) != NULL) { //TODO must we check the description length and force it to NULL when equals to 0?? if ( strlen ( catalog_description) > 0 ) { gw_db_catalog_set_description ( catalog, g_strdup ( catalog_description)); } else { gw_db_catalog_set_description ( catalog, NULL); } result = 0; g_free ( catalog_description); } } return result; } gint gw_properties_box_disk_name_check ( GtkWidget *w, GtkCTreeNode *node, GWDBCatalog *catalog, GWDBDisk *disk) { guint8 spc; GdkBitmap *btmp; GdkPixmap *pxmp; gchar *disk_name = NULL, *name = NULL, *text_utf8 = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && disk != NULL) { if ( (disk_name = gw_properties_box_get_disk_name ( w)) != NULL) { //TODO The GUI updating should not be done here!! if ( strlen ( disk_name) > 0 && strcmp ( disk_name, gw_db_disk_get_name ( disk))!=0 ) { if ( !gw_helper_db_disk_name_is_exist ( gw_am_get_current_catalog_context ( ), disk_name)) { gw_db_disk_set_name ( disk, g_strdup ( disk_name)); gtk_ctree_node_get_pixtext ( ctree_properties, node, 0, &name, &spc, &pxmp, &btmp); g_strdup_to_gtk_text ( disk_name, text_utf8); gtk_ctree_node_set_pixtext ( ctree_properties, node, 0, text_utf8, spc, pxmp, btmp); g_free ( text_utf8); } else {} } result = 0; g_free ( disk_name); } } return result; } gint gw_properties_box_disk_num_archive_check ( GtkWidget *w, GtkCTreeNode *node, GWDBCatalog *catalog, GWDBDisk *disk) { gint num; gint result = -1; gchar *disk_num = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { disk_num = gw_properties_box_get_disk_num ( w); if ( ( num = strtol ( disk_num, NULL, 10)) != gw_db_disk_get_num ( disk) ) { /* If displayed number archive is different as disk number archive */ if ( num > 0 ) { if ( !gw_helper_db_disk_num_is_exist ( gw_am_get_current_catalog_context ( ), num) ) { gw_db_disk_set_num ( disk, num); } else {} } } g_free ( disk_num); result = 0; } return result; } gint gw_properties_box_disk_category_check ( GtkWidget *w, GtkCTreeNode *node, GWDBCatalog *catalog, GWDBDisk *disk) { gint result = -1; GWDBCategoryPK src = NULL, dst = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { src = gw_properties_box_get_disk_category_ref ( w); dst = gw_db_disk_get_category ( disk); // if ( gw_properties_box_get_disk_category_ref ( w) != gw_db_disk_get_category ( disk) ) { if ( src != dst) { gw_db_disk_set_category ( disk, gw_properties_box_get_disk_category_ref ( w)); } result = 0; } return result; } gint gw_properties_box_disk_description_check ( GtkWidget *w, GtkCTreeNode *node, GWDBCatalog *catalog, GWDBDisk *disk) { gint result = -1; gchar *disk_description = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && disk != NULL) { if ( (disk_description = gw_properties_box_get_disk_description ( w)) != NULL) { //TODO must we check the description length and force it to NULL when equals to 0?? if ( strlen ( disk_description) > 0 ) { gw_db_disk_set_description ( disk, g_strdup ( disk_description)); } else { gw_db_disk_set_description ( disk, NULL); } result = 0; g_free ( disk_description); } } return result; } gint gw_properties_box_folder_category_check ( GtkWidget *w, GWDBFile *folder) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( gw_properties_box_get_folder_category_ref ( w) != gw_db_file_get_category ( folder) ) { gw_db_file_set_category ( folder, gw_properties_box_get_folder_category_ref ( w)); } result = 0; } return result; } gint gw_properties_box_folder_description_check ( GtkWidget *w, GWDBFile *folder) { gint result = -1; gchar *folder_description = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && folder != NULL) { if ( (folder_description = gw_properties_box_get_folder_description ( w)) != NULL) { //TODO must we check the description length and force it to NULL when equals to 0?? if ( strlen ( folder_description) > 0 ) { gw_db_file_set_description ( folder, g_strdup ( folder_description)); } else { gw_db_file_set_description ( folder, NULL); } result = 0; g_free ( folder_description); } } return result; } gint gw_properties_box_file_category_check ( GtkWidget *w, GWDBFile *file) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( gw_properties_box_get_file_category_ref ( w) != gw_db_file_get_category ( file) ) { gw_db_file_set_category ( file, gw_properties_box_get_file_category_ref ( w)); } result = 0; } return result; } gint gw_properties_box_file_description_check ( GtkWidget *w, GWDBFile *file) { gint result = -1; gchar *file_description = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL && file != NULL) { if ( (file_description = gw_properties_box_get_file_description ( w)) != NULL) { //TODO must we check the description length and force it to NULL when equals to 0?? if ( strlen ( file_description) > 0 ) { gw_db_file_set_description ( file, g_strdup ( file_description)); } else { gw_db_file_set_description ( file, NULL); } result = 0; g_free ( file_description); } } return result; } gwhere-0.2.3/src/gui/gwpropertiesboxcallback.h0000744000175000017500000002145310222307465020112 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwpropertiesboxcallback.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for properties box callbacks. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @see gwdata.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwpropertiesboxcallback.c * @author Author */ #ifndef GW_GUI_GW_PROPERTIES_BOX_CALLBACK_H #define GW_GUI_GW_PROPERTIES_BOX_CALLBACK_H #include "data/gwdata.h" /*! * @function gw_properties_box_catalog_ok * @abstract Validates the catalog properties box and closes it. * @discussion This function validates the catalog properties box and closes it. * @param b invoker button * @param w main window * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_properties_box_catalog_ok ( GtkWidget *b, GtkWidget *w); /*! * @function gw_properties_box_disk_ok * @abstract Validates the disk properties box and closes it. * @discussion This function validates the disk properties box and closes it. * @param b invoker button * @param w main window * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_properties_box_disk_ok ( GtkWidget *b, GtkWidget *w); /*! * @function gw_properties_box_folder_ok * @abstract Validates the folder properties box and closes it. * @discussion This function validates the folder properties box and closes it. * @param b invoker button * @param w main window * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_properties_box_folder_ok ( GtkWidget *b, GtkWidget *w); /*! * @function gw_properties_box_file_ok * @abstract Validates the file properties box and closes it. * @discussion This function validates the file properties box and closes it. * @param b invoker button * @param w main window * @result is the event submited correctly.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_properties_box_file_ok ( GtkWidget *b, GtkWidget *w); /*! * @function gw_properties_box_catalog_name_check * @abstract Checks if the catalog name was changed and sets the new value. * @discussion This function check if catalog name was changed and sets the new value. * @param w properties box * @param node node in tree of the catalog * @param catalog_info catalog file info * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_properties_box_catalog_name_check ( GtkWidget *w, GtkCTreeNode *node, GWDBCatalog *catalog); /*! * @function gw_properties_box_catalog_description_check * @abstract Checks if the catalog description was changed and sets the new value. * @discussion This function check if catalog description was changed and sets the new value. * @param w properties box * @param node node in tree of the catalog * @param catalog_info catalog file info * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_properties_box_catalog_description_check ( GtkWidget *w, GWDBCatalog *catalog); /*! * @function gw_properties_box_disk_name_check * @abstract Checks if the disk name was changed and sets the new value. * @discussion This function check if disk name was changed and sets the new value. * @param w properties box * @param node node in tree of the disk * @param catalog_info catalog file info * @param disk_info disk info * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_properties_box_disk_name_check ( GtkWidget *w, GtkCTreeNode *node, GWDBCatalog *catalog, GWDBDisk *disk); /*! * @function gw_properties_box_disk_num_archive_check * @abstract Checks if the disk number archive was changed and sets the new value. * @discussion This function check if disk number archive was changed and sets the new value. * @param w properties box * @param node node in tree of the disk * @param catalog_info catalog file info * @param disk_info disk info * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_properties_box_disk_num_archive_check ( GtkWidget *w, GtkCTreeNode *node, GWDBCatalog *catalog, GWDBDisk *disk); /*! * @function gw_properties_box_disk_category_check * @abstract Checks if the disk category was changed and sets the new value. * @discussion This function check if disk category was changed and sets the new value. * @param w properties box * @param node node in tree of the disk * @param catalog_info catalog file info * @param disk_info disk info * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_properties_box_disk_category_check ( GtkWidget *w, GtkCTreeNode *node, GWDBCatalog *catalog, GWDBDisk *disk); /*! * @function gw_properties_box_disk_description_check * @abstract Checks if the disk description was changed and sets the new value. * @discussion This function check if disk description was changed and sets the new value. * @param w properties box * @param node node in tree of the disk * @param catalog_info catalog file info * @param disk_info disk info * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_properties_box_disk_description_check ( GtkWidget *w, GtkCTreeNode *node, GWDBCatalog *catalog, GWDBDisk *disk); /*! * @function gw_properties_box_folder_category_check * @abstract Checks if the folder category was changed and sets the new value. * @discussion This function check if folder category was changed and sets the new value. * @param w properties box * @param catalog_info catalog file info * @param file_info folder info * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_properties_box_folder_category_check ( GtkWidget *w, GWDBFile *folder); /*! * @function gw_properties_box_folder_description_check * @abstract Checks if the folder description was changed and sets the new value. * @discussion This function check if folder description was changed and sets the new value. * @param w properties box * @param catalog_info catalog file info * @param folder_info folder info * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_properties_box_folder_description_check ( GtkWidget *w, GWDBFile *folder); /*! * @function gw_properties_box_file_category_check * @abstract Checks if the file category was changed and sets the new value. * @discussion This function check if file category was changed and sets the new value. * @param w properties box * @param catalog_info catalog file info * @param file_info file info * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_properties_box_file_category_check ( GtkWidget *w, GWDBFile *file); /*! * @function gw_properties_box_file_description_check * @abstract Checks if the file description was changed and sets the new value. * @discussion This function check if file description was changed and sets the new value. * @param w properties box * @param catalog_info catalog file info * @param file_info file info * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_properties_box_file_description_check ( GtkWidget *w, GWDBFile *file); #endif gwhere-0.2.3/src/gui/gwreferences.h0000744000175000017500000000404710023202520015632 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header GWReferences.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component. * @author Sébastien LECACHEUR * @version 1.0 2002/02/13 * @link GWhere Web Site * @link GTK+ Web Site * @author Author */ #ifndef GW_GUI_GW_REFERENCES_H #define GW_GUI_GW_REFERENCES_H /*! @define GW_REF_TREE The catalog tree reference */ #define GW_REF_TREE "gw_tree" /*! @define GW_REF_CLIST_EXPLORER The list of explorer */ #define GW_REF_CLIST_EXPLORER "gw_ref_gw_clist_explorer" /*! @define GW_REF_CLIST_SEARCH The list of search */ #define GW_REF_CLIST_SEARCH "gw_ref_gw_clist_search" /*! @define GW_REF_NOTEBOOK_SEARCH_ENTRY The search text entry */ #define GW_REF_NOTEBOOK_SEARCH_ENTRY "gw_ref_gw_notebook_search_entry" /*! @define GW_REF_PROGRESS_BAR_BOX The progress bar box reference */ #define GW_REF_PROGRESS_BAR_BOX "gw_ref_gw_progress_bar_box" /*! @define GW_REF_NOTEBOOK The main notebook reference */ #define GW_REF_NOTEBOOK "gw_ref_gw_notebook" #endif gwhere-0.2.3/src/gui/gwsettingscatalogfile.c0000744000175000017500000006356010506321776017571 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include /* stcmp */ #include "../gwsupport.h" #include "gwsettingscatalogfile.h" #include "gwsettingswindowbox.h" #include "gwfileselectionbox.h" #include "../gwapplicationmanager.h" #include "../gwguimanager.h" /*! @define GW_PLUGIN_SETTINGS_WINDOW The parent window */ #define GW_PLUGIN_SETTINGS_WINDOW "gw_plugin_settings_window" /*! @define GW_PLUGIN_SETTINGS_CATALOG_COMPRESSION_LEVEL_ENTRY The entry for compression level */ #define GW_PLUGIN_SETTINGS_CATALOG_COMPRESSION_LEVEL_ENTRY "gw_plugin_settings_catalog_compression_level_entry" /*! @define GW_PLUGIN_SETTINGS_CATALOG_HISTORY_SIZE_ENTRY The entry for history size */ #define GW_PLUGIN_SETTINGS_CATALOG_HISTORY_SIZE_ENTRY "gw_plugin_settings_catalog_history_size_entry" /*! @define GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_CHK The check box for autoload catalog */ #define GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_CHK "gw_plugin_settings_catalog_autoload_chk" /*! @define GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_LAST_RADIO The radio button for autoload last opened catalog */ #define GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_LAST_RADIO "gw_plugin_settings_catalog_autoload_last_radio" /*! @define GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_SELECTED_RADIO The radio button for autoload selected catalog */ #define GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_SELECTED_RADIO "gw_plugin_settings_catalog_autoload_selected_radio" /*! @define GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_ENTRY The entry for selected catalog */ #define GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_ENTRY "gw_plugin_settings_catalog_autoload_entry" /*! @define GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_SELECT_BTN The button for select a catalog to autoload */ #define GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_SELECT_BTN "gw_plugin_settings_catalog_autoload_select_btn" /* I don't like global variable, I don't know to do. */ GtkWidget *pane_settings_catalog_file = NULL; gint gw_plugin_settings_catalog_file_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane); gint gw_plugin_settings_catalog_file_pane_load ( GtkWidget *pane); gint gw_plugin_settings_catalog_file_pane_on_change ( GtkEntry *entry, GtkWidget *pane); gint gw_plugin_settings_catalog_file_pane_apply ( GtkWidget *pane); gint gw_plugin_settings_catalog_file_btn_clear_history_click ( GtkButton *btn, GtkWidget *pane); gint gw_plugin_settings_catalog_file_btn_autoload_catalog_click ( GtkButton *btn, GtkWidget *pane); gint gw_plugin_settings_catalog_file_btn_select_catalog_click ( GtkButton *btn, GtkWidget *pane); gint gw_plugin_settings_catalog_file_btn_select_catalog_click_ok ( GtkWidget *bt, GtkFileSelection *fs); gint gw_plugin_settings_catalog_file_init ( GWSettingsModule **module) { gint result = -1; if ( (*module = gw_settings_module_new ( )) != NULL ) { (*module)->name = g_strdup ( _( "Catalog file")); (*module)->create = &gw_plugin_settings_catalog_file_pane_create; (*module)->load = &gw_plugin_settings_catalog_file_pane_load; (*module)->on_change = &gw_plugin_settings_catalog_file_pane_on_change; (*module)->apply = &gw_plugin_settings_catalog_file_pane_apply; result = 0; } return result; } gint gw_plugin_settings_catalog_file_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane) { gint result = -1; GtkWidget *table_pane; GtkWidget *lbl_catalog_level_compression; GtkAdjustment *adj_catalog_level_compression; GtkWidget *spn_catalog_level_compression; GtkWidget *lbl_catalog_history_size; GtkAdjustment *adj_catalog_history_size; GtkWidget *spn_catalog_history_size; GtkWidget *btn_history_clear; GtkWidget *chk_autoload; GtkWidget *entry_autoload_filepath; GtkWidget *btn_autoload; gfloat level = GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_DEFAULT; gfloat size = GW_VALUE_APP_RECENT_SIZE_DEFAULT; GtkTooltips *tooltips; gchar *text_utf8 = NULL; GtkWidget *radio_last = NULL; GtkWidget *radio_selected = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif tooltips = gtk_tooltips_new ( ); if ( settings != NULL && parent != NULL ) { table_pane = gtk_table_new ( 7, 2, TRUE); gtk_widget_ref ( GTK_WIDGET ( settings)); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_WINDOW, settings, (GtkDestroyNotify) gtk_widget_unref); gtk_container_set_border_width ( GTK_CONTAINER ( table_pane), 5); gtk_table_set_row_spacings ( GTK_TABLE (table_pane), 5); gtk_table_set_col_spacings ( GTK_TABLE (table_pane), 5); /* Adds the compression level. */ g_strdup_to_gtk_text ( _( "Catalog compression level :"), text_utf8); lbl_catalog_level_compression = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), lbl_catalog_level_compression, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment ( GTK_MISC ( lbl_catalog_level_compression), 0, 0.5); adj_catalog_level_compression = (GtkAdjustment *) gtk_adjustment_new ( level, GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_MIN, GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_MAX, 1.0, 1.0, 0.0); spn_catalog_level_compression = gtk_spin_button_new ( adj_catalog_level_compression, 0, 0); gtk_widget_ref ( GTK_WIDGET ( spn_catalog_level_compression)); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_CATALOG_COMPRESSION_LEVEL_ENTRY, spn_catalog_level_compression, (GtkDestroyNotify) gtk_widget_unref); gtk_spin_button_set_numeric ( GTK_SPIN_BUTTON ( spn_catalog_level_compression), TRUE); gtk_spin_button_set_wrap ( GTK_SPIN_BUTTON ( spn_catalog_level_compression), TRUE); #if defined ( HAVE_GTK12) gtk_spin_button_set_shadow_type ( GTK_SPIN_BUTTON ( spn_catalog_level_compression), GTK_SHADOW_OUT); #endif g_strdup_to_gtk_text ( _( "Select the catalog compression level. The default value is 3, it's a good value between high performance and small size."), text_utf8); gtk_tooltips_set_tip ( tooltips, spn_catalog_level_compression, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), spn_catalog_level_compression, 1, 2, 0, 1, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); /* Adds the history size. */ g_strdup_to_gtk_text ( _( "Recents opened catalogs :"), text_utf8); lbl_catalog_history_size = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), lbl_catalog_history_size, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment ( GTK_MISC ( lbl_catalog_history_size), 0, 0.5); adj_catalog_history_size = (GtkAdjustment *) gtk_adjustment_new ( size, GW_VALUE_APP_RECENT_SIZE_MIN, GW_VALUE_APP_RECENT_SIZE_MAX, 1.0, 1.0, 0.0); spn_catalog_history_size = gtk_spin_button_new ( adj_catalog_history_size, 0, 0); gtk_widget_ref ( GTK_WIDGET ( spn_catalog_history_size)); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_CATALOG_HISTORY_SIZE_ENTRY, spn_catalog_history_size, (GtkDestroyNotify) gtk_widget_unref); gtk_spin_button_set_numeric ( GTK_SPIN_BUTTON ( spn_catalog_history_size), TRUE); gtk_spin_button_set_wrap ( GTK_SPIN_BUTTON ( spn_catalog_history_size), TRUE); #if defined ( HAVE_GTK12) gtk_spin_button_set_shadow_type ( GTK_SPIN_BUTTON ( spn_catalog_history_size), GTK_SHADOW_OUT); #endif g_strdup_to_gtk_text ( _( "Select the size of recents opened catalogs history. The default value is 5."), text_utf8); gtk_tooltips_set_tip ( tooltips, spn_catalog_history_size, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), spn_catalog_history_size, 1, 2, 1, 2, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); /* Adds the clear history. */ g_strdup_to_gtk_text ( _( "Clear history"), text_utf8); btn_history_clear = gtk_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_signal_connect ( GTK_OBJECT ( btn_history_clear), "clicked", (GtkSignalFunc)gw_plugin_settings_catalog_file_btn_clear_history_click, table_pane); g_strdup_to_gtk_text ( _( "Click here to clear the recents opened files history."), text_utf8); gtk_tooltips_set_tip ( tooltips, btn_history_clear, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), btn_history_clear, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); /* Adds the autload catalog option. */ g_strdup_to_gtk_text ( _( "Autoload catalog"), text_utf8); chk_autoload = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_autoload); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_CHK, chk_autoload, (GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( _( "Autoloads a default catalog when at starting."), text_utf8); gtk_tooltips_set_tip ( tooltips, chk_autoload, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), chk_autoload, 0, 1, 3, 4, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_signal_connect ( GTK_OBJECT ( chk_autoload), "clicked", (GtkSignalFunc)gw_plugin_settings_catalog_file_btn_autoload_catalog_click, table_pane); /* Create the radio button group for autoload options. */ g_strdup_to_gtk_text ( _("Load last opened catalog file."), text_utf8); radio_last = gtk_radio_button_new_with_label_from_widget ( NULL, text_utf8); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), radio_last, 0, 1, 4, 5, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_ref ( radio_last); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_LAST_RADIO, radio_last, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_set_sensitive ( GTK_WIDGET ( radio_last), FALSE); g_strdup_to_gtk_text ( _("Load selected catalog file."), text_utf8); radio_selected = gtk_radio_button_new_with_label_from_widget ( GTK_RADIO_BUTTON ( radio_last), text_utf8); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), radio_selected, 0, 1, 5, 6, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_ref ( radio_selected); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_SELECTED_RADIO, radio_selected, (GtkDestroyNotify) gtk_widget_unref); gtk_widget_set_sensitive ( GTK_WIDGET ( radio_selected), FALSE); entry_autoload_filepath = gtk_entry_new ( ); gtk_widget_ref ( entry_autoload_filepath); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_ENTRY, entry_autoload_filepath, (GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( _( "Enter the full catalog file path to load."), text_utf8); gtk_tooltips_set_tip ( tooltips, entry_autoload_filepath, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), entry_autoload_filepath, 1, 2, 5, 6, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_sensitive ( GTK_WIDGET ( entry_autoload_filepath), FALSE); /* Adds the select catalog file. */ g_strdup_to_gtk_text ( _( "Select catalog"), text_utf8); btn_autoload = gtk_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( btn_autoload); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_SELECT_BTN, btn_autoload, (GtkDestroyNotify) gtk_widget_unref); gtk_signal_connect ( GTK_OBJECT ( btn_autoload), "clicked", (GtkSignalFunc)gw_plugin_settings_catalog_file_btn_select_catalog_click, table_pane); g_strdup_to_gtk_text ( _( "Click here to browse and select the catalog file."), text_utf8); gtk_tooltips_set_tip ( tooltips, btn_autoload, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), btn_autoload, 1, 2, 6, 7, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_widget_set_sensitive ( GTK_WIDGET ( btn_autoload), FALSE); *pane = table_pane; pane_settings_catalog_file = *pane; gw_plugin_settings_catalog_file_pane_load ( table_pane); /* Connects signals after loading. */ gtk_signal_connect ( GTK_OBJECT ( spn_catalog_level_compression), "changed", (GtkSignalFunc)gw_plugin_settings_catalog_file_pane_on_change, table_pane); gtk_signal_connect ( GTK_OBJECT ( spn_catalog_history_size), "changed", (GtkSignalFunc)gw_plugin_settings_catalog_file_pane_on_change, table_pane); gtk_signal_connect ( GTK_OBJECT ( chk_autoload), "clicked", (GtkSignalFunc)gw_plugin_settings_catalog_file_pane_on_change, table_pane); gtk_signal_connect ( GTK_OBJECT ( radio_last), "clicked", (GtkSignalFunc)gw_plugin_settings_catalog_file_pane_on_change, table_pane); gtk_signal_connect ( GTK_OBJECT ( radio_selected), "clicked", (GtkSignalFunc)gw_plugin_settings_catalog_file_pane_on_change, table_pane); gtk_signal_connect ( GTK_OBJECT ( entry_autoload_filepath), "changed", (GtkSignalFunc)gw_plugin_settings_catalog_file_pane_on_change, table_pane); result = 0; } return result; } gint gw_plugin_settings_catalog_file_pane_load ( GtkWidget *pane) { gint result = -1; GtkSpinButton *button = NULL; GtkAdjustment *adj_catalog_level_compression = NULL; GtkAdjustment *adj_catalog_history_size = NULL; GtkToggleButton *chk_autoload = NULL; GtkEntry *entry_autoload_filepath = NULL; gfloat level = GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_DEFAULT; gfloat size = GW_VALUE_APP_RECENT_SIZE_DEFAULT; gfloat autoload = 0; gchar *value = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : loading...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (button = GTK_SPIN_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_COMPRESSION_LEVEL_ENTRY))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the compression level...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif level = gw_am_get_settings_tod ( GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL); #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : compression level is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, level); #endif } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no spin button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } adj_catalog_level_compression = gtk_spin_button_get_adjustment ( button); gtk_adjustment_set_value ( adj_catalog_level_compression, level); button = NULL; value = NULL; /* Checks history size. */ if ( (button = GTK_SPIN_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_HISTORY_SIZE_ENTRY))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the history size...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif size = gw_am_get_settings_tod ( GW_VALUE_APP_RECENT_SIZE); #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : history size is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, size); #endif } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no spin button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } adj_catalog_history_size = gtk_spin_button_get_adjustment ( button); gtk_adjustment_set_value ( adj_catalog_history_size, size); button = NULL; value = NULL; /* Checks autoload option. */ if ( (chk_autoload = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_CHK))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the autoload option...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif autoload = gw_am_get_settings_tod ( GW_VALUE_APP_CATALOG_AUTOLOAD); #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : autoload option is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, autoload); #endif } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no check button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } gtk_toggle_button_set_active ( chk_autoload, (gboolean)autoload); chk_autoload = NULL; value = NULL; /* Checks autoload last option. */ if ( (chk_autoload = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_LAST_RADIO))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the autoload last option...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif autoload = gw_am_get_settings_tod ( GW_VALUE_APP_CATALOG_AUTOLOAD_LAST); #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : autoload last option is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, autoload); #endif } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no check button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } gtk_toggle_button_set_active ( chk_autoload, (gboolean)autoload); chk_autoload = NULL; value = NULL; /* Checks autoload selected option. */ if ( (chk_autoload = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_SELECTED_RADIO))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the autoload selected option...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif autoload = gw_am_get_settings_tod ( GW_VALUE_APP_CATALOG_AUTOLOAD_SELECTED); #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : autoload seletec option is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, autoload); #endif } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no check button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } gtk_toggle_button_set_active ( chk_autoload, (gboolean)autoload); chk_autoload = NULL; value = NULL; /* Checks autoload file path. */ if ( (entry_autoload_filepath = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_ENTRY))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the autoload file path...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif value = gw_am_get_settings ( GW_VALUE_APP_CATALOG_AUTOLOAD_FILEPATH); #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT if ( value != NULL ) { g_print ( "*** GW - %s (%d) :: %s() : autoload file path is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, value); } else { g_print ( "*** GW - %s (%d) :: %s() : autoload file path is NULL\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); } #endif } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no entry!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } g_strdup_to_gtk_text ( value, text_utf8); gtk_entry_set_text ( entry_autoload_filepath, text_utf8); g_free ( text_utf8); entry_autoload_filepath = NULL; value = NULL; result = 0; } return result; } gint gw_plugin_settings_catalog_file_pane_on_change ( GtkEntry *entry, GtkWidget *pane) { gint result = -1; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } return result; } gint gw_plugin_settings_catalog_file_pane_apply ( GtkWidget *pane) { gint result = -1; GtkEntry *entry = NULL; GtkToggleButton *chk = NULL; gchar *value = NULL; gboolean bool_value = 0; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_COMPRESSION_LEVEL_ENTRY))) != NULL) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( entry)), value); gw_am_set_settings ( GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL, value); } entry = NULL; value = NULL; if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_HISTORY_SIZE_ENTRY))) != NULL) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( entry)), value); gw_am_set_settings ( GW_VALUE_APP_RECENT_SIZE, value); } entry = NULL; value = NULL; if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_CHK))) != NULL) { bool_value = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); gw_am_set_settings ( GW_VALUE_APP_CATALOG_AUTOLOAD, g_strdup_printf ( "%d", (gint)bool_value)); } entry = NULL; value = NULL; if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_LAST_RADIO))) != NULL) { bool_value = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); gw_am_set_settings ( GW_VALUE_APP_CATALOG_AUTOLOAD_LAST, g_strdup_printf ( "%d", (gint)bool_value)); } entry = NULL; value = NULL; if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_SELECTED_RADIO))) != NULL) { bool_value = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); gw_am_set_settings ( GW_VALUE_APP_CATALOG_AUTOLOAD_SELECTED, g_strdup_printf ( "%d", (gint)bool_value)); } entry = NULL; value = NULL; if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_ENTRY))) != NULL) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( entry)), value); gw_am_set_settings ( GW_VALUE_APP_CATALOG_AUTOLOAD_FILEPATH, value); } entry = NULL; value = NULL; if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, FALSE); } result = 0; } return result; } gint gw_plugin_settings_catalog_file_btn_clear_history_click ( GtkButton *btn, GtkWidget *pane) { gint result = -1; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL) { gw_am_set_settings ( GW_VALUE_APP_RECENTS_FILES, g_strdup ( "")); gw_gui_manager_main_interface_update_all ( ); result = 0; } return result; } gint gw_plugin_settings_catalog_file_btn_autoload_catalog_click ( GtkButton *btn, GtkWidget *pane) { gint result = -1; gboolean activation = FALSE; GtkWidget *widget = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL && btn != NULL) { activation = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( btn)); if ( (widget = GTK_WIDGET ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_LAST_RADIO))) != NULL ) { gtk_widget_set_sensitive ( GTK_WIDGET ( widget), activation); } if ( (widget = GTK_WIDGET ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_SELECTED_RADIO))) != NULL ) { gtk_widget_set_sensitive ( GTK_WIDGET ( widget), activation); } if ( (widget = GTK_WIDGET ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_ENTRY))) != NULL ) { gtk_widget_set_sensitive ( GTK_WIDGET ( widget), activation); } if ( (widget = GTK_WIDGET ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_SELECT_BTN))) != NULL ) { gtk_widget_set_sensitive ( GTK_WIDGET ( widget), activation); } result = 0; } return result; } gint gw_plugin_settings_catalog_file_btn_select_catalog_click ( GtkButton *btn, GtkWidget *pane) { gint result = -1; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL) { gw_file_selection_box_create ( _( "Select autoloaded catalog"), NULL, (GtkSignalFunc)gw_plugin_settings_catalog_file_btn_select_catalog_click_ok, NULL); result = 0; } return result; } gint gw_plugin_settings_catalog_file_btn_select_catalog_click_ok ( GtkWidget *bt, GtkFileSelection *fs) { gint result = -1; GtkEntry *entry_autoload_filepath = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( GTK_FILE_SELECTION ( fs)->selection_entry)), text_utf8); if ( strcmp ( text_utf8, "") != 0 ) { if ( (entry_autoload_filepath = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( pane_settings_catalog_file), GW_PLUGIN_SETTINGS_CATALOG_AUTOLOAD_ENTRY))) != NULL) { gtk_entry_set_text ( entry_autoload_filepath, gtk_file_selection_get_filename ( fs)); result = 0; } } g_free ( text_utf8); gtk_widget_destroy ( GTK_WIDGET ( fs)); } return result; } gwhere-0.2.3/src/gui/gwsettingscatalogfile.h0000744000175000017500000000365710023202520017552 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsettingscatalogfile.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to configure some settings about catalog file. * @author Sébastien LECACHEUR * @version 1.0 2003/02/06 * @see gwsupport.h * @link GWhere Web Site * @ref gwsettingscatalogfile.c * @ref gwsettingsinterface.c * @author Author */ #ifndef GW_GUI_GW_SETTINGS_CATALOG_FILE_H #define GW_GUI_GW_SETTINGS_CATALOG_FILE_H #include "gwsettingsinterface.h" /*! * @function gw_plugin_settings_catalog_file_init * @abstract Initializes the catalog file plugin. * @discussion This function initializes the catalog file plugin. * @param module module to store the plugin * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_plugin_settings_catalog_file_init ( GWSettingsModule **module); #endif gwhere-0.2.3/src/gui/gwsettingsexplorer.c0000744000175000017500000003374110506322142017141 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include /* strcmp */ #include "../gwsupport.h" #include "gwsettingsexplorer.h" #include "gwsettingswindowbox.h" #include "gwsettingsexplorerdisk.h" #include "gwsettingsexplorerfile.h" #include "../gwapplicationmanager.h" /*! @define GW_PLUGIN_SETTINGS_WINDOW The parent window */ #define GW_PLUGIN_SETTINGS_WINDOW "gw_plugin_settings_window" /*! @define GW_PLUGIN_SETTINGS_EXPLORER_SORT_CASE_SENSITIVE_CHK The check box for case sensitive sort */ #define GW_PLUGIN_SETTINGS_EXPLORER_SORT_CASE_SENSITIVE_CHK "gw_plugin_settings_explorer_sort_case_sensitive_chk" /*! @define GW_PLUGIN_SETTINGS_EXPLORER_SORT_GROUP_BY_FOLDER_CHK The check box for group by type the result sort */ #define GW_PLUGIN_SETTINGS_EXPLORER_SORT_GROUP_BY_FOLDER_CHK "gw_plugin_settings_explorer_sort_group_by_folder_chk" /*! @define GW_PLUGIN_SETTINGS_EXPLORER_AUTORESIZE_COLUMN_CHK The check box for autoresize column */ #define GW_PLUGIN_SETTINGS_EXPLORER_AUTORESIZE_COLUMN_CHK "gw_plugin_settings_explorer_autoresize_column_chk" /* I don't like global variable, I don't know to do. */ GtkWidget *pane_settings_explorer = NULL; gint gw_plugin_settings_explorer_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane); gint gw_plugin_settings_explorer_pane_load ( GtkWidget *pane); gint gw_plugin_settings_explorer_pane_on_change ( GtkEntry *entry, GtkWidget *pane); gint gw_plugin_settings_explorer_pane_apply ( GtkWidget *pane); gint gw_plugin_settings_explorer_init ( GWSettingsModule **module) { gint result = -1; if ( (*module = gw_settings_module_new ( )) != NULL ) { (*module)->name = g_strdup ( _( "Explorer")); (*module)->create = &gw_plugin_settings_explorer_pane_create; (*module)->load = &gw_plugin_settings_explorer_pane_load; (*module)->on_change = &gw_plugin_settings_explorer_pane_on_change; (*module)->apply = &gw_plugin_settings_explorer_pane_apply; (*module)->child = (GWSettingsModule**)g_malloc ( sizeof ( GWSettingsModule*) * 3); if ( (*module)->child != NULL) { (*module)->child[0] = NULL; (*module)->child[1] = NULL; (*module)->child[2] = NULL; gw_plugin_settings_explorer_disk_init ( &((*module)->child[0])); gw_plugin_settings_explorer_file_init ( &((*module)->child[1])); } result = 0; } return result; } gint gw_plugin_settings_explorer_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane) { gint result = -1; GtkWidget *table_pane; GtkWidget *chk_sort_group_by; GtkWidget *chk_sort_case_sensitive; GtkWidget *chk_autoresize; GtkTooltips *tooltips; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif tooltips = gtk_tooltips_new ( ); if ( settings != NULL && parent != NULL ) { table_pane = gtk_table_new ( 5, 2, FALSE); gtk_widget_ref ( GTK_WIDGET ( settings)); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_WINDOW, settings, (GtkDestroyNotify) gtk_widget_unref); gtk_container_set_border_width ( GTK_CONTAINER ( table_pane), 5); gtk_table_set_row_spacings ( GTK_TABLE (table_pane), 5); gtk_table_set_col_spacings ( GTK_TABLE (table_pane), 5); /* Adds the case sensitive sort option. */ g_strdup_to_gtk_text ( _( "Case sensitive sort."), text_utf8); chk_sort_case_sensitive = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_sort_case_sensitive); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_EXPLORER_SORT_CASE_SENSITIVE_CHK, chk_sort_case_sensitive, (GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( _( "The result sort in explorer is case sensitive."), text_utf8); gtk_tooltips_set_tip ( tooltips, chk_sort_case_sensitive, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), chk_sort_case_sensitive, 0, 1, 0, 1, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); /* Adds the sort group by type option. */ g_strdup_to_gtk_text ( _( "Result sort group by folder/file."), text_utf8); chk_sort_group_by = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_sort_group_by); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_EXPLORER_SORT_GROUP_BY_FOLDER_CHK, chk_sort_group_by, (GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( _( "The result sort in explorer can be grouped by item type. If this option is checked all item will be grouped by folders or files."), text_utf8); gtk_tooltips_set_tip ( tooltips, chk_sort_group_by, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), chk_sort_group_by, 0, 1, 1, 2, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); /* Adds the autoload catalog option. */ g_strdup_to_gtk_text ( _( "Autoresize columns"), text_utf8); chk_autoresize = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_autoresize); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_EXPLORER_AUTORESIZE_COLUMN_CHK, chk_autoresize, (GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( _( "Autoresize all explorer column."), text_utf8); gtk_tooltips_set_tip ( tooltips, chk_autoresize, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), chk_autoresize, 0, 1, 2, 3, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); *pane = table_pane; pane_settings_explorer = *pane; gw_plugin_settings_explorer_pane_load ( table_pane); /* Connects signals after loading. */ gtk_signal_connect ( GTK_OBJECT ( chk_sort_case_sensitive), "clicked", (GtkSignalFunc)gw_plugin_settings_explorer_pane_on_change, table_pane); gtk_signal_connect ( GTK_OBJECT ( chk_sort_group_by), "clicked", (GtkSignalFunc)gw_plugin_settings_explorer_pane_on_change, table_pane); gtk_signal_connect ( GTK_OBJECT ( chk_autoresize), "clicked", (GtkSignalFunc)gw_plugin_settings_explorer_pane_on_change, table_pane); result = 0; } return result; } gint gw_plugin_settings_explorer_pane_load ( GtkWidget *pane) { gint result = -1; GtkToggleButton *chk_bt = NULL; gfloat value = -1; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : loading...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Checks case sensitive sort option. */ if ( (chk_bt = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_SORT_CASE_SENSITIVE_CHK))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the case sensitive sort option...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (value = gw_am_get_settings_tod ( GW_VALUE_APP_EXPLORER_SORT_CASE_SENSITIVE)) == -1 ) { value = GW_VALUE_APP_EXPLORER_SORT_CASE_SENSITIVE_DEFAULT; } #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : case sensitive sort option is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, value); #endif gtk_toggle_button_set_active ( chk_bt, (gboolean)value); } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no check button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } chk_bt = NULL; /* Checks sort group by option. */ if ( (chk_bt = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_SORT_GROUP_BY_FOLDER_CHK))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the sort group by option...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (value = gw_am_get_settings_tod ( GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER)) == -1 ) { value = GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER_DEFAULT; } #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : sort group by option is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, value); #endif gtk_toggle_button_set_active ( chk_bt, (gboolean)value); } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no check button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } chk_bt = NULL; /* Checks autoresize option. */ if ( (chk_bt = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_AUTORESIZE_COLUMN_CHK))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the autoresize option...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (value = gw_am_get_settings_tod ( GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE)) == -1 ) { value = GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE_DEFAULT; } #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : autoresize option is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, value); #endif gtk_toggle_button_set_active ( chk_bt, (gboolean)value); } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no check button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } chk_bt = NULL; result = 0; } return result; } gint gw_plugin_settings_explorer_pane_on_change ( GtkEntry *entry, GtkWidget *pane) { gint result = -1; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } return result; } gint gw_plugin_settings_explorer_pane_apply ( GtkWidget *pane) { gint result = -1; GtkToggleButton *chk = NULL; gchar *value = NULL; gboolean bool_value = 0; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_SORT_CASE_SENSITIVE_CHK))) != NULL) { bool_value = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); gw_am_set_settings ( GW_VALUE_APP_EXPLORER_SORT_CASE_SENSITIVE, g_strdup_printf ( "%d", (gint)bool_value)); } value = NULL; if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_SORT_GROUP_BY_FOLDER_CHK))) != NULL) { bool_value = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); gw_am_set_settings ( GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER, g_strdup_printf ( "%d", (gint)bool_value)); } value = NULL; if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_AUTORESIZE_COLUMN_CHK))) != NULL) { bool_value = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); gw_am_set_settings ( GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE, g_strdup_printf ( "%d", (gint)bool_value)); } value = NULL; if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, FALSE); } result = 0; } return result; } GWSettingsExplorerField * gw_settings_explorer_field_new ( void) { GWSettingsExplorerField *p = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (p = (GWSettingsExplorerField*)g_malloc ( sizeof ( GWSettingsExplorerField))) != NULL ) { p->name = NULL; p->position = -1; p->position_v = NULL; p->visible = FALSE; p->visible_v = NULL; } return p; } GWSettingsExplorerField * gw_settings_explorer_field_find_by_name ( GWSettingsExplorerField **p, const gchar *name) { GWSettingsExplorerField *field = NULL; gint i = 0; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (p != NULL) && (name != NULL) ) { while ( p[i] != NULL ) { if ( (p[i]->name != NULL) && (strcmp ( name, p[i]->name) == 0) ) { field = p[i]; } i++; } } return field; } gint gw_settings_explorer_field_free ( GWSettingsExplorerField * p) { gint result = -1; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->name != NULL ) { g_free ( p->name); p->name = NULL; } if ( p->position_v != NULL ) { g_free ( p->position_v); p->position_v = NULL; } if ( p->visible_v != NULL ) { g_free ( p->visible_v); p->visible_v = NULL; } g_free ( p); result = 0; } return result; } gint gw_settings_explorer_field_freev ( GWSettingsExplorerField **p) { gint result = -1; gint i = 0; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { for ( i = 0; p[i] != NULL; i++) { gw_settings_explorer_field_free ( p[i]); p[i] = NULL; } g_free ( p); result = 0; } return result; } gwhere-0.2.3/src/gui/gwsettingsexplorer.h0000744000175000017500000001016710270034573017151 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsettingsexplorer.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to configure some settings about the explorer. * @author Sébastien LECACHEUR * @version 1.0 2003/02/06 * @see gwsupport.h * @link GWhere Web Site * @ref gwsettingsexplorer.c * @ref gwsettingsinterface.c * @author Author */ #ifndef GW_GUI_GW_SETTINGS_EXPLORER_H #define GW_GUI_GW_SETTINGS_EXPLORER_H #include "gwsettingsinterface.h" /*! * @typedef gw_settings_explorer_field_s * Settings Explorer Field structure. * @abstract This structure describe all properties of a field in the explorer * @field name name of the field * @field position position of the field * @field position_v variable name to store position of the field * @field visible is the field must be showed * @field visible_v variable name to store show mode of the field */ typedef struct gw_settings_explorer_field_s { gchar *name; gint position; gchar *position_v; gboolean visible; gchar *visible_v; } GWSettingsExplorerField; /*! * @function gw_plugin_settings_explorer_init * @abstract Initializes the explorer plugin. * @discussion This function initializes the explorer plugin. * @param module module to store the plugin * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_plugin_settings_explorer_init ( GWSettingsModule **module); /*! * @function gw_settings_explorer_field_new * @abstract Creates a new GWSettingsExplorerField. * @discussion This function creates a new GWSettingsExplorerField * @result a new settings explorer field.
* Returns NULL when an error occured.
*/ GWSettingsExplorerField * gw_settings_explorer_field_new ( void); /*! * @function gw_settings_explorer_field_find_by_name * @abstract Searches in a table of settings explorer field one field. * @discussion This function searches in a table of settings explorer field one field. * @param p table in which search * @param name name of field to search * @result the searched settings explorer field.
* Returns NULL if it doesn't exist or when an error occured.
*/ GWSettingsExplorerField * gw_settings_explorer_field_find_by_name ( GWSettingsExplorerField **p, const gchar *name); /*! * @function gw_settings_explorer_field_free * @abstract Frees a settings explorer field. * @discussion This function frees a settings explorer field. * @param p settings explorer field to free * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_settings_explorer_field_free ( GWSettingsExplorerField *p); /*! * @function gw_settings_explorer_field_freev * @abstract Frees a table of settings explorer field. * @discussion This function frees a table of settings explorer field. * @param p table of settings explorer field to free * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_settings_explorer_field_freev ( GWSettingsExplorerField **p); #endif gwhere-0.2.3/src/gui/gwsettingsexplorerdisk.c0000744000175000017500000003414010247421307020013 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwsettingsexplorerdisk.h" #include "gwsettingswindowbox.h" #include "gwsettingsexplorer.h" #include "../gwapplicationmanager.h" /*! @define GW_PLUGIN_SETTINGS_WINDOW The parent window */ #define GW_PLUGIN_SETTINGS_WINDOW "gw_plugin_settings_window" /*! @define GW_PLUGIN_SETTINGS_EXPLORER_DISK_FIELDS_TABLE The table of fields */ #define GW_PLUGIN_SETTINGS_EXPLORER_DISK_FIELDS_TABLE "gw_plugin_settings_explorer_disk_fields_table" /*! @define GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_VISIBLE The list of visible fields */ #define GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_VISIBLE "gw_plugin_settings_explorer_disk_list_visible" /*! @define GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_HIDDEN The list of hidden fields */ #define GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_HIDDEN "gw_plugin_settings_explorer_disk_list_hidden" gint gw_plugin_settings_explorer_disk_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane); gint gw_plugin_settings_explorer_disk_pane_load ( GtkWidget *pane); gint gw_plugin_settings_explorer_disk_pane_on_change ( GtkEntry *entry, GtkWidget *pane); gint gw_plugin_settings_explorer_disk_pane_apply ( GtkWidget *pane); gint gw_plugin_settings_explorer_disk_btn_show_click ( GtkButton *btn, GtkWidget *pane); gint gw_plugin_settings_explorer_disk_btn_hide_click ( GtkButton *btn, GtkWidget *pane); gboolean gw_plugin_settings_explorer_disk_destroy ( GtkWidget *pane, gpointer data); gint gw_plugin_settings_explorer_disk_init ( GWSettingsModule **module) { gint result = -1; if ( (*module = gw_settings_module_new ( )) != NULL ) { (*module)->name = g_strdup ( _( "Disks")); (*module)->create = &gw_plugin_settings_explorer_disk_pane_create; (*module)->load = &gw_plugin_settings_explorer_disk_pane_load; (*module)->on_change = &gw_plugin_settings_explorer_disk_pane_on_change; (*module)->apply = &gw_plugin_settings_explorer_disk_pane_apply; result = 0; } return result; } gint gw_plugin_settings_explorer_disk_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane) { gint result = -1; GtkWidget *hbox; GtkWidget *scr_clist_hidden; GtkWidget *clist_hidden; GtkWidget *col_title_hidden; GtkWidget *vbox_btn; GtkWidget *btn_hidden; GtkWidget *btn_show; GtkWidget *scr_clist_visible; GtkWidget *clist_visible; GtkWidget *col_title_visible; GtkTooltips *tooltips; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( settings != NULL && parent != NULL ) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : Creating configuration pane...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif tooltips = gtk_tooltips_new ( ); hbox = gtk_hbox_new ( FALSE, 0); gtk_widget_ref ( GTK_WIDGET ( settings)); gtk_object_set_data_full ( GTK_OBJECT ( hbox), GW_PLUGIN_SETTINGS_WINDOW, settings, (GtkDestroyNotify) gtk_widget_unref); gtk_container_set_border_width ( GTK_CONTAINER ( hbox), 5); scr_clist_visible = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( hbox), scr_clist_visible, TRUE, TRUE, 0); clist_visible = gtk_clist_new ( 1); gtk_widget_ref ( clist_visible); gtk_object_set_data_full ( GTK_OBJECT ( hbox), GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_VISIBLE, clist_visible, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( scr_clist_visible), clist_visible); gtk_clist_set_column_width ( GTK_CLIST ( clist_visible), 0, 80); gtk_clist_optimal_column_width ( GTK_CLIST ( clist_visible), 0); gtk_clist_column_titles_show (GTK_CLIST (clist_visible)); g_strdup_to_gtk_text ( _( "Visible"), text_utf8); col_title_visible = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_clist_set_column_widget ( GTK_CLIST ( clist_visible), 0, col_title_visible); vbox_btn = gtk_vbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( hbox), vbox_btn, TRUE, TRUE, 5); g_strdup_to_gtk_text ( _( "Hide"), text_utf8); btn_hidden = gtk_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( vbox_btn), btn_hidden, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Show"), text_utf8); btn_show = gtk_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( vbox_btn), btn_show, FALSE, FALSE, 0); scr_clist_hidden = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( hbox), scr_clist_hidden, TRUE, TRUE, 0); clist_hidden = gtk_clist_new ( 1); gtk_widget_ref ( clist_hidden); gtk_object_set_data_full ( GTK_OBJECT ( hbox), GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_HIDDEN, clist_hidden, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER (scr_clist_hidden), clist_hidden); gtk_clist_set_column_width ( GTK_CLIST ( clist_hidden), 0, 80); gtk_clist_optimal_column_width ( GTK_CLIST ( clist_hidden), 0); gtk_clist_column_titles_show ( GTK_CLIST ( clist_hidden)); g_strdup_to_gtk_text ( _( "Hidden"), text_utf8); col_title_hidden = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_clist_set_column_widget ( GTK_CLIST ( clist_hidden), 0, col_title_hidden); *pane = hbox; gw_plugin_settings_explorer_disk_pane_load ( hbox); /* Connects signals after loading. */ #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : connecting all callbacks to signals...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_signal_connect ( GTK_OBJECT ( hbox), "destroy", (GtkSignalFunc)gw_plugin_settings_explorer_disk_destroy, NULL); gtk_signal_connect ( GTK_OBJECT ( btn_hidden), "clicked", (GtkSignalFunc)gw_plugin_settings_explorer_disk_btn_hide_click, hbox); gtk_signal_connect ( GTK_OBJECT ( btn_show), "clicked", (GtkSignalFunc)gw_plugin_settings_explorer_disk_btn_show_click, hbox); result = 0; } return result; } gint gw_plugin_settings_explorer_disk_pane_load ( GtkWidget *pane) { gint result = -1; GtkCList *list_visible = NULL; GtkCList *list_hidden = NULL; GtkCList *list = NULL; GWSettingsExplorerField **fields; gint i; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { list_visible = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_VISIBLE)); list_hidden = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_HIDDEN)); if ( (list_visible != NULL) && (list_hidden != NULL) ) { if ( (fields = gw_plugin_settings_explorer_disk_get_all_fields ( )) != NULL ) { gtk_object_set_data_full ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_DISK_FIELDS_TABLE, fields, (GtkDestroyNotify) gw_settings_explorer_field_freev); gtk_clist_freeze ( list_visible); gtk_clist_freeze ( list_hidden); for ( i = 0; fields[i] != NULL; i++) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : adding the field %s to the list visible/hidden\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, fields[i]->name); #endif if ( fields[i]->visible == TRUE ) { list = list_visible; } else { list = list_hidden; } gtk_clist_append ( list, &fields[i]->name); } gtk_clist_thaw ( list_visible); gtk_clist_thaw ( list_hidden); } #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : all fields are loaded.\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } result = 0; } return result; } gint gw_plugin_settings_explorer_disk_pane_on_change ( GtkEntry *entry, GtkWidget *pane) { gint result = -1; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } return result; } gint gw_plugin_settings_explorer_disk_pane_apply ( GtkWidget *pane) { gint result = -1; GtkCList *list_visible = NULL; GtkCList *list_hidden = NULL; GtkWindow *settings = NULL; GWSettingsExplorerField **fields = NULL; gint i = 0; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { list_visible = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_VISIBLE)); list_hidden = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_HIDDEN)); fields = (GWSettingsExplorerField**)gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_DISK_FIELDS_TABLE); if ( (list_visible != NULL) && (list_hidden != NULL) && (fields != NULL) ) { for ( i = 0; fields[i] != NULL; i++) { gw_am_set_settings ( fields[i]->visible_v, g_strdup_printf ( "%d", (gint)fields[i]->visible)); gw_am_set_settings ( fields[i]->position_v, g_strdup_printf ( "%d", (gint)fields[i]->position)); } } if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, FALSE); } result = 0; } return result; } gint gw_plugin_settings_explorer_disk_btn_show_click ( GtkButton *btn, GtkWidget *pane) { gint result = -1; GtkCList *list_visible = NULL; GtkCList *list_hidden = NULL; gchar *text = NULL; GtkWindow *settings = NULL; gint row = -1; GWSettingsExplorerField **fields = NULL; GWSettingsExplorerField *field = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL) { list_visible = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_VISIBLE)); list_hidden = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_HIDDEN)); fields = (GWSettingsExplorerField**)gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_DISK_FIELDS_TABLE); if ( (list_visible != NULL) && (list_hidden != NULL) ) { if ( list_hidden->selection != NULL ) { row = GPOINTER_TO_INT ( ((GList*)(list_hidden->selection))->data); if ( row >= 0 ) { gtk_clist_freeze ( list_visible); gtk_clist_freeze ( list_hidden); /* Move the column to the hidden list. */ gtk_clist_get_text ( list_hidden, row, 0, &text); gtk_clist_append ( list_visible, &text); field = gw_settings_explorer_field_find_by_name ( fields, text); if ( field != NULL ) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : %s is showed now\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, field->name); #endif field->visible = TRUE; } gtk_clist_remove ( list_hidden, row); gtk_clist_thaw ( list_visible); gtk_clist_thaw ( list_hidden); if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } } } } return result; } gint gw_plugin_settings_explorer_disk_btn_hide_click ( GtkButton *btn, GtkWidget *pane) { gint result = -1; GtkCList *list_visible = NULL; GtkCList *list_hidden = NULL; gchar *text = NULL; GtkWindow *settings = NULL; gint row = -1; GWSettingsExplorerField **fields = NULL; GWSettingsExplorerField *field = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL) { list_visible = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_VISIBLE)); list_hidden = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_DISK_LIST_HIDDEN)); fields = (GWSettingsExplorerField**)gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_DISK_FIELDS_TABLE); if ( (list_visible != NULL) && (list_hidden != NULL) ) { if ( list_visible->selection != NULL ) { row = GPOINTER_TO_INT ( ((GList*)(list_visible->selection))->data); if ( row >= 0 ) { gtk_clist_freeze ( list_visible); gtk_clist_freeze ( list_hidden); /* Move the column to the hidden list. */ gtk_clist_get_text ( list_visible, row, 0, &text); gtk_clist_append ( list_hidden, &text); field = gw_settings_explorer_field_find_by_name ( fields, text); if ( field != NULL ) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : %s is hidden now\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, field->name); #endif field->visible = FALSE; } gtk_clist_remove ( list_visible, row); gtk_clist_thaw ( list_visible); gtk_clist_thaw ( list_hidden); if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } } } } return result; } gboolean gw_plugin_settings_explorer_disk_destroy ( GtkWidget *pane, gpointer data) { gboolean result = FALSE; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return result; } gwhere-0.2.3/src/gui/gwsettingsexplorerdisk.h0000744000175000017500000000367010023202520020006 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsettingsexplorerdisk.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to configure some settings about explorer disk. * @author Sébastien LECACHEUR * @version 1.0 2003/02/06 * @see gwsupport.h * @link GWhere Web Site * @ref gwsettingsexplorerdisk.c * @ref gwsettingsinterface.c * @author Author */ #ifndef GW_GUI_GW_SETTINGS_EXPLORER_DISK_H #define GW_GUI_GW_SETTINGS_EXPLORER_DISK_H #include "gwsettingsinterface.h" /*! * @function gw_plugin_settings_explorer_disk_init * @abstract Initializes the explorer disk plugin. * @discussion This function initializes the explorer disk plugin. * @param module module to store the plugin * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_plugin_settings_explorer_disk_init ( GWSettingsModule **module); #endif gwhere-0.2.3/src/gui/gwsettingsexplorerfile.c0000744000175000017500000003410010247421307017774 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwsettingsexplorerfile.h" #include "gwsettingswindowbox.h" #include "../gwapplicationmanager.h" /*! @define GW_PLUGIN_SETTINGS_WINDOW The parent window */ #define GW_PLUGIN_SETTINGS_WINDOW "gw_plugin_settings_window" /*! @define GW_PLUGIN_SETTINGS_EXPLORER_FILE_FIELDS_TABLE The table of fields */ #define GW_PLUGIN_SETTINGS_EXPLORER_FILE_FIELDS_TABLE "gw_plugin_settings_explorer_file_fields_table" /*! @define GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_VISIBLE The list of visible fields */ #define GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_VISIBLE "gw_plugin_settings_explorer_file_list_visible" /*! @define GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_HIDDEN The list of hidden fields */ #define GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_HIDDEN "gw_plugin_settings_explorer_file_list_hidden" gint gw_plugin_settings_explorer_file_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane); gint gw_plugin_settings_explorer_file_pane_load ( GtkWidget *pane); gint gw_plugin_settings_explorer_file_pane_on_change ( GtkEntry *entry, GtkWidget *pane); gint gw_plugin_settings_explorer_file_pane_apply ( GtkWidget *pane); gint gw_plugin_settings_explorer_file_btn_show_click ( GtkButton *btn, GtkWidget *pane); gint gw_plugin_settings_explorer_file_btn_hide_click ( GtkButton *btn, GtkWidget *pane); gboolean gw_plugin_settings_explorer_file_destroy ( GtkWidget *pane, gpointer data); gint gw_plugin_settings_explorer_file_init ( GWSettingsModule **module) { gint result = -1; if ( (*module = gw_settings_module_new ( )) != NULL ) { (*module)->name = g_strdup ( _( "Files")); (*module)->create = &gw_plugin_settings_explorer_file_pane_create; (*module)->load = &gw_plugin_settings_explorer_file_pane_load; (*module)->on_change = &gw_plugin_settings_explorer_file_pane_on_change; (*module)->apply = &gw_plugin_settings_explorer_file_pane_apply; result = 0; } return result; } gint gw_plugin_settings_explorer_file_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane) { gint result = -1; GtkWidget *hbox; GtkWidget *scr_clist_hidden; GtkWidget *clist_hidden; GtkWidget *col_title_hidden; GtkWidget *vbox_btn; GtkWidget *btn_hidden; GtkWidget *btn_show; GtkWidget *scr_clist_visible; GtkWidget *clist_visible; GtkWidget *col_title_visible; GtkTooltips *tooltips; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( settings != NULL && parent != NULL ) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : Creating configuration pane...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif tooltips = gtk_tooltips_new ( ); hbox = gtk_hbox_new ( FALSE, 0); gtk_widget_ref ( GTK_WIDGET ( settings)); gtk_object_set_data_full ( GTK_OBJECT ( hbox), GW_PLUGIN_SETTINGS_WINDOW, settings, (GtkDestroyNotify) gtk_widget_unref); gtk_container_set_border_width ( GTK_CONTAINER ( hbox), 5); scr_clist_visible = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( hbox), scr_clist_visible, TRUE, TRUE, 0); clist_visible = gtk_clist_new ( 1); gtk_widget_ref ( clist_visible); gtk_object_set_data_full ( GTK_OBJECT ( hbox), GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_VISIBLE, clist_visible, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( scr_clist_visible), clist_visible); gtk_clist_set_column_width ( GTK_CLIST ( clist_visible), 0, 80); gtk_clist_optimal_column_width ( GTK_CLIST ( clist_visible), 0); gtk_clist_column_titles_show (GTK_CLIST (clist_visible)); g_strdup_to_gtk_text ( _( "Visible"), text_utf8); col_title_visible = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_clist_set_column_widget ( GTK_CLIST ( clist_visible), 0, col_title_visible); vbox_btn = gtk_vbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( hbox), vbox_btn, TRUE, TRUE, 5); g_strdup_to_gtk_text ( _( "Hide"), text_utf8); btn_hidden = gtk_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( vbox_btn), btn_hidden, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Show"), text_utf8); btn_show = gtk_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( vbox_btn), btn_show, FALSE, FALSE, 0); scr_clist_hidden = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( hbox), scr_clist_hidden, TRUE, TRUE, 0); clist_hidden = gtk_clist_new ( 1); gtk_widget_ref ( clist_hidden); gtk_object_set_data_full ( GTK_OBJECT ( hbox), GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_HIDDEN, clist_hidden, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER (scr_clist_hidden), clist_hidden); gtk_clist_set_column_width ( GTK_CLIST ( clist_hidden), 0, 80); gtk_clist_optimal_column_width ( GTK_CLIST ( clist_hidden), 0); gtk_clist_column_titles_show ( GTK_CLIST ( clist_hidden)); g_strdup_to_gtk_text ( _( "Hidden"), text_utf8); col_title_hidden = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_clist_set_column_widget ( GTK_CLIST ( clist_hidden), 0, col_title_hidden); *pane = hbox; gw_plugin_settings_explorer_file_pane_load ( hbox); /* Connects signals after loading. */ #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : connecting all callbacks to signals...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_signal_connect ( GTK_OBJECT ( hbox), "destroy", (GtkSignalFunc)gw_plugin_settings_explorer_file_destroy, NULL); gtk_signal_connect ( GTK_OBJECT ( btn_hidden), "clicked", (GtkSignalFunc)gw_plugin_settings_explorer_file_btn_hide_click, hbox); gtk_signal_connect ( GTK_OBJECT ( btn_show), "clicked", (GtkSignalFunc)gw_plugin_settings_explorer_file_btn_show_click, hbox); result = 0; } return result; } gint gw_plugin_settings_explorer_file_pane_load ( GtkWidget *pane) { gint result = -1; GtkCList *list_visible = NULL; GtkCList *list_hidden = NULL; GtkCList *list = NULL; GWSettingsExplorerField **fields; gint i; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { list_visible = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_VISIBLE)); list_hidden = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_HIDDEN)); if ( (list_visible != NULL) && (list_hidden != NULL) ) { if ( (fields = gw_plugin_settings_explorer_file_get_all_fields ( )) != NULL ) { gtk_object_set_data_full ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_FILE_FIELDS_TABLE, fields, (GtkDestroyNotify) gw_settings_explorer_field_freev); gtk_clist_freeze ( list_visible); gtk_clist_freeze ( list_hidden); for ( i = 0; fields[i] != NULL; i++) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : adding the field %s to the list visible/hidden\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, fields[i]->name); #endif if ( fields[i]->visible == TRUE ) { list = list_visible; } else { list = list_hidden; } gtk_clist_append ( list, &fields[i]->name); } gtk_clist_thaw ( list_visible); gtk_clist_thaw ( list_hidden); } #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : all fields are loaded.\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } result = 0; } return result; } gint gw_plugin_settings_explorer_file_pane_on_change ( GtkEntry *entry, GtkWidget *pane) { gint result = -1; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } return result; } gint gw_plugin_settings_explorer_file_pane_apply ( GtkWidget *pane) { gint result = -1; GtkCList *list_visible = NULL; GtkCList *list_hidden = NULL; GtkWindow *settings = NULL; GWSettingsExplorerField **fields = NULL; gint i = 0; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { list_visible = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_VISIBLE)); list_hidden = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_HIDDEN)); fields = (GWSettingsExplorerField**)gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_FILE_FIELDS_TABLE); if ( (list_visible != NULL) && (list_hidden != NULL) && (fields != NULL) ) { for ( i = 0; fields[i] != NULL; i++) { gw_am_set_settings ( fields[i]->visible_v, g_strdup_printf ( "%d", (gint)fields[i]->visible)); gw_am_set_settings ( fields[i]->position_v, g_strdup_printf ( "%d", (gint)fields[i]->position)); } } if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, FALSE); } result = 0; } return result; } gint gw_plugin_settings_explorer_file_btn_show_click ( GtkButton *btn, GtkWidget *pane) { gint result = -1; GtkCList *list_visible = NULL; GtkCList *list_hidden = NULL; gchar *text = NULL; GtkWindow *settings = NULL; gint row = -1; GWSettingsExplorerField **fields = NULL; GWSettingsExplorerField *field = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL) { list_visible = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_VISIBLE)); list_hidden = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_HIDDEN)); fields = (GWSettingsExplorerField**)gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_FILE_FIELDS_TABLE); if ( (list_visible != NULL) && (list_hidden != NULL) ) { if ( list_hidden->selection != NULL ) { row = GPOINTER_TO_INT ( ((GList*)(list_hidden->selection))->data); if ( row >= 0 ) { gtk_clist_freeze ( list_visible); gtk_clist_freeze ( list_hidden); /* Move the column to the hidden list. */ gtk_clist_get_text ( list_hidden, row, 0, &text); gtk_clist_append ( list_visible, &text); field = gw_settings_explorer_field_find_by_name ( fields, text); if ( field != NULL ) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : %s is showed now\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, field->name); #endif field->visible = TRUE; } gtk_clist_remove ( list_hidden, row); gtk_clist_thaw ( list_visible); gtk_clist_thaw ( list_hidden); if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } } } } return result; } gint gw_plugin_settings_explorer_file_btn_hide_click ( GtkButton *btn, GtkWidget *pane) { gint result = -1; GtkCList *list_visible = NULL; GtkCList *list_hidden = NULL; gchar *text = NULL; GtkWindow *settings = NULL; gint row = -1; GWSettingsExplorerField **fields = NULL; GWSettingsExplorerField *field = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL) { list_visible = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_VISIBLE)); list_hidden = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_FILE_LIST_HIDDEN)); fields = (GWSettingsExplorerField**)gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EXPLORER_FILE_FIELDS_TABLE); if ( (list_visible != NULL) && (list_hidden != NULL) ) { if ( list_visible->selection != NULL ) { row = GPOINTER_TO_INT ( ((GList*)(list_visible->selection))->data); if ( row >= 0 ) { gtk_clist_freeze ( list_visible); gtk_clist_freeze ( list_hidden); /* Move the column to the hidden list. */ gtk_clist_get_text ( list_visible, row, 0, &text); gtk_clist_append ( list_hidden, &text); field = gw_settings_explorer_field_find_by_name ( fields, text); if ( field != NULL ) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : %s is hidden now\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, field->name); #endif field->visible = FALSE; } gtk_clist_remove ( list_visible, row); gtk_clist_thaw ( list_visible); gtk_clist_thaw ( list_hidden); if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } } } } return result; } gboolean gw_plugin_settings_explorer_file_destroy ( GtkWidget *pane, gpointer data) { gboolean result = FALSE; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return result; } gwhere-0.2.3/src/gui/gwsettingsexplorerfile.h0000744000175000017500000000367010023202520017773 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsettingsexplorerfile.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to configure some settings about explorer file. * @author Sébastien LECACHEUR * @version 1.0 2003/02/06 * @see gwsupport.h * @link GWhere Web Site * @ref gwsettingsexplorerfile.c * @ref gwsettingsinterface.c * @author Author */ #ifndef GW_GUI_GW_SETTINGS_EXPLORER_FILE_H #define GW_GUI_GW_SETTINGS_EXPLORER_FILE_H #include "gwsettingsinterface.h" /*! * @function gw_plugin_settings_explorer_file_init * @abstract Initializes the explorer file plugin. * @discussion This function initializes the explorer file plugin. * @param module module to store the plugin * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_plugin_settings_explorer_file_init ( GWSettingsModule **module); #endif gwhere-0.2.3/src/gui/gwsettingsgeneral.c0000744000175000017500000000771710023202520016711 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwsettingsgeneral.h" #include "gwsettingswindowbox.h" #include "../gwapplicationmanager.h" /*! @define GW_PLUGIN_SETTINGS_WINDOW The parent window */ #define GW_PLUGIN_SETTINGS_WINDOW "gw_plugin_settings_window" gint gw_plugin_settings_general_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane); gint gw_plugin_settings_general_pane_load ( GtkWidget *pane); gint gw_plugin_settings_general_pane_on_change ( GtkEntry *entry, GtkWidget *pane); gint gw_plugin_settings_general_pane_apply ( GtkWidget *pane); gint gw_plugin_settings_general_init ( GWSettingsModule **module) { gint result = -1; if ( (*module = gw_settings_module_new ( )) != NULL ) { (*module)->name = g_strdup ( _( "Generals options")); (*module)->create = &gw_plugin_settings_general_pane_create; (*module)->load = &gw_plugin_settings_general_pane_load; (*module)->on_change = &gw_plugin_settings_general_pane_on_change; (*module)->apply = &gw_plugin_settings_general_pane_apply; result = 0; } return result; } gint gw_plugin_settings_general_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane) { gint result = -1; GtkWidget *table_pane; GtkTooltips *tooltips; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif tooltips = gtk_tooltips_new ( ); if ( settings != NULL && parent != NULL ) { table_pane = gtk_table_new ( 0, 2, FALSE); gtk_widget_ref ( GTK_WIDGET ( settings)); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_WINDOW, settings, (GtkDestroyNotify) gtk_widget_unref); gtk_container_set_border_width ( GTK_CONTAINER ( table_pane), 5); gtk_table_set_row_spacings ( GTK_TABLE (table_pane), 5); gtk_table_set_col_spacings ( GTK_TABLE (table_pane), 5); *pane = table_pane; gw_plugin_settings_general_pane_load ( table_pane); result = 0; } return result; } gint gw_plugin_settings_general_pane_load ( GtkWidget *pane) { gint result = -1; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { result = 0; } return result; } gint gw_plugin_settings_general_pane_on_change ( GtkEntry *entry, GtkWidget *pane) { gint result = -1; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } return result; } gint gw_plugin_settings_general_pane_apply ( GtkWidget *pane) { gint result = -1; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, FALSE); } result = 0; } return result; } gwhere-0.2.3/src/gui/gwsettingsgeneral.h0000744000175000017500000000362310023202520016706 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsettingsgeneral.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to configure some settings about the program in general. * @author Sébastien LECACHEUR * @version 1.0 2003/02/06 * @see gwsupport.h * @link GWhere Web Site * @ref gwsettingsgeneral.c * @ref gwsettingsinterface.c * @author Author */ #ifndef GW_GUI_GW_SETTINGS_GENERAL_H #define GW_GUI_GW_SETTINGS_GENERAL_H #include "gwsettingsinterface.h" /*! * @function gw_plugin_settings_general_init * @abstract Initializes the general plugin. * @discussion This function initializes the general plugin. * @param module module to store the plugin * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_plugin_settings_general_init ( GWSettingsModule **module); #endif gwhere-0.2.3/src/gui/gwsettingsgui.c0000744000175000017500000002117110247421307016064 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwsettingsgui.h" #include "gwsettingswindowbox.h" #include "gwfileselectionbox.h" #include "../gwapplicationmanager.h" #include "../gwguimanager.h" /*! @define GW_PLUGIN_SETTINGS_WINDOW The parent window */ #define GW_PLUGIN_SETTINGS_WINDOW "gw_plugin_settings_window" /*! @define GW_PLUGIN_SETTINGS_GUI_AUTOSAVE_CHK The check box for autosave GUI properties */ #define GW_PLUGIN_SETTINGS_GUI_AUTOSAVE_CHK "gw_plugin_settings_gui_save_properties_chk" /*! @define GW_PLUGIN_SETTINGS_GUI_BEEP_CHK The check box for allowing beep */ #define GW_PLUGIN_SETTINGS_GUI_BEEP_CHK "gw_plugin_settings_gui_beep_chk" /* I don't like global variable, I don't know to do. */ GtkWidget *pane_settings_gui = NULL; gint gw_plugin_settings_gui_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane); gint gw_plugin_settings_gui_pane_load ( GtkWidget *pane); gint gw_plugin_settings_gui_pane_on_change ( GtkEntry *entry, GtkWidget *pane); gint gw_plugin_settings_gui_pane_apply ( GtkWidget *pane); gint gw_plugin_settings_gui_init ( GWSettingsModule **module) { gint result = -1; if ( (*module = gw_settings_module_new ( )) != NULL ) { (*module)->name = g_strdup ( _( "GUI")); (*module)->create = &gw_plugin_settings_gui_pane_create; (*module)->load = &gw_plugin_settings_gui_pane_load; (*module)->on_change = &gw_plugin_settings_gui_pane_on_change; (*module)->apply = &gw_plugin_settings_gui_pane_apply; result = 0; } return result; } gint gw_plugin_settings_gui_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane) { gint result = -1; GtkWidget *table_pane; GtkWidget *chk_autosave; GtkWidget *chk_beep; GtkTooltips *tooltips; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif tooltips = gtk_tooltips_new ( ); if ( settings != NULL && parent != NULL ) { table_pane = gtk_table_new ( 5, 2, FALSE); gtk_widget_ref ( GTK_WIDGET ( settings)); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_WINDOW, settings, (GtkDestroyNotify) gtk_widget_unref); gtk_container_set_border_width ( GTK_CONTAINER ( table_pane), 5); gtk_table_set_row_spacings ( GTK_TABLE (table_pane), 5); gtk_table_set_col_spacings ( GTK_TABLE (table_pane), 5); /* Adds the autosave GUI properties option. */ g_strdup_to_gtk_text ( _( "Save GUI properties on exit"), text_utf8); chk_autosave = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_autosave); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_GUI_AUTOSAVE_CHK, chk_autosave, (GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( _( "Save GUI properties as window position and size."), text_utf8); gtk_tooltips_set_tip ( tooltips, chk_autosave, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), chk_autosave, 0, 1, 0, 1, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); /* Adds the allowing beep option. */ g_strdup_to_gtk_text ( _( "Allow beep"), text_utf8); chk_beep = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_beep); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_GUI_BEEP_CHK, chk_beep, (GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( _( "Allows to emits a short beep on some event."), text_utf8); gtk_tooltips_set_tip ( tooltips, chk_beep, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), chk_beep, 0, 1, 1, 2, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); *pane = table_pane; pane_settings_gui = *pane; gw_plugin_settings_gui_pane_load ( table_pane); /* Connects signals after loading. */ gtk_signal_connect ( GTK_OBJECT ( chk_autosave), "clicked", (GtkSignalFunc)gw_plugin_settings_gui_pane_on_change, table_pane); gtk_signal_connect ( GTK_OBJECT ( chk_beep), "clicked", (GtkSignalFunc)gw_plugin_settings_gui_pane_on_change, table_pane); result = 0; } return result; } gint gw_plugin_settings_gui_pane_load ( GtkWidget *pane) { gint result = -1; GtkToggleButton *chk = NULL; gfloat value = 0; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : loading...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Checks autosave option. */ if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_GUI_AUTOSAVE_CHK))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the autosave GUI option...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif value = gw_am_get_settings_tod ( GW_VALUE_APP_GUI_AUTOSAVE); #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : autosave GUI option is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, value); #endif gtk_toggle_button_set_active ( chk, (gboolean)value); } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no check button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } chk = NULL; value = 0; /* Checks beep option. */ if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_GUI_BEEP_CHK))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the beep option...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (value = gw_am_get_settings_tod ( GW_VALUE_APP_GUI_BEEP)) == -1 ) { value = GW_VALUE_APP_GUI_BEEP_DEFAULT; } #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : beep option is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, value); #endif gtk_toggle_button_set_active ( chk, (gboolean)value); } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no check button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } chk = NULL; value = 0; result = 0; } return result; } gint gw_plugin_settings_gui_pane_on_change ( GtkEntry *entry, GtkWidget *pane) { gint result = -1; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } return result; } gint gw_plugin_settings_gui_pane_apply ( GtkWidget *pane) { gint result = -1; GtkToggleButton *chk = NULL; gchar *value = NULL; gboolean bool_value = 0; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_GUI_AUTOSAVE_CHK))) != NULL) { bool_value = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); gw_am_set_settings ( GW_VALUE_APP_GUI_AUTOSAVE, g_strdup_printf ( "%d", (gint)bool_value)); } value = NULL; if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_GUI_BEEP_CHK))) != NULL) { bool_value = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); gw_am_set_settings ( GW_VALUE_APP_GUI_BEEP, g_strdup_printf ( "%d", (gint)bool_value)); } value = NULL; if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, FALSE); } result = 0; } return result; } gwhere-0.2.3/src/gui/gwsettingsgui.h0000744000175000017500000000354410023202520016057 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsettingsgui.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to configure some settings about the GUI. * @author Sébastien LECACHEUR * @version 1.0 2003/02/06 * @see gwsupport.h * @link GWhere Web Site * @ref gwsettingsgui.c * @ref gwsettingsinterface.c * @author Author */ #ifndef GW_GUI_GW_SETTINGS_GUI_H #define GW_GUI_GW_SETTINGS_GUI_H #include "gwsettingsinterface.h" /*! * @function gw_plugin_settings_gui_init * @abstract Initializes the GUI plugin. * @discussion This function initializes the GUI plugin. * @param module module to store the plugin * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_plugin_settings_gui_init ( GWSettingsModule **module); #endif gwhere-0.2.3/src/gui/gwsettingsinterface.c0000744000175000017500000000370310023202520017223 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwsettingsinterface.h" GWSettingsModule * gw_settings_module_new ( ) { GWSettingsModule *module = NULL; if ( (module = (GWSettingsModule*)g_malloc ( sizeof ( GWSettingsModule))) != NULL ) { module->name = NULL; module->page = NULL; module->pane = NULL; module->settings_window = NULL; module->child = NULL; module->create = NULL; module->load = NULL; module->on_change = NULL; module->apply = NULL; } return module; } gboolean gw_settings_module_check ( GWSettingsModule *module) { gboolean result = FALSE; if ( module != NULL ) { if ( (module->create != NULL) && (module->load != NULL) && (module->on_change != NULL) && (module->apply != NULL)) { result = TRUE; } } return result; } gint gw_settings_module_free ( GWSettingsModule *module) { gint result = -1; gint i = 0; if ( module != NULL ) { if ( module->name != NULL ) { g_free ( module->name); } if ( module->child != NULL ) { for ( i = 0; module->child[i] != NULL; i++) { gw_settings_module_free ( module->child[i]); module->child[i] = NULL; } g_free ( module->child); } g_free ( module); } return result; } gwhere-0.2.3/src/gui/gwsettingsinterface.h0000744000175000017500000001337210023202520017233 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsettinsginterface.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* In order to write a setting plugin, you must implement the * gw_plugin_settings_init_t public function. All others functions * may be privated but must be implemented too and loaded in the * gwsettingsmodule.
* @abstract This is the interface for settings plugins. * @author Sébastien LECACHEUR * @version 1.0 2002/07/24 * @ref gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @see gwsettingsinterface.c * @author Author */ #ifndef GW_GUI_GW_SETTINGS_INTERFACE_H #define GW_GUI_GW_SETTINGS_INTERFACE_H /*! * @typedef gw_plugin_settings_pane_create_t * Creates the pane to display in the setting window box. * @abstract Functions specification * @param settings settings window box * @param parent container of the pane * @param pane pane to display * @return an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ typedef gint (*gw_plugin_settings_pane_create_t) ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane); /*! * @typedef gw_plugin_settings_pane_load_t * Loads values of the pane. * @abstract Functions specification * @param pane pane to load values * @return an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ typedef gint (*gw_plugin_settings_pane_load_t) ( GtkWidget *pane); /*! * @typedef gw_plugin_settings_pane_on_change_t * Called when the pane is modified. * @abstract Functions specification * @param entry invoker event * @param pane modified pane * @return an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ typedef gint (*gw_plugin_settings_pane_on_change_t) ( GtkEntry *entry, GtkWidget *pane); /*! * @typedef gw_plugin_settings_pane_apply_t * Applies changes in the pane. * @abstract Functions specification * @param pane pane to applay changes * @return an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ typedef gint (*gw_plugin_settings_pane_apply_t) ( GtkWidget *pane); /*! * @typedef gw_settings_module_s * Settings module structure. * @abstract This structure centralize all implemented functions of one settings module * @field name settings module name * @field page settings module page in notebook * @field pane settings module pane (to not destroy when free GWSettingsModule) * @field settings_window settings window box (to not destroy when free GWSettingsModule) * @field child table of all children ended by NULL * @field create create pane function * @field load load pane function * @field on_change on change event callback pane function * @field apply apply callback pane function */ typedef struct gw_settings_module_s { gchar *name; GtkContainer *page; GtkWidget *pane; GtkWindow *settings_window; struct gw_settings_module_s **child; gw_plugin_settings_pane_create_t create; gw_plugin_settings_pane_load_t load; gw_plugin_settings_pane_on_change_t on_change; gw_plugin_settings_pane_apply_t apply; }GWSettingsModule; /*! * @typedef gw_plugin_settings_init_t * Inits the settings module data structure * @abstract Functions specification * @param module pointer to the future settings module * @return an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ typedef gint (*gw_plugin_settings_init_t) ( GWSettingsModule **module); /*! * @function gw_settings_module_new * @abstract Allocates a new GWSettingsModule structure. * @discussion This function allocates a new GWSettingsModule structure. * @result a settings module.
* Returns NULL when an error occured */ GWSettingsModule * gw_settings_module_new ( ); /*! * @function gw_settings_module_check * @abstract Checks if the module have all needed functions. * @discussion This function checks if the module have all needed functions. * @param module settings module to check * @result Returns TRUE if the settings module is good and implements * all needed functions. * Returns FALSE if the settings module doesn't implement * all needed functions or when an error occured */ gboolean gw_settings_module_check ( GWSettingsModule *module); /*! * @function gw_settings_module_free * @abstract Frees the GWSettingsModule structure. * @discussion This function frees the GWSettingsModule structure. * @param module settings module to free * @return an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_settings_module_free ( GWSettingsModule *module); #endif gwhere-0.2.3/src/gui/gwsettingsmail.c0000744000175000017500000003102710247421307016223 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwsettingsmail.h" #include "gwsettingswindowbox.h" #include "../gwapplicationmanager.h" /*! @define GW_PLUGIN_SETTINGS_WINDOW The parent window */ #define GW_PLUGIN_SETTINGS_WINDOW "gw_plugin_settings_window" /*! @define GW_PLUGIN_SETTINGS_EMAIL_ADDRESS_ENTRY The entry for email address */ #define GW_PLUGIN_SETTINGS_EMAIL_ADDRESS_ENTRY "gw_plugin_settings_email_address_entry" /*! @define GW_PLUGIN_SETTINGS_SERVER_ADDRESS_ENTRY The entry for server address */ #define GW_PLUGIN_SETTINGS_SERVER_ADDRESS_ENTRY "gw_plugin_settings_server_address_entry" /*! @define GW_PLUGIN_SETTINGS_SERVER_PORT_ENTRY The entry for server port */ #define GW_PLUGIN_SETTINGS_SERVER_PORT_ENTRY "gw_plugin_settings_server_port_entry" gint gw_plugin_settings_mail_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane); gint gw_plugin_settings_mail_pane_load ( GtkWidget *pane); gint gw_plugin_settings_mail_pane_on_change ( GtkEntry *entry, GtkWidget *pane); gint gw_plugin_settings_mail_pane_apply ( GtkWidget *pane); /*! * @function gw_settings_window_box_get_mail_notebook_email_address * @abstract Gets the filled email address. * @discussion This function gets the filled email address. * @param w the settings window box * @result the filled email address * Returns NULL when an error occured.
*/ /*gchar * gw_settings_window_box_get_mail_notebook_email_address ( GtkWindow *w);*/ /*! * @function gw_settings_window_box_get_mail_notebook_server_address * @abstract Gets the filled server address. * @discussion This function gets the filled server address. * @param w the settings window box * @result the filled server address * Returns NULL when an error occured.
*/ /*gchar * gw_settings_window_box_get_mail_notebook_server_address ( GtkWindow *w);*/ /*! * @function gw_settings_window_box_get_mail_notebook_server_port * @abstract Gets the filled server port. * @discussion This function gets the filled server port. * @param w the settings window box * @result the filled server port * Returns -1 when an error occured.
*/ /*gint gw_settings_window_box_get_mail_notebook_server_port ( GtkWindow *w);*/ gint gw_plugin_settings_mail_init ( GWSettingsModule **module) { gint result = -1; if ( (*module = gw_settings_module_new ( )) != NULL ) { (*module)->name = g_strdup ( _( "Mail")); (*module)->create = &gw_plugin_settings_mail_pane_create; (*module)->load = &gw_plugin_settings_mail_pane_load; (*module)->on_change = &gw_plugin_settings_mail_pane_on_change; (*module)->apply = &gw_plugin_settings_mail_pane_apply; result = 0; } return result; } gint gw_plugin_settings_mail_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane) { gint result = -1; GtkWidget *table_pane; GtkWidget *lbl_email_address; GtkWidget *lbl_server_address; GtkWidget *lbl_server_port; GtkWidget *ent_email_address; GtkWidget *ent_server_address; GtkWidget *ent_server_port; GtkTooltips *tooltips; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif tooltips = gtk_tooltips_new ( ); if ( settings != NULL && parent != NULL ) { table_pane = gtk_table_new ( 3, 2, FALSE); gtk_widget_ref ( GTK_WIDGET ( settings)); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_WINDOW, settings, (GtkDestroyNotify) gtk_widget_unref); gtk_container_set_border_width ( GTK_CONTAINER ( table_pane), 5); gtk_table_set_row_spacings ( GTK_TABLE (table_pane), 5); gtk_table_set_col_spacings ( GTK_TABLE (table_pane), 5); /* Email address. */ g_strdup_to_gtk_text ( _( "Email address :"), text_utf8); lbl_email_address = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), lbl_email_address, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment ( GTK_MISC ( lbl_email_address), 0, 0.5); ent_email_address = gtk_entry_new ( ); gtk_widget_ref ( ent_email_address); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_EMAIL_ADDRESS_ENTRY, ent_email_address, (GtkDestroyNotify) gtk_widget_unref); gtk_table_attach ( GTK_TABLE ( table_pane), ent_email_address, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); g_strdup_to_gtk_text ( _( "Enter your email address."), text_utf8); gtk_tooltips_set_tip ( tooltips, ent_email_address, text_utf8, NULL); g_free ( text_utf8); /* Server address. */ g_strdup_to_gtk_text ( _( "Out going mail server :"), text_utf8); lbl_server_address = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), lbl_server_address, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment ( GTK_MISC ( lbl_server_address), 0, 0.5); ent_server_address = gtk_entry_new ( ); gtk_widget_ref ( ent_server_address); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_SERVER_ADDRESS_ENTRY, ent_server_address, (GtkDestroyNotify) gtk_widget_unref); gtk_table_attach ( GTK_TABLE ( table_pane), ent_server_address, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); g_strdup_to_gtk_text ( _( "Enter your out going mail server. Usualy this address is mail.yourdomain.com"), text_utf8); gtk_tooltips_set_tip ( tooltips, ent_server_address, text_utf8, NULL); g_free ( text_utf8); /* Server port. */ g_strdup_to_gtk_text ( _( "Server port :"), text_utf8); lbl_server_port = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), lbl_server_port, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment ( GTK_MISC ( lbl_server_port), 0, 0.5); ent_server_port = gtk_entry_new ( ); gtk_widget_ref ( ent_server_port); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_SERVER_PORT_ENTRY, ent_server_port, (GtkDestroyNotify) gtk_widget_unref); gtk_table_attach ( GTK_TABLE ( table_pane), ent_server_port, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); g_strdup_to_gtk_text ( _( "Enter the out going mail server port (the most common value is 25)."), text_utf8); gtk_tooltips_set_tip ( tooltips, ent_server_port, text_utf8, NULL); g_free ( text_utf8); *pane = table_pane; gw_plugin_settings_mail_pane_load ( table_pane); /* Connects signals after loading. */ gtk_signal_connect ( GTK_OBJECT ( ent_email_address), "changed", (GtkSignalFunc)gw_plugin_settings_mail_pane_on_change, table_pane); gtk_signal_connect ( GTK_OBJECT ( ent_server_address), "changed", (GtkSignalFunc)gw_plugin_settings_mail_pane_on_change, table_pane); gtk_signal_connect ( GTK_OBJECT ( ent_server_port), "changed", (GtkSignalFunc)gw_plugin_settings_mail_pane_on_change, table_pane); result = 0; } return result; } gint gw_plugin_settings_mail_pane_load ( GtkWidget *pane) { gint result = -1; GtkEntry *entry = NULL; gchar *value = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EMAIL_ADDRESS_ENTRY))) != NULL) { value = gw_am_get_settings ( GW_VALUE_APP_MAIL_EMAIL_ADDRESS); g_strdup_to_gtk_text ( value, text_utf8); gtk_entry_set_text ( GTK_ENTRY ( entry), text_utf8); g_free ( text_utf8); } entry = NULL; value = NULL; if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_SERVER_ADDRESS_ENTRY))) != NULL) { value = gw_am_get_settings ( GW_VALUE_APP_MAIL_SERVER_ADDRESS); g_strdup_to_gtk_text ( value, text_utf8); gtk_entry_set_text ( GTK_ENTRY ( entry), text_utf8); g_free ( text_utf8); } entry = NULL; value = NULL; if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_SERVER_PORT_ENTRY))) != NULL) { value = gw_am_get_settings ( GW_VALUE_APP_MAIL_SERVER_PORT); if ( value == NULL ) { g_strdup_to_gtk_text ( GW_VALUE_APP_MAIL_SERVER_PORT_DEFAULT, text_utf8); } else { g_strdup_to_gtk_text ( value, text_utf8); } gtk_entry_set_text ( GTK_ENTRY ( entry), text_utf8); g_free ( text_utf8); } entry = NULL; value = NULL; result = 0; } return result; } gint gw_plugin_settings_mail_pane_on_change ( GtkEntry *entry, GtkWidget *pane) { gint result = -1; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } return result; } gint gw_plugin_settings_mail_pane_apply ( GtkWidget *pane) { gint result = -1; GtkEntry *entry = NULL; gchar *value = NULL; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_EMAIL_ADDRESS_ENTRY))) != NULL) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( entry)), value); gw_am_set_settings ( GW_VALUE_APP_MAIL_EMAIL_ADDRESS, value); } entry = NULL; value = NULL; if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_SERVER_ADDRESS_ENTRY))) != NULL) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( entry)), value); gw_am_set_settings ( GW_VALUE_APP_MAIL_SERVER_ADDRESS, value); } entry = NULL; value = NULL; if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_SERVER_PORT_ENTRY))) != NULL) { g_strdup_from_gtk_text ( gtk_entry_get_text ( GTK_ENTRY ( entry)), value); gw_am_set_settings ( GW_VALUE_APP_MAIL_SERVER_PORT, value); } entry = NULL; value = NULL; if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, FALSE); } result = 0; } return result; } /* gchar * gw_settings_window_box_get_mail_notebook_email_address ( GtkWindow *w) { GtkEntry *entry = NULL; gchar *email_address = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_SETTINGS_WINDOW_BOX_MAIL_NOTEBOOK_EMAIL_ENTRY)); email_address = gtk_entry_get_text ( entry); } return email_address; } */ /* gchar * gw_settings_window_box_get_mail_notebook_server_address ( GtkWindow *w) { GtkEntry *entry = NULL; gchar *server_address = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_SETTINGS_WINDOW_BOX_MAIL_NOTEBOOK_SERVER_ENTRY)); server_address = gtk_entry_get_text ( entry); } return server_address; } */ /* gint gw_settings_window_box_get_mail_notebook_server_port ( GtkWindow *w) { GtkEntry *entry = NULL; gint server_port = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_SETTINGS_WINDOW_BOX_MAIL_NOTEBOOK_SERVER_PORT_ENTRY)); server_port = strtol ( gtk_entry_get_text ( entry), NULL,0); } return server_port; } */ gwhere-0.2.3/src/gui/gwsettingsmail.h0000744000175000017500000000356310023202520016216 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsettingsmail.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to configure some settings about mail component. * @author Sébastien LECACHEUR * @version 1.0 2003/02/06 * @see gwsupport.h * @link GWhere Web Site * @ref gwsettingsmail.c * @ref gwsettingsinterface.c * @author Author */ #ifndef GW_GUI_GW_SETTINGS_MAIL_H #define GW_GUI_GW_SETTINGS_MAIL_H #include "gwsettingsinterface.h" /*! * @function gw_plugin_settings_mail_init * @abstract Initializes the mail plugin. * @discussion This function initializes the mail plugin. * @param module module to store the plugin * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_plugin_settings_mail_init ( GWSettingsModule **module); #endif gwhere-0.2.3/src/gui/gwsettingswindowbox.c0000744000175000017500000005253510023202520017312 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwsettingswindowbox.h" #include "gwsettingswindowboxcallback.h" #include "gwsettingsinterface.h" #include "gwsettingsgeneral.h" #include "gwsettingsgui.h" #include "gwsettingscatalogfile.h" #include "gwsettingsexplorer.h" #include "gwsettingssearch.h" #include "gwsettingsmail.h" #include "../gwapplicationmanager.h" /*! @define GW_REF_SETTINGS_WINDOW_BOX_PARENT_WINDOW The parent window */ #define GW_REF_SETTINGS_WINDOW_BOX_PARENT_WINDOW "gw_ref_settings_window_box_parent_window" /*! @define GW_REF_SETTINGS_WINDOW_BOX_CTREE The settings ctree */ #define GW_REF_SETTINGS_WINDOW_BOX_CTREE "gw_ref_settings_window_box_ctree" /*! @define GW_REF_SETTINGS_WINDOW_BOX_NOTEBOOK The settings notebook */ #define GW_REF_SETTINGS_WINDOW_BOX_NOTEBOOK "gw_ref_settings_window_box_notebook" /*! @define GW_REF_SETTINGS_WINDOW_BOX_OK_BTN The ok button */ #define GW_REF_SETTINGS_WINDOW_BOX_OK_BTN "gw_ref_settings_window_box_ok_btn" /*! @define GW_REF_SETTINGS_WINDOW_BOX_CANCEL_BTN The cancel button */ #define GW_REF_SETTINGS_WINDOW_BOX_CANCEL_BTN "gw_ref_settings_window_box_cancel_btn" /*! @define GW_REF_SETTINGS_WINDOW_BOX_APPLY_BTN The apply button */ #define GW_REF_SETTINGS_WINDOW_BOX_APPLY_BTN "gw_ref_settings_window_box_apply_btn" GtkWindow * gw_settings_window_box_create ( GtkWindow *window) { static GtkWidget *settings_window_box = NULL; GtkWidget *vb_settings; GtkWidget *hp_settings; GtkWidget *ctree_settings; GtkWidget *lbl_settings; GtkWidget *notebook_settings; GtkWidget *home_notebook_page; GtkWidget *text_home_notebook_page; GtkWidget *hb_settings_controls; guint btn_ok_key; GtkWidget *btn_ok; guint btn_cancel_key; GtkWidget *btn_cancel; guint btn_apply_key; GtkWidget *btn_apply; GtkAccelGroup *accel_group = NULL; GtkTooltips *tooltips; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif tooltips = gtk_tooltips_new ( ); accel_group = gtk_accel_group_new ( ); if ( !settings_window_box ) { settings_window_box = gtk_window_new ( GTK_WINDOW_DIALOG); g_strdup_to_gtk_text ( _( "This Settings box allows to configure some functionnalities and properties of the program."), text_utf8); gtk_tooltips_set_tip ( tooltips, settings_window_box, text_utf8, NULL); g_free ( text_utf8); g_strdup_to_gtk_text ( _( "Settings"), text_utf8); gtk_window_set_title ( GTK_WINDOW ( settings_window_box), text_utf8); g_free ( text_utf8); gtk_window_set_modal ( GTK_WINDOW ( settings_window_box), TRUE); gtk_window_set_transient_for ( GTK_WINDOW ( settings_window_box), window); gtk_window_set_position ( GTK_WINDOW ( settings_window_box), GTK_WIN_POS_CENTER); gtk_window_set_policy ( GTK_WINDOW ( settings_window_box), TRUE, TRUE, FALSE); /* gtk_widget_set_usize ( settings_window_box, 600, 400); gtk_window_set_default_size ( GTK_WINDOW ( settings_window_box), 600, 400); */ gtk_signal_connect ( GTK_OBJECT ( settings_window_box), "destroy", GTK_SIGNAL_FUNC ( gw_settings_window_box_closed), window); gtk_signal_connect ( GTK_OBJECT ( settings_window_box), "destroy", GTK_SIGNAL_FUNC ( gtk_widget_destroyed), &settings_window_box); /* Store parent window reference */ gtk_widget_ref ( GTK_WIDGET ( window)); gtk_object_set_data_full ( GTK_OBJECT ( settings_window_box), GW_REF_SETTINGS_WINDOW_BOX_PARENT_WINDOW, window, ( GtkDestroyNotify) gtk_widget_unref); vb_settings = gtk_vbox_new ( FALSE, 0); gtk_container_add ( GTK_CONTAINER ( settings_window_box), vb_settings); hp_settings = gtk_hpaned_new ( ); gtk_box_pack_start ( GTK_BOX ( vb_settings), hp_settings, TRUE, TRUE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hp_settings), 5); #if defined (HAVE_GTK12) gtk_paned_set_handle_size ( GTK_PANED ( hp_settings), 5); #endif gtk_paned_set_position ( GTK_PANED ( hp_settings), 180); ctree_settings = gtk_ctree_new ( 1, 0); gtk_clist_set_column_width ( GTK_CLIST ( ctree_settings), 0, 170); gtk_clist_column_titles_show ( GTK_CLIST ( ctree_settings)); gtk_widget_ref ( ctree_settings); gtk_object_set_data_full ( GTK_OBJECT ( settings_window_box), GW_REF_SETTINGS_WINDOW_BOX_CTREE, ctree_settings, (GtkDestroyNotify) gtk_widget_unref); gtk_paned_pack1 ( GTK_PANED ( hp_settings), ctree_settings, FALSE, TRUE); gtk_container_set_border_width ( GTK_CONTAINER ( ctree_settings), 5); g_strdup_to_gtk_text ( _( "Select the section to configure."), text_utf8); gtk_tooltips_set_tip ( tooltips, ctree_settings, text_utf8, NULL); g_free ( text_utf8); g_strdup_to_gtk_text ( _( "Settings"), text_utf8); lbl_settings = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_clist_set_column_widget ( GTK_CLIST ( ctree_settings), 0, lbl_settings); notebook_settings = gtk_notebook_new ( ); gtk_widget_ref ( notebook_settings); gtk_object_set_data_full ( GTK_OBJECT ( settings_window_box), GW_REF_SETTINGS_WINDOW_BOX_NOTEBOOK, notebook_settings, (GtkDestroyNotify) gtk_widget_unref); gtk_paned_pack2 ( GTK_PANED ( hp_settings), notebook_settings, TRUE, TRUE); GTK_WIDGET_UNSET_FLAGS ( notebook_settings, GTK_CAN_FOCUS); g_strdup_to_gtk_text ( _( "Change in this pane all availables properties in order to configure the program as you want."), text_utf8); gtk_tooltips_set_tip ( tooltips, notebook_settings, text_utf8, NULL); g_free ( text_utf8); gtk_notebook_set_show_tabs ( GTK_NOTEBOOK ( notebook_settings), FALSE); gtk_notebook_set_show_border ( GTK_NOTEBOOK ( notebook_settings), FALSE); gtk_notebook_set_scrollable ( GTK_NOTEBOOK ( notebook_settings), TRUE); gtk_notebook_popup_enable ( GTK_NOTEBOOK ( notebook_settings)); home_notebook_page = gtk_vbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( home_notebook_page), 5); gtk_container_add ( GTK_CONTAINER ( notebook_settings), home_notebook_page); g_strdup_to_gtk_text ( _( "This settings windows box allows to configure the program. Some properties may be modified here."), text_utf8); text_home_notebook_page = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_label_set_justify ( GTK_LABEL ( text_home_notebook_page), GTK_JUSTIFY_FILL); gtk_label_set_line_wrap ( GTK_LABEL ( text_home_notebook_page), TRUE); gtk_container_add ( GTK_CONTAINER ( home_notebook_page), text_home_notebook_page); /* hb_settings_controls = gtk_hbox_new ( TRUE, 10); gtk_box_pack_end ( GTK_BOX ( vb_settings), hb_settings_controls, FALSE, FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( hb_settings_controls), 5); */ /* The OK/Cancel button area */ hb_settings_controls = gtk_hbutton_box_new ( ); gtk_button_box_set_layout ( GTK_BUTTON_BOX ( hb_settings_controls), GTK_BUTTONBOX_END); gtk_button_box_set_spacing ( GTK_BUTTON_BOX ( hb_settings_controls), 5); gtk_box_pack_end ( GTK_BOX ( vb_settings), hb_settings_controls, FALSE, FALSE, 0); btn_ok = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_OK"), text_utf8); btn_ok_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( btn_ok)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( btn_ok, "clicked", accel_group, btn_ok_key, GDK_MOD1_MASK, (GtkAccelFlags) 0); gtk_widget_ref ( btn_ok); gtk_object_set_data_full ( GTK_OBJECT ( settings_window_box), GW_REF_SETTINGS_WINDOW_BOX_OK_BTN, btn_ok, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_settings_controls), btn_ok, TRUE, TRUE, 10); g_strdup_to_gtk_text ( _( "Click on OK button to apply changes and close the Settings box."), text_utf8); gtk_tooltips_set_tip ( tooltips, btn_ok, text_utf8, NULL); g_free ( text_utf8); GTK_WIDGET_SET_FLAGS ( btn_ok, GTK_CAN_FOCUS); GTK_WIDGET_SET_FLAGS ( btn_ok, GTK_CAN_DEFAULT); gtk_widget_grab_default ( btn_ok); btn_cancel = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Cancel"), text_utf8); btn_cancel_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( btn_cancel)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( btn_cancel, "clicked", accel_group, btn_cancel_key, GDK_MOD1_MASK, (GtkAccelFlags) 0); gtk_widget_ref ( btn_cancel); gtk_object_set_data_full ( GTK_OBJECT ( settings_window_box), GW_REF_SETTINGS_WINDOW_BOX_CANCEL_BTN, btn_cancel, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_settings_controls), btn_cancel, TRUE, TRUE, 10); g_strdup_to_gtk_text ( _( "Click on Cancel button to cancel changes and close the Settings box."), text_utf8); gtk_tooltips_set_tip ( tooltips, btn_cancel, text_utf8, NULL); g_free ( text_utf8); GTK_WIDGET_SET_FLAGS ( btn_cancel, GTK_CAN_FOCUS); btn_apply = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Apply"), text_utf8); btn_apply_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( btn_apply)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( btn_apply, "clicked", accel_group, btn_apply_key, GDK_MOD1_MASK, (GtkAccelFlags) 0); gtk_widget_ref ( btn_apply); gtk_object_set_data_full ( GTK_OBJECT ( settings_window_box), GW_REF_SETTINGS_WINDOW_BOX_APPLY_BTN, btn_apply, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hb_settings_controls), btn_apply, TRUE, TRUE, 10); g_strdup_to_gtk_text ( _( "Click on Apply button to apply changes (without close the Settings box)."), text_utf8); gtk_tooltips_set_tip ( tooltips, btn_apply, text_utf8, NULL); g_free ( text_utf8); gtk_widget_set_sensitive ( GTK_WIDGET ( btn_apply), FALSE); GTK_WIDGET_SET_FLAGS ( btn_apply, GTK_CAN_FOCUS); gtk_signal_connect ( GTK_OBJECT ( ctree_settings), "change_focus_row_expansion", GTK_SIGNAL_FUNC (gw_settings_window_box_tree_change_focus_row_expansion), GTK_WINDOW ( settings_window_box)); gtk_signal_connect ( GTK_OBJECT ( ctree_settings), "tree_collapse", GTK_SIGNAL_FUNC (gw_settings_window_box_tree_collapse), GTK_WINDOW ( settings_window_box)); gtk_signal_connect ( GTK_OBJECT ( ctree_settings), "tree_expand", GTK_SIGNAL_FUNC (gw_settings_window_box_tree_expand), GTK_WINDOW ( settings_window_box)); gtk_signal_connect ( GTK_OBJECT ( ctree_settings), "tree_move", GTK_SIGNAL_FUNC (gw_settings_window_box_tree_move), GTK_WINDOW ( settings_window_box)); gtk_signal_connect ( GTK_OBJECT ( ctree_settings), "tree_select_row", GTK_SIGNAL_FUNC (gw_settings_window_box_tree_select_row), GTK_WINDOW ( settings_window_box)); gtk_signal_connect ( GTK_OBJECT ( ctree_settings), "tree_unselect_row", GTK_SIGNAL_FUNC (gw_settings_window_box_tree_unselect_row), GTK_WINDOW ( settings_window_box)); gtk_signal_connect ( GTK_OBJECT ( notebook_settings), "switch_page", GTK_SIGNAL_FUNC (gw_settings_window_box_noteboox_settings_switch_page), GTK_WINDOW ( settings_window_box)); gtk_signal_connect ( GTK_OBJECT ( btn_ok), "clicked", GTK_SIGNAL_FUNC (gw_settings_window_box_btn_ok_clicked), GTK_WINDOW ( settings_window_box)); gtk_signal_connect ( GTK_OBJECT ( btn_cancel), "clicked", GTK_SIGNAL_FUNC (gw_settings_window_box_btn_cancel_clicked), GTK_WINDOW ( settings_window_box)); gtk_signal_connect ( GTK_OBJECT ( btn_apply), "clicked", GTK_SIGNAL_FUNC (gw_settings_window_box_btn_apply_clicked), GTK_WINDOW ( settings_window_box)); gtk_widget_grab_focus ( btn_ok); gtk_window_add_accel_group ( GTK_WINDOW ( settings_window_box), accel_group); gw_settings_window_box_load_sections ( GTK_WINDOW ( settings_window_box)); } if ( !GTK_WIDGET_VISIBLE ( settings_window_box) ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : show the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_show_all ( settings_window_box); } else { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : destroy the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_destroy ( settings_window_box); } return GTK_WINDOW ( settings_window_box); } gboolean gw_settings_window_box_load_sections ( GtkWindow *settings) { gboolean result = FALSE; GtkCTree *settings_ctree = NULL; GtkNotebook *notebook_settings = NULL; GtkCTreeNode *settings_node = NULL; GtkCTreeNode *parent_settings_node = NULL; GdkPixmap *pix = NULL; GdkBitmap *pix_mask = NULL; GtkWidget *section_notebook_page = NULL; GtkWidget *section_notebook_pane = NULL; GtkWidget *frm_section_notebook_page = NULL; GWSettingsModule *modules[6]; gint i, j; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( settings != NULL ) { /* General options. */ gw_plugin_settings_general_init ( &modules[0]); /* General options. */ gw_plugin_settings_gui_init ( &modules[1]); /* Catalog file. */ gw_plugin_settings_catalog_file_init ( &modules[2]); /* Explorer. */ gw_plugin_settings_explorer_init ( &modules[3]); /* Search. */ gw_plugin_settings_search_init ( &modules[4]); /* Mail. */ gw_plugin_settings_mail_init ( &modules[5]); for ( i = 0; i < 6; i++) { if ( gw_settings_module_check ( modules[i]) == FALSE ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : invalid settings module -> %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, modules[i]->name); #endif gw_settings_module_free ( modules[i]); modules[i] = NULL; } } settings_ctree = gw_settings_window_box_get_ctree ( settings); notebook_settings = gw_settings_window_box_get_notebook ( settings); gtk_clist_freeze ( GTK_CLIST ( settings_ctree)); for ( i = 0; i < 6; i++) { if ( modules[i] != NULL ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : current settings module -> %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, modules[i]->name); #endif section_notebook_page = NULL; section_notebook_pane = NULL; section_notebook_page = gtk_vbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( section_notebook_page), 5); gtk_notebook_append_page ( notebook_settings, section_notebook_page, NULL); /* Creates the settings module pane and init all fields. */ modules[i]->create ( settings, GTK_CONTAINER ( section_notebook_page), §ion_notebook_pane); modules[i]->pane = section_notebook_pane; modules[i]->page = GTK_CONTAINER ( section_notebook_page); modules[i]->settings_window = settings; /* Stores a settings module reference to the notebook page. */ gtk_object_set_data ( GTK_OBJECT ( section_notebook_page), GW_REF_SETTINGS_MODULE, modules[i]); gtk_object_set_data ( GTK_OBJECT ( notebook_settings), g_strdup_printf ( "%d", i), modules[i]); /* Creates a new entry in the settings module tree explorer. */ g_strdup_to_gtk_text ( modules[i]->name, text_utf8); parent_settings_node = settings_node = gtk_ctree_insert_node ( GTK_CTREE ( settings_ctree), NULL, NULL, &text_utf8, 3, pix, pix_mask, pix, pix_mask, FALSE, TRUE); frm_section_notebook_page = gtk_frame_new ( text_utf8); g_free ( text_utf8); gtk_container_add ( GTK_CONTAINER ( section_notebook_page), frm_section_notebook_page); gtk_container_add ( GTK_CONTAINER ( frm_section_notebook_page), modules[i]->pane); gtk_ctree_node_set_row_data ( GTK_CTREE ( settings_ctree), settings_node, modules[i]); /* Loads all children module. */ if ( modules[i]->child != NULL ) { for ( j = 0; modules[i]->child[j] != NULL; j++) { if ( gw_settings_module_check ( modules[i]->child[j]) == TRUE ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : current settings module -> %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, modules[i]->child[j]->name); #endif section_notebook_page = gtk_vbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( section_notebook_page), 5); gtk_notebook_append_page ( notebook_settings, section_notebook_page, NULL); /* Creates the settings module pane and init all fields. */ modules[i]->child[j]->create ( settings, GTK_CONTAINER ( section_notebook_page), §ion_notebook_pane); modules[i]->child[j]->pane = section_notebook_pane; modules[i]->child[j]->page = GTK_CONTAINER ( section_notebook_page); modules[i]->child[j]->settings_window = settings; /* Stores a settings module reference to the notebook page. */ gtk_object_set_data ( GTK_OBJECT ( section_notebook_page), GW_REF_SETTINGS_MODULE, modules[i]->child[j]); gtk_object_set_data ( GTK_OBJECT ( notebook_settings), g_strdup_printf ( "%d", j), modules[i]->child[j]); /* Creates a new entry in the settings module tree explorer. */ g_strdup_to_gtk_text ( modules[i]->child[j]->name, text_utf8); settings_node = gtk_ctree_insert_node ( GTK_CTREE ( settings_ctree), parent_settings_node, NULL, &text_utf8, 3, pix, pix_mask, pix, pix_mask, FALSE, TRUE); frm_section_notebook_page = gtk_frame_new ( text_utf8); g_free ( text_utf8); gtk_container_add ( GTK_CONTAINER ( section_notebook_page), frm_section_notebook_page); gtk_container_add ( GTK_CONTAINER ( frm_section_notebook_page), modules[i]->child[j]->pane); gtk_ctree_node_set_row_data ( GTK_CTREE ( settings_ctree), settings_node, modules[i]->child[j]); } } } } } gtk_clist_thaw ( GTK_CLIST ( settings_ctree)); #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : all settings module are loaded\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif result = TRUE; } return result; } gint gw_settings_window_box_set_modified ( GtkWindow *w, gboolean state) { gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : state is %d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, state); #endif if ( w != NULL ) { gw_settings_window_box_apply_button_set_enable ( w, state); result = 0; } return result; } GtkCTree * gw_settings_window_box_get_ctree ( GtkWindow *w) { GtkCTree *ctree = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { ctree = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_SETTINGS_WINDOW_BOX_CTREE); } return ctree; } GtkNotebook * gw_settings_window_box_get_notebook ( GtkWindow *w) { GtkNotebook *notebook = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { notebook = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_SETTINGS_WINDOW_BOX_NOTEBOOK); } return notebook; } GtkButton * gw_settings_window_box_get_ok_button ( GtkWindow *w) { GtkButton *button = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { button = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_SETTINGS_WINDOW_BOX_OK_BTN); } return button; } GtkButton * gw_settings_window_box_get_cancel_button ( GtkWindow *w) { GtkButton *button = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { button = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_SETTINGS_WINDOW_BOX_CANCEL_BTN); } return button; } GtkButton * gw_settings_window_box_get_apply_button ( GtkWindow *w) { GtkButton *button = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { button = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_SETTINGS_WINDOW_BOX_APPLY_BTN); } return button; } GtkWindow * gw_settings_window_box_get_main_window ( GtkWindow *w) { GtkWindow *window = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { window = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_SETTINGS_WINDOW_BOX_PARENT_WINDOW); } return window; } gint gw_settings_window_box_apply_button_set_enable ( GtkWindow *w, gboolean state) { gint result = -1; GtkButton *button = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { button = gw_settings_window_box_get_apply_button ( w); gtk_widget_set_sensitive ( GTK_WIDGET ( button), state); result = 0; } return result; } gboolean gw_settings_window_box_apply_button_get_enable ( GtkWindow *w) { gboolean result = FALSE; GtkButton *button = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { button = gw_settings_window_box_get_apply_button ( w); if ( button != NULL ) { result = GTK_WIDGET_IS_SENSITIVE ( button); #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : can apply = %d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, result); #endif } } return result; } gwhere-0.2.3/src/gui/gwsettingswindowbox.h0000744000175000017500000001403710023202520017312 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsettingswindowbox.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @see gwsettingsinterface.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwsettingswindowbox.c * @author Author */ #ifndef GW_GUI_GW_SETTINGS_WINDOW_BOX_H #define GW_GUI_GW_SETTINGS_WINDOW_BOX_H #include "gwsettingsinterface.h" /*! @define GW_REF_SETTINGS_WINDOW_BOX_NOTEBOOK_FUNCTION The function of the current notebook */ #define GW_REF_SETTINGS_WINDOW_BOX_NOTEBOOK_FUNCTION "gw_ref_settings_window_box_notebook_function" /*! @define GW_REF_SETTINGS_MODULE The settings module of the current notebook page */ #define GW_REF_SETTINGS_MODULE "gw_ref_settings_module" /*! * @function gw_settings_window_box_create * @abstract Creates a settings window box. * @discussion This function creates a settings window box. * @param w the parent window * @result the settings window box.
* Returns NULL when an error occured. */ GtkWindow * gw_settings_window_box_create ( GtkWindow *window); /*! * @function gw_settings_window_box_load_sections * @abstract Loads all sections of the settings window box. * @discussion This function loads all sections of the settings window box. * @param settings settings window box * @result an error code.
* Returns TRUE when it's done. * Returns FALSE when an error occured. */ gboolean gw_settings_window_box_load_sections ( GtkWindow *settings); /*! * @function gw_settings_window_box_set_modified * @abstract Indicates to the settings that some values are modified. * @discussion This function indicates to the settings that some values are modified. * @param w settings window box * @param state state is modified or no * @result an error code.
* Returns 0 when it's done. * Returns -1 when an error occured. */ gint gw_settings_window_box_set_modified ( GtkWindow *w, gboolean state); /*! * @function gw_settings_window_box_get_ctree * @abstract Gets the settings ctree. * @discussion This function gets the settings ctree. * @param w settings window box * @result the ctree of the settings window box * Returns NULL when an error occured. */ GtkCTree * gw_settings_window_box_get_ctree ( GtkWindow *w); /*! * @function gw_settings_window_box_get_notebook * @abstract Gets the settings notebook. * @discussion This function gets the settings notebook. * @param w the settings window box * @result the notebook of the settings window box * Returns NULL when an error occured. */ GtkNotebook * gw_settings_window_box_get_notebook ( GtkWindow *w); /*! * @function gw_settings_window_box_get_ok_button * @abstract Gets the ok button. * @discussion This function gets the ok button. * @param w the settings window box * @result the ok button of the settings window box * Returns NULL when an error occured. */ GtkButton * gw_settings_window_box_get_ok_button ( GtkWindow *w); /*! * @function gw_settings_window_box_get_cancel_button * @abstract Gets the cancel button. * @discussion This function gets the cancel button. * @param w the settings window box * @result the cancel button of the settings window box * Returns NULL when an error occured. */ GtkButton * gw_settings_window_box_get_cancel_button ( GtkWindow *w); /*! * @function gw_settings_window_box_get_apply_button * @abstract Gets the apply button. * @discussion This function gets the apply button. * @param w the settings window box * @result the apply button of the settings window box * Returns NULL when an error occured. */ GtkButton * gw_settings_window_box_get_apply_button ( GtkWindow *w); /*! * @function gw_settings_window_box_get_main_window * @abstract Gets the parent window. * @discussion This function gets the parent window of the settings window box. * @param w the settings window box * @result the parent window of the settings window box * Returns NULL when an error occured. */ GtkWindow * gw_settings_window_box_get_main_window ( GtkWindow *w); /*! * @function gw_settings_window_box_apply_button_set_enable * @abstract Sets the enable state of the apply button. * @discussion This function sets the enable state of the apply button. * @param w the settings window box * @param state the enable state * @result an error code.
* Returns 0 when it's done. * Returns -1 when an error occured. */ gint gw_settings_window_box_apply_button_set_enable ( GtkWindow *w, gboolean state); /*! * @function gw_settings_window_box_apply_button_get_enable * @abstract Sets the enable state of the apply button. * @discussion This function sets the enable state of the apply button. * @param w the settings window box * @result enable state.
* Returns TRUE if it is enabled. * Returns FALSE if it is not enabled or when an error occured. */ gboolean gw_settings_window_box_apply_button_get_enable ( GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwsettingswindowboxcallback.c0000744000175000017500000002355210023202520020764 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwsettingswindowboxcallback.h" #include "gwsettingswindowbox.h" #include "gwsettingsinterface.h" #include "gwdialogbox.h" #include "gwguimanager.h" void gw_settings_window_box_tree_select_row ( GtkCTree *ctree, GList *node, gint column, GtkWindow *w) { GtkNotebook *notebook_settings = NULL; GWSettingsModule *module = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( ctree != NULL ) { notebook_settings = gw_settings_window_box_get_notebook ( w); module = gtk_ctree_node_get_row_data ( ctree, GTK_CTREE_NODE ( node)); if ( module != NULL ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : selected settings module is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, module->name); #endif /* Switches to the selected setting page. */ gtk_notebook_set_page ( notebook_settings, gtk_notebook_page_num ( notebook_settings, GTK_WIDGET ( module->page))); } } return; } void gw_settings_window_box_tree_unselect_row ( GtkCTree *ctree, GList *node, gint column, GtkWindow *w) { GtkNotebook *notebook_settings = NULL; GWSettingsModule *module = NULL; gboolean is_modified; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( ctree != NULL ) { notebook_settings = gw_settings_window_box_get_notebook ( w); is_modified = gw_settings_window_box_apply_button_get_enable ( w); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : is modified = %d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, is_modified); #endif if ( is_modified == TRUE ) { module = gtk_ctree_node_get_row_data ( ctree, GTK_CTREE_NODE ( node)); if ( module != NULL ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : current settings module is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, module->name); #endif gw_dialog_box_create ( w, _( "Settings changed"), _( "If you don't apply changes you will lose all changes. Do you want apply changes?"), (GtkSignalFunc)gw_settings_window_box_apply_ok, (GtkSignalFunc)gw_settings_window_box_apply_no, (GtkSignalFunc)gw_settings_window_box_apply_cancel, module); } else { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : no current settings module\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } /* gw_settings_window_box_set_modified ( w, FALSE); */ } else { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : settings not changed\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } /* Switches to the home page of settings. */ /* gtk_notebook_set_page ( notebook_settings, 0); */ } return; } void gw_settings_window_box_tree_expand ( GtkCTree *ctree, GList *node, GtkWindow *w) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( ctree != NULL ) { /* Does nothing at time. */ } return; } void gw_settings_window_box_tree_collapse ( GtkCTree *ctree, GList *node, GtkWindow *w) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( ctree != NULL ) { /* Does nothing at time. */ } return; } void gw_settings_window_box_tree_move ( GtkCTree *ctree, GList *node, GList *new_parent, GList *new_sibling, GtkWindow *w) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( ctree != NULL ) { /* Does nothing at time. */ } return; } void gw_settings_window_box_tree_change_focus_row_expansion ( GtkCTree *ctree, GtkCTreeExpansionType expansion, GtkWindow *w) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( ctree != NULL ) { /* Does nothing at time. */ } return; } void gw_settings_window_box_noteboox_settings_switch_page ( GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, GtkWindow *w) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( notebook != NULL ) { /* Does nothing at time. */ /* gw_settings_window_box_set_modified ( w, FALSE); */ } return; } void gw_settings_window_box_btn_ok_clicked ( GtkButton *button, GtkWindow *w) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { gw_settings_window_box_btn_apply_clicked ( button, w); gw_settings_window_box_btn_cancel_clicked ( button, w); } return; } void gw_settings_window_box_btn_cancel_clicked ( GtkButton *button, GtkWindow *w) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { gtk_widget_destroy ( GTK_WIDGET ( w)); } return; } void gw_settings_window_box_btn_apply_clicked ( GtkButton *button, GtkWindow *w) { GtkNotebook *notebook_settings = NULL; GWSettingsModule *module = NULL; gint page = 0; GtkWidget *current_page = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (notebook_settings = gw_settings_window_box_get_notebook ( w)) != NULL ) { page = gtk_notebook_get_current_page ( notebook_settings); if ( (current_page = gtk_notebook_get_nth_page ( notebook_settings, page)) != NULL ) { if ( (module = gtk_object_get_data ( GTK_OBJECT ( current_page), GW_REF_SETTINGS_MODULE)) != NULL ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : current settings module is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, module->name); #endif module->apply ( module->pane); } /* Updates all the GUI. */ gw_gui_manager_main_interface_update_all ( ); } } } return; } void gw_settings_window_box_apply_ok ( GtkButton *button, GtkWindow *w) { GWSettingsModule *module = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (module = gw_dialog_box_get_user_data ( w)) != NULL ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : current module is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, module->name); #endif module->apply ( module->pane); } else { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : no current module selected\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } gtk_widget_destroy ( GTK_WIDGET ( w)); } return; } void gw_settings_window_box_apply_no ( GtkButton *button, GtkWindow *w) { GWSettingsModule *module = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (module = gw_dialog_box_get_user_data ( w)) != NULL ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : current module is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, module->name); #endif module->load ( module->pane); /* BUG : it will be better to stop the "changed" signal in all load() functions. */ gw_settings_window_box_set_modified ( module->settings_window, FALSE); } else { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : no current module selected\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } gtk_widget_destroy ( GTK_WIDGET ( w)); } return; } void gw_settings_window_box_apply_cancel ( GtkButton *button, GtkWindow *w) { GtkNotebook *notebook_settings = NULL; GWSettingsModule *module = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (module = gw_dialog_box_get_user_data ( w)) != NULL ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : current module is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, module->name); #endif if ( (notebook_settings = gw_settings_window_box_get_notebook ( module->settings_window)) != NULL ) { /* Switches to the selected setting page. */ gtk_notebook_set_page ( notebook_settings, gtk_notebook_page_num ( notebook_settings, GTK_WIDGET ( module->page))); } } else { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : no current module selected\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } gtk_widget_destroy ( GTK_WIDGET ( w)); } return; } void gw_settings_window_box_closed ( GtkWindow *settings_window_box, GtkWindow *window) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (settings_window_box != NULL) && (window != NULL) ) { /* Updates all the GUI. */ gw_gui_manager_main_interface_update_all ( ); } } gwhere-0.2.3/src/gui/gwsettingswindowboxcallback.h0000744000175000017500000001656310023202520020775 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsettingswindowboxcallback.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI callback component. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwsettingswindowboxcallback.c * @author Author */ #ifndef GW_GUI_GW_SETTINGS_WINDOW_BOX_CALLBACK_H #define GW_GUI_GW_SETTINGS_WINDOW_BOX_CALLBACK_H /*! * @typedef func_gw_settings_window_box_notebook_apply_t * This function is called when settings are applied. * @abstract Functions specification * @param settings the parent window of plugin */ typedef gint (*func_gw_settings_window_box_notebook_apply_t)( GtkWindow *settings); /*! * @function gw_settings_window_box_tree_select_row * @abstract Loads the requested plugin. * @discussion This function loads the requested plugin. This function * is called when user select a plugin in the exploration * tree. * @param ctree the exploration tree * @param node the selected node in tree * @param column the column of the selected node in tree * @param w the settings window box */ void gw_settings_window_box_tree_select_row ( GtkCTree *ctree, GList *node, gint column, GtkWindow *w); /*! * @function gw_settings_window_box_tree_unselect_row * @abstract Checks with a settings is modified. * @discussion This function checks with a settings is modified. This function * is called when user unselect a plugin in the exploration * tree. * @param ctree the exploration tree * @param node the selected node in tree * @param column the column of the selected node in tree * @param w the settings window box */ void gw_settings_window_box_tree_unselect_row ( GtkCTree *ctree, GList *node, gint column, GtkWindow *w); /*! * @function gw_settings_window_box_tree_expand * @abstract Does nothing at this time. * @discussion This function does nothing at this time. This function * is called when user expand a node in the exploration * tree. * @param ctree the exploration tree * @param node the selected node in tree * @param w the settings window box */ void gw_settings_window_box_tree_expand ( GtkCTree *ctree, GList *node, GtkWindow *w); /*! * @function gw_settings_window_box_tree_collapse * @abstract Does nothing at this time. * @discussion This function does nothing at this time. This function * is called when user collapse a node in the exploration * tree. * @param ctree the exploration tree * @param node the selected node in tree * @param w the settings window box */ void gw_settings_window_box_tree_collapse ( GtkCTree *ctree, GList *node, GtkWindow *w); /*! * @function gw_settings_window_box_tree_move * @abstract Does nothing at this time. * @discussion This function does nothing at this time. This function * is called when user move a node in the exploration * tree. * @param ctree the exploration tree * @param node the selected node in tree * @param new_parent the new node's parent * @param new_siblng the new node's sibling * @param w the settings window box */ void gw_settings_window_box_tree_move ( GtkCTree *ctree, GList *node, GList *new_parent, GList *new_sibling, GtkWindow *w); /*! * @function gw_settings_window_box_tree_change_focus_row_expansion * @abstract Does nothing at this time. * @discussion This function does nothing at this time. * @param ctree the exploration tree * @param expansion the tree expansion type * @param w the settings window box */ void gw_settings_window_box_tree_change_focus_row_expansion ( GtkCTree *ctree, GtkCTreeExpansionType expansion, GtkWindow *w); /*! * @function gw_settings_window_box_noteboox_settings_switch_page * @abstract Does nothing at this time. * @discussion his function does nothing at this time. This function * is called when user select a plugin in the exploration * tree and the plugin switch to another. * @param notebook the notebook where are plugins * @param page the page in notebook * @param page_num the page number * @param w the settings window box */ void gw_settings_window_box_noteboox_settings_switch_page ( GtkNotebook *notebook, GtkNotebookPage *page, gint page_num, GtkWindow *w); /*! * @function gw_settings_window_box_btn_ok_clicked * @abstract Prevents Ok button is clicked. * @discussion This function prevents Ok button is clicked. * @param button the invoker button * @param w the settings window box */ void gw_settings_window_box_btn_ok_clicked ( GtkButton *button, GtkWindow *w); /*! * @function gw_settings_window_box_btn_cancel_clicked * @abstract Prevents Cancel button is clicked. * @discussion This function prevents Cancel button is clicked. * @param button the invoker button * @param w the settings window box */ void gw_settings_window_box_btn_cancel_clicked ( GtkButton *button, GtkWindow *w); /*! * @function gw_settings_window_box_btn_apply_clicked * @abstract Prevents Apply button is clicked. * @discussion This function prevents Apply button is clicked. * @param button the invoker button * @param w the settings window box */ void gw_settings_window_box_btn_apply_clicked ( GtkButton *button, GtkWindow *w); /*! * @function gw_settings_window_box_apply_ok * @abstract Applies all changes. * @discussion This function applies all changes. * @param button the invoker button * @param w the settings window box */ void gw_settings_window_box_apply_ok ( GtkButton *button, GtkWindow *w); /*! * @function gw_settings_window_box_apply_no * @abstract Doesn't apply all changes. * @discussion This function doesn't apply all changes. * @param button the invoker button * @param w the settings window box */ void gw_settings_window_box_apply_no ( GtkButton *button, GtkWindow *w); /*! * @function gw_settings_window_box_apply_cancel * @abstract Cancels apply all changes. * @discussion This function cancels apply all changes. * @param button the invoker button * @param w the settings window box */ void gw_settings_window_box_apply_cancel ( GtkButton *button, GtkWindow *w); /*! * @function gw_settings_window_box_closed * @abstract Called when the settings window box is closed. * @discussion This function is called when the settings window box is closed. * @param settings_window_box the invoker button * @param window the settings window box */ void gw_settings_window_box_closed ( GtkWindow *settings_window_box, GtkWindow *window); #endif gwhere-0.2.3/src/gui/gwstatusbar.c0000744000175000017500000001123410023202520015510 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwstatusbar.h" /*! @define GW_REF_STATUS_BAR_FIRST_STATUS The first status reference */ #define GW_REF_STATUS_BAR_FIRST_STATUS "gw_ref_gw_status_bar_first_status" /*! @define GW_REF_STATUS_BAR_SECOND_STATUS The second status reference */ #define GW_REF_STATUS_BAR_SECOND_STATUS "gw_ref_gw_status_bar_second_status" GtkWidget * gw_status_bar_create ( GtkWindow *w) { GtkWidget *gw_status_bar_box; GtkWidget *hbox; GtkWidget *status_bar1; GtkWidget *status_bar2; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gw_status_bar_box = gtk_viewport_new ( NULL, NULL); gtk_viewport_set_shadow_type ( GTK_VIEWPORT ( gw_status_bar_box), GTK_SHADOW_NONE); hbox = gtk_hbox_new ( FALSE, 0); gtk_container_add ( GTK_CONTAINER ( gw_status_bar_box), hbox); /* First status bar */ status_bar1 = gtk_statusbar_new ( ); gtk_widget_ref ( status_bar1); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_STATUS_BAR_FIRST_STATUS, status_bar1, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hbox), status_bar1, FALSE, FALSE, 0); gtk_widget_set_usize ( status_bar1, 500, -2); /* Second status bar */ status_bar2 = gtk_statusbar_new ( ); gtk_widget_ref ( status_bar2); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_STATUS_BAR_SECOND_STATUS, status_bar2, (GtkDestroyNotify) gtk_widget_unref); gtk_box_pack_start ( GTK_BOX ( hbox), status_bar2, TRUE, TRUE, 0); return gw_status_bar_box; } GtkWidget * gw_status_bar_create_and_add ( GtkWindow *w, GtkWidget *parent) { GtkWidget *status_bar = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif status_bar = gw_status_bar_create ( w); if ( (parent != NULL) && (status_bar != NULL) ) { gtk_box_pack_start ( GTK_BOX ( parent), status_bar, FALSE, FALSE, 0); } return status_bar; } GtkStatusbar * gw_status_bar_get_first_status ( GtkWindow *w) { GtkStatusbar *status = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { status = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_STATUS_BAR_FIRST_STATUS); } return status; } GtkStatusbar * gw_status_bar_get_second_status ( GtkWindow *w) { GtkStatusbar *status = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { status = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_STATUS_BAR_SECOND_STATUS); } return status; } gint gw_status_bar_put_messages ( GtkWindow *w, gchar *first_msg, gchar *second_msg) { GtkStatusbar *status = NULL; guint context_id; gint result = -1; /* They are static in order to remove last messages before put new messages. */ static guint message_id1 = 0; static guint message_id2 = 0; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : (%s;%s)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, first_msg, second_msg); #endif if ( w != NULL ) { if ( first_msg != NULL ) { status = gw_status_bar_get_first_status ( w); context_id = gtk_statusbar_get_context_id ( status, "Working"); if ( message_id1 != 0 ) { gtk_statusbar_remove ( status, context_id, message_id1); } g_strdup_to_gtk_text ( first_msg, text_utf8); message_id1 = gtk_statusbar_push ( status, context_id, text_utf8); g_free ( text_utf8); } if ( second_msg != NULL ) { status = gw_status_bar_get_second_status ( w); context_id = gtk_statusbar_get_context_id ( status, "Working"); if ( message_id2 != 0 ) { gtk_statusbar_remove ( status, context_id, message_id2); } g_strdup_to_gtk_text ( second_msg, text_utf8); message_id2 = gtk_statusbar_push ( status, context_id, text_utf8); g_free ( text_utf8); } result = 0; } return result; } gwhere-0.2.3/src/gui/gwstatusbar.h0000744000175000017500000000635710023202520015527 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwstatusbar.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for the status bar. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwstatusbar.c * @author Author */ #ifndef GW_GUI_GW_STATUS_BAR_H #define GW_GUI_GW_STATUS_BAR_H /*! * @function gw_status_bar_create * @abstract Creates a status bar. * @discussion This function creates a status bar. * @param w refence to the main window * @result the status bar.
* Returns NULL when an error occured. */ GtkWidget * gw_status_bar_create ( GtkWindow *w); /*! * @function gw_status_bar_create_and_add * @abstract Creates a status bar and adds to the container. * @discussion This function creates a status bar and add to the container. * @param w refence to the main window * @param parent parent container * @result the status bar.
* Returns NULL when an error occured. */ GtkWidget * gw_status_bar_create_and_add ( GtkWindow *w, GtkWidget *parent); /*! * @function gw_status_bar_get_first_status * @abstract Gets the first status. * @discussion This function gets the first status. * @param w refence to the main window * @result the first status.
* Returns NULL when an error occured. */ GtkStatusbar * gw_status_bar_get_first_status ( GtkWindow *w); /*! * @function gw_status_bar_get_second_status * @abstract Gets the second status. * @discussion This function gets the second status. * @param w refence to the main window * @result the second status.
* Returns NULL when an error occured. */ GtkStatusbar * gw_status_bar_get_second_status ( GtkWindow *w); /*! * @function gw_status_bar_put_messages * @abstract Puts messages into status bar. * @discussion This function puts messages into status bar.
* @param w refence to the main window * @param first_msg the first message * @param second_msg the second message * @result an error code.
* Returns 0 when it's done. * Returns -1 when an error occured. */ gint gw_status_bar_put_messages ( GtkWindow *w, gchar *first_msg, gchar *second_msg); #endif gwhere-0.2.3/src/gui/gwstatusbarcallback.c0000744000175000017500000001565110243232316017206 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwstatusbarcallback.h" #include /* strcmp */ #include "data/gwdata.h" #include "tools/gwtools.h" #include "gwapplicationmanager.h" #include "gwhelper.h" #include "gwstatusbar.h" gint gw_status_bar_put_msg_catalog ( GtkWindow *w, GtkCTree *ctree, GtkCTreeNode *root, gint num, gdouble size) { GWDBContext *context = gw_am_get_current_catalog_context ( ); GWCatalogPlugin *plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); GWDBCatalog *catalog = NULL; gchar *msg1, *msg2; gchar *tmp = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : total size is %e\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, size); #endif if ( w != NULL ) { catalog = plugin->gw_db_catalog_get_db_catalog ( context); msg1 = g_strdup_printf ( _( " %s [ %s ], total disks : %d"), gw_helper_db_catalog_get_usefull_name ( catalog), gw_helper_db_catalog_get_full_name ( catalog), num); msg2 = g_strdup_printf ( _( " Listed Items : %d (total size : %s)"), num, (tmp = gw_d_byte_to_str_format ( size))); if ( tmp != NULL ) g_free ( tmp); result = gw_status_bar_put_messages ( w, msg1, msg2); g_free ( msg1); g_free ( msg2); gw_db_catalog_free ( catalog); result = 0; } return result; } gint gw_status_bar_put_msg_disk ( GtkWindow *w, gchar *name, gchar *type, guint64 capacity, guint64 free, gdouble size, gint num) { gchar *msg1, *msg2; gint result = -1; gchar *text_utf8[2]; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( name != NULL && type != NULL) { text_utf8[0] = NULL; text_utf8[1] = NULL; msg1 = g_strdup_printf ( _( " %s [ %s ], capacity : %s, free : %s"), name, type, (text_utf8[0] = gw_ui64_byte_to_str_format ( capacity)), (text_utf8[1] = gw_ui64_byte_to_str_format ( free))); if ( text_utf8[0] != NULL ) { g_free ( text_utf8[0]); } if ( text_utf8[1] != NULL ) { g_free ( text_utf8[1]); } if ( num == -1 ) { msg2 = g_strdup ( _( " Empty disk")); } else if ( num == 0 ) { text_utf8[0] = NULL; msg2 = g_strdup_printf ( _( " Selected Item : %d (total size : %s)"), 1, (text_utf8[0] = gw_d_byte_to_str_format ( size))); if ( text_utf8[0] != NULL ) { g_free ( text_utf8[0]); } } else { text_utf8[0] = NULL; msg2 = g_strdup_printf ( _( " Listed Items : %d (total size : %s)"), num, (text_utf8[0] = gw_d_byte_to_str_format ( size))); if ( text_utf8[0] != NULL ) { g_free ( text_utf8[0]); } } result = gw_status_bar_put_messages ( w, msg1, msg2); g_free ( msg1); g_free ( msg2); } else { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : name or type are NULL\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } } else { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : parent window is NULL\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } return result; } gint gw_status_bar_put_msg_dir ( GtkWindow *w, gchar *name, gdouble size, gint nb_files, gint nb_subfolders, gint num) { gchar *msg1, *msg2; gint result = -1; gchar *text_utf8[2]; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { text_utf8[0] = NULL; msg1 = g_strdup_printf ( _( " Folder \"%s\", %s (files %d, subfolders %d)"), name, (text_utf8[0] = gw_d_byte_to_str_format ( size)), nb_files, nb_subfolders); if ( text_utf8[0] != NULL ) { g_free ( text_utf8[0]); } if ( num == 0 ) { text_utf8[0] = NULL; msg2 = g_strdup_printf ( _( " Selected Item : %d (total size : %s)"), 1, (text_utf8[0] = gw_d_byte_to_str_format ( size))); if ( text_utf8[0] != NULL ) { g_free ( text_utf8[0]); } } else { text_utf8[0] = NULL; msg2 = g_strdup_printf ( _( " Listed Items : %d (total size : %s)"), num, (text_utf8[0] = gw_d_byte_to_str_format ( size))); if ( text_utf8[0] != NULL ) { g_free ( text_utf8[0]); } } result = gw_status_bar_put_messages ( w, msg1, msg2); g_free ( msg1); g_free ( msg2); } return result; } gint gw_status_bar_put_msg_file ( GtkWindow *w, gchar *name, gdouble size, gchar *date, gint num) { gchar *msg1, *msg2; gint result = -1; gchar *text_utf8[2]; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { text_utf8[0] = NULL; msg1 = g_strdup_printf ( _( " %s, %s, %s"), name, (text_utf8[0] = gw_d_byte_to_str_format ( size)), date); if ( text_utf8[0] != NULL ) { g_free ( text_utf8[0]); } text_utf8[0] = NULL; msg2 = g_strdup_printf ( _( " Selected Item : %d (total size : %s)"), num, (text_utf8[0] = gw_d_byte_to_str_format ( size))); if ( text_utf8[0] != NULL ) { g_free ( text_utf8[0]); } result = gw_status_bar_put_messages ( w, msg1, msg2); g_free ( msg1); g_free ( msg2); } return result; } gint gw_status_bar_set_catalog_explorer_page ( GtkWindow *w, gint n) { gchar *msg = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { msg = g_strdup_printf ( _( " Selected Item : %d"), n); result = gw_status_bar_put_messages ( w, _( " Catalog explorer"), msg); g_free ( msg); } return result; } gint gw_status_bar_set_catalog_search_page ( GtkWindow *w, gint n) { gchar *msg = NULL; gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { msg = g_strdup_printf ( _( " Selected Item : %d"), n); result = gw_status_bar_put_messages ( w, _( " Search engine"), msg); g_free ( msg); } return result; } gint gw_status_bar_set_catalog_managment_page ( GtkWindow *w) { gint result = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { result = gw_status_bar_put_messages ( w, _( " Catalog managment"), ""); } return result; } gwhere-0.2.3/src/gui/gwstatusbarcallback.h0000744000175000017500000001367210023202520017202 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwstatusbarcallback.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for the status bar callback. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwstatusbarcallback.c * @author Author */ #ifndef GW_GUI_GW_STATUS_BAR_CALLBACK_H #define GW_GUI_GW_STATUS_BAR_CALLBACK_H /*! * @function gw_status_bar_put_msg_catalog * @abstract Puts messages about catalog into status bar. * @discussion This function puts messages about catalog into * status bar. this function is called when the * user select a catalog. * @param w refence to the main window * @param ctree tree catalog * @param root catalog root tree node * @param num number of disks * @param size total size of disks * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_status_bar_put_msg_catalog ( GtkWindow *w, GtkCTree *ctree, GtkCTreeNode *root, gint num, gdouble size); /*! * @function gw_status_bar_put_msg_disk * @abstract Puts messages about disk into status bar. * @discussion This function puts messages about disk into * status bar. This function is called when the * user select a disk.
* Set num to 0 when the disk is selected * in the files list. In this case listed items * will be one. * @param w refence to the main window * @param name disk name * @param type disk type * @param size total size of disk * @param free total free space of disk * @param num number of sub elements disks (in only one level) * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_status_bar_put_msg_disk ( GtkWindow *w, gchar *name, gchar *type, guint64 capacity, guint64 free, gdouble size, gint num); /*! * @function gw_status_bar_put_msg_dir * @abstract Puts messages about dir into status bar. * @discussion This function puts messages about dir into * status bar. This function is called when the * user select a dir.
* Set num to 0 when the dir is selected * in the files list. In this case listed items * will be one. * @param w refence to the main window * @param name dir name * @param size total size of dir * @param nb_files number of files * @param nb_subfolders number of subfolders * @param num number of sub elements dir (in only one level) * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_status_bar_put_msg_dir ( GtkWindow *w, gchar *name, gdouble size, gint nb_files, gint nb_subfolders, gint num); /*! * @function gw_status_bar_put_msg_file * @abstract Puts messages about file into status bar. * @discussion This function puts messages about file into * status bar. This function is called when the * user select a file.
* @param w refence to the main window * @param name file name * @param size file size * @param date file date * @param num number of selected files * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_status_bar_put_msg_file ( GtkWindow *w, gchar *name, gdouble size, gchar *date, gint num); /*! * @function gw_status_bar_set_catalog_explorer_page * @abstract Updates status for the explorer tabbed pane. * @discussion This function updates status for the explorer * tabbed pane. This function is called when the * user goes to the explorer tabbed pane.
* @param w refence to the main window * @param n number of selected items * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_status_bar_set_catalog_explorer_page ( GtkWindow *w, gint n); /*! * @function gw_status_bar_set_catalog_search_page * @abstract Updates status for the catalog search tabbed pane. * @discussion This function updates status for the catalog * search tabbed pane. This function is called * when the user goes to the catalog search tabbed * pane.
* @param w refence to the main window * @param n number of selected items * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_status_bar_set_catalog_search_page ( GtkWindow *w, gint n); /*! * @function gw_status_bar_set_catalog_managment_page * @abstract Updates status for the catalog managment tabbed pane. * @discussion This function updates status for the catalog * managment tabbed pane. This function is called * when the user goes to the catalog managment * tabbed pane.
* @param w refence to the main window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_status_bar_set_catalog_managment_page ( GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwtextbox.c0000744000175000017500000001426710111230076015213 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwtextbox.h" #include "gtktextarea.h" #include /* strlen */ /*! @define GW_REF_TEXT_BOX_PARENT_WINDOW The parent window reference */ #define GW_REF_TEXT_BOX_PARENT_WINDOW "gw_ref_gw_text_box_parent_window" /*! @define GW_REF_TEXT_DATA_TEXT The data text reference */ #define GW_REF_TEXT_DATA_TEXT "gw_ref_text_data_text" GtkWidget * gw_text_box_create ( GtkWindow *window, gchar *title, gchar *subject, gchar *text, GtkSignalFunc ok) { /* This is a single window, this properties may be changed */ static GtkWidget *w = NULL; GtkWidget *frame = NULL; GtkWidget *vbox = NULL; GtkWidget *hbox = NULL; GtkWidget *scroll_zone = NULL; GtkWidget *txt_area = NULL; GtkWidget *button = NULL; guint button_key; GtkAccelGroup *accel = NULL; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Inits an accel group for keystroke shortcuts */ accel = gtk_accel_group_new ( ); if ( !w ) { w = gtk_window_new ( GTK_WINDOW_TOPLEVEL); gtk_window_set_policy ( GTK_WINDOW ( w), FALSE, FALSE, TRUE); g_strdup_to_gtk_text ( title, text_utf8); gtk_window_set_title ( GTK_WINDOW ( w), text_utf8); g_free ( text_utf8); gtk_window_set_modal ( GTK_WINDOW ( w),TRUE); gtk_window_set_transient_for ( GTK_WINDOW ( w), window); gtk_window_set_position ( GTK_WINDOW ( w), GTK_WIN_POS_CENTER); gtk_container_border_width ( GTK_CONTAINER ( w), 5); gtk_signal_connect ( GTK_OBJECT ( w), "destroy", GTK_SIGNAL_FUNC ( gtk_widget_destroyed), &w); /* Store parent window reference */ gtk_widget_ref ( GTK_WIDGET ( window)); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_TEXT_BOX_PARENT_WINDOW, window, (GtkDestroyNotify) gtk_widget_unref); frame = gtk_frame_new ( subject); gtk_container_add ( GTK_CONTAINER ( w), frame); vbox = gtk_vbox_new ( FALSE, 0); gtk_container_add ( GTK_CONTAINER ( frame), vbox); gtk_container_set_border_width ( GTK_CONTAINER ( vbox), 10); /* Creates the text srollbar */ scroll_zone = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( vbox), scroll_zone, TRUE, TRUE, 0); gtk_container_set_border_width ( GTK_CONTAINER ( scroll_zone), 5); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scroll_zone), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); /* Creates text area */ txt_area = gtk_text_area_new ( ); gtk_text_area_set_editable ( GTK_TEXT_AREA ( txt_area), TRUE); /* Sets default text value */ if ( text != NULL ) { gtk_text_area_insert ( GTK_TEXT_AREA ( txt_area), text); } gtk_widget_set_usize ( txt_area, 400, 300); gtk_widget_ref ( txt_area); /* Store data text reference */ gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_TEXT_DATA_TEXT, txt_area, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( scroll_zone), txt_area); gtk_widget_grab_focus ( txt_area); hbox = gtk_hbox_new ( TRUE, 10); gtk_container_add ( GTK_CONTAINER ( vbox), hbox); gtk_container_set_border_width ( GTK_CONTAINER ( hbox), 5); button = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_OK"), text_utf8); button_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( button)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( button, "clicked", accel, button_key, GDK_MOD1_MASK, 0); gtk_object_set_user_data ( GTK_OBJECT ( button), w); gtk_box_pack_start ( GTK_BOX ( hbox), button, TRUE, TRUE, 0); if ( ok != NULL ) { gtk_signal_connect ( GTK_OBJECT ( button), "clicked", GTK_SIGNAL_FUNC ( ok), w); } else { gtk_signal_connect_object ( GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w)); } button = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Cancel"), text_utf8); button_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( button)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( button, "clicked", accel, button_key, GDK_MOD1_MASK, 0); gtk_object_set_user_data ( GTK_OBJECT ( button), w); gtk_box_pack_start ( GTK_BOX ( hbox), button, TRUE, TRUE, 0); gtk_signal_connect_object ( GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w)); gtk_window_add_accel_group ( GTK_WINDOW ( w), accel); } if ( !GTK_WIDGET_VISIBLE ( w) ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : show the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_show_all ( w); } else { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : destroy the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_destroy ( w); } return w; } gchar * gw_text_box_get_text ( GtkWidget *w) { GtkTextArea *text_area = NULL; gchar *text = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (text_area = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_TEXT_DATA_TEXT)) != NULL ) { text = gtk_text_area_get_text ( GTK_TEXT_AREA ( text_area)); } } return text; } GtkWindow * gw_text_box_get_parent_window ( GtkWidget *w) { GtkWindow *parent = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { parent = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_TEXT_BOX_PARENT_WINDOW); } return parent; } gwhere-0.2.3/src/gui/gwtextbox.h0000744000175000017500000000523310023202520015204 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwtextbox.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for filled text box. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwtextbox.c * @author Author */ #ifndef GW_GUI_GW_TEXT_BOX_H #define GW_GUI_GW_TEXT_BOX_H /*! * @function gw_text_box_create * @abstract Creates a filled text box. * @discussion This function creates a filled text box. If the * ok callback function is NULL the filled * text box is destroy when the user clicks on * ok button. * @param w refence to the parent window * @param title window title * @param subject frame title * @param text default text value * @param ok ok callback function * @result the filled text box.
* Returns NULL when an error occured. */ GtkWidget * gw_text_box_create ( GtkWindow *parent, gchar *title, gchar *subject, gchar *text, GtkSignalFunc ok); /*! * @function gw_text_box_get_text * @abstract Gets the text value * @discussion This function gets the text value. * @param w the filled text box * @result the text value. Must be freed with g_free().
* Returns NULL when an error occured. */ gchar * gw_text_box_get_text ( GtkWidget *w); /*! * @function gw_text_box_get_parent_window * @abstract Gets the parent window * @discussion This function gets the parent window. * @param w the filled text box * @result the parent window.
* Returns NULL when an error occured. */ GtkWindow * gw_text_box_get_parent_window ( GtkWidget *w); #endif gwhere-0.2.3/src/gui/gwtoolbar.c0000744000175000017500000001042010111230140015133 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwtoolbar.h" #include "res/gwres.h" #include "gwmenufilecallback.h" /*! @define GW_REF_HANDLE_TOOL_BAR The handle tool bar reference */ #define GW_REF_HANDLE_TOOL_BAR "gw_handle_tool_bar" /*! @define GW_REF_TOOL_BAR The tool bar reference */ #define GW_REF_TOOL_BAR "gw_tool_bar" GtkWidget * gw_tool_bar_create ( GtkWindow *w) { GtkWidget *handle_box = NULL; GtkWidget *tool_bar; GtkWidget *pix_ico_new; GtkWidget *pix_ico_open; GtkWidget *pix_ico_save; GtkWidget *pix_ico_close; GtkWidget *pix_ico_send_mail; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif handle_box = gtk_handle_box_new ( ); /* Stores the handle box reference */ gtk_widget_ref ( handle_box); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_HANDLE_TOOL_BAR, handle_box, (GtkDestroyNotify) gtk_widget_unref); gtk_handle_box_set_shadow_type ( GTK_HANDLE_BOX ( handle_box), GTK_SHADOW_OUT); /* Should put defined ( OS_WIN32) because gtk_toolbar_new(void) is undefined?! */ #if defined ( HAVE_GTK12) tool_bar = gtk_toolbar_new ( GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS); #elif defined ( HAVE_GTK20) tool_bar = gtk_toolbar_new ( ); #endif /* Stores the tool bar box reference */ gtk_widget_ref ( tool_bar); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_TOOL_BAR, tool_bar, (GtkDestroyNotify) gtk_widget_unref); #if defined ( HAVE_GTK12) gtk_toolbar_set_button_relief ( GTK_TOOLBAR ( tool_bar), GTK_RELIEF_NONE); #endif gtk_container_add ( GTK_CONTAINER ( handle_box), tool_bar); /* Loads icons for tool bar */ icons_load_toolbar ( w); /* Adds all icons to the tool bar */ pix_ico_new = gtk_pixmap_new ( PixNew, MskNew); g_strdup_to_gtk_text ( _( "New catalog"), text_utf8); gtk_toolbar_append_item ( GTK_TOOLBAR ( tool_bar), NULL, text_utf8, NULL, pix_ico_new, GTK_SIGNAL_FUNC ( gw_menu_file_new_click), w); g_free ( text_utf8); pix_ico_open = gtk_pixmap_new ( PixOpen, MskOpen); g_strdup_to_gtk_text ( _( "Open catalog"), text_utf8); gtk_toolbar_append_item ( GTK_TOOLBAR ( tool_bar), NULL, text_utf8, NULL, pix_ico_open, GTK_SIGNAL_FUNC ( gw_menu_file_open_click), w); g_free ( text_utf8); pix_ico_save = gtk_pixmap_new ( PixSave, MskSave); g_strdup_to_gtk_text ( _( "Save catalog"), text_utf8); gtk_toolbar_append_item ( GTK_TOOLBAR ( tool_bar), NULL, text_utf8, NULL, pix_ico_save, GTK_SIGNAL_FUNC ( gw_menu_file_save_click), w); g_free ( text_utf8); pix_ico_close = gtk_pixmap_new ( PixClose, MskClose); g_strdup_to_gtk_text ( _( "Close catalog"), text_utf8); gtk_toolbar_append_item ( GTK_TOOLBAR ( tool_bar), NULL, text_utf8, NULL, pix_ico_close, GTK_SIGNAL_FUNC ( gw_menu_file_close_click), w); g_free ( text_utf8); pix_ico_send_mail = gtk_pixmap_new ( PixSendMail, MskSendMail); g_strdup_to_gtk_text ( _( "Send catalog by mail"), text_utf8); gtk_toolbar_append_item ( GTK_TOOLBAR ( tool_bar), NULL, text_utf8, NULL, pix_ico_send_mail, GTK_SIGNAL_FUNC ( gw_menu_file_send_mail_click), w); g_free ( text_utf8); return handle_box; } GtkWidget * gw_tool_bar_create_and_add ( GtkWindow *w, GtkWidget *parent) { GtkWidget *tool_bar = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { tool_bar = gw_tool_bar_create ( w); if ( (parent != NULL) && (tool_bar != NULL) ) { gtk_box_pack_start ( GTK_BOX ( parent), tool_bar, FALSE, FALSE, 0); } } return tool_bar; } gwhere-0.2.3/src/gui/gwtoolbar.h0000744000175000017500000000424110023202520015147 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwtoolbar.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component for handle tool bar. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwtoolbar.c * @author Author */ #ifndef GW_GUI_GW_TOOL_BAR_H #define GW_GUI_GW_TOOL_BAR_H /*! * @function gw_tool_bar_create * @abstract Creates a handle tool bar. * @discussion This function creates a handle tool bar. * @param w refence to the main window * @result the handle tool bar.
* Returns NULL when an error occured. */ GtkWidget * gw_tool_bar_create ( GtkWindow * w); /*! * @function gw_tool_bar_create_and_add * @abstract Creates a handle tool bar and adds to the container. * @discussion This function creates a handle tool bar and adds to the container. * @param w refence to the main window * @param parent reference to the container * @result the handle tool bar.
* Returns NULL when an error occured. */ GtkWidget * gw_tool_bar_create_and_add ( GtkWindow * w, GtkWidget *parent); #endif gwhere-0.2.3/src/gui/gwwindowboxabout.c0000744000175000017500000002473210023202520016562 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwwindowboxabout.h" /*! @define GW_REF_WINDOW_ABOUT_LOGO_PIX The logo pixmap */ #define GW_REF_WINDOW_ABOUT_LOGO_PIX "gw_ref_window_about_logo_pix" /*! @define GW_REF_WINDOW_ABOUT_LOGO_BIT The logo bitmap */ #define GW_REF_WINDOW_ABOUT_LOGO_BIT "gw_ref_window_about_logo_bit" /*! @define GW_REF_WINDOW_ABOUT_EVENT_BOX The event box */ #define GW_REF_WINDOW_ABOUT_EVENT_BOX "gw_ref_window_about_event_box" /*! @define GW_REF_WINDOW_ABOUT_VBOX The main vertical box */ #define GW_REF_WINDOW_ABOUT_VBOX "gw_ref_window_about_vbox" /*! @define GW_REF_WINDOW_ABOUT_TEXT The about text */ #define GW_REF_WINDOW_ABOUT_TEXT "gw_ref_window_about_text" /* XPM : GWhere logo */ static char *GWhere_logo_xpm[] = { "70 46 3 1", ". c #669999", "# c #ff9900", " c None", " ... ", " ...................... ", " ............................. ", " ................. ................. ", " .......... .......... ", " ........ ........ ", " ....... ....... ", " ..... ...... ", " ...... ...... ", " ..... ..... ", " .... ..... ", " .... .... ", " .... .... ", " .... .... ", " .... ....", " ... ...", " ... ", " ... ", " ... ", " ... ## ### ## ## # ####### ####### #######", " ... ## ### ## ## # ## # ## # ", "... # ### # ## # ## # ## # ", "... ## # # ## ## # ## # ## # ", "... ## ## ## ## ######## ####### # ##### #######", "... ## ## ## ## ######## ## ###### # ", "... # ## ## # ## # ## # ## # ", " .. #### ### ## # ## # ## # ", " ... ### ### ## # ## # ## ## ", " ... ## ### ## # ###### # ## ######", " ... ", " ... ..............................................", " ... ..............................................", " .... ....", " .... .... ", " .... .... ", " .... .... ", " .... ..... ", " ..... ..... ", " ...... ...... ", " ...... ...... ", " ....... ...... ", " ........ ....... ", " .......... ......... ", " ................. ................. ", " ............................. ", " ...................... "}; GtkWidget * gw_window_box_about_create ( GtkWindow *window) { /* This window must be single, this property shouldn't be changed */ static GtkWidget *w = NULL; GdkColor transparent = {0}; GtkWidget *vbox_about = NULL; GtkWidget *label = NULL; GtkWidget *event_box = NULL; GtkWidget *logo = NULL; GdkPixmap *pix_gw_logo = NULL; GdkBitmap *msk_gw_logo = NULL; gchar * text = NULL; gchar * text_utf8 = NULL; GdkCursor *cursor = NULL; gchar * os_version = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( !w ) { /* GWhere logo loading */ pix_gw_logo = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( window)->window, &msk_gw_logo, &transparent, GWhere_logo_xpm); w = gtk_window_new ( GTK_WINDOW_TOPLEVEL); gtk_window_set_modal ( GTK_WINDOW ( w), TRUE); gtk_window_set_transient_for ( GTK_WINDOW ( w), window); gtk_window_set_position ( GTK_WINDOW ( w), GTK_WIN_POS_CENTER); g_strdup_to_gtk_text ( _( "About"), text_utf8); gtk_window_set_title ( GTK_WINDOW ( w), text_utf8); g_free ( text_utf8); gtk_signal_connect ( GTK_OBJECT ( w), "destroy", GTK_SIGNAL_FUNC ( gw_window_box_about_destroy), &w); gtk_signal_connect ( GTK_OBJECT ( w), "delete-event", GTK_SIGNAL_FUNC ( gtk_widget_destroy), NULL); /* See more bottom the call of gdk_pixmap_unref() and gdk_bitmap_unref(). gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_WINDOW_ABOUT_LOGO_PIX, pix_gw_logo, ( GtkDestroyNotify)gdk_pixmap_unref); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_WINDOW_ABOUT_LOGO_BIT, msk_gw_logo, ( GtkDestroyNotify)gdk_bitmap_unref); */ gtk_container_set_border_width ( GTK_CONTAINER ( w), 5); gtk_widget_set_usize ( w, 360, 340); event_box = gtk_event_box_new ( ); gtk_container_add ( GTK_CONTAINER ( w), event_box); vbox_about = gtk_vbox_new ( FALSE, 0); gtk_container_add ( GTK_CONTAINER ( event_box), vbox_about); logo = gtk_pixmap_new ( pix_gw_logo, msk_gw_logo); gdk_pixmap_unref ( pix_gw_logo); gdk_bitmap_unref ( msk_gw_logo); gtk_container_add ( GTK_CONTAINER ( vbox_about), logo); /* Doesn't encode to UTF-8 substring because the result string will be encoded. */ gw_os_get_version_str ( &os_version); text = g_strconcat ( PROJECT_NAME, "-", VERSION, _( "\nRemovable media catalog managment\nBy Sebastien LECACHEUR\n\nzero@gwhere.org\nhttp://www.gwhere.org\n"), _( "GWhere allows to manage a database of yours CDs and others removable media (hard disks, floppy drive, Zip drive, CD- ROM, etc...). With GWhere it's easy to browse yours CDs or to make quick search without need to insert yours CDs in the drive at each once."), _( "\n\nRuns under "), os_version, NULL); if ( os_version != NULL ) { g_free ( os_version); } g_strdup_to_gtk_text ( text, text_utf8); g_free ( text); label = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_label_set_justify ( GTK_LABEL ( label), GTK_JUSTIFY_FILL); gtk_label_set_line_wrap ( GTK_LABEL ( label), TRUE); gtk_container_add ( GTK_CONTAINER ( vbox_about), label); /* Should it be mandatory? Yes, in order to get the good window size to displaying all informations. */ gtk_widget_set_usize ( label, 330, 280); gtk_widget_set_events ( event_box, GDK_BUTTON_PRESS_MASK); gtk_signal_connect_object ( GTK_OBJECT ( event_box), "button_press_event", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w)); if ( (cursor = gdk_cursor_new ( GDK_HAND2)) != NULL) { /* Fix bug : event_box->window is NULL with GTK-2.0. */ if ( GTK_WIDGET ( event_box)->window != NULL ) { gdk_window_set_cursor ( GTK_WIDGET ( event_box)->window, cursor); #ifdef HAVE_GTK20 gdk_cursor_unref ( cursor); #endif } else { #ifdef GW_DEBUG_GUI_COMPONENT g_warning ( "gtk_event_box->window is NULL!!"); #endif gdk_cursor_destroy ( cursor); } } } if ( !GTK_WIDGET_VISIBLE ( w) ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : show the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_show_all ( w); } else { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : destroy the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif g_warning ( "gw_window_box_about is already displayed!! Destroying it..."); gtk_widget_destroy ( w); } return w; } gint gw_window_box_about_destroy ( GtkWindow *w, GtkWidget **self_window) { gint result = -1; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (w != NULL) && ( self_window != NULL) ) { gtk_widget_destroyed ( GTK_WIDGET ( w), self_window); result = 0; } return result; } gwhere-0.2.3/src/gui/gwwindowboxabout.h0000744000175000017500000000443110023202520016561 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwwindowboxabout.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwwindowboxabout.c * @author Author */ #ifndef GW_GUI_WINDOW_BOX_ABOUT_H #define GW_GUI_WINDOW_BOX_ABOUT_H /*! * @function gw_window_box_about_create * @abstract Creates the about window. * @discussion This function creates the about window. This window * can be destroyed by clicking on. * @param win refence to the main window * @result the about window.
* Returns NULL when an error occured. */ GtkWidget * gw_window_box_about_create ( GtkWindow *window); /*! * @function gw_window_box_about_destroy * @abstract Destroyes the about window. * @discussion This function destroyes the about window. This window * can be destroyed by clicking on. * @param w refence to the about window * @param self_window refence to the pointer of about window * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_window_box_about_destroy ( GtkWindow *w, GtkWidget **self_window); #endif gwhere-0.2.3/src/gui/gwwindowboxmail.c0000744000175000017500000003764210111230356016404 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwwindowboxmail.h" #include "gtktextarea.h" #include "gwwindowboxmailcallback.h" /*! @define GW_REF_MAIL_WINDOW_BOX_PARENT_WINDOW The parent window */ #define GW_REF_MAIL_WINDOW_BOX_PARENT_WINDOW "gw_ref_mail_window_box_parent_window" /*! @define GW_REF_MAIL_WINDOW_BOX_TO_ENTRY The send to entry */ #define GW_REF_MAIL_WINDOW_BOX_TO_ENTRY "gw_ref_mail_window_box_to_entry" /*! @define GW_REF_MAIL_WINDOW_BOX_CC_ENTRY The send CC entry */ #define GW_REF_MAIL_WINDOW_BOX_CC_ENTRY "gw_ref_mail_window_box_cc_entry" /*! @define GW_REF_MAIL_WINDOW_BOX_BCC_ENTRY The send BCC entry */ #define GW_REF_MAIL_WINDOW_BOX_BCC_ENTRY "gw_ref_mail_window_box_bcc_entry" /*! @define GW_REF_MAIL_WINDOW_BOX_OBJECT_ENTRY The mail object entry */ #define GW_REF_MAIL_WINDOW_BOX_OBJECT_ENTRY "gw_ref_mail_window_box_object_entry" /*! @define GW_REF_MAIL_WINDOW_BOX_ATTACH_FILE_CHK The checkbox to know if attach file */ #define GW_REF_MAIL_WINDOW_BOX_ATTACH_FILE_CHK "gw_ref_mail_window_box_attach_file_chk" /*! @define GW_REF_MAIL_WINDOW_BOX_MESSAGE_TEXT_AREA The message text of the mail */ #define GW_REF_MAIL_WINDOW_BOX_MESSAGE_TEXT_AREA "gw_ref_mail_window_box_message_text_area" GtkWindow * gw_mail_window_box_create ( GtkWindow *window, gchar *file_name) { /* This window must be single, this property may be changed */ static GtkWidget *w = NULL; GtkWidget *vbMailWindowsBox; GtkWidget *tblSendOptions; GtkWidget *lblTo; GtkWidget *lblCC; GtkWidget *lblBCC; GtkWidget *lblObject; GtkWidget *entTo; GtkWidget *entCC; GtkWidget *entBCC; GtkWidget *entObject; GtkWidget *lblAttachedFile; GtkWidget *chkBtnAttachedFile; GtkWidget *scrTextMail; GtkWidget *txtMail; GtkWidget *hbSendMailControl; guint btnCancel_key; GtkWidget *btnCancel; guint btnSend_key; GtkWidget *btnSend; GtkAccelGroup *accel_group; GtkTooltips *tooltips; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Inits the tooltips group. */ tooltips = gtk_tooltips_new ( ); /* Init an accel group for shortcuts */ accel_group = gtk_accel_group_new ( ); if ( !w ) { w = gtk_window_new ( GTK_WINDOW_TOPLEVEL); g_strdup_to_gtk_text ( _( "This window box allows you to send a catalog by mail to one (or more) of yours contacts."), text_utf8); gtk_tooltips_set_tip ( tooltips, GTK_WIDGET ( w), text_utf8, NULL); g_free ( text_utf8); g_strdup_to_gtk_text ( _( "Send mail"), text_utf8); gtk_window_set_title ( GTK_WINDOW ( w), text_utf8); g_free ( text_utf8); gtk_window_set_modal ( GTK_WINDOW ( w), TRUE); gtk_window_set_transient_for ( GTK_WINDOW ( w), window); gtk_window_set_position (GTK_WINDOW ( w), GTK_WIN_POS_CENTER); gtk_widget_set_usize ( w, 400, 300); gtk_signal_connect ( GTK_OBJECT ( w), "destroy", GTK_SIGNAL_FUNC ( gtk_widget_destroyed), &w); /* Store parent window reference */ gtk_widget_ref ( GTK_WIDGET ( window)); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_PARENT_WINDOW, window, ( GtkDestroyNotify) gtk_widget_unref); vbMailWindowsBox = gtk_vbox_new ( FALSE, 5); gtk_container_add ( GTK_CONTAINER ( w), vbMailWindowsBox); gtk_container_set_border_width ( GTK_CONTAINER ( vbMailWindowsBox), 5); tblSendOptions = gtk_table_new ( 5, 2, FALSE); gtk_box_pack_start ( GTK_BOX ( vbMailWindowsBox), tblSendOptions, FALSE, TRUE, 0); gtk_table_set_row_spacings ( GTK_TABLE ( tblSendOptions), 5); gtk_table_set_col_spacings ( GTK_TABLE ( tblSendOptions), 5); g_strdup_to_gtk_text ( _( "To :"), text_utf8); lblTo = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( tblSendOptions), lblTo, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) ( 0), 0, 0); gtk_misc_set_alignment ( GTK_MISC ( lblTo), 0, 0.5); g_strdup_to_gtk_text ( _( "CC :"), text_utf8); lblCC = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( tblSendOptions), lblCC, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) ( 0), 0, 0); gtk_misc_set_alignment ( GTK_MISC ( lblCC), 0, 0.5); g_strdup_to_gtk_text ( _( "BCC :"), text_utf8); lblBCC = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( tblSendOptions), lblBCC, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) ( 0), 0, 0); gtk_misc_set_alignment ( GTK_MISC ( lblBCC), 0, 0.5); g_strdup_to_gtk_text ( _( "Subject :"), text_utf8); lblObject = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( tblSendOptions), lblObject, 0, 1, 3, 4,(GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) ( 0), 0, 0); gtk_misc_set_alignment ( GTK_MISC ( lblObject), 0, 0.5); entTo = gtk_entry_new ( ); gtk_widget_ref ( entTo); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_TO_ENTRY, entTo,(GtkDestroyNotify) gtk_widget_unref); gtk_table_attach ( GTK_TABLE ( tblSendOptions), entTo, 1, 2, 0, 1,(GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) ( 0), 0, 0); g_strdup_to_gtk_text ( _( "Enter here the email address of your(s) contact(s)."), text_utf8); gtk_tooltips_set_tip ( tooltips, entTo, text_utf8, NULL); g_free ( text_utf8); entCC = gtk_entry_new ( ); gtk_widget_ref ( entCC); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_CC_ENTRY, entCC,(GtkDestroyNotify) gtk_widget_unref); gtk_table_attach (GTK_TABLE (tblSendOptions), entCC, 1, 2, 1, 2,(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),(GtkAttachOptions) ( 0), 0, 0); g_strdup_to_gtk_text ( _( "Enter here the email address of the copied mail contacts."), text_utf8); gtk_tooltips_set_tip ( tooltips, entCC, text_utf8, NULL); g_free ( text_utf8); entBCC = gtk_entry_new ( ); gtk_widget_ref ( entBCC); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_BCC_ENTRY, entBCC, (GtkDestroyNotify) gtk_widget_unref); gtk_table_attach ( GTK_TABLE ( tblSendOptions), entBCC, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) ( 0), 0, 0); g_strdup_to_gtk_text ( _( "Enter here the email address of the hidden copied mail contacts."), text_utf8); gtk_tooltips_set_tip ( tooltips, entBCC, text_utf8, NULL); g_free ( text_utf8); entObject = gtk_entry_new ( ); gtk_widget_ref ( entObject); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_OBJECT_ENTRY, entObject, (GtkDestroyNotify) gtk_widget_unref); gtk_table_attach ( GTK_TABLE ( tblSendOptions), entObject, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) ( 0), 0, 0); g_strdup_to_gtk_text ( _( "Enter here the object of your mail."), text_utf8); gtk_tooltips_set_tip ( tooltips, entObject, text_utf8, NULL); g_free ( text_utf8); g_strdup_to_gtk_text ( _( "Attached file :"), text_utf8); lblAttachedFile = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( tblSendOptions), lblAttachedFile, 0, 1, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) ( 0), 0, 0); gtk_misc_set_alignment ( GTK_MISC ( lblAttachedFile), 0, 0.5); if ( file_name != NULL ) { g_strdup_to_gtk_text ( file_name, text_utf8); chkBtnAttachedFile = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chkBtnAttachedFile); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_ATTACH_FILE_CHK, chkBtnAttachedFile, (GtkDestroyNotify) gtk_widget_unref); gtk_table_attach ( GTK_TABLE ( tblSendOptions), chkBtnAttachedFile, 1, 2, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) ( 0), 0, 0); g_strdup_to_gtk_text ( _( "Choose to attach or no the catalog file."), text_utf8); gtk_tooltips_set_tip ( tooltips, chkBtnAttachedFile, text_utf8, NULL); g_free ( text_utf8); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( chkBtnAttachedFile), TRUE); } scrTextMail = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( vbMailWindowsBox), scrTextMail, TRUE, TRUE, 0); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrTextMail), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); txtMail = gtk_text_area_new ( ); gtk_widget_ref ( txtMail); gtk_object_set_data_full ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_MESSAGE_TEXT_AREA, txtMail, (GtkDestroyNotify) gtk_widget_unref); gtk_text_area_set_editable ( GTK_TEXT_AREA ( txtMail), TRUE); gtk_container_add ( GTK_CONTAINER ( scrTextMail), txtMail); g_strdup_to_gtk_text ( _( "Type here the text for the mail message."), text_utf8); gtk_tooltips_set_tip ( tooltips, txtMail, text_utf8, NULL); g_free ( text_utf8); /* The Send/Cancel button area */ hbSendMailControl = gtk_hbutton_box_new ( ); gtk_button_box_set_layout ( GTK_BUTTON_BOX ( hbSendMailControl), GTK_BUTTONBOX_END); gtk_button_box_set_spacing ( GTK_BUTTON_BOX ( hbSendMailControl), 5); gtk_box_pack_end ( GTK_BOX ( vbMailWindowsBox), hbSendMailControl, FALSE, FALSE, 0); btnSend = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Send"), text_utf8); btnSend_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( btnSend)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( btnSend, "clicked", accel_group, btnSend_key, GDK_MOD1_MASK, (GtkAccelFlags) 0); gtk_box_pack_start ( GTK_BOX ( hbSendMailControl), btnSend, FALSE, TRUE, 0); g_strdup_to_gtk_text ( _( "Click here to send a mail (with an attached catalog)."), text_utf8); gtk_tooltips_set_tip ( tooltips, btnSend, text_utf8, NULL); g_free ( text_utf8); gtk_signal_connect ( GTK_OBJECT ( btnSend), "clicked", GTK_SIGNAL_FUNC ( gw_mail_window_box_send_click), GTK_WINDOW ( w)); btnCancel = gtk_button_new_with_label ( ""); g_strdup_to_gtk_text ( _( "_Cancel"), text_utf8); btnCancel_key = gtk_label_parse_uline ( GTK_LABEL ( GTK_BIN ( btnCancel)->child), text_utf8); g_free ( text_utf8); gtk_widget_add_accelerator ( btnCancel, "clicked", accel_group, btnCancel_key, GDK_MOD1_MASK, (GtkAccelFlags) 0); gtk_box_pack_start ( GTK_BOX ( hbSendMailControl), btnCancel, TRUE, TRUE, 0); GTK_WIDGET_UNSET_FLAGS ( btnCancel, GTK_CAN_FOCUS); g_strdup_to_gtk_text ( _( "Click here to cancel the send of a mail."), text_utf8); gtk_tooltips_set_tip ( tooltips, btnCancel, text_utf8, NULL); gtk_signal_connect_object ( GTK_OBJECT ( btnCancel), "clicked", GTK_SIGNAL_FUNC ( gtk_widget_destroy), GTK_OBJECT ( w)); g_free ( text_utf8); gtk_window_add_accel_group ( GTK_WINDOW ( w), accel_group); } if ( !GTK_WIDGET_VISIBLE ( w) ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : show the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_show_all ( w); } else { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : destroy the window\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_widget_destroy ( w); } return GTK_WINDOW ( w); } GtkWindow * gw_mail_window_box_get_main_window ( GtkWindow *w) { GtkWidget *parent = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { parent = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_PARENT_WINDOW); } if ( parent == NULL ) { #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : parent window is null\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } return GTK_WINDOW ( parent); } gchar * gw_mail_window_box_get_to ( GtkWindow *w) { GtkEntry *entry = NULL; gchar *text = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_TO_ENTRY))) != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( entry), text); } #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : to field = %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, text); #endif } return text; } gchar * gw_mail_window_box_get_cc ( GtkWindow *w) { GtkEntry *entry = NULL; gchar *text = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_CC_ENTRY))) != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( entry), text); } #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : cc field = %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, text); #endif } return text; } gchar * gw_mail_window_box_get_bcc ( GtkWindow *w) { GtkEntry *entry = NULL; gchar *text = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_BCC_ENTRY))) != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( entry), text); } #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : bcc field = %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, text); #endif } return text; } gchar * gw_mail_window_box_get_subject ( GtkWindow *w) { GtkEntry *entry = NULL; gchar *text = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (entry = GTK_ENTRY ( gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_OBJECT_ENTRY))) != NULL ) { g_strdup_from_gtk_text ( gtk_entry_get_text ( entry), text); } #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : object field = %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, text); #endif } return text; } gboolean gw_mail_window_box_get_option_attach_file ( GtkWindow *w) { GtkToggleButton *chk = NULL; gboolean result = FALSE; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (chk = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_ATTACH_FILE_CHK)) != NULL ) { result = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); } } return result; } gchar * gw_mail_window_box_get_file_path ( GtkWindow *w) { GtkCheckButton *chk_button = NULL; gchar *text = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { chk_button = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_ATTACH_FILE_CHK); #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : file path = %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, text); #endif if ( chk_button != NULL ) { gtk_label_get ( GTK_LABEL ( GTK_BIN ( GTK_BUTTON ( chk_button))->child), &text); g_strdup_from_gtk_text ( text, text); } } return text; } gchar * gw_mail_window_box_get_msg ( GtkWindow *w) { GtkTextArea *text_area = NULL; gchar *text = NULL; #ifdef GW_DEBUG_GUI_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( w != NULL ) { if ( (text_area = gtk_object_get_data ( GTK_OBJECT ( w), GW_REF_MAIL_WINDOW_BOX_MESSAGE_TEXT_AREA)) != NULL ) { text = gtk_text_area_get_text ( GTK_TEXT_AREA ( text_area)); } } return text; } gwhere-0.2.3/src/gui/gwwindowboxmail.h0000744000175000017500000001150710023202520016373 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwwindowboxmail.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwwindowboxmail.c * @author Author */ #ifndef GW_GUI_GW_MAIL_WINDOW_BOX_H #define GW_GUI_GW_MAIL_WINDOW_BOX_H /*! * @function gw_mail_window_box_create * @abstract Creates a mail window box. * @discussion This function creates a mail window box. * @param w the parent window * @param file_name the catalog file name * @result the mail box window.
* Returns NULL when an error occured. */ GtkWindow * gw_mail_window_box_create ( GtkWindow *window, gchar *file_name); /*! * @function gw_mail_window_box_get_main_window * @abstract Gets the parent window. * @discussion This function gets the parent window of the mail window box. * @param w the mail window box * @result the parent window of the mail window box * Returns NULL when an error occured. */ GtkWindow * gw_mail_window_box_get_main_window ( GtkWindow *w); /*! * @function gw_mail_window_box_get_to * @abstract Gets the "TO" field. * @discussion This function gets the "TO" field of the mail window box. * It's a new allocated string and must be freed with g_free().
* @param w the mail window box * @result the field "TO".
* Returns NULL when an error occured. */ gchar * gw_mail_window_box_get_to ( GtkWindow *w); /*! * @function gw_mail_window_box_get_cc * @abstract Gets the "CC" field. * @discussion This function gets the "CC" field of the mail window box. * It's a new allocated string and must be freed with g_free().
* @param w the mail window box * @result the field "CC".
* Returns NULL when an error occured. */ gchar * gw_mail_window_box_get_cc ( GtkWindow *w); /*! * @function gw_mail_window_box_get_bcc * @abstract Gets the "BCC" field. * @discussion This function gets the "BCC" field of the mail window box. * It's a new allocated string and must be freed with g_free().
* @param w the mail window box * @result the field "BCC".
* Returns NULL when an error occured. */ gchar * gw_mail_window_box_get_bcc ( GtkWindow *w); /*! * @function gw_mail_window_box_get_subject * @abstract Gets the subject. * @discussion This function gets the subject of the mail window box. * It's a new allocated string and must be freed with g_free().
* @param w the mail window box * @result the subject.
* Returns NULL when an error occured. */ gchar * gw_mail_window_box_get_subject ( GtkWindow *w); /*! * @function gw_mail_window_box_get_msg * @abstract Gets the message. * @discussion This function gets the message of the mail window box. * It's a new allocated string and must be freed with g_free().
* @param w the mail window box * @result the message.
* Returns NULL when an error occured. */ gchar * gw_mail_window_box_get_msg ( GtkWindow *w); /*! * @function gw_mail_window_box_get_file_path * @abstract Gets the file path. * @discussion This function gets the file path of the mail window box. * It's a new allocated string and must be freed with g_free().
* @param w the mail window box * @result the file path.
* Returns NULL when an error occured. */ gchar * gw_mail_window_box_get_file_path ( GtkWindow *w); /*! * @function gw_mail_window_box_get_option_attach_file * @abstract Gets if attach file option is checked. * @discussion This function gets if attach file option is checked. * @param w the mail window box * @result Returns TRUE if option is checked.
* Returns NULL otherwise or when an error occured. */ gboolean gw_mail_window_box_get_option_attach_file ( GtkWindow *w); #endif gwhere-0.2.3/src/gui/gwwindowboxmailcallback.c0000744000175000017500000000440710247421307020062 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwwindowboxmailcallback.h" #include "gwwindowboxmail.h" #include "gwmsgbox.h" #include "gwprogressbarbox.h" #include "../gwapplicationmanager.h" #include "../gwguimanager.h" gboolean gw_mail_window_box_send_click ( GtkWidget *bt, GtkWindow *w) { gboolean result = FALSE; GWMail *mail = NULL; GtkWindow *msg_box = NULL; if ( w != NULL ) { if ( (mail = (GWMail*)g_malloc ( sizeof ( GWMail))) != NULL) { mail->to = gw_mail_window_box_get_to ( w); mail->cc = gw_mail_window_box_get_cc ( w); mail->bcc = gw_mail_window_box_get_bcc ( w); mail->subject = gw_mail_window_box_get_subject ( w); mail->message = gw_mail_window_box_get_msg ( w); if ( gw_mail_window_box_get_option_attach_file ( w) ) { mail->file_path = gw_mail_window_box_get_file_path ( w); } else { mail->file_path = NULL; } msg_box = gw_msg_box_create ( w, _( "Send mail"), _( "Sending mail, please wait...")); gw_gui_manager_main_interface_refresh ( ); if ( gw_am_send_mail ( mail) == -1 ) { gtk_widget_destroy ( GTK_WIDGET ( msg_box)); gw_msg_box_create ( w, _( "Send mail"), _( "An error occured during the sending of mail. Please check your parameters.")); } else { gtk_widget_destroy ( GTK_WIDGET ( msg_box)); gtk_widget_destroy ( GTK_WIDGET ( w)); } g_free ( mail->to); g_free ( mail->cc); g_free ( mail->bcc); g_free ( mail->subject); g_free ( mail->message); g_free ( mail); } } return result; } gwhere-0.2.3/src/gui/gwwindowboxmailcallback.h0000744000175000017500000000351710023202520020052 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwwindowboxmailcallback.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component. * @author Sébastien LECACHEUR * @version 1.0 2001/09/04 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwwindowboxmailcallback.c * @author Author */ #ifndef GW_GUI_GW_MAIL_WINDOW_BOX_CALLBACK_H #define GW_GUI_GW_MAIL_WINDOW_BOX_CALLBACK_H /*! * @function gw_mail_window_box_send_click * @abstract Sens the mail. * @discussion This function sends the mail.
* @param bt button invoker * @param w mail window * @result an error code.
* Returns TRUE when it's done.
* Returns FALSE when an error occured. */ gboolean gw_mail_window_box_send_click ( GtkWidget *bt, GtkWindow *w); #endif gwhere-0.2.3/src/gui/Makefile.am0000744000175000017500000000461410214105601015042 0ustar bartbart## Process this file with automake to produce Makefile.in INCLUDES = \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/src \ @GTK_CFLAGS@ \ -D${HOST_OS} noinst_LIBRARIES = libgwgui.a libgwgui_a_SOURCES = \ gwgui.h gwreferences.h \ gtktextarea.c gtktextarea.h \ gwwindowboxabout.c gwwindowboxabout.h \ gwcapturebox.c gwcapturebox.h \ gwwindowboxmail.c gwwindowboxmail.h \ gwwindowboxmailcallback.c gwwindowboxmailcallback.h \ gwsettingsinterface.c gwsettingsinterface.h \ gwsettingswindowbox.c gwsettingswindowbox.h \ gwsettingswindowboxcallback.c gwsettingswindowboxcallback.h \ gwsettingsgeneral.c gwsettingsgeneral.h \ gwsettingscatalogfile.c gwsettingscatalogfile.h \ gwsettingsgui.c gwsettingsgui.h \ gwsettingsexplorer.c gwsettingsexplorer.h \ gwsettingsexplorerdisk.c gwsettingsexplorerdisk.h \ gwsettingsexplorerfile.c gwsettingsexplorerfile.h \ gwsettingssearch.c gwsettingssearch.h \ gwsettingsquicksearch.c gwsettingsquicksearch.h \ gwsettingsmail.c gwsettingsmail.h \ gwfileselectionbox.c gwfileselectionbox.h \ gwcategorieseditbox.c gwcategorieseditbox.h \ gwcomboboxcategories.c gwcomboboxcategories.h \ gwdialogbox.c gwdialogbox.h \ gwmenu.c gwmenu.h \ gwmenufile.c gwmenufile.h \ gwmenufilecallback.c gwmenufilecallback.h \ gwmenuaction.c gwmenuaction.h \ gwmenuactioncallback.c gwmenuactioncallback.h \ gwmenuoptions.c gwmenuoptions.h \ gwmenuoptionscallback.c gwmenuoptionscallback.h \ gwmenuhelp.c gwmenuhelp.h \ gwmenuhelpcallback.c gwmenuhelpcallback.h \ gwmenupopup.c gwmenupopup.h \ gwmenupopupcallback.c gwmenupopupcallback.h \ gwtoolbar.c toolbar.h \ gwnotebook.c gwnotebook.h \ gwnotebookcallback.c gwnotebookcallback.h \ gwnotebookcatalog.c gwnotebookcatalog.h \ gwnotebookcatalogcallback.c gwnotebookcatalogcallback.h \ gwnotebooksearch.c gwnotebooksearch.h \ gwnotebooksearchcallback.c gwnotebooksearchcallback.h \ gwnotebookmanagment.c gwnotebookmanagment.h \ gwnotebookmanagmentcallback.c gwnotebookmanagmentcallback.h \ gwmsgbox.c gwmsgbox.h \ gwprogressbarbox.c gwprogressbarbox.h \ gwpropertiesbox.c gwpropertiesbox.h \ gwpropertiesboxcallback.c gwpropertiesboxcallback.h \ gwstatusbar.c gwstatusbar.h \ gwstatusbarcallback.c gwstatusbarcallback.h \ gwtextbox.c gwtextbox.h EXTRA_DIST = $(SOURCES) libgwgui_a_LIBADD = \ @top_srcdir@/src/db/libgwdb.a \ @top_srcdir@/src/data/libgwdata.a \ @top_srcdir@/src/res/libgwres.a \ @top_srcdir@/src/tools/libgwtools.a gwhere-0.2.3/src/gui/Makefile.in0000744000175000017500000003451510506327640015073 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir)/src @GTK_CFLAGS@ -D${HOST_OS} noinst_LIBRARIES = libgwgui.a libgwgui_a_SOURCES = gwgui.h gwreferences.h gtktextarea.c gtktextarea.h gwwindowboxabout.c gwwindowboxabout.h gwcapturebox.c gwcapturebox.h gwwindowboxmail.c gwwindowboxmail.h gwwindowboxmailcallback.c gwwindowboxmailcallback.h gwsettingsinterface.c gwsettingsinterface.h gwsettingswindowbox.c gwsettingswindowbox.h gwsettingswindowboxcallback.c gwsettingswindowboxcallback.h gwsettingsgeneral.c gwsettingsgeneral.h gwsettingscatalogfile.c gwsettingscatalogfile.h gwsettingsgui.c gwsettingsgui.h gwsettingsexplorer.c gwsettingsexplorer.h gwsettingsexplorerdisk.c gwsettingsexplorerdisk.h gwsettingsexplorerfile.c gwsettingsexplorerfile.h gwsettingssearch.c gwsettingssearch.h gwsettingsquicksearch.c gwsettingsquicksearch.h gwsettingsmail.c gwsettingsmail.h gwfileselectionbox.c gwfileselectionbox.h gwcategorieseditbox.c gwcategorieseditbox.h gwcomboboxcategories.c gwcomboboxcategories.h gwdialogbox.c gwdialogbox.h gwmenu.c gwmenu.h gwmenufile.c gwmenufile.h gwmenufilecallback.c gwmenufilecallback.h gwmenuaction.c gwmenuaction.h gwmenuactioncallback.c gwmenuactioncallback.h gwmenuoptions.c gwmenuoptions.h gwmenuoptionscallback.c gwmenuoptionscallback.h gwmenuhelp.c gwmenuhelp.h gwmenuhelpcallback.c gwmenuhelpcallback.h gwmenupopup.c gwmenupopup.h gwmenupopupcallback.c gwmenupopupcallback.h gwtoolbar.c toolbar.h gwnotebook.c gwnotebook.h gwnotebookcallback.c gwnotebookcallback.h gwnotebookcatalog.c gwnotebookcatalog.h gwnotebookcatalogcallback.c gwnotebookcatalogcallback.h gwnotebooksearch.c gwnotebooksearch.h gwnotebooksearchcallback.c gwnotebooksearchcallback.h gwnotebookmanagment.c gwnotebookmanagment.h gwnotebookmanagmentcallback.c gwnotebookmanagmentcallback.h gwmsgbox.c gwmsgbox.h gwprogressbarbox.c gwprogressbarbox.h gwpropertiesbox.c gwpropertiesbox.h gwpropertiesboxcallback.c gwpropertiesboxcallback.h gwstatusbar.c gwstatusbar.h gwstatusbarcallback.c gwstatusbarcallback.h gwtextbox.c gwtextbox.h EXTRA_DIST = $(SOURCES) libgwgui_a_LIBADD = @top_srcdir@/src/db/libgwdb.a @top_srcdir@/src/data/libgwdata.a @top_srcdir@/src/res/libgwres.a @top_srcdir@/src/tools/libgwtools.a mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libgwgui_a_DEPENDENCIES = @top_srcdir@/src/db/libgwdb.a \ @top_srcdir@/src/data/libgwdata.a @top_srcdir@/src/res/libgwres.a \ @top_srcdir@/src/tools/libgwtools.a libgwgui_a_OBJECTS = gtktextarea.$(OBJEXT) gwwindowboxabout.$(OBJEXT) \ gwcapturebox.$(OBJEXT) gwwindowboxmail.$(OBJEXT) \ gwwindowboxmailcallback.$(OBJEXT) gwsettingsinterface.$(OBJEXT) \ gwsettingswindowbox.$(OBJEXT) gwsettingswindowboxcallback.$(OBJEXT) \ gwsettingsgeneral.$(OBJEXT) gwsettingscatalogfile.$(OBJEXT) \ gwsettingsgui.$(OBJEXT) gwsettingsexplorer.$(OBJEXT) \ gwsettingsexplorerdisk.$(OBJEXT) gwsettingsexplorerfile.$(OBJEXT) \ gwsettingssearch.$(OBJEXT) gwsettingsquicksearch.$(OBJEXT) \ gwsettingsmail.$(OBJEXT) gwfileselectionbox.$(OBJEXT) \ gwcategorieseditbox.$(OBJEXT) gwcomboboxcategories.$(OBJEXT) \ gwdialogbox.$(OBJEXT) gwmenu.$(OBJEXT) gwmenufile.$(OBJEXT) \ gwmenufilecallback.$(OBJEXT) gwmenuaction.$(OBJEXT) \ gwmenuactioncallback.$(OBJEXT) gwmenuoptions.$(OBJEXT) \ gwmenuoptionscallback.$(OBJEXT) gwmenuhelp.$(OBJEXT) \ gwmenuhelpcallback.$(OBJEXT) gwmenupopup.$(OBJEXT) \ gwmenupopupcallback.$(OBJEXT) gwtoolbar.$(OBJEXT) gwnotebook.$(OBJEXT) \ gwnotebookcallback.$(OBJEXT) gwnotebookcatalog.$(OBJEXT) \ gwnotebookcatalogcallback.$(OBJEXT) gwnotebooksearch.$(OBJEXT) \ gwnotebooksearchcallback.$(OBJEXT) gwnotebookmanagment.$(OBJEXT) \ gwnotebookmanagmentcallback.$(OBJEXT) gwmsgbox.$(OBJEXT) \ gwprogressbarbox.$(OBJEXT) gwpropertiesbox.$(OBJEXT) \ gwpropertiesboxcallback.$(OBJEXT) gwstatusbar.$(OBJEXT) \ gwstatusbarcallback.$(OBJEXT) gwtextbox.$(OBJEXT) CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best DEP_FILES = .deps/gtktextarea.P .deps/gwcapturebox.P \ .deps/gwcategorieseditbox.P .deps/gwcomboboxcategories.P \ .deps/gwdialogbox.P .deps/gwfileselectionbox.P .deps/gwmenu.P \ .deps/gwmenuaction.P .deps/gwmenuactioncallback.P .deps/gwmenufile.P \ .deps/gwmenufilecallback.P .deps/gwmenuhelp.P \ .deps/gwmenuhelpcallback.P .deps/gwmenuoptions.P \ .deps/gwmenuoptionscallback.P .deps/gwmenupopup.P \ .deps/gwmenupopupcallback.P .deps/gwmsgbox.P .deps/gwnotebook.P \ .deps/gwnotebookcallback.P .deps/gwnotebookcatalog.P \ .deps/gwnotebookcatalogcallback.P .deps/gwnotebookmanagment.P \ .deps/gwnotebookmanagmentcallback.P .deps/gwnotebooksearch.P \ .deps/gwnotebooksearchcallback.P .deps/gwprogressbarbox.P \ .deps/gwpropertiesbox.P .deps/gwpropertiesboxcallback.P \ .deps/gwsettingscatalogfile.P .deps/gwsettingsexplorer.P \ .deps/gwsettingsexplorerdisk.P .deps/gwsettingsexplorerfile.P \ .deps/gwsettingsgeneral.P .deps/gwsettingsgui.P \ .deps/gwsettingsinterface.P .deps/gwsettingsmail.P \ .deps/gwsettingsquicksearch.P .deps/gwsettingssearch.P \ .deps/gwsettingswindowbox.P .deps/gwsettingswindowboxcallback.P \ .deps/gwstatusbar.P .deps/gwstatusbarcallback.P .deps/gwtextbox.P \ .deps/gwtoolbar.P .deps/gwwindowboxabout.P .deps/gwwindowboxmail.P \ .deps/gwwindowboxmailcallback.P SOURCES = $(libgwgui_a_SOURCES) OBJECTS = $(libgwgui_a_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu src/gui/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-noinstLIBRARIES: clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) distclean-noinstLIBRARIES: maintainer-clean-noinstLIBRARIES: # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libgwgui.a: $(libgwgui_a_OBJECTS) $(libgwgui_a_DEPENDENCIES) -rm -f libgwgui.a $(AR) cru libgwgui.a $(libgwgui_a_OBJECTS) $(libgwgui_a_LIBADD) $(RANLIB) libgwgui.a tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = src/gui distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/gui/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile $(LIBRARIES) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-noinstLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/src/gui/Makefile.win0000744000175000017500000000301610233762346015255 0ustar bartbart# Project: libgwgui # Makefile created for GWhere CC = gcc.exe WINDRES = windres.exe RES = OBJ = gtktextarea.o gwcapturebox.o gwcategorieseditbox.o gwcomboboxcategories.o gwdialogbox.o gwfileselectionbox.o gwwindowboxmail.o gwwindowboxmailcallback.o gwmenu.o gwmenuaction.o gwmenuactioncallback.o gwmenufile.o gwmenufilecallback.o gwmenuhelp.o gwmenuhelpcallback.o gwmenuoptions.o gwmenuoptionscallback.o gwmenupopup.o gwmenupopupcallback.o gwmsgbox.o gwnotebook.o gwnotebookcallback.o gwnotebookcatalog.o gwnotebookcatalogcallback.o gwnotebookmanagment.o gwnotebookmanagmentcallback.o gwnotebooksearch.o gwnotebooksearchcallback.o gwprogressbarbox.o gwpropertiesbox.o gwpropertiesboxcallback.o gwsettingscatalogfile.o gwsettingsgui.o gwsettingsgeneral.o gwsettingsinterface.o gwsettingsexplorer.o gwsettingsexplorerdisk.o gwsettingsexplorerfile.o gwsettingssearch.o gwsettingsquicksearch.o gwsettingsmail.o gwsettingswindowbox.o gwsettingswindowboxcallback.o gwstatusbar.o gwstatusbarcallback.o gwtextbox.o gwtoolbar.o gwwindowboxabout.o $(RES) BIN = libgwgui.a INCS = $(GWINCS) $(GTKINCS) -IC:/MINGW/include -IC:/MINGW/mingw_extra/include -IC:/GTK/include GTKINCS = -IC:/GTK/include/gtk-2.0 -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/atk-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include GWINCS = -I.. CFLAGS = $(INCS) -O2 -Wall -fnative-struct -DHAVE_CONFIG_H -DOS_WIN32 -DGTK_ENABLE_BROKEN .PHONY: clean all: $(BIN) clean: rm -f $(OBJ) $(BIN) $(BIN): $(OBJ) ar r $(BIN) $(OBJ) ranlib $(BIN) gwhere-0.2.3/src/gui/gwsettingsquicksearch.c0000744000175000017500000003537010247421307017610 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwsettingsquicksearch.h" #include "gwsettingswindowbox.h" #include "gwsettingsexplorer.h" #include "../gwapplicationmanager.h" /*! @define GW_PLUGIN_SETTINGS_WINDOW The parent window */ #define GW_PLUGIN_SETTINGS_WINDOW "gw_plugin_settings_window" /*! @define GW_PLUGIN_SETTINGS_QUICK_SEARCH_FIELDS_TABLE The table of fields */ #define GW_PLUGIN_SETTINGS_QUICK_SEARCH_FIELDS_TABLE "gw_plugin_settings_quick_search_fields_table" /*! @define GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_VISIBLE The list of visible fields */ #define GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_VISIBLE "gw_plugin_settings_quick_search_list_visible" /*! @define GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_HIDDEN The list of hidden fields */ #define GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_HIDDEN "gw_plugin_settings_quick_search_list_hidden" /*! @define GW_PLUGIN_SETTINGS_QUICK_SEARCH_SORT_CASE_SENSITIVE_CHK The check box for case sensitive sort */ #define GW_PLUGIN_SETTINGS_QUICK_SEARCH_SORT_CASE_SENSITIVE_CHK "gw_plugin_settings_quick_search_sort_case_sensitive_chk" /*! @define GW_PLUGIN_SETTINGS_QUICK_SEARCH_SORT_GROUP_BY_FOLDER_CHK The check box for group by type the result sort */ #define GW_PLUGIN_SETTINGS_QUICK_SEARCH_SORT_GROUP_BY_FOLDER_CHK "gw_plugin_settings_quick_search_sort_group_by_folder_chk" /*! @define GW_PLUGIN_SETTINGS_QUICK_SEARCH_AUTORESIZE_COLUMN_CHK The check box for autoresize column */ #define GW_PLUGIN_SETTINGS_QUICK_SEARCH_AUTORESIZE_COLUMN_CHK "gw_plugin_settings_quick_search_autoresize_column_chk" gint gw_plugin_settings_quick_search_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane); gint gw_plugin_settings_quick_search_pane_load ( GtkWidget *pane); gint gw_plugin_settings_quick_search_pane_on_change ( GtkEntry *entry, GtkWidget *pane); gint gw_plugin_settings_quick_search_pane_apply ( GtkWidget *pane); gint gw_plugin_settings_quick_search_btn_show_click ( GtkButton *btn, GtkWidget *pane); gint gw_plugin_settings_quick_search_btn_hide_click ( GtkButton *btn, GtkWidget *pane); gboolean gw_plugin_settings_quick_search_destroy ( GtkWidget *pane, gpointer data); gint gw_plugin_settings_quick_search_init ( GWSettingsModule **module) { gint result = -1; if ( (*module = gw_settings_module_new ( )) != NULL ) { (*module)->name = g_strdup ( _( "Quick")); (*module)->create = &gw_plugin_settings_quick_search_pane_create; (*module)->load = &gw_plugin_settings_quick_search_pane_load; (*module)->on_change = &gw_plugin_settings_quick_search_pane_on_change; (*module)->apply = &gw_plugin_settings_quick_search_pane_apply; result = 0; } return result; } gint gw_plugin_settings_quick_search_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane) { gint result = -1; GtkWidget *hbox; GtkWidget *scr_clist_hidden; GtkWidget *clist_hidden; GtkWidget *col_title_hidden; GtkWidget *vbox_btn; GtkWidget *btn_hidden; GtkWidget *btn_show; GtkWidget *scr_clist_visible; GtkWidget *clist_visible; GtkWidget *col_title_visible; GtkTooltips *tooltips; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( settings != NULL && parent != NULL ) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : Creating configuration pane...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif tooltips = gtk_tooltips_new ( ); hbox = gtk_hbox_new ( FALSE, 0); gtk_widget_ref ( GTK_WIDGET ( settings)); gtk_object_set_data_full ( GTK_OBJECT ( hbox), GW_PLUGIN_SETTINGS_WINDOW, settings, (GtkDestroyNotify) gtk_widget_unref); gtk_container_set_border_width ( GTK_CONTAINER ( hbox), 5); scr_clist_visible = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( hbox), scr_clist_visible, TRUE, TRUE, 0); clist_visible = gtk_clist_new ( 1); gtk_widget_ref ( clist_visible); gtk_object_set_data_full ( GTK_OBJECT ( hbox), GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_VISIBLE, clist_visible, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( scr_clist_visible), clist_visible); gtk_clist_set_column_width ( GTK_CLIST ( clist_visible), 0, 80); gtk_clist_optimal_column_width ( GTK_CLIST ( clist_visible), 0); gtk_clist_column_titles_show (GTK_CLIST (clist_visible)); g_strdup_to_gtk_text ( _( "Visible"), text_utf8); col_title_visible = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_clist_set_column_widget ( GTK_CLIST ( clist_visible), 0, col_title_visible); vbox_btn = gtk_vbox_new ( TRUE, 0); gtk_box_pack_start ( GTK_BOX ( hbox), vbox_btn, TRUE, TRUE, 5); g_strdup_to_gtk_text ( _( "Hide"), text_utf8); btn_hidden = gtk_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( vbox_btn), btn_hidden, FALSE, FALSE, 0); g_strdup_to_gtk_text ( _( "Show"), text_utf8); btn_show = gtk_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_box_pack_start ( GTK_BOX ( vbox_btn), btn_show, FALSE, FALSE, 0); scr_clist_hidden = gtk_scrolled_window_new ( NULL, NULL); gtk_box_pack_start ( GTK_BOX ( hbox), scr_clist_hidden, TRUE, TRUE, 0); clist_hidden = gtk_clist_new ( 1); gtk_widget_ref ( clist_hidden); gtk_object_set_data_full ( GTK_OBJECT ( hbox), GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_HIDDEN, clist_hidden, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER (scr_clist_hidden), clist_hidden); gtk_clist_set_column_width ( GTK_CLIST ( clist_hidden), 0, 80); gtk_clist_optimal_column_width ( GTK_CLIST ( clist_hidden), 0); gtk_clist_column_titles_show ( GTK_CLIST ( clist_hidden)); g_strdup_to_gtk_text ( _( "Hidden"), text_utf8); col_title_hidden = gtk_label_new ( text_utf8); g_free ( text_utf8); gtk_clist_set_column_widget ( GTK_CLIST ( clist_hidden), 0, col_title_hidden); *pane = hbox; gw_plugin_settings_quick_search_pane_load ( hbox); /* Connects signals after loading. */ #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : connecting all callbacks to signals...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif gtk_signal_connect ( GTK_OBJECT ( hbox), "destroy", (GtkSignalFunc)gw_plugin_settings_quick_search_destroy, NULL); gtk_signal_connect ( GTK_OBJECT ( btn_hidden), "clicked", (GtkSignalFunc)gw_plugin_settings_quick_search_btn_hide_click, hbox); gtk_signal_connect ( GTK_OBJECT ( btn_show), "clicked", (GtkSignalFunc)gw_plugin_settings_quick_search_btn_show_click, hbox); result = 0; } return result; } gint gw_plugin_settings_quick_search_pane_load ( GtkWidget *pane) { gint result = -1; GtkCList *list_visible = NULL; GtkCList *list_hidden = NULL; GtkCList *list = NULL; GWSettingsExplorerField **fields; gint i; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { list_visible = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_VISIBLE)); list_hidden = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_HIDDEN)); if ( (list_visible != NULL) && (list_hidden != NULL) ) { if ( (fields = gw_plugin_settings_search_get_all_fields ( )) != NULL ) { gtk_object_set_data_full ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_QUICK_SEARCH_FIELDS_TABLE, fields, (GtkDestroyNotify) gw_settings_explorer_field_freev); gtk_clist_freeze ( list_visible); gtk_clist_freeze ( list_hidden); for ( i = 0; fields[i] != NULL; i++) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : adding the field %s to the list visible/hidden\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, fields[i]->name); #endif if ( fields[i]->visible == TRUE ) { list = list_visible; } else { list = list_hidden; } gtk_clist_append ( list, &fields[i]->name); } gtk_clist_thaw ( list_visible); gtk_clist_thaw ( list_hidden); } #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : all fields are loaded.\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } result = 0; } return result; } gint gw_plugin_settings_quick_search_pane_on_change ( GtkEntry *entry, GtkWidget *pane) { gint result = -1; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } return result; } gint gw_plugin_settings_quick_search_pane_apply ( GtkWidget *pane) { gint result = -1; GtkCList *list_visible = NULL; GtkCList *list_hidden = NULL; GtkWindow *settings = NULL; GWSettingsExplorerField **fields = NULL; gint i = 0; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { list_visible = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_VISIBLE)); list_hidden = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_HIDDEN)); fields = (GWSettingsExplorerField**)gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_QUICK_SEARCH_FIELDS_TABLE); if ( (list_visible != NULL) && (list_hidden != NULL) && (fields != NULL) ) { for ( i = 0; fields[i] != NULL; i++) { gw_am_set_settings ( fields[i]->visible_v, g_strdup_printf ( "%d", (gint)fields[i]->visible)); gw_am_set_settings ( fields[i]->position_v, g_strdup_printf ( "%d", (gint)fields[i]->position)); } } if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, FALSE); } result = 0; } return result; } gint gw_plugin_settings_quick_search_btn_show_click ( GtkButton *btn, GtkWidget *pane) { gint result = -1; GtkCList *list_visible = NULL; GtkCList *list_hidden = NULL; gchar *text = NULL; GtkWindow *settings = NULL; gint row = -1; GWSettingsExplorerField **fields = NULL; GWSettingsExplorerField *field = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL) { list_visible = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_VISIBLE)); list_hidden = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_HIDDEN)); fields = (GWSettingsExplorerField**)gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_QUICK_SEARCH_FIELDS_TABLE); if ( (list_visible != NULL) && (list_hidden != NULL) ) { if ( list_hidden->selection != NULL ) { row = GPOINTER_TO_INT ( ((GList*)(list_hidden->selection))->data); if ( row >= 0 ) { gtk_clist_freeze ( list_visible); gtk_clist_freeze ( list_hidden); /* Move the column to the hidden list. */ gtk_clist_get_text ( list_hidden, row, 0, &text); gtk_clist_append ( list_visible, &text); field = gw_settings_explorer_field_find_by_name ( fields, text); if ( field != NULL ) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : %s is showed now\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, field->name); #endif field->visible = TRUE; } gtk_clist_remove ( list_hidden, row); gtk_clist_thaw ( list_visible); gtk_clist_thaw ( list_hidden); if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } } } } return result; } gint gw_plugin_settings_quick_search_btn_hide_click ( GtkButton *btn, GtkWidget *pane) { gint result = -1; GtkCList *list_visible = NULL; GtkCList *list_hidden = NULL; gchar *text = NULL; GtkWindow *settings = NULL; gint row = -1; GWSettingsExplorerField **fields = NULL; GWSettingsExplorerField *field = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL) { list_visible = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_VISIBLE)); list_hidden = GTK_CLIST ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_QUICK_SEARCH_LIST_HIDDEN)); fields = (GWSettingsExplorerField**)gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_QUICK_SEARCH_FIELDS_TABLE); if ( (list_visible != NULL) && (list_hidden != NULL) ) { if ( list_visible->selection != NULL ) { row = GPOINTER_TO_INT ( ((GList*)(list_visible->selection))->data); if ( row >= 0 ) { gtk_clist_freeze ( list_visible); gtk_clist_freeze ( list_hidden); /* Move the column to the hidden list. */ gtk_clist_get_text ( list_visible, row, 0, &text); gtk_clist_append ( list_hidden, &text); field = gw_settings_explorer_field_find_by_name ( fields, text); if ( field != NULL ) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : %s is hidden now\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, field->name); #endif field->visible = FALSE; } gtk_clist_remove ( list_visible, row); gtk_clist_thaw ( list_visible); gtk_clist_thaw ( list_hidden); if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } } } } return result; } gboolean gw_plugin_settings_quick_search_destroy ( GtkWidget *pane, gpointer data) { gboolean result = FALSE; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return result; } gwhere-0.2.3/src/gui/gwsettingsquicksearch.h0000744000175000017500000000366310023202520017577 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsettingsquicksearch.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to configure some settings about the quick search. * @author Sébastien LECACHEUR * @version 1.0 2003/02/06 * @see gwsupport.h * @link GWhere Web Site * @ref gwsettingsquicksearch.c * @ref gwsettingsinterface.c * @author Author */ #ifndef GW_GUI_GW_SETTINGS_QUICK_SEARCH_H #define GW_GUI_GW_SETTINGS_QUICK_SEARCH_H #include "gwsettingsinterface.h" /*! * @function gw_plugin_settings_quick_search_init * @abstract Initializes the quick search plugin. * @discussion This function initializes the quick search plugin. * @param module module to store the plugin * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_plugin_settings_quick_search_init ( GWSettingsModule **module); #endif gwhere-0.2.3/src/gui/gwsettingssearch.c0000744000175000017500000004033310506322216016543 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include /* strcmp */ #include "../gwsupport.h" #include "gwsettingssearch.h" #include "gwsettingswindowbox.h" #include "gwsettingsquicksearch.h" #include "../gwapplicationmanager.h" /*! @define GW_PLUGIN_SETTINGS_WINDOW The parent window */ #define GW_PLUGIN_SETTINGS_WINDOW "gw_plugin_settings_window" /*! @define GW_PLUGIN_SETTINGS_SEARCH_SORT_CASE_SENSITIVE_CHK The check box for case sensitive sort */ #define GW_PLUGIN_SETTINGS_SEARCH_SORT_CASE_SENSITIVE_CHK "gw_plugin_settings_search_sort_case_sensitive_chk" /*! @define GW_PLUGIN_SETTINGS_SEARCH_SORT_GROUP_BY_TYPE_CHK The check box for group by type the result sort */ #define GW_PLUGIN_SETTINGS_SEARCH_SORT_GROUP_BY_TYPE_CHK "gw_plugin_settings_search_sort_group_by_type_chk" /*! @define GW_PLUGIN_SETTINGS_SEARCH_AUTORESIZE_COLUMN_CHK The check box for autoresize column */ #define GW_PLUGIN_SETTINGS_SEARCH_AUTORESIZE_COLUMN_CHK "gw_plugin_settings_search_autoresize_column_chk" /*! @define GW_PLUGIN_SETTINGS_SEARCH_KEY_WORDS_MODE_CHK The check box for the key words search mode column */ #define GW_PLUGIN_SETTINGS_SEARCH_KEY_WORDS_MODE_CHK "gw_plugin_settings_search_key_words_mode_chk" /* I don't like global variable, I don't know to do. */ GtkWidget *pane_settings_search = NULL; gint gw_plugin_settings_search_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane); gint gw_plugin_settings_search_pane_load ( GtkWidget *pane); gint gw_plugin_settings_search_pane_on_change ( GtkEntry *entry, GtkWidget *pane); gint gw_plugin_settings_search_pane_apply ( GtkWidget *pane); gint gw_plugin_settings_search_init ( GWSettingsModule **module) { gint result = -1; if ( (*module = gw_settings_module_new ( )) != NULL ) { (*module)->name = g_strdup ( _( "Search")); (*module)->create = &gw_plugin_settings_search_pane_create; (*module)->load = &gw_plugin_settings_search_pane_load; (*module)->on_change = &gw_plugin_settings_search_pane_on_change; (*module)->apply = &gw_plugin_settings_search_pane_apply; (*module)->child = (GWSettingsModule**)g_malloc ( sizeof ( GWSettingsModule*) * 3); if ( (*module)->child != NULL) { (*module)->child[0] = NULL; (*module)->child[1] = NULL; (*module)->child[2] = NULL; gw_plugin_settings_quick_search_init ( &((*module)->child[0])); /*gw_plugin_settings_advanced_search_init ( &((*module)->child[1]));*/ } result = 0; } return result; } gint gw_plugin_settings_search_pane_create ( GtkWindow *settings, GtkContainer *parent, GtkWidget **pane) { gint result = -1; GtkWidget *table_pane; GtkWidget *chk_sort_group_by; GtkWidget *chk_sort_case_sensitive; GtkWidget *chk_autoresize; GtkWidget *chk_key_words_mode; GtkTooltips *tooltips; gchar *text_utf8 = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif tooltips = gtk_tooltips_new ( ); if ( settings != NULL && parent != NULL ) { table_pane = gtk_table_new ( 5, 2, FALSE); gtk_widget_ref ( GTK_WIDGET ( settings)); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_WINDOW, settings, (GtkDestroyNotify) gtk_widget_unref); gtk_container_set_border_width ( GTK_CONTAINER ( table_pane), 5); gtk_table_set_row_spacings ( GTK_TABLE (table_pane), 5); gtk_table_set_col_spacings ( GTK_TABLE (table_pane), 5); /* Adds the case sensitive sort option. */ g_strdup_to_gtk_text ( _( "Case sensitive sort."), text_utf8); chk_sort_case_sensitive = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_sort_case_sensitive); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_SEARCH_SORT_CASE_SENSITIVE_CHK, chk_sort_case_sensitive, (GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( _( "The result sort in search is case sensitive."), text_utf8); gtk_tooltips_set_tip ( tooltips, chk_sort_case_sensitive, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), chk_sort_case_sensitive, 0, 1, 0, 1, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); /* Adds the sort group by type option. */ g_strdup_to_gtk_text ( _( "Result sort group by type."), text_utf8); chk_sort_group_by = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_sort_group_by); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_SEARCH_SORT_GROUP_BY_TYPE_CHK, chk_sort_group_by, (GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( _( "The result sort in search can be grouped by item type. If this option is checked all item will be grouped by catalogs, disks, folders and files."), text_utf8); gtk_tooltips_set_tip ( tooltips, chk_sort_group_by, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), chk_sort_group_by, 0, 1, 1, 2, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); /* Adds the autoresize column option. */ g_strdup_to_gtk_text ( _( "Autoresize columns"), text_utf8); chk_autoresize = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_autoresize); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_SEARCH_AUTORESIZE_COLUMN_CHK, chk_autoresize, (GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( _( "Autoresize all explorer column."), text_utf8); gtk_tooltips_set_tip ( tooltips, chk_autoresize, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), chk_autoresize, 0, 1, 2, 3, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); /* Adds the key words mode option. */ g_strdup_to_gtk_text ( _( "All key words must match"), text_utf8); chk_key_words_mode = gtk_check_button_new_with_label ( text_utf8); g_free ( text_utf8); gtk_widget_ref ( chk_key_words_mode); gtk_object_set_data_full ( GTK_OBJECT ( table_pane), GW_PLUGIN_SETTINGS_SEARCH_KEY_WORDS_MODE_CHK, chk_key_words_mode, (GtkDestroyNotify) gtk_widget_unref); g_strdup_to_gtk_text ( _( "Choose if all key words or only one of all key words must match with item in order to be in the search result."), text_utf8); gtk_tooltips_set_tip ( tooltips, chk_key_words_mode, text_utf8, NULL); g_free ( text_utf8); gtk_table_attach ( GTK_TABLE ( table_pane), chk_key_words_mode, 0, 1, 3, 4, (GtkAttachOptions) ( GTK_FILL), (GtkAttachOptions) (0), 0, 0); *pane = table_pane; pane_settings_search = *pane; gw_plugin_settings_search_pane_load ( table_pane); /* Connects signals after loading. */ gtk_signal_connect ( GTK_OBJECT ( chk_sort_case_sensitive), "clicked", (GtkSignalFunc)gw_plugin_settings_search_pane_on_change, table_pane); gtk_signal_connect ( GTK_OBJECT ( chk_sort_group_by), "clicked", (GtkSignalFunc)gw_plugin_settings_search_pane_on_change, table_pane); gtk_signal_connect ( GTK_OBJECT ( chk_autoresize), "clicked", (GtkSignalFunc)gw_plugin_settings_search_pane_on_change, table_pane); gtk_signal_connect ( GTK_OBJECT ( chk_key_words_mode), "clicked", (GtkSignalFunc)gw_plugin_settings_search_pane_on_change, table_pane); result = 0; } return result; } gint gw_plugin_settings_search_pane_load ( GtkWidget *pane) { gint result = -1; GtkToggleButton *chk_bt = NULL; gfloat value = -1; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : loading...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Checks case sensitive sort option. */ if ( (chk_bt = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_SEARCH_SORT_CASE_SENSITIVE_CHK))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the case sensitive sort option...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (value = gw_am_get_settings_tod ( GW_VALUE_APP_SEARCH_SORT_CASE_SENSITIVE)) == -1 ) { value = GW_VALUE_APP_SEARCH_SORT_CASE_SENSITIVE_DEFAULT; } #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : case sensitive sort option is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, value); #endif gtk_toggle_button_set_active ( chk_bt, (gboolean)value); } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no check button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } chk_bt = NULL; /* Checks sort group by option. */ if ( (chk_bt = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_SEARCH_SORT_GROUP_BY_TYPE_CHK))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the sort group by option...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (value = gw_am_get_settings_tod ( GW_VALUE_APP_SEARCH_SORT_BY_TYPE)) == -1 ) { value = GW_VALUE_APP_SEARCH_SORT_BY_TYPE_DEFAULT; } #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : sort group by option is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, value); #endif gtk_toggle_button_set_active ( chk_bt, (gboolean)value); } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no check button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } chk_bt = NULL; /* Checks autoresize option. */ if ( (chk_bt = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_SEARCH_AUTORESIZE_COLUMN_CHK))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the autoresize option...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (value = gw_am_get_settings_tod ( GW_VALUE_APP_SEARCH_COLUMN_AUTORESIZE)) == -1 ) { value = GW_VALUE_APP_SEARCH_COLUMN_AUTORESIZE_DEFAULT; } #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : autoresize option is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, value); #endif gtk_toggle_button_set_active ( chk_bt, (gboolean)value); } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no check button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } chk_bt = NULL; /* Checks key words mode option. */ if ( (chk_bt = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_SEARCH_KEY_WORDS_MODE_CHK))) != NULL) { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : getting the key words mode option...\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (value = gw_am_get_settings_tod ( GW_VALUE_APP_SEARCH_TYPE_KEY_WORDS_MODE)) == -1 ) { value = GW_VALUE_APP_SEARCH_TYPE_KEY_WORDS_MODE_DEFAULT; } #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : key words mode option is %f\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, value); #endif gtk_toggle_button_set_active ( chk_bt, (gboolean)value); } else { #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : warning no check button!!\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } chk_bt = NULL; result = 0; } return result; } gint gw_plugin_settings_search_pane_on_change ( GtkEntry *entry, GtkWidget *pane) { gint result = -1; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, TRUE); result = 0; } } return result; } gint gw_plugin_settings_search_pane_apply ( GtkWidget *pane) { gint result = -1; GtkToggleButton *chk = NULL; gchar *value = NULL; gboolean bool_value = 0; GtkWindow *settings = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pane != NULL ) { if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_SEARCH_SORT_CASE_SENSITIVE_CHK))) != NULL) { bool_value = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); gw_am_set_settings ( GW_VALUE_APP_SEARCH_SORT_CASE_SENSITIVE, g_strdup_printf ( "%d", (gint)bool_value)); } value = NULL; if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_SEARCH_SORT_GROUP_BY_TYPE_CHK))) != NULL) { bool_value = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); gw_am_set_settings ( GW_VALUE_APP_SEARCH_SORT_BY_TYPE, g_strdup_printf ( "%d", (gint)bool_value)); } value = NULL; if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_SEARCH_AUTORESIZE_COLUMN_CHK))) != NULL) { bool_value = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); gw_am_set_settings ( GW_VALUE_APP_SEARCH_COLUMN_AUTORESIZE, g_strdup_printf ( "%d", (gint)bool_value)); } value = NULL; if ( (chk = GTK_TOGGLE_BUTTON ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_SEARCH_KEY_WORDS_MODE_CHK))) != NULL) { bool_value = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( chk)); gw_am_set_settings ( GW_VALUE_APP_SEARCH_TYPE_KEY_WORDS_MODE, g_strdup_printf ( "%d", (gint)bool_value)); } value = NULL; if ( (settings = GTK_WINDOW ( gtk_object_get_data ( GTK_OBJECT ( pane), GW_PLUGIN_SETTINGS_WINDOW))) != NULL ) { gw_settings_window_box_set_modified ( settings, FALSE); } result = 0; } return result; } GWSettingsSearchField * gw_settings_search_field_new ( void) { GWSettingsSearchField *p = NULL; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (p = (GWSettingsSearchField*)g_malloc ( sizeof ( GWSettingsSearchField))) != NULL ) { p->name = NULL; p->position = -1; p->position_v = NULL; p->visible = FALSE; p->visible_v = NULL; } return p; } GWSettingsSearchField * gw_settings_search_field_find_by_name ( GWSettingsSearchField **p, const gchar *name) { GWSettingsSearchField *field = NULL; gint i = 0; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (p != NULL) && (name != NULL) ) { while ( p[i] != NULL ) { if ( (p[i]->name != NULL) && (strcmp ( name, p[i]->name) == 0) ) { field = p[i]; } i++; } } return field; } gint gw_settings_search_field_free ( GWSettingsSearchField * p) { gint result = -1; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { if ( p->name != NULL ) { g_free ( p->name); p->name = NULL; } if ( p->position_v != NULL ) { g_free ( p->position_v); p->position_v = NULL; } if ( p->visible_v != NULL ) { g_free ( p->visible_v); p->visible_v = NULL; } g_free ( p); result = 0; } return result; } gint gw_settings_search_field_freev ( GWSettingsSearchField **p) { gint result = -1; gint i = 0; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { for ( i = 0; p[i] != NULL; i++) { gw_settings_search_field_free ( p[i]); p[i] = NULL; } g_free ( p); result = 0; } return result; } gwhere-0.2.3/src/gui/gwsettingssearch.h0000744000175000017500000001005010023202520016526 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsettingssearch.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to configure some settings about the search. * @author Sébastien LECACHEUR * @version 1.0 2003/02/06 * @see gwsupport.h * @link GWhere Web Site * @ref gwsettingssearch.c * @ref gwsettingsinterface.c * @author Author */ #ifndef GW_GUI_GW_SEARCH_EXPLORER_H #define GW_GUI_GW_SEARCH_EXPLORER_H #include "gwsettingsinterface.h" /*! * @typedef gw_settings_search_field_s * Settings Search Field structure. * @abstract This structure describe all properties of a field in the search * @field name name of the field * @field position position of the field * @field position_v variable name to store position of the field * @field visible is the field must be showed * @field visible_v variable name to store show mode of the field */ typedef struct gw_settings_search_field_s { gchar *name; gint position; gchar *position_v; gboolean visible; gchar *visible_v; }GWSettingsSearchField; /*! * @function gw_plugin_settings_search_init * @abstract Initializes the search plugin. * @discussion This function initializes the search plugin. * @param module module to store the plugin * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_plugin_settings_search_init ( GWSettingsModule **module); /*! * @function gw_settings_search_field_new * @abstract Creates a new GWSettingsSearchField. * @discussion This function creates a new GWSettingsSearchField * @result a new settings search field.
* Returns NULL when an error occured.
*/ GWSettingsSearchField * gw_settings_search_field_new ( void); /*! * @function gw_settings_search_field_find_by_name * @abstract Searches in a table of settings search field one field. * @discussion This function searches in a table of settings search field one field. * @param p table in which search * @param name name of field to search * @result the searched settings search field.
* Returns NULL if it doesn't exist or when an error occured.
*/ GWSettingsSearchField * gw_settings_search_field_find_by_name ( GWSettingsSearchField **p, const gchar *name); /*! * @function gw_settings_search_field_free * @abstract Frees a settings search field. * @discussion This function frees a settings search field. * @param p settings search field to free * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_settings_search_field_free ( GWSettingsSearchField *p); /*! * @function gw_settings_search_field_freev * @abstract Frees a table of settings search field. * @discussion This function frees a table of settings search field. * @param p table of settings search field to free * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_settings_search_field_freev ( GWSettingsSearchField **p); #endif gwhere-0.2.3/src/gui/gtktextarea.h0000744000175000017500000000565310240507514015516 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gtktextarea.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a GUI component to text area. * @author Sébastien LECACHEUR * @version 1.0 2004/08/10 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gtktextarea.c * @author Author */ #ifndef GW_GUI_GTK_TEXT_AREA_H #define GW_GUI_GTK_TEXT_AREA_H /* Define the GtkTextArea */ #if defined ( HAVE_GTK12) typedef GtkText GtkTextArea; #define GTK_TEXT_AREA GTK_TEXT #elif defined ( HAVE_GTK20) typedef GtkTextView GtkTextArea; #define GTK_TEXT_AREA GTK_TEXT_VIEW #endif /*! * @function gtk_text_area_new * @abstract Create a new text area GUI component. * @discussion * @result the text area.
* Returns NULL when an error occured.
*/ GtkWidget * gtk_text_area_new ( ); /* Set the editable property of GtkTextArea */ #if defined HAVE_GTK12 #define gtk_text_area_set_editable(text,editable) gtk_text_set_editable(GTK_TEXT(text),editable) #elif defined HAVE_GTK20 #define gtk_text_area_set_editable(text,editable) gtk_text_view_set_editable(GTK_TEXT_VIEW(text),editable) #endif /*! * @function gtk_text_area_clear * @abstract Clear a text area GUI component * @discussion * @param text the text area to clear */ void gtk_text_area_clear ( GtkTextArea *text); /*! * @function gtk_text_area_insert * @abstract Insert text in a text area GUI component * @discussion * @param text the text area into insert * @param words the text to insert */ void gtk_text_area_insert ( GtkTextArea *text, const gchar *words); /*! * @function gtk_text_area_get_text * @abstract Get the text from a text area GUI component * @discussion * @param text the text area into get ext * @result the text into the text area.
* Returns NULL when an error occured.
*/ gchar * gtk_text_area_get_text ( GtkTextArea *text); #endif gwhere-0.2.3/src/gui/gtktextarea.c0000744000175000017500000000611610240507511015501 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gtktextarea.h" /* Create a new GtkTextArea */ GtkWidget * gtk_text_area_new ( ) { GtkWidget *text = NULL; #if defined HAVE_GTK12 text = gtk_text_new ( NULL, NULL); #elif defined HAVE_GTK20 text = gtk_text_view_new ( ); #endif return text; } /* Clear a GtkTextArea */ void gtk_text_area_clear ( GtkTextArea *text) { #if defined HAVE_GTK12 if ( text != NULL ) { gtk_text_freeze ( GTK_TEXT ( text)); gtk_text_set_point ( GTK_TEXT ( text), 0); gtk_text_forward_delete ( GTK_TEXT ( text), gtk_text_get_length ( GTK_TEXT ( text))); gtk_text_thaw ( GTK_TEXT ( text)); } #elif defined HAVE_GTK20 GtkTextBuffer *buffer; GtkTextIter start; GtkTextIter end; if ( text != NULL ) { buffer = gtk_text_view_get_buffer ( GTK_TEXT_VIEW ( text)); gtk_text_buffer_get_start_iter ( buffer, &start); gtk_text_buffer_get_end_iter ( buffer, &end); gtk_text_buffer_delete ( buffer, &start, &end); } #endif return; } /* Insert text in a GtkTextArea */ void gtk_text_area_insert ( GtkTextArea *text, const gchar *words) { gchar *text_utf8 = NULL; #if defined HAVE_GTK12 if ( text != NULL ) { g_strdup_to_gtk_text ( words, text_utf8); gtk_text_insert ( GTK_TEXT ( text), NULL, NULL, NULL, text_utf8, -1); } #elif defined HAVE_GTK20 GtkTextBuffer *buffer; GtkTextIter end; if ( text != NULL ) { g_strdup_to_gtk_text ( words, text_utf8); buffer = gtk_text_view_get_buffer ( GTK_TEXT_VIEW ( text)); gtk_text_buffer_get_end_iter ( buffer, &end); gtk_text_buffer_insert ( buffer, &end, text_utf8, -1); } #endif return; } /* Get text in a GtkTextArea */ gchar * gtk_text_area_get_text ( GtkTextArea *text) { gchar *words = NULL, *text_utf8 = NULL; #if defined HAVE_GTK12 if ( text != NULL ) { text_utf8 = gtk_editable_get_chars ( GTK_EDITABLE ( text), 0, -1); } #elif defined HAVE_GTK20 GtkTextBuffer *buffer; GtkTextIter start; GtkTextIter end; if ( text != NULL ) { buffer = gtk_text_view_get_buffer ( GTK_TEXT_VIEW ( text)); gtk_text_buffer_get_start_iter ( buffer, &start); gtk_text_buffer_get_end_iter ( buffer, &end); text_utf8 = gtk_text_buffer_get_text ( buffer, &start, &end, TRUE); } #endif /* words must be free later with g_free() */ g_strdup_from_gtk_text ( text_utf8, words); if ( text_utf8 != NULL ) { g_free ( text_utf8); } return words; } gwhere-0.2.3/src/gwapplicationmanager.c0000744000175000017500000015470510473153366016613 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gwsupport.h" #include "gwapplicationmanager.h" #include #include /* atoi -> strtol */ #include /* ERANGE */ #include /* strstr strchr strrchr */ #include /* va_list va_start va_arg va_end */ #include "data/gwdata.h" #include "tools/gwtools.h" #include "res/gwres.h" #include "gui/gwgui.h" #include "gwguimanager.h" #include "gwcatalogmanager.h" #define GW_APPLICATION_HOME_OLD ".GWhere" #define GW_APPLICATION_HOME ".gwhere" #define GW_APPLICATION_SETTINGS_FILE_OLD "GWhere.cfg" #define GW_APPLICATION_SETTINGS_FILE "gwhere.cfg" #define GW_APPLICATION_SETTINGS_FILE_SAVE_EXTENSION "bak" GWApplicationSettings my_application_settings; gint gw_am_init ( gint argc, gchar *argv[]) { gint result = -1; GWSettings *settings = NULL; GtkWindow *window = NULL; gchar *catalog_file_path = NULL; #ifdef GW_DEBUG_MODE gchar *os_version = NULL; #endif gchar **plugins_name = NULL; memset ( &my_application_settings, '\0', sizeof ( GWApplicationSettings)); #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "%s %s is running in debug mode", PROJECT_NAME, VERSION); gw_os_get_version_str ( &os_version); gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, _( "Is running on %s"), os_version); if ( os_version != NULL ) { g_free ( os_version); } #endif if ( g_get_user_name ( ) != NULL) { my_application_settings.user_name = g_strdup ( g_get_user_name ( )); } if ( g_get_home_dir ( ) != NULL) { my_application_settings.user_gwhere_home = g_strconcat ( g_get_home_dir ( ), G_DIR_SEPARATOR_S, GW_APPLICATION_HOME, NULL); } else { my_application_settings.user_gwhere_home = g_strconcat ( GW_HOME_DIR, G_DIR_SEPARATOR_S, GW_APPLICATION_HOME, NULL); } if ( my_application_settings.user_gwhere_home != NULL) { my_application_settings.user_gwhere_settings_file = g_strconcat ( my_application_settings.user_gwhere_home, G_DIR_SEPARATOR_S, GW_APPLICATION_SETTINGS_FILE, NULL); } #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Configuration file : %s", my_application_settings.user_gwhere_settings_file); #endif if ( gw_properties_file_load_all_settings ( my_application_settings.user_gwhere_settings_file, &settings) == -1) { /* If the properties file doesn't exist, allocates a new GWSettings. */ settings = gw_settings_new ( ); } my_application_settings.settings = settings; gw_am_load_default_settings ( ); #ifdef GW_DEBUG_MODE gw_settings_display ( my_application_settings.settings); #endif /* Loads all the plugins. */ gw_pm_init ( ); /* Loads the GWhere's theme from a rc file. */ gtk_rc_parse ( gw_am_get_settings ( GW_VALUE_APP_GUI_RC_FILE)); /* Creates the GUI. */ window = gw_gui_manager_main_interface_create ( ); gtk_widget_show_all ( GTK_WIDGET ( window)); icons_load_catalog ( window); gw_gui_manager_main_interface_update_all ( ); /* Command lines parameters overloads the settings. That's why loads before the optional file else the autoloaded file. */ if ( argc >= 2 ) { gw_am_load_catalog ( argv[1]); } else if ( gw_am_get_settings_tob ( GW_VALUE_APP_CATALOG_AUTOLOAD) == TRUE ) { if ( gw_am_get_settings_tob ( GW_VALUE_APP_CATALOG_AUTOLOAD_LAST) == TRUE ) { gw_am_load_catalog ( gw_am_get_settings ( GW_VALUE_APP_CATALOG_LAST)); } else { if ( gw_am_get_settings_tob ( GW_VALUE_APP_CATALOG_AUTOLOAD_SELECTED) == TRUE ) { if ( (catalog_file_path = gw_am_get_settings ( GW_VALUE_APP_CATALOG_AUTOLOAD_FILEPATH)) != NULL ) { gw_am_load_catalog ( catalog_file_path); } else {} } else {} } } else {} if ( gw_pm_get_current_catalog_plugin ( ) == NULL) { gw_status_bar_put_messages ( window, _( "There is no available catalog plugin"), ""); } /* Loads the import plugins. */ plugins_name = gw_pm_get_all_catalog_import_plugin_name ( ); gw_menu_file_set_import ( window, plugins_name); g_free ( plugins_name); plugins_name = gw_pm_get_all_catalog_export_plugin_name ( ); gw_menu_file_set_export ( window, plugins_name); g_free ( plugins_name); return result; } gint gw_am_load_default_settings ( ) { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( gw_am_get_settings ( GW_VALUE_APP_GUI_RC_FILE) == NULL ) { gw_am_set_settings ( GW_VALUE_APP_GUI_RC_FILE, g_strconcat ( my_application_settings.user_gwhere_home, G_DIR_SEPARATOR_S, GW_VALUE_APP_GUI_RC_FILE_DEFAULT, NULL)); } if ( gw_am_get_settings ( GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER) == NULL ) { gw_am_set_settings ( GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER, g_strdup_printf ( "%d", GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER_DEFAULT)); } if ( gw_am_get_settings ( GW_VALUE_APP_EXPLORER_SORT_CASE_SENSITIVE) == NULL ) { gw_am_set_settings ( GW_VALUE_APP_EXPLORER_SORT_CASE_SENSITIVE, g_strdup_printf ( "%d", GW_VALUE_APP_EXPLORER_SORT_CASE_SENSITIVE_DEFAULT)); } return 0; } gboolean gw_am_can_send_mail ( ) { gboolean result = FALSE; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( gw_am_get_settings ( GW_VALUE_APP_MAIL_EMAIL_ADDRESS) != NULL ) { if ( gw_am_get_settings ( GW_VALUE_APP_MAIL_SERVER_ADDRESS) != NULL ) { if ( gw_am_get_settings ( GW_VALUE_APP_MAIL_SERVER_PORT) != NULL ) { result = TRUE; } } } return result; } gchar * gw_am_get_settings ( const gchar *name) { gchar *value = NULL; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( name != NULL ) { value = gw_settings_get_value ( my_application_settings.settings, (gchar *)name); } #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "pair is (%s := %s)", name!=NULL?name:"(null)", value!=NULL?value:"(null)"); #endif return value; } gfloat gw_am_get_settings_tod ( const gchar *name) { gint result = -1; gchar *str_value = NULL; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( (str_value = gw_am_get_settings ( name)) != NULL ) { result = strtod ( str_value, NULL); } return result; } gint gw_am_get_settings_tol ( const gchar *name) { gint result = -1; gchar *str_value = NULL; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( (str_value = gw_am_get_settings ( name)) != NULL ) { result = strtol ( str_value, NULL, 10); } #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "pair is (%s := %d)", name!=NULL?name:"(null)", result); #endif return result; } gint gw_am_get_settings_tolx ( const gchar *name, const gint value) { gint result = -1; if ( (result = gw_am_get_settings_tol ( name)) == -1) { result = value; } return result; } gboolean gw_am_get_settings_tob ( const gchar *name) { gboolean result = FALSE; gint int_value = -1; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( (int_value = gw_am_get_settings_tol ( name)) != -1 ) { result = int_value==1?TRUE:FALSE; } #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "pair is (%s := %d)", name!=NULL?name:"(null)", result); #endif return result; } gboolean gw_am_get_settings_tobx ( const gchar *name, const gboolean value) { gboolean result = FALSE; gint int_value = -1; if ( (int_value = gw_am_get_settings_tol ( name)) == -1 ) { result = value; } else { result = int_value==1?TRUE:FALSE; } return result; } gint gw_am_set_settings ( const gchar *name, gchar *value) { gint result = -1; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "pair is (%s := %s)", name!=NULL?name:"(null)", value!=NULL?value:"(null)"); #endif #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "old pair is (%s := %s)", name!=NULL?name:"(null)", gw_am_get_settings ( name)!=NULL?gw_am_get_settings ( name):"(null)"); #endif if ( name != NULL ) { gw_settings_add_pair ( my_application_settings.settings, g_strdup ( name), value); result = 0; } #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "new pair is (%s := %s)", name!=NULL?name:"(null)", gw_am_get_settings ( name)!=NULL?gw_am_get_settings ( name):"(null)"); #endif return result; } struct catalog_file_info * gw_am_get_current_catalog ( ) { struct catalog_file_info * catalog_info = NULL; GtkCTree *tree = NULL; GtkCTreeNode *root = NULL; #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif tree = gw_gui_manager_main_interface_get_tree ( ); root = gw_gui_manager_main_interface_get_tree_root ( ); if ( (tree != NULL) && (root != NULL) ) { /* Gets catalog informations */ catalog_info = gtk_ctree_node_get_row_data ( tree, root); } return catalog_info; } gint gw_am_exit ( ) { gint result = -1; gchar *save_file = NULL; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif gw_gui_manager_exit ( ); gw_pm_exit ( ); if ( gw_file_mkdirs ( my_application_settings.user_gwhere_home) == 0 ) { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Configuration file : is %s exists?", my_application_settings.user_gwhere_settings_file); #endif if ( gw_file_exists ( my_application_settings.user_gwhere_settings_file) == 0 ) { save_file = g_strconcat ( my_application_settings.user_gwhere_settings_file, "." , GW_APPLICATION_SETTINGS_FILE_SAVE_EXTENSION, NULL); gw_file_copy ( my_application_settings.user_gwhere_settings_file, save_file); g_free ( save_file); } #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Configuration file : %s", my_application_settings.user_gwhere_settings_file); gw_settings_display ( my_application_settings.settings); #endif if ( gw_properties_file_save_all_settings ( my_application_settings.user_gwhere_settings_file, &(my_application_settings.settings), NULL) != -1) { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "properties file saved"); #endif result = 0; } else { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "warning unabble to save the properties file!!"); #endif } } if ( my_application_settings.settings != NULL) { gw_settings_free ( my_application_settings.settings); my_application_settings.settings = NULL; } if ( my_application_settings.user_gwhere_home != NULL ) { g_free ( my_application_settings.user_gwhere_home); my_application_settings.user_gwhere_home = NULL; } if ( my_application_settings.user_gwhere_settings_file != NULL ) { g_free ( my_application_settings.user_gwhere_settings_file); my_application_settings.user_gwhere_settings_file = NULL; } return result; } gint gw_am_send_mail ( GWMail *mail) { gint result = -1; gboolean good = TRUE; gint server_port = 0; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( mail != NULL ) { /* Checks if can send a mail. */ if ( gw_am_can_send_mail ( ) ) { /* To do more and more checking tests. */ good = good && gw_mail_check_email_list ( gw_am_get_settings ( GW_VALUE_APP_MAIL_EMAIL_ADDRESS)); good = good && gw_mail_check_email_list ( mail->to); good = good && gw_mail_check_email_list ( mail->cc); good = good && gw_mail_check_email_list ( mail->bcc); if ( good ) { server_port = gw_am_get_settings_tol ( GW_VALUE_APP_MAIL_SERVER_PORT); if ( (server_port == INT_MIN) || ( server_port == INT_MAX) ) { switch ( errno) { case ERANGE : perror ( "strtol"); break; default : perror ( "strtol"); break; } } result = gw_mail_send_mail ( gw_am_get_settings ( GW_VALUE_APP_MAIL_SERVER_ADDRESS), server_port, gw_am_get_settings ( GW_VALUE_APP_MAIL_EMAIL_ADDRESS), mail->to, mail->cc, mail->bcc, mail->subject, mail->message, mail->file_path); } } } return result; } gint gw_am_load_catalog ( const char *filepath) { /* Bug to fix : should check if a catalog is already opened. */ gint result = -1; GtkWindow *window = NULL; GtkCTree *tree = NULL; GtkCTreeNode *root = NULL; GWCatalogPlugin *plugin = gw_pm_get_default_catalog_plugin ( ); GWDBContext *context = NULL; gint compression_level = -1; gchar *mode = NULL; #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif /* If a catalog is open, need to close it */ //TODO use helper functions if ( gw_am_get_current_catalog_context ( ) != NULL ) { gw_menu_file_close_click ( NULL, NULL); } if ( filepath != NULL ) { /* Gets the file compression level. */ compression_level = gw_am_get_settings_tolx ( GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL, GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_DEFAULT); /* Builds the open file mode. */ mode = g_strdup_printf ( "wb%d", compression_level); context = plugin->gw_db_catalog_open ( plugin, filepath, mode); g_free ( mode); if ( context != NULL) { gw_db_context_set_plugin ( context, plugin); gw_cm_load ( context); #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Adding the current catalogs in the recents files list..."); #endif gw_am_add_recent_file ( filepath); gw_am_set_settings ( GW_VALUE_APP_CATALOG_LAST, g_strdup ( filepath)); gw_status_bar_put_messages ( window, _( "Catalog loaded"), ""); gw_gui_manager_main_interface_update_all ( ); gw_gui_manager_main_interface_refresh ( ); } else { window = gw_gui_manager_main_interface_get_main_window ( ); gw_status_bar_put_messages ( window, _( "Loading catalog failed"), ""); gw_msg_box_create ( window, _( "Loading catalog"), _( "The catalog is invalid or doesn't exists. Check your catalog path please.")); } window = gw_gui_manager_main_interface_get_main_window ( ); tree = gw_gui_manager_main_interface_get_tree ( ); root = gw_gui_manager_main_interface_get_tree_root ( ); #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "%s extension is %s", filepath, &filepath[strlen ( filepath) - 3]); #endif } return result; } gint gw_am_save_catalog ( const gchar *path) { gint result = -1; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; GtkCTree *tree = NULL; GtkCTreeNode *root = NULL; GtkWindow *window = NULL; gchar *text[1]; gchar *fullfilename = NULL; #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif catalog = ((GWCatalogPlugin*)gw_db_context_get_plugin ( context))->gw_db_catalog_get_db_catalog ( context); //FIXME if the catalog file already exists it will be erased. if ( (gw_db_catalog_get_db_name ( catalog)!=NULL) && (gw_file_exists ( path) == 0) && (strcmp ( path, gw_db_catalog_get_db_name ( catalog)) != 0) ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Warning the catalog file already exists and it will be erased without confirmation"); #endif } if ( catalog != NULL ) { tree = gw_gui_manager_main_interface_get_tree ( ); root = gw_gui_manager_main_interface_get_tree_root ( ); window = gw_gui_manager_main_interface_get_main_window ( ); if ( path != NULL ) { /* Adds the extension if it isn't present. */ if ( (strlen ( path) < 4) || (strcmp ( &path[strlen ( path) - 4], ".ctg") != 0) ) { fullfilename = g_strconcat ( path, ".ctg", NULL); } else { fullfilename = g_strdup ( path); } /* Checks if the catalog must be saved in a new file. */ if ( (gw_db_catalog_get_db_name ( catalog) == NULL) || (strcmp ( fullfilename, gw_db_catalog_get_db_name ( catalog)) != 0) ) { gw_db_catalog_set_ismodified ( catalog, TRUE); gw_db_catalog_set_short_db_name ( catalog, gw_file_get_name ( fullfilename)); gw_db_catalog_set_db_name ( catalog, fullfilename); } else { g_free ( fullfilename); fullfilename = NULL; } } else {} gw_db_catalog_set_program_builder ( catalog, g_strconcat ( PROJECT_NAME, VERSION, NULL)); /* Writes the new window title. */ if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0 ) { gtk_window_set_title ( window, (text[0] = g_strconcat ( PROJECT_NAME, " - ", gw_db_catalog_get_db_name ( catalog), NULL))); g_free ( text[0]); text[0] = NULL; } else { /* Don't modify the main window title */ } /* Sets the new catalog name in the tree. */ if ( gw_db_catalog_get_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_name ( catalog))>0) { g_strdup_to_gtk_text ( gw_db_catalog_get_name ( catalog), text[0]); } else { g_strdup_to_gtk_text ( gw_db_catalog_get_short_db_name ( catalog), text[0]); } gtk_ctree_set_node_info ( tree, root, text[0], 5, PixCatalog, MskCatalog, PixCatalog, MskCatalog, FALSE, TRUE); g_free(text[0]); /* Checks if the catalog has been modified. */ if ( gw_db_catalog_is_modified ( catalog) ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "the catalog is modified."); #endif /* If has been modified save it */ /* Checks if it's a new catalog (in this case his full name is "./[catalog_name]") */ if ( gw_db_catalog_get_db_name ( catalog)==NULL || strlen ( gw_db_catalog_get_db_name ( catalog))==0 ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "it's a new catalog, please set a catalog file name."); #endif /* If it's a new catalog, ask a file name */ result = GWECATNOFILENAME; } else { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "the catalog is saving..."); #endif gw_status_bar_put_messages ( window, _( "Saving catalog"), _( "Please wait...")); gw_gui_manager_main_interface_refresh ( ); ((GWCatalogPlugin*)gw_db_context_get_plugin ( context))->gw_db_catalog_update ( context, catalog); /* Else save it directly */ if ( ((GWCatalogPlugin*)gw_db_context_get_plugin ( context))->gw_db_catalog_save ( context) == 0) { gw_db_catalog_set_ismodified ( catalog, FALSE); result = 0; gw_am_add_recent_file ( gw_db_catalog_get_db_name ( catalog)); gw_am_set_settings ( GW_VALUE_APP_CATALOG_LAST, g_strdup ( gw_db_catalog_get_db_name ( catalog))); gw_status_bar_put_messages ( window, _( "Catalog saved"), ""); gw_gui_manager_main_interface_update_all ( ); gw_gui_manager_main_interface_refresh ( ); } else { result = GWECATCANNOTSAVE; gw_status_bar_put_messages ( window, _( "Saving catalog failed"), ""); gw_gui_manager_main_interface_refresh ( ); } } } else { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "the catalog isn't modified."); #endif result = GWECATNOMODIFIED; } } else { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "no opened catalog!!"); #endif } return result; } gint gw_am_close_catalog ( gboolean save) { gint result = -1; GWDBContext * context = gw_am_get_current_catalog_context ( ); GWCatalogPlugin *plugin = NULL; if ( context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL) { plugin->gw_db_catalog_close ( context); result = 0; } else { //Impossible : le context's plugin cannot be NULL!! } } gw_am_set_current_catalog_context ( NULL); gw_notebook_catalog_ctree_destroy_all ( ); return result; } gint gw_am_add_recent_file ( const gchar *filepath) { gint result = -1; gchar *recents_files = NULL; gint max_nb_files = -1; gchar **recents_files_list = NULL; gint i = 0; gboolean already_exist = FALSE; gchar *recents_files_tmp = NULL; gchar *recents_file = NULL; #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( filepath != NULL ) { /* Stores in the recents opened files list. */ recents_files = gw_am_get_settings ( GW_VALUE_APP_RECENTS_FILES); max_nb_files = gw_am_get_settings_tol ( GW_VALUE_APP_RECENT_SIZE); if ( recents_files != NULL ) { recents_files_list = g_strsplit ( recents_files, G_SEARCHPATH_SEPARATOR_S, -1); /* Gets the number of recents opened files and checks if the file doesn't already exists. */ for ( i = 0; (recents_files_list[i] != NULL); i++) { /* Checks if the file doesn't already exist in the files that will be kept. */ if ( (strcmp ( filepath, recents_files_list[i]) == 0) && (i < max_nb_files) ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "the file %s is already in the recents opened catalog file at position %d.", filepath, i+1); #endif already_exist = TRUE; } } /* Removes all over stored recents opened files. */ while ( ((i >= (max_nb_files - 1)) && ( i >= 0) && (already_exist == FALSE)) || ((i >= (max_nb_files)) && ( i >= 0) && (already_exist == TRUE))) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "remove %s at %d.", recents_files_list[i]!=NULL?recents_files_list[i]:"(null)", i+1); #endif g_free ( recents_files_list[i]); recents_files_list[i] = NULL; i--; } /* Make a place for the new entry. */ if ( (i >= (max_nb_files - 1)) && (already_exist == FALSE) && (i >= 0) ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "must remove one entry for the new entry", NULL); #endif g_free ( recents_files_list[i]); recents_files_list[i] = NULL; i--; } /* Builds the new recents opened files string. */ if ( recents_files_list != NULL ) { recents_files_tmp = g_strjoinv ( G_SEARCHPATH_SEPARATOR_S, recents_files_list); } if ( (already_exist == FALSE) ) { if ( recents_files_tmp != NULL ) { recents_file = g_strconcat ( filepath, G_SEARCHPATH_SEPARATOR_S, recents_files_tmp, NULL); } else { recents_file = g_strdup ( filepath); } } else { if ( recents_files_tmp != NULL ) { recents_file = g_strdup ( recents_files_tmp); } else { recents_file = NULL; } } if ( recents_files_tmp != NULL ) { g_free ( recents_files_tmp); } gw_am_set_settings ( GW_VALUE_APP_RECENTS_FILES, recents_file); g_strfreev ( recents_files_list); } else { gw_am_set_settings ( GW_VALUE_APP_RECENTS_FILES, g_strdup ( filepath)); } } return result; } gint gw_am_load_catalog_from_recents_files ( const guint index) { gint result = -1; gchar *files = NULL; gchar **files_list = NULL; gint i = 0; #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "opening recent file number %d.", index); #endif if ( (files = gw_am_get_settings ( GW_VALUE_APP_RECENTS_FILES)) != NULL) { files_list = g_strsplit ( files, G_SEARCHPATH_SEPARATOR_S, -1); i = 0; while ( (files_list[i] != NULL) && (i < index) ) { i++; } if ( i == index ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "preparing to load %s.", files_list[i]); #endif gw_am_load_catalog ( files_list[i]); result = 0; } g_strfreev ( files_list); } return result; } gchar * gw_am_get_catalog_path_name_from_recents_files ( const guint index) { gchar *files = NULL; gchar **files_list = NULL; gchar *result = NULL; gint i = 0; #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "getting catalog path name in recents files list at %d.", index); #endif if ( (files = gw_am_get_settings ( GW_VALUE_APP_RECENTS_FILES)) != NULL) { files_list = g_strsplit ( files, G_SEARCHPATH_SEPARATOR_S, -1); i = 0; while ( (files_list[i] != NULL) && (i < index) ) { i++; } if ( i == index ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "preparing to load %s.", files_list[i]); #endif result = g_strdup ( files_list[i]); } g_strfreev ( files_list); } return result; } void gw_am_log_msg ( const gint level, const gchar *file, const gint line, const gchar *function, const gchar *msg, ...) { /* There is may be a bug with the special sequence "%c". */ #if GW_DEBUG_MODE gint nb = 0; gchar *str_index = NULL; gchar *segm = NULL; gchar *tmp = NULL; gint len = 0; gint i; g_print ( "*** GW - %s (%d) :: %s()", file, line, function); if ( msg != NULL ) { g_print ( " : "); str_index = (gchar*)msg; while ( (str_index = strchr ( str_index, '%')) != NULL) { nb++; str_index++; } str_index = (gchar*)msg; if ( nb > 0 ) { va_list ( ap); va_start ( ap, msg); for ( i = 1; i <= nb; i++) { segm = str_index; str_index = strchr ( segm, '%') + 2; len = str_index - segm; tmp = (gchar*)g_malloc0 ( sizeof ( gchar) * (len+1)); memcpy ( tmp, segm, len); tmp[len] = '\0'; switch ( tmp[len-1]) { case 'd': g_print ( tmp, va_arg ( ap, int));break; case 'c': g_print ( tmp, va_arg ( ap, char));break; case 's': g_print ( tmp, va_arg ( ap, char*));break; case 'p': g_print ( tmp, va_arg ( ap, void*));break; default: g_print ( tmp);break; } g_free ( tmp); } va_end ( ap); } g_print ( "%s", str_index); } g_print ( "\n"); #endif } void gw_am_beep ( ) { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( gw_am_get_settings_tob ( GW_VALUE_APP_GUI_BEEP) == TRUE) { gdk_beep ( ); } return; } GWSettingsExplorerField ** gw_plugin_settings_explorer_disk_get_all_fields ( void) { GWSettingsExplorerField **p; gint i = 0; gint index = -1; gint show = -1; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif p = (GWSettingsExplorerField**)g_malloc ( sizeof ( GWSettingsExplorerField*) * 13); for ( i = 0; i < 13; i++ ) { p[i] = NULL; } i = -1; /* Disk name */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE), p[i]->name); p[i]->position = gw_am_get_settings_tolx ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION, GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION_DEFAULT); p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION); p[i]->visible = gw_am_get_settings_tobx ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_SHOW, TRUE); p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_SHOW); /* Disk file system name */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE), p[i]->name); p[i]->position = gw_am_get_settings_tolx ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION, GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION_DEFAULT); p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION); p[i]->visible = gw_am_get_settings_tobx ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_SHOW, TRUE); p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_SHOW); /* Disk access path */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE), p[i]->name); p[i]->position = gw_am_get_settings_tolx ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION, GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION_DEFAULT); p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION); p[i]->visible = gw_am_get_settings_tobx ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_SHOW, TRUE); p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_SHOW); /* Disk number archive */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE), p[i]->name); p[i]->position = gw_am_get_settings_tolx ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION, GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION_DEFAULT); p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION); p[i]->visible = gw_am_get_settings_tobx ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_SHOW, TRUE);; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_SHOW); /* Disk type */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_SHOW); /* Disk volume name */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_SHOW); /* Disk capacity */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_SHOW); /* Disk free space */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_SHOW); /* Disk adding date */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_SHOW); /* Disk serial number */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_SHOW); /* Disk category */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_SHOW); /* Disk description */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_SHOW); return p; } GWSettingsExplorerField ** gw_plugin_settings_explorer_file_get_all_fields ( void) { GWSettingsExplorerField **p; gint i = 0; gint index = -1; gint show = -1; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif p = (GWSettingsExplorerField**)g_malloc ( sizeof ( GWSettingsExplorerField*) * 12); for ( i = 0; i < 12; i++ ) { p[i] = NULL; } i = -1; /* File name */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_SHOW); /* File rights */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_SHOW); /* File owner */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_SHOW); /* File group */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_SHOW); /* File size */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_SHOW); /* File inode */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_SHOW); /* File acces date */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_SHOW); /* File modification date */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_SHOW); /* File creation date */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_SHOW); /* File category */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_SHOW); /* File description */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION)) == -1) { index = GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_SHOW); return p; } GWSettingsExplorerField ** gw_plugin_settings_search_get_all_fields ( void) { GWSettingsExplorerField **p; gint i = 0; gint index = -1; gint show = -1; #ifdef GW_DEBUG_PLUGIN_SETTINGS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif p = (GWSettingsExplorerField**)g_malloc ( sizeof ( GWSettingsExplorerField*) * 8); for ( i = 0; i < 8; i++ ) { p[i] = NULL; } i = -1; /* File name */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION)) == -1) { index = GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_NAME_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_NAME_SHOW); /* Disk name */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_DISK_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION)) == -1) { index = GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_DISK_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_DISK_SHOW); /* File path */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION)) == -1) { index = GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_PATH_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_PATH_SHOW); /* File size */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION)) == -1) { index = GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_SIZE_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_SIZE_SHOW); /* File date */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION)) == -1) { index = GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_DATE_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_DATE_SHOW); /* File category */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION)) == -1) { index = GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_SHOW); /* File description */ index = -1; show = -1; p[++i] = gw_settings_explorer_field_new ( ); g_strdup_to_gtk_text ( _( GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE), p[i]->name); if ( (index = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION)) == -1) { index = GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION_DEFAULT; } p[i]->position = index; p[i]->position_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION); if ( (show = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_SHOW)) == -1) { show = 1; } p[i]->visible = (gboolean)show; p[i]->visible_v = g_strdup ( GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_SHOW); return p; } void gw_am_set_current_catalog_context ( GWDBContext * context) { current_catalog_context = context; } GWDBContext * gw_am_get_current_catalog_context ( ) { return current_catalog_context; } gint gw_am_import_catalog_from ( GWCatalogPlugin *oplugin, GWCatalogPlugin *iplugin, gchar *db_name, gchar *short_db_name) { GWCatalogPlugin *op = oplugin, *ip = iplugin; GWDBContext *octx = NULL, *ictx = NULL; GWDBCatalog *ocat = NULL, *icat = NULL; GWDBCategory **categories = NULL; GWDBDisk **disks = NULL; GWDBDiskPK idiskPK = NULL, odiskPK = NULL; GWDBFile **files = NULL; GWDBFilePK ifilePK = NULL, ofilePK = NULL; gint i = 0, j = 0; gchar *compression_level = NULL; gchar *mode = NULL; /* Gets the file compression level. */ compression_level = gw_am_get_settings ( GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL); if ( compression_level == NULL ) { compression_level = g_strdup_printf ( "%d", GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_DEFAULT); } else { compression_level = g_strdup ( compression_level); } /* Builds the open file mode. */ mode = g_strdup_printf ( "wb%s", compression_level); g_free ( compression_level); /* Creates the import plugin context */ if ( (ictx = ip->gw_db_catalog_open ( ip, db_name, mode)) == NULL ) { g_free ( mode); return -1; } octx = op->gw_db_catalog_create ( op, short_db_name, mode); gw_db_context_set_plugin ( octx, op); g_free(mode); gw_db_context_set_plugin ( ictx, ip); icat = ip->gw_db_catalog_get_db_catalog ( ictx); ocat = ip->gw_db_catalog_get_db_catalog ( octx); if ( gw_db_catalog_get_name ( icat) != NULL) { gw_db_catalog_set_name ( ocat, g_strdup ( gw_db_catalog_get_name ( icat))); } if ( gw_db_catalog_get_description ( icat) != NULL) { gw_db_catalog_set_description ( ocat, g_strdup ( gw_db_catalog_get_description ( icat))); } gw_db_catalog_set_program_builder ( ocat, g_strdup_printf ( "%s (%s)", PROJECT_NAME, "plugin name??")); op->gw_db_catalog_update ( octx, ocat); gw_db_catalog_free ( ocat); gw_db_catalog_free ( icat); /* Imports all the categories */ //Becarefull, at time the category index is managed by the catalog plugin. if ( (categories = ip->gw_db_catalog_get_db_categories ( ictx)) != NULL) { for ( i = 0; categories[i]!=NULL; i++) { if ( gw_db_category_get_index ( categories[i]) != 0) { op->gw_db_catalog_add_db_category ( octx, categories[i]); //TOVALIDATE // } else { // gw_db_category_free ( categories[i]); // } } gw_db_category_free ( categories[i]); } g_free ( categories); } /* Imports all the disks */ if ( (disks = ip->gw_db_catalog_get_db_disks ( ictx)) != NULL) { for ( i = 0; disks[i]!=NULL; i++) { idiskPK = gw_db_disk_get_ref ( disks[i]); odiskPK = op->gw_db_catalog_add_db_disk ( octx, disks[i]); if ( (files = ip->gw_db_disk_get_db_files ( ictx, idiskPK)) != NULL) { for ( j = 0; files[j]!=NULL;j++) { ifilePK = gw_db_file_get_ref ( files[j]); ofilePK = op->gw_db_disk_add_db_file ( octx, odiskPK, files[j]); /* Imports the folder */ gw_cm_catalog_copy_folder ( ictx, octx, ifilePK, ofilePK); //TOVALIDATE gw_db_file_free ( files[j]); } g_free ( files); } //TOVALIDATE gw_db_disk_free ( disks[i]); } g_free ( disks); } /* Closes the import plugin context */ ip->gw_db_catalog_close ( ictx); /* Loads the imported catalog */ gw_cm_load ( octx); return 0; } gint gw_am_export_catalog_to ( GWDBContext *context, GWCatalogPlugin *plugin, gchar *db_name, gchar *short_db_name) { GWCatalogPlugin *op = plugin, *ip = NULL; GWDBContext *octx = NULL, *ictx = context; GWDBCatalog *ocat = NULL, *icat = NULL; GWDBCategory **categories = NULL; GWDBDisk **disks = NULL; GWDBDiskPK idiskPK = NULL, odiskPK = NULL; GWDBFile **files = NULL; GWDBFilePK ifilePK = NULL, ofilePK = NULL; gint i = 0, j = 0; gchar *compression_level = NULL; gchar *mode = NULL; GWPluginInfo *plugin_info = NULL; /* Gets the file compression level. */ compression_level = gw_am_get_settings ( GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL); if ( compression_level == NULL ) { compression_level = g_strdup_printf ( "%d", GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_DEFAULT); } else { compression_level = g_strdup ( compression_level); } /* Builds the open file mode. */ mode = g_strdup_printf ( "wb%s", compression_level); g_free ( compression_level); /* Creates the export plugin context */ ip = gw_db_context_get_plugin ( ictx); icat = ip->gw_db_catalog_get_db_catalog ( ictx); if ( (octx = op->gw_db_catalog_create ( op, gw_db_catalog_get_name ( icat), mode)) == NULL ) { g_free ( mode); gw_db_catalog_free ( icat); return -1; } g_free ( mode); gw_db_context_set_plugin ( octx, op); /* Export catalog information */ ocat = op->gw_db_catalog_get_db_catalog ( octx); gw_db_catalog_set_db_name ( ocat, g_strdup ( db_name)); gw_db_catalog_set_short_db_name ( ocat, g_strdup ( short_db_name)); //FIXME add plugin name plugin_info = op->gw_plugin_get_info ( ); gw_db_catalog_set_program_builder ( ocat, g_strdup_printf ( "%s (%s)", PROJECT_NAME, gw_plugin_info_get_name ( plugin_info))); gw_plugin_info_free ( plugin_info); gw_db_catalog_set_description ( ocat, g_strdup ( gw_db_catalog_get_description ( icat))); op->gw_db_catalog_update ( octx, ocat); gw_db_catalog_free ( ocat); gw_db_catalog_free ( icat); /* Exports all the categories */ //Becarefull, at time the category index is managed by the catalog plugin. if ( (categories = ip->gw_db_catalog_get_db_categories ( ictx)) != NULL) { for ( i = 0; categories[i]!=NULL; i++) { if ( gw_db_category_get_index ( categories[i]) != 0) { op->gw_db_catalog_add_db_category ( octx, categories[i]); //TOVALIDATE // } else { // gw_db_category_free ( categories[i]); // } } gw_db_category_free ( categories[i]); } g_free ( categories); } /* Exports all the disks */ if ( (disks = ip->gw_db_catalog_get_db_disks ( ictx)) != NULL) { for ( i = 0; disks[i]!=NULL; i++) { idiskPK = gw_db_disk_get_ref ( disks[i]); odiskPK = op->gw_db_catalog_add_db_disk ( octx, disks[i]); if ( (files = ip->gw_db_disk_get_db_files ( ictx, idiskPK)) != NULL) { for ( j = 0; files[j]!=NULL;j++) { ifilePK = gw_db_file_get_ref ( files[j]); ofilePK = op->gw_db_disk_add_db_file ( octx, odiskPK, files[j]); /* Exports the folder */ gw_cm_catalog_copy_folder ( ictx, octx, ifilePK, ofilePK); //TOVALIDATE gw_db_file_free ( files[j]); } g_free ( files); } //TOVALIDATE gw_db_disk_free ( disks[i]); } g_free ( disks); } /* Saves and closes the export plugin context */ op->gw_db_catalog_save ( octx); op->gw_db_catalog_close ( octx); return 0; } gint gw_am_new_catalog ( const gchar *name) { gint result = -1; GWCatalogPlugin *plugin = NULL; GWDBContext *context = NULL; GWDBCatalog *catalog = NULL; gchar *compression_level = NULL; gchar *mode = NULL; if ( name != NULL) { /* Gets the file compression level. */ compression_level = gw_am_get_settings ( GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL); if ( compression_level == NULL ) { compression_level = g_strdup_printf ( "%d", GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_DEFAULT); } else { compression_level = g_strdup ( compression_level); } /* Builds the open file mode. */ mode = g_strdup_printf ( "wb%s", compression_level); g_free ( compression_level); plugin = gw_pm_get_current_catalog_plugin ( ); context = plugin->gw_db_catalog_create ( plugin, name, mode); g_free ( mode); gw_db_context_set_plugin ( context, plugin); catalog = plugin->gw_db_catalog_get_db_catalog ( context); gw_db_catalog_set_program_builder ( catalog, g_strdup ( PROJECT_NAME)); plugin->gw_db_catalog_update ( context, catalog); gw_db_catalog_free ( catalog); gw_cm_load ( context); result = 0; } return result; } gwhere-0.2.3/src/gwapplicationmanager.h0000744000175000017500000017247510270033670016612 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwapplicationmanager.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a component to manage GWhere application. * @author Sébastien LECACHEUR * @author Grégory BLOQUEL * @version 1.0 2001/08/21 * @see gwsupport.h * @see data/gwsettings.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwapplicationmanager.c * @author Author */ #ifndef GW_APPLICATION_MANAGER_H #define GW_APPLICATION_MANAGER_H #include "data/gwdata.h" #include "gui/gwgui.h" #include "gwpluginsmanager.h" /*! @define GWECATNOMODIFIED An error code : catalog isn't modified */ #define GWECATNOMODIFIED 4000 /*! @define GWECATNOFILENAME An error code : there isn't file nale to save catalog */ #define GWECATNOFILENAME 4001 /*! @define GWECATCANNOTSAVE An error code : cannot save catalog */ #define GWECATCANNOTSAVE 4002 /*! * @typedef GWApplicationSettings * @discussion Common application variable * @field user_name name of the current user * @field user_gwhere_home path of the user gwhere home * @field user_gwhere_settings_file path of the user gwhere settings file * @field settings current settings */ typedef struct gw_application_settings { gchar *user_name; gchar *user_gwhere_home; gchar *user_gwhere_settings_file; GWSettings *settings; } GWApplicationSettings; typedef struct gw_mail_s { /* gchar *server_name; int server_port; gchar *from; */ gchar *to; gchar *cc; gchar *bcc; gchar *subject; gchar *message; gchar *file_path; }GWMail; /*! @define GW_VALUE_APP_CATALOG_LAST The variable name for the last opened catalog */ #define GW_VALUE_APP_CATALOG_LAST "GWhere.application.catalog.last" /*! @define GW_VALUE_APP_RECENTS_FILES The variable name for recents opened files */ #define GW_VALUE_APP_RECENTS_FILES "GWhere.application.recents.files" /*! @define GW_VALUE_APP_RECENT_SIZE The variable name for the size of recents opened files list */ #define GW_VALUE_APP_RECENT_SIZE "GWhere.application.recents.size" /*! @define GW_VALUE_APP_RECENT_SIZE_DEFAULT The default size of recents opened file list */ #define GW_VALUE_APP_RECENT_SIZE_DEFAULT 5 /*! @define GW_VALUE_APP_RECENT_SIZE_MIN The minimum size of recents opened file list */ #define GW_VALUE_APP_RECENT_SIZE_MIN 0 /*! @define GW_VALUE_APP_RECENT_SIZE_MAX The maximum size of recents opened file list */ #define GW_VALUE_APP_RECENT_SIZE_MAX 20 /*! @define GW_VALUE_APP_GUI_RC_FILE The variable name for the GTK+ ressource file properties */ #define GW_VALUE_APP_GUI_RC_FILE "GWhere.application.gui.rc" /*! @define GW_VALUE_APP_GUI_RC_FILE_DEFAULT The default GTK+ ressource file name */ #define GW_VALUE_APP_GUI_RC_FILE_DEFAULT "gwhererc" /*! @define GW_VALUE_APP_GUI_AUTOSAVE The variable name for the autosaving GUI properties */ #define GW_VALUE_APP_GUI_AUTOSAVE "GWhere.application.gui.autosave" /*! @define GW_VALUE_APP_GUI_BEEP The variable name for allowing beep */ #define GW_VALUE_APP_GUI_BEEP "GWhere.application.gui.beep" /*! @define GW_VALUE_APP_GUI_BEEP_DEFAULT The default value for allowing beep */ #define GW_VALUE_APP_GUI_BEEP_DEFAULT 0 /*! @define GW_VALUE_APP_WIN_X The variable name for window horizontal position */ #define GW_VALUE_APP_WIN_X "GWhere.application.window.x" /*! @define GW_VALUE_APP_WIN_X_DEFAULT The default value for window horizontal position */ #define GW_VALUE_APP_WIN_X_DEFAULT 0 /*! @define GW_VALUE_APP_WIN_Y The variable name for window vertical position */ #define GW_VALUE_APP_WIN_Y "GWhere.application.window.y" /*! @define GW_VALUE_APP_WIN_Y_DEFAULT The default value for window vertical position */ #define GW_VALUE_APP_WIN_Y_DEFAULT 0 /*! @define GW_VALUE_APP_WIN_HEIGHT The variable name for window vertical size */ #define GW_VALUE_APP_WIN_HEIGHT "GWhere.application.window.height" /*! @define GW_VALUE_APP_WIN_HEIGHT_DEFAULT The default value for window vertical size */ #define GW_VALUE_APP_WIN_HEIGHT_DEFAULT 600 /*! @define GW_VALUE_APP_WIN_WIDTH The variable name for window horizontal size */ #define GW_VALUE_APP_WIN_WIDTH "GWhere.application.window.width" /*! @define GW_VALUE_APP_WIN_WIDTH_DEFAULT The default value for window horizontal size */ #define GW_VALUE_APP_WIN_WIDTH_DEFAULT 800 /*! @define GW_VALUE_APP_EXPLORER_HPAN_POSITION The variable name for the horizontal pane position */ #define GW_VALUE_APP_EXPLORER_HPAN_POSITION "GWhere.application.explorer.hpan.pos" /*! @define GW_VALUE_APP_EXPLORER_HPAN_POSITION_DEFAULT The default value for variable name for the horizontal pane position */ #define GW_VALUE_APP_EXPLORER_HPAN_POSITION_DEFAULT 205 /*! @define GW_VALUE_APP_WIN_WIDTH_DEFAULT The default value for window horizontal size */ #define GW_VALUE_APP_WIN_WIDTH_DEFAULT 800 /*! @define GW_VALUE_APP_CATALOG_AUTOLOAD The variable name for the autoloading catalog option */ #define GW_VALUE_APP_CATALOG_AUTOLOAD "GWhere.application.catalog.autoload" /*! @define GW_VALUE_APP_CATALOG_AUTOLOAD_LAST The variable name for the autoloading last opened catalog option */ #define GW_VALUE_APP_CATALOG_AUTOLOAD_LAST "GWhere.application.catalog.autoload.last" /*! @define GW_VALUE_APP_CATALOG_AUTOLOAD_SELECTED The variable name for the autoloading selected catalog option */ #define GW_VALUE_APP_CATALOG_AUTOLOAD_SELECTED "GWhere.application.catalog.autoload.selected" /*! @define GW_VALUE_APP_CATALOG_AUTOLOAD_FILEPATH The variable name for the autoloading file path */ #define GW_VALUE_APP_CATALOG_AUTOLOAD_FILEPATH "GWhere.application.catalog.autoload.filepath" /*! @define GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL The variable name for the catalog compression ratio */ #define GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL "GWhere.application.catalog.compression.level" /*! @define GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_DEFAULT The default catalog compression ratio */ #define GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_DEFAULT 3 /*! @define GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_MIN The minimum catalog compression ratio */ #define GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_MIN 0 /*! @define GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_MAX The maximun catalog compression ratio */ #define GW_VALUE_APP_CATALOG_COMPRESSION_LEVEL_MAX 9 /*! @define GW_VALUE_APP_MAIL_EMAIL_ADDRESS The variable name for email adress */ #define GW_VALUE_APP_MAIL_EMAIL_ADDRESS "GWhere.application.mail.email.address" /*! @define GW_VALUE_APP_MAIL_SERVER_ADDRESS The variable name for outgoing mail server name */ #define GW_VALUE_APP_MAIL_SERVER_ADDRESS "GWhere.application.mail.server.address" /*! @define GW_VALUE_APP_MAIL_SERVER_PORT The variable name for outgoing mail server port */ #define GW_VALUE_APP_MAIL_SERVER_PORT "GWhere.application.mail.server.port" /*! @define GW_VALUE_APP_MAIL_SERVER_PORT_DEFAULT The default outgoing mail server port */ #define GW_VALUE_APP_MAIL_SERVER_PORT_DEFAULT "25" /*! @define GW_VALUE_APP_SEARCH_STRING The variable name for search string */ #define GW_VALUE_APP_SEARCH_STRING "GWhere.application.search.string" /*! @define GW_VALUE_APP_SEARCH_CASE_SENSITIVE The variable name for search case sensitive status */ #define GW_VALUE_APP_SEARCH_CASE_SENSITIVE "GWhere.application.search.case_sensitive" /*! @define GW_VALUE_APP_SEARCH_CASE_SENSITIVE_DEFAULT The default value of search case sensitive status */ #define GW_VALUE_APP_SEARCH_CASE_SENSITIVE_DEFAULT 0 /*! @define GW_VALUE_APP_SEARCH_TYPE The variable name for search type */ #define GW_VALUE_APP_SEARCH_TYPE "GWhere.application.search.type" /*! @define GW_VALUE_APP_SEARCH_TYPE_DEFAULT The default value of search type */ #define GW_VALUE_APP_SEARCH_TYPE_DEFAULT 0 /*! @define GW_VALUE_APP_SEARCH_TYPE_KEY_WORDS_MODE The variable name for key words search mode */ #define GW_VALUE_APP_SEARCH_TYPE_KEY_WORDS_MODE "GWhere.application.search.type.key_words.mode" /*! @define GW_VALUE_APP_SEARCH_TYPE_KEY_WORDS_MODE_DEFAULT The default value for key words search mode 0=all 1=only one */ #define GW_VALUE_APP_SEARCH_TYPE_KEY_WORDS_MODE_DEFAULT 0 /*! @define GW_VALUE_APP_SEARCH_FILE_NAME The variable name for search in file name */ #define GW_VALUE_APP_SEARCH_FILE_NAME "GWhere.application.search.file" /*! @define GW_VALUE_APP_SEARCH_FILE_NAME_DEFAULT The default value of search in file name */ #define GW_VALUE_APP_SEARCH_FILE_NAME_DEFAULT 1 /*! @define GW_VALUE_APP_SEARCH_FOLDER_NAME The variable name for search in folder name */ #define GW_VALUE_APP_SEARCH_FOLDER_NAME "GWhere.application.search.folder" /*! @define GW_VALUE_APP_SEARCH_FOLDER_NAME_DEFAULT The default value of search in folder name */ #define GW_VALUE_APP_SEARCH_FOLDER_NAME_DEFAULT 0 /*! @define GW_VALUE_APP_SEARCH_DISK_NAME The variable name for search in disk name */ #define GW_VALUE_APP_SEARCH_DISK_NAME "GWhere.application.search.disk" /*! @define GW_VALUE_APP_SEARCH_DISK_NAME_DEFAULT The default value of search in disk name */ #define GW_VALUE_APP_SEARCH_DISK_NAME_DEFAULT 0 /*! @define GW_VALUE_APP_SEARCH_CATEGORY_NAME The variable name for search in category name */ #define GW_VALUE_APP_SEARCH_CATEGORY_NAME "GWhere.application.search.category" /*! @define GW_VALUE_APP_SEARCH_CATEGORY_NAME_DEFAULT The default value of search in categoryname */ #define GW_VALUE_APP_SEARCH_CATEGORY_NAME_DEFAULT 0 /*! @define GW_VALUE_APP_SEARCH_DESCRIPTION The variable name for search in description */ #define GW_VALUE_APP_SEARCH_DESCRIPTION "GWhere.application.search.description" /*! @define GW_VALUE_APP_SEARCH_DESCRIPTION_DEFAULT The default value of search in description name */ #define GW_VALUE_APP_SEARCH_DESCRIPTION_DEFAULT 0 /*! @define GW_VALUE_APP_DISK_SELECTED The variable name for selected disk */ #define GW_VALUE_APP_DISK_SELECTED "GWhere.application.disk.selected" /*! @define GW_VALUE_APP_DISK_SELECTED_DEFAULT The default value of selected disk */ #define GW_VALUE_APP_DISK_SELECTED_DEFAULT "/mnt/cdrom" /*! @define GW_VALUE_APP_DISK_DISPLAY_INFO The variable name for option diplaying information */ #define GW_VALUE_APP_DISK_DISPLAY_INFO "GWhere.application.disk.display_info" /*! @define GW_VALUE_APP_DISK_DISPLAY_INFO_DEFAULT The default value for the displaying information */ #define GW_VALUE_APP_DISK_DISPLAY_INFO_DEFAULT 0 /*! @define GW_VALUE_APP_DISK_SCAN_EXPLORE_ARCHIVE The variable name of option exploring archive files */ #define GW_VALUE_APP_DISK_SCAN_EXPLORE_ARCHIVE "GWhere.application.disk.scan.explore_archive" /*! @define GW_VALUE_APP_DISK_SCAN_EXPLORE_ARCHIVE_DEFAULT The default value of the option exploring archive files */ #define GW_VALUE_APP_DISK_SCAN_EXPLORE_ARCHIVE_DEFAULT 0 /*! @define GW_VALUE_APP_DISK_SCAN_EXPLORE_TREE_STRUCTURE The variable name of option exploring the tree structure */ #define GW_VALUE_APP_DISK_SCAN_EXPLORE_TREE_STRUCTURE "GWhere.application.disk.scan.explore_tree_structure" /*! @define GW_VALUE_APP_DISK_SCAN_EXPLORE_TREE_STRUCTURE_DEFAULT The default value of the option exploring the tree structure */ #define GW_VALUE_APP_DISK_SCAN_EXPLORE_TREE_STRUCTURE_DEFAULT 1 /*! @define GW_VALUE_APP_DISK_SCAN_CATEGORY The variable name of option setting recursively category */ #define GW_VALUE_APP_DISK_SCAN_CATEGORY "GWhere.application.disk.scan.category" /*! @define GW_VALUE_APP_DISK_SCAN_CATEGORY_DEFAULT The default value of option setting recursively category */ #define GW_VALUE_APP_DISK_SCAN_CATEGORY_DEFAULT 1 /*! @define GW_VALUE_APP_DISK_SCAN_DESCRIPTION The variable name of option scanning file description */ #define GW_VALUE_APP_DISK_SCAN_DESCRIPTION "GWhere.application.disk.scan.description" /*! @define GW_VALUE_APP_DISK_SCAN_DESCRIPTION_DEFAULT The default value of option scanning file description */ #define GW_VALUE_APP_DISK_SCAN_DESCRIPTION_DEFAULT 0 /*! @define GW_VALUE_APP_DISK_SCAN_LABEL The variable name of option using volume name as disk name */ #define GW_VALUE_APP_DISK_SCAN_LABEL "GWhere.application.disk.scan.label" /*! @define GW_VALUE_APP_DISK_SCAN_LABEL_DEFAULT The default value of option using volume name as disk name */ #define GW_VALUE_APP_DISK_SCAN_LABEL_DEFAULT 0 /*! @define GW_VALUE_APP_DISK_AUTOMOUNT The variable name of option automounting disk */ #define GW_VALUE_APP_DISK_AUTOMOUNT "GWhere.application.disk.automount" /*! @define GW_VALUE_APP_DISK_AUTOMOUNT_DEFAULT The default value of option automounting disk */ #define GW_VALUE_APP_DISK_AUTOMOUNT_DEFAULT 0 /*! @define GW_VALUE_APP_DISK_EJECT The variable name of option autojecting disk */ #define GW_VALUE_APP_DISK_EJECT "GWhere.application.disk.eject" /*! @define GW_VALUE_APP_DISK_EJECT_DEFAULT The default value of option autoejecting disk */ #define GW_VALUE_APP_DISK_EJECT_DEFAULT 1 /*! @define GW_VALUE_APP_DISK_SCAN_USE_PATTERN The variable name of option using pattern for disk name */ #define GW_VALUE_APP_DISK_SCAN_USE_PATTERN "GWhere.application.disk.scan.use_pattern" /*! @define GW_VALUE_APP_DISK_SCAN_USE_PATTERN_DEFAULT The default value of option using pattern for disk name */ #define GW_VALUE_APP_DISK_SCAN_USE_PATTERN_DEFAULT 1 /*! @define GW_VALUE_APP_DISK_SCAN_PATTERN The variable name of pattern for disk name */ #define GW_VALUE_APP_DISK_SCAN_PATTERN "GWhere.application.disk.scan.pattern" /*! @define GW_VALUE_APP_DISK_SCAN_PATTERN_DEFAULT The default value of pattern for disk name */ #define GW_VALUE_APP_DISK_SCAN_PATTERN_DEFAULT "" /*! @define GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE The variable name for the autoresize column option */ #define GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE "GWhere.application.explorer.column.autoresize" /*! @define GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE_DEFAULT The default value of the autoresize column option */ #define GW_VALUE_APP_EXPLORER_COLUMN_AUTORESIZE_DEFAULT 1 /*! @define GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER The variable name to know if the sort in explorer must group by folder */ #define GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER "GWhere.application.explorer.sort.by_folder" /*! @define GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER_DEFAULT The default value of the sort in explorer must group by folder */ #define GW_VALUE_APP_EXPLORER_SORT_BY_FOLDER_DEFAULT 1 /*! @define GW_VALUE_APP_EXPLORER_SORT_CASE_SENSITIVE The variable name to know if the sort in explorer is case sensitive */ #define GW_VALUE_APP_EXPLORER_SORT_CASE_SENSITIVE "GWhere.application.explorer.sort.case_sensitive" /*! @define GW_VALUE_APP_EXPLORER_SORT_CASE_SENSITIVE_DEFAULT The default value of the sort in explorer is case sensitive */ #define GW_VALUE_APP_EXPLORER_SORT_CASE_SENSITIVE_DEFAULT 0 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE The title column of the column Name */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_TITLE N_( "Name") /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_SHOW The variable name to if the column Name should be showed */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_SHOW "GWhere.application.explorer.file.column.name.show" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_SIZE The variable name for the size the column Name */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_SIZE "GWhere.application.explorer.file.column.name.size" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_SIZE_DEFAULT The default value of the size the column Name */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_SIZE_DEFAULT 320 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION The variable name for the position of the column Name */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION "GWhere.application.explorer.file.column.name.position" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT The default value of the postion of the column Name */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_NAME_POSITION_DEFAULT 0 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE The title column of the column Rights */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_TITLE N_( "Rights") /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_SHOW The variable name to if the column Rights should be showed */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_SHOW "GWhere.application.explorer.file.column.rights.show" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_SIZE The variable name for the size the column Rights */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_SIZE "GWhere.application.explorer.file.column.rights.size" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_SIZE_DEFAULT The default value of the size the column Rights */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_SIZE_DEFAULT 65 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION The variable name for the position of the column Rights */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION "GWhere.application.explorer.file.column.rights.position" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION_DEFAULT The default value of the position of the column Rights */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_RIGHTS_POSITION_DEFAULT 1 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE The title column of the column Owner */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_TITLE N_( "Owner") /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_SHOW The variable name to if the column Owner should be showed */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_SHOW "GWhere.application.explorer.file.column.owner.show" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_SIZE The variable name for the size the column Owner */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_SIZE "GWhere.application.explorer.file.column.owner.size" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_SIZE_DEFAULT The default value of the size the column Owner */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_SIZE_DEFAULT 40 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION The variable name for the position of the column Owner */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION "GWhere.application.explorer.file.column.owner.position" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION_DEFAULT The default value of the position of the column Owner */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_OWNER_POSITION_DEFAULT 2 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE The title column of the column Group */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_TITLE N_( "Group") /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_SHOW The variable name to if the column Group should be showed */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_SHOW "GWhere.application.explorer.file.column.group.show" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_SIZE The variable name for the size the column Group */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_SIZE "GWhere.application.explorer.file.column.group.size" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_SIZE_DEFAULT The default value of the size the column Group */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_SIZE_DEFAULT 40 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION The variable name for the position of the column Group */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION "GWhere.application.explorer.file.column.group.position" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION_DEFAULT The default value of the position of the column Group */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_GROUP_POSITION_DEFAULT 3 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE The title column of the column Size */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_TITLE N_( "Size") /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_SHOW The variable name to if the column Size should be showed */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_SHOW "GWhere.application.explorer.file.column.size.show" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_SIZE The variable name for the size the column Size */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_SIZE "GWhere.application.explorer.file.column.size.size" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_SIZE_DEFAULT The default value of the size the column Size */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_SIZE_DEFAULT 60 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION The variable name for the position of the column Size */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION "GWhere.application.explorer.file.column.size.position" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION_DEFAULT The default value of the position of the column Size */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_SIZE_POSITION_DEFAULT 4 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE The title column of the column INode */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_TITLE N_( "INode") /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_SHOW The variable name to if the column INode should be showed */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_SHOW "GWhere.application.explorer.file.column.inode.show" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_SIZE The variable name for the size the column INode */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_SIZE "GWhere.application.explorer.file.column.inode.size" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_SIZE_DEFAULT The default value of the size the column INode */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_SIZE_DEFAULT 35 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION The variable name for the position of the column INode */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION "GWhere.application.explorer.file.column.inode.position" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION_DEFAULT The default value of the position of the column INode */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_INODE_POSITION_DEFAULT 5 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE The title column of the column Access Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_TITLE N_( "Access date") /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_SHOW The variable name to if the column Access Date should be showed */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_SHOW "GWhere.application.explorer.file.column.adate.show" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_SIZE The variable name for the size the column Access Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_SIZE "GWhere.application.explorer.file.column.adate.size" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_SIZE_DEFAULT The default value of the size the column Access Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_SIZE_DEFAULT 60 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION The variable name for the position the column Access Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION "GWhere.application.explorer.file.column.adate.position" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION_DEFAULT The default value of the position of the column Access Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_ADATE_POSITION_DEFAULT 6 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE The title column of the column Modification Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_TITLE N_( "Modification date") /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_SHOW The variable name to if the column Modification Date should be showed */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_SHOW "GWhere.application.explorer.file.column.mdate.show" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_SIZE The variable name for the size the column Modification Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_SIZE "GWhere.application.explorer.file.column.mdate.size" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_SIZE_DEFAULT The default value of the size the column Modification Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_SIZE_DEFAULT 60 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION The variable name for the position of the column Modification Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION "GWhere.application.explorer.file.column.mdate.position" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION_DEFAULT The default value of the position of the column Modification Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_MDATE_POSITION_DEFAULT 7 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE The title column of the column Creation Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_TITLE N_( "Creation date") /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_SHOW The variable name to if the column Create Date should be showed */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_SHOW "GWhere.application.explorer.file.column.cdate.show" /*! @define GW_VALUE_APP_EXPLORER_FILE_CDATE_NAME_SIZE The variable name for the size the column Creation Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_SIZE "GWhere.application.explorer.file.column.cdate.size" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_SIZE_DEFAULT The default value of the size the column Creation Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_SIZE_DEFAULT 60 /*! @define GW_VALUE_APP_EXPLORER_FILE_CDATE_NAME_POSITION The variable name for the position of the column Creation Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION "GWhere.application.explorer.file.column.cdate.position" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION_DEFAULT The default value of the position of the column Creation Date */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CDATE_POSITION_DEFAULT 8 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE The title column of the column Category */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_TITLE N_( "Category") /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_SHOW The variable name to if the column Category should be showed */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_SHOW "GWhere.application.explorer.file.column.category.show" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_SIZE The variable name for the size the column Category */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_SIZE "GWhere.application.explorer.file.column.category.size" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_SIZE_DEFAULT The default value of the size the column Category */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_SIZE_DEFAULT 60 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION The variable name for the position of the column Category */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION "GWhere.application.explorer.file.column.category.position" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION_DEFAULT The default value of the position of the column Category */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_CATEGORY_POSITION_DEFAULT 9 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE The title column of the column Description */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_TITLE N_( "Description") /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_SHOW The variable name to if the column Description should be showed */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_SHOW "GWhere.application.explorer.file.column.description.show" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_SIZE The variable name for the size the column Description */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_SIZE "GWhere.application.explorer.file.column.description.size" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_SIZE_DEFAULT The default value of the size the column Description */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_SIZE_DEFAULT 100 /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION The variable name for the position of the column Description */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION "GWhere.application.explorer.file.column.description.position" /*! @define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION_DEFAULT The default value of the position of the column Description */ #define GW_VALUE_APP_EXPLORER_FILE_COLUMN_DESCRIPTION_POSITION_DEFAULT 10 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE The title column of the column Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_TITLE N_( "Name") /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_SHOW The variable name to if the column Name should be showed */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_SHOW "GWhere.application.explorer.disk.column.name.show" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_SIZE The variable name for the size the column Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_SIZE "GWhere.application.explorer.disk.column.name.size" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_SIZE_DEFAULT The default value of the size the column Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_SIZE_DEFAULT 200 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION The variable name for the position of the column Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION "GWhere.application.explorer.disk.column.name.position" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION_DEFAULT The default value of the postion of the column Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NAME_POSITION_DEFAULT 0 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE The title column of the column File System Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_TITLE N_( "File system name") /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_SHOW The variable name to if the column File System Name should be showed */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_SHOW "GWhere.application.explorer.disk.column.fsname.show" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_SIZE The variable name for the size the column File System Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_SIZE "GWhere.application.explorer.disk.column.fsname.size" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_SIZE_DEFAULT The default value of the size the column File System Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_SIZE_DEFAULT 65 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION The variable name for the position of the column File System Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION "GWhere.application.explorer.disk.column.fsname.position" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION_DEFAULT The default value of the position of the column Rights */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FSNAME_POSITION_DEFAULT 1 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE The title column of the column Access Path */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_TITLE N_( "Access path") /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_SHOW The variable name to if the column Access Path should be showed */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_SHOW "GWhere.application.explorer.disk.column.path.show" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_SIZE The variable name for the size the column Access Path */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_SIZE "GWhere.application.explorer.disk.column.path.size" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_SIZE_DEFAULT The default value of the size the column Access Path */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_SIZE_DEFAULT 65 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION The variable name for the position of the column Access Path */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION "GWhere.application.explorer.disk.column.path.position" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION_DEFAULT The default value of the position of the column Access Path */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_PATH_POSITION_DEFAULT 2 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE The title column of the column Archive Number */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_TITLE N_( "Archive N#") /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_SHOW The variable name to if the column Archive Number should be showed */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_SHOW "GWhere.application.explorer.disk.column.archivenb.show" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_SIZE The variable name for the size the column Archive Number */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_SIZE "GWhere.application.explorer.disk.column.archivenb.size" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_GROUP_SIZE_DEFAULT The default value of the size the column Archive Number */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_SIZE_DEFAULT 65 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION The variable name for the position of the column Archive Number */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION "GWhere.application.explorer.disk.column.archivenb.position" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION_DEFAULT The default value of the position of the column Archive Number */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_NBARCHIVE_POSITION_DEFAULT 3 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE The title column of the column Type */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_TITLE N_( "Type") /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_SHOW The variable name to if the column Type should be showed */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_SHOW "GWhere.application.explorer.disk.column.type.show" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_SIZE The variable name for the size the column Type */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_SIZE "GWhere.application.explorer.disk.column.type.size" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_SIZE_DEFAULT The default value of the size the column Type */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_SIZE_DEFAULT 120 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION The variable name for the position of the column Type */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION "GWhere.application.explorer.disk.column.type.position" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION_DEFAULT The default value of the position of the column Type */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_TYPE_POSITION_DEFAULT 4 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE The title column of the column Volume Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_TITLE N_( "Volume name") /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_SHOW The variable name to if the column Volume Name should be showed */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_SHOW "GWhere.application.explorer.disk.column.volume.show" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_SIZE The variable name for the size the column Volume Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_SIZE "GWhere.application.explorer.disk.column.volume.size" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_SIZE_DEFAULT The default value of the size the column Volume Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_SIZE_DEFAULT 80 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION The variable name for the position of the column Volume Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION "GWhere.application.explorer.disk.column.volume.position" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION_DEFAULT The default value of the position of the column Volume Name */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_VOLUME_POSITION_DEFAULT 5 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE The title column of the column Full Capacity */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_TITLE N_( "Full capacity") /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_SHOW The variable name to if the column Full Capacity should be showed */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_SHOW "GWhere.application.explorer.disk.column.capacity.show" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_SIZE The variable name for the size the column Full Capacity */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_SIZE "GWhere.application.explorer.disk.column.capacity.size" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_SIZE_DEFAULT The default value of the size the column Full Capacity */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_SIZE_DEFAULT 60 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION The variable name for the position the column Full Capacity */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION "GWhere.application.explorer.disk.column.capacity.position" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION_DEFAULT The default value of the position of the column Full Capacity */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CAPACITY_POSITION_DEFAULT 6 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE The title column of the column Free Space */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_TITLE N_( "Free space") /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_SHOW The variable name to if the column Free Space should be showed */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_SHOW "GWhere.application.explorer.disk.column.free.show" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_SIZE The variable name for the size the column Free Space */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_SIZE "GWhere.application.explorer.disk.column.free.size" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_SIZE_DEFAULT The default value of the size the column Free Space */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_SIZE_DEFAULT 65 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION The variable name for the position of the column Free Space */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION "GWhere.application.explorer.disk.column.free.position" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION_DEFAULT The default value of the position of the column Free Space */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_FREE_POSITION_DEFAULT 7 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE The title column of the column Date */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_TITLE N_( "Date") /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_SHOW The variable name to if the column Date should be showed */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_SHOW "GWhere.application.explorer.disk.column.date.show" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_SIZE The variable name for the size the column Date */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_SIZE "GWhere.application.explorer.disk.column.date.size" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_SIZE_DEFAULT The default value of the size the column Date */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_SIZE_DEFAULT 60 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION The variable name for the position of the column Date */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION "GWhere.application.explorer.disk.column.date.position" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION_DEFAULT The default value of the position of the column Date */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DATE_POSITION_DEFAULT 8 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE The title column of the column Serial Number */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_TITLE N_( "Serial number") /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_SHOW The variable name to if the column Serial Number should be showed */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_SHOW "GWhere.application.explorer.disk.column.serial.show" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_SIZE The variable name for the size the column Serial Number */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_SIZE "GWhere.application.explorer.disk.column.serial.size" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_SIZE_DEFAULT The default value of the size the column Serial Number */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_SIZE_DEFAULT 60 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION The variable name for the position of the column Serial Number */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION "GWhere.application.explorer.disk.column.serial.position" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION_DEFAULT The default value of the position of the column Serial Number */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_SERIAL_POSITION_DEFAULT 9 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE The title column of the column Serial Number */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_TITLE N_( "Category") /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_SHOW The variable name to if the column Category should be showed */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_SHOW "GWhere.application.explorer.disk.column.category.show" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_SIZE The variable name for the size the column Category */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_SIZE "GWhere.application.explorer.disk.column.category.size" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_SIZE_DEFAULT The default value of the size the column Category */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_SIZE_DEFAULT 60 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION The variable name for the position of the column Category */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION "GWhere.application.explorer.disk.column.category.position" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION_DEFAULT The default value of the position of the column Category */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_CATEGORY_POSITION_DEFAULT 10 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE The title column of the column Description */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_TITLE N_( "Description") /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_SHOW The variable name to if the column Description should be showed */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_SHOW "GWhere.application.explorer.disk.column.description.show" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_SIZE The variable name for the size the column Description */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_SIZE "GWhere.application.explorer.disk.column.description.size" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_SIZE_DEFAULT The default value of the size the column Description */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_SIZE_DEFAULT 100 /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION The variable name for the position of the column Description */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION "GWhere.application.explorer.disk.column.description.position" /*! @define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION_DEFAULT The default value of the position of the column Description */ #define GW_VALUE_APP_EXPLORER_DISK_COLUMN_DESCRIPTION_POSITION_DEFAULT 11 /*! @define GW_VALUE_APP_SEARCH_COLUMN_AUTORESIZE The variable name for the autoresize column option */ #define GW_VALUE_APP_SEARCH_COLUMN_AUTORESIZE "GWhere.application.search.column.autoresize" /*! @define GW_VALUE_APP_SEARCH_COLUMN_AUTORESIZE_DEFAULT The default value of the autoresize column option */ #define GW_VALUE_APP_SEARCH_COLUMN_AUTORESIZE_DEFAULT 1 /*! @define GW_VALUE_APP_SEARCH_SORT_BY_FOLDER The variable name to know if the sort in search must group by type : catalog/disk/folder/file */ #define GW_VALUE_APP_SEARCH_SORT_BY_TYPE "GWhere.application.search.sort.by_type" /*! @define GW_VALUE_APP_SEARCH_SORT_BY_FOLDER_DEFAULT The default value of the sort in search must group by type : catalog/disk/folder/file */ #define GW_VALUE_APP_SEARCH_SORT_BY_TYPE_DEFAULT 1 /*! @define GW_VALUE_APP_SEARCH_SORT_CASE_SENSITIVE The variable name to know if the sort in search is case sensitive */ #define GW_VALUE_APP_SEARCH_SORT_CASE_SENSITIVE "GWhere.application.search.sort.case_sensitive" /*! @define GW_VALUE_APP_SEARCH_SORT_CASE_SENSITIVE_DEFAULT The default value of the sort in search is case sensitive */ #define GW_VALUE_APP_SEARCH_SORT_CASE_SENSITIVE_DEFAULT 0 /*! @define GW_VALUE_APP_SEARCH_COLUMN_AUTORESIZE The variable name for the autoresize column option */ #define GW_VALUE_APP_SEARCH_COLUMN_AUTORESIZE "GWhere.application.search.column.autoresize" /*! @define GW_VALUE_APP_SEARCH_COLUMN_AUTORESIZE_DEFAULT The default value of the autoresize column option */ #define GW_VALUE_APP_SEARCH_COLUMN_AUTORESIZE_DEFAULT 1 /*! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE The title column of the column Name */ #define GW_VALUE_APP_SEARCH_COLUMN_NAME_TITLE N_( "Name") /*! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_SHOW The variable name to if the column Name should be showed */ #define GW_VALUE_APP_SEARCH_COLUMN_NAME_SHOW "GWhere.application.search.column.name.show" /*! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_SIZE The variable name for the size the column Name */ #define GW_VALUE_APP_SEARCH_COLUMN_NAME_SIZE "GWhere.application.search.column.name.size" /*! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_SIZE_DEFAULT The default value of the size the column Name */ #define GW_VALUE_APP_SEARCH_COLUMN_NAME_SIZE_DEFAULT 200 /*! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION The variable name for the position of the column Name */ #define GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION "GWhere.application.search.column.name.position" /*! @define GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION_DEFAULT The default value of the postion of the column Name */ #define GW_VALUE_APP_SEARCH_COLUMN_NAME_POSITION_DEFAULT 0 /*! @define GW_VALUE_APP_SEARCH_COLUMN_RIGHTS_TITLE The title column of the column Rights */ #define GW_VALUE_APP_SEARCH_COLUMN_DISK_TITLE N_( "Disk") /*! @define GW_VALUE_APP_SEARCH_COLUMN_DISK_SHOW The variable name to if the column Disk should be showed */ #define GW_VALUE_APP_SEARCH_COLUMN_DISK_SHOW "GWhere.application.search.column.disk.show" /*! @define GW_VALUE_APP_SEARCH_COLUMN_DISK_SIZE The variable name for the size the column Disk */ #define GW_VALUE_APP_SEARCH_COLUMN_DISK_SIZE "GWhere.application.search.column.disk.size" /*! @define GW_VALUE_APP_SEARCH_COLUMN_DISK_SIZE_DEFAULT The default value of the size the column Disk */ #define GW_VALUE_APP_SEARCH_COLUMN_DISK_SIZE_DEFAULT 160 /*! @define GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION The variable name for the position of the column Disk */ #define GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION "GWhere.application.search.column.disk.position" /*! @define GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION_DEFAULT The default value of the position of the column Disk */ #define GW_VALUE_APP_SEARCH_COLUMN_DISK_POSITION_DEFAULT 1 /*! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE The title column of the column Path */ #define GW_VALUE_APP_SEARCH_COLUMN_PATH_TITLE N_( "Path") /*! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_SHOW The variable name to if the column Path should be showed */ #define GW_VALUE_APP_SEARCH_COLUMN_PATH_SHOW "GWhere.application.search.column.path.show" /*! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_SIZE The variable name for the size the column Path */ #define GW_VALUE_APP_SEARCH_COLUMN_PATH_SIZE "GWhere.application.search.column.path.size" /*! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_SIZE_DEFAULT The default value of the size the column Path */ #define GW_VALUE_APP_SEARCH_COLUMN_PATH_SIZE_DEFAULT 320 /*! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION The variable name for the position of the column Path */ #define GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION "GWhere.application.search.column.path.position" /*! @define GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION_DEFAULT The default value of the position of the column Path */ #define GW_VALUE_APP_SEARCH_COLUMN_PATH_POSITION_DEFAULT 2 /*! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE The title column of the column Size */ #define GW_VALUE_APP_SEARCH_COLUMN_SIZE_TITLE N_( "Size") /*! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_SHOW The variable name to if the column Size should be showed */ #define GW_VALUE_APP_SEARCH_COLUMN_SIZE_SHOW "GWhere.application.search.column.size.show" /*! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_SIZE The variable name for the size the column Size */ #define GW_VALUE_APP_SEARCH_COLUMN_SIZE_SIZE "GWhere.application.search.column.size.size" /*! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_SIZE_DEFAULT The default value of the size the column Size */ #define GW_VALUE_APP_SEARCH_COLUMN_SIZE_SIZE_DEFAULT 60 /*! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION The variable name for the position of the column Size */ #define GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION "GWhere.application.search.column.size.position" /*! @define GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION_DEFAULT The default value of the position of the column Size */ #define GW_VALUE_APP_SEARCH_COLUMN_SIZE_POSITION_DEFAULT 3 /*! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE The title column of the column Date */ #define GW_VALUE_APP_SEARCH_COLUMN_DATE_TITLE N_( "Date") /*! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_SHOW The variable name to if the column Date should be showed */ #define GW_VALUE_APP_SEARCH_COLUMN_DATE_SHOW "GWhere.application.search.column.date.show" /*! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_SIZE The variable name for the size the column Date */ #define GW_VALUE_APP_SEARCH_COLUMN_DATE_SIZE "GWhere.application.search.column.date.size" /*! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_SIZE_DEFAULT The default value of the size the column Date */ #define GW_VALUE_APP_SEARCH_COLUMN_DATE_SIZE_DEFAULT 120 /*! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION The variable name for the position of the column Date */ #define GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION "GWhere.application.search.column.date.position" /*! @define GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION_DEFAULT The default value of the position of the column Date */ #define GW_VALUE_APP_SEARCH_COLUMN_DATE_POSITION_DEFAULT 4 /*! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE The title column of the column Category */ #define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_TITLE N_( "Category") /*! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_SHOW The variable name to if the column Category should be showed */ #define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_SHOW "GWhere.application.search.column.category.show" /*! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_SIZE The variable name for the size the column Category */ #define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_SIZE "GWhere.application.search.column.category.size" /*! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_SIZE_DEFAULT The default value of the size the column Category */ #define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_SIZE_DEFAULT 60 /*! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION The variable name for the position of the column Category */ #define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION "GWhere.application.search.column.category.position" /*! @define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION_DEFAULT The default value of the position of the column Category */ #define GW_VALUE_APP_SEARCH_COLUMN_CATEGORY_POSITION_DEFAULT 5 /*! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE The title column of the column Description */ #define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_TITLE N_( "Description") /*! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_SHOW The variable name to if the column Description should be showed */ #define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_SHOW "GWhere.application.search.column.description.show" /*! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_SIZE The variable name for the size the column Description */ #define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_SIZE "GWhere.application.search.column.description.size" /*! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_SIZE_DEFAULT The default value of the size the column Description */ #define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_SIZE_DEFAULT 60 /*! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION The variable name for the position the column Description */ #define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION "GWhere.application.search.column.description.position" /*! @define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION_DEFAULT The default value of the position of the column Description */ #define GW_VALUE_APP_SEARCH_COLUMN_DESCRIPTION_POSITION_DEFAULT 6 /*! * @function gw_am_init * @abstract Initializes the application settings. * @discussion This function initializes the application settings. * @param filepath file path of the catalog to load * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_am_init ( gint argc, gchar *argv[]); /*! * @function gw_am_load_default_settings * @abstract Loads default settings. * @discussion This function loads default settings. * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_am_load_default_settings ( ); /*! * @function gw_am_can_send_mail * @abstract Checks if can send mails. * @discussion This function checks if can send mails. To * send mails, the user must configure mail * options in the settings. * @result Returns TRUE if can send mails.
* Returns FALSE if cannot send mails or * when an error occured. */ gboolean gw_am_can_send_mail ( ); /*! * @function gw_am_get_settings_tod * @abstract Gets the gfloat value of a setting. * @discussion This function gets the gfloat value of a setting. * @param name name of setting * @result the gfloat value of setting. */ gfloat gw_am_get_settings_tod ( const gchar *name); /*! * @function gw_am_get_settings_tol * @abstract Gets the gint value of a setting. * @discussion This function gets the gint value of a setting. * @param name name of setting * @result the gint value of setting. */ gint gw_am_get_settings_tol ( const gchar *name); /*! * @function gw_am_get_settings_tolx * @abstract Gets the gint value of a setting. * @discussion This function gets the gint value of a setting. * @param name name of setting * @param value the default value * @result the gint value of setting or the default value if * doesn't exist. */ gint gw_am_get_settings_tolx ( const gchar *name, const gint value); /*! * @function gw_am_get_settings_tob * @abstract Gets the gboolean value of a setting. * @discussion This function gets the gboolean value of a setting. * @param name name of setting * @result the gboolean value of setting. */ gboolean gw_am_get_settings_tob ( const gchar *name); /*! * @function gw_am_get_settings_tobx * @abstract Gets the gboolean value of a setting. * @discussion This function gets the gboolean value of a setting. * @param name name of setting * @param value the default value * @result the gboolean value of setting or the default value if * doesn't exist. */ gboolean gw_am_get_settings_tobx ( const gchar *name, const gboolean value); /*! * @function gw_am_get_settings * @abstract Gets the value of a setting. * @discussion This function gets the value of a setting. * @param name name of setting * @result the value of setting.
* Returns NULL when an error occured. */ gchar * gw_am_get_settings ( const gchar *name); /*! * @function gw_am_get_settings * @abstract Gets the value of a setting. * @discussion This function gets the value of a setting. * @param name name of setting * @param value value of setting * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_am_set_settings ( const gchar *name, gchar *value); /*! * @function gw_application_get_current_catalog * @abstract Gets the current opened catalog file informations. * @discussion This function gets the current opened catalog file informations. * @result the catalog file informations.
* Returns NULL when no catalog opened or when an error occured. */ struct catalog_file_info * gw_am_get_current_catalog ( void); /*! * @function gw_am_exit * @abstract Exits the application and processes to all savings. * @discussion This function exits the application and processes to all savings. * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_am_exit ( ); /*! * @function gw_am_send_mail * @abstract Sends an mail from the application. * @discussion This function sends an mail from the application. * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_am_send_mail ( GWMail *mail); /*! * @function gw_am_load_catalog * @abstract Loads a catalog in the application. * @discussion This function loads a catalog in the application. * @param filepath catalog file path * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_am_load_catalog ( const char *filepath); /*! * @function gw_am_save_catalog * @abstract Saves the current opened a catalog in the application. * @discussion This function saves the current opened a catalog in the application. * @param path the new file name to save the catalog * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_am_save_catalog ( const gchar *path); /*! * @function gw_am_close_catalog * @abstract Closes the current opened a catalog in the application. * @discussion This function closes the current opened a catalog in the application. * @param save TRUE if it should check if the catalog is modified before close it. * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_am_close_catalog ( gboolean save); /*! * @function gw_am_add_recent_file * @abstract Adds an entry to the recents opened catalog files list. * @discussion This function adds an entry to the recents opened catalog files list. * @param filepath file path to add * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_am_add_recent_file ( const gchar *filepath); /*! * @function gw_am_load_catalog_from_recents_files * @abstract Loads a catalog in the application from the recents files list. * @discussion This function loads a catalog in the application from the recents files list. * @param index position in the recents files list (start at 0) * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_am_load_catalog_from_recents_files ( const guint index); /*! * @function gw_am_get_catalog_path_name_from_recents_files * @abstract Gets the catalog path name in the application from the recents files list. * @discussion This function gets the catalog path name in the application from * the recents files list. It is a new allocated string (must be freed * with g_free()). * @param index position in the recents files list (start at 0) * @result the catalog path name.
* Returns NULL when an error occured. */ gchar * gw_am_get_catalog_path_name_from_recents_files ( const guint index); /*! * @function gw_am_log_msg * @abstract Logs a message. * @discussion This function logs a message. * @param level log level * @param file file where the log is invoked * @param function function where the log is invoked * @param line line where the log is invoked * @param msg message to log */ void gw_am_log_msg ( const gint level, const gchar *file, const gint line, const gchar *function, const gchar *msg, ...); /*! * @function gw_am_beep * @abstract Emits a short beep. * @discussion This function emits a short beep. */ void gw_am_beep ( ); /*! * @function gw_plugin_settings_explorer_disk_get_all_fields * @abstract Loads the list of all disk fields properties. * @discussion This function loads the list of all disk fields properties. * @result a table of fields properties, ended by NULL.
* Returns NULL when an error occured. */ GWSettingsExplorerField ** gw_plugin_settings_explorer_disk_get_all_fields ( void); /*! * @function gw_plugin_settings_explorer_file_get_all_fields * @abstract Loads the list of all file fields properties. * @discussion This function loads the list of all file fields properties. * @result a table of fields properties, ended by NULL.
* Returns NULL when an error occured. */ GWSettingsExplorerField ** gw_plugin_settings_explorer_file_get_all_fields ( void); /*! * @function gw_plugin_settings_search_get_all_fields * @abstract Loads the list of all search fields properties. * @discussion This function loads the list of all search fields properties. * @result a table of fields properties, ended by NULL.
* Returns NULL when an error occured. */ GWSettingsExplorerField ** gw_plugin_settings_search_get_all_fields ( void); void gw_am_set_current_catalog_context ( GWDBContext * context); GWDBContext * gw_am_get_current_catalog_context ( ); gint gw_am_import_catalog_from ( GWCatalogPlugin *oplugin, GWCatalogPlugin *iplugin, gchar *db_name, gchar *short_db_name); gint gw_am_export_catalog_to ( GWDBContext *context, GWCatalogPlugin *plugin, gchar *db_name, gchar *short_db_name); gint gw_am_new_catalog ( const gchar *name); #endif gwhere-0.2.3/src/gwcatalogmanager.c0000744000175000017500000007144110506316244015706 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gwsupport.h" #include "gwcatalogmanager.h" #if defined ( OS_CYGWIN) || defined ( OS_WIN32) /* A port for Cygwin OS, the GLib should be define this macro, but it doesn't work on my Cygwin OS */ #define NAME_MAX 255 #elif defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) /* For NAME_MAX and PATH_MAX */ #include #endif #include #include #include /* opendir */ #include /* opendir */ /* Notes that exist win32 implementation of these librairies. */ #if defined ( OS_LINUX) || defined ( OS_CYGWIN) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) #include #include #elif defined ( OS_WIN32) /* Should be used later with an external library (YAPL) #include */ #include #endif #include #include /* strtol strtoul strtoull */ #include /* perror */ #include /* strncmp */ #include /* To open and close files */ #include #include /* chdir readlink get_current_working_dir_name getcwd */ /* To catch any SIGSEGV restore memory */ #include /* signal */ #include /* setjmp longjmp */ #include "data/gwdata.h" #include "tools/gwtools.h" #include "res/gwres.h" #include "gui/gwgui.h" #include "gwhelper.h" #include "gwapplicationmanager.h" #include "gwpluginsmanager.h" #include "gwguimanager.h" #include "gwsupermount.h" jmp_buf env; void gw_cm_rollback_plugin_call ( int signum) { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "catch signum %d",signum); #endif longjmp ( env, 1); } gint gw_cm_load_file_node ( GtkCTree *ctree, GtkCTreeNode *parent, GWDBFile *file) { gint i = 0, cpt = 0; gchar *text[1]; GtkCTreeNode *node = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWCatalogPlugin *plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); GWDBFile **files = NULL; if ( gw_db_file_is_real_directory ( file) ) { g_strdup_to_gtk_text ( gw_db_file_get_name ( file), text[0]); node = gtk_ctree_insert_node ( ctree, parent, NULL, text, 5, PixFolder, MskFolder, PixOpenFolder, MskOpenFolder, FALSE, FALSE); gtk_ctree_node_set_row_data ( ctree, node, gw_db_file_get_ref ( file)); /* Loads folder */ if ( (files = plugin->gw_db_file_get_db_files ( context, gw_db_file_get_ref ( file))) != NULL) { for ( i = 0; files[i] != NULL; i++) { if ( gw_db_file_is_real_directory ( files[i])) { cpt++; gw_cm_load_file_node ( ctree, node, files[i]); } gw_db_file_free ( files[i]); } g_free ( files); } else {} if ( cpt==0 ) { if ( i == 0) { gtk_ctree_set_node_info ( ctree, node, text[0], 5, PixLockedFolder, MskLockedFolder, PixLockedFolder, MskLockedFolder, TRUE, FALSE); } else { gtk_ctree_set_node_info ( ctree, node, text[0], 5, PixFolder, MskFolder, PixOpenFolder, MskOpenFolder, TRUE, FALSE); } } else {} g_free ( text[0]); } else {} return cpt; } gint gw_cm_load_disk_node ( GtkCTree *ctree, GtkCTreeNode *parent, GWDBDisk *disk) { gchar *text[1]; GtkCTreeNode *node = NULL; GdkPixmap *pix = NULL; GdkBitmap *msk = NULL; GWDBFile **files = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWCatalogPlugin *plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context); int i = 0; /* Creates the disk node */ g_strdup_to_gtk_text ( gw_db_disk_get_name ( disk), text[0]); pix = gw_helper_db_disk_get_pixmap ( disk); msk = gw_helper_db_disk_get_bitmap ( disk); node = gtk_ctree_insert_node ( ctree, parent, NULL, text, 5, pix, msk, pix, msk, FALSE, FALSE); g_free ( text[0]); gtk_ctree_node_set_row_data ( ctree, node, gw_db_disk_get_ref ( disk)); /* Loads disk */ if ( (files = plugin->gw_db_disk_get_db_files ( context, gw_db_disk_get_ref ( disk))) != NULL) { for ( i = 0; files[i] != NULL; i++) { if ( gw_db_file_is_real_directory ( files[i])) { gw_cm_load_file_node ( ctree, node, files[i]); } else {} gw_db_file_free ( files[i]); } g_free ( files); } else {} return 0; } gint gw_cm_load ( GWDBContext *context) { gint result = -1; GtkCList *clist; gchar *tmp_text = NULL, *text_utf8 = NULL; gchar *text[1]; GWDBCatalog *catalog = NULL; GWDBDisk **disks = NULL; gint i = 0; GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); GtkCList *clist_info = gw_notebook_catalog_get_clist_explorer ( window); GtkCTree *ctree = gw_gui_manager_main_interface_get_tree ( ); GtkCTreeNode *root = gw_gui_manager_main_interface_get_tree_root ( ); GWCatalogPlugin *plugin = ((GWCatalogPlugin*)gw_db_context_get_plugin ( context)); gw_am_set_current_catalog_context ( context); catalog = plugin->gw_db_catalog_get_db_catalog ( context); /* Sets the new window title */ tmp_text = g_strconcat ( PROJECT_NAME, " - ", gw_helper_db_catalog_get_full_name ( catalog), NULL); g_strdup_to_gtk_text ( tmp_text, text_utf8); g_free ( tmp_text); gtk_window_set_title ( window, text_utf8); g_free ( text_utf8); /* Freezes the exploration tree */ clist = GTK_CLIST ( ctree); gtk_clist_freeze ( clist); gtk_clist_freeze ( clist_info); /* Creates catalog root node */ g_strdup_to_gtk_text ( gw_helper_db_catalog_get_usefull_name ( catalog), text[0]); root = gtk_ctree_insert_node ( ctree, NULL, NULL, text, 5, PixCatalog, MskCatalog, PixCatalog, MskCatalog, FALSE, TRUE); g_free ( text[0]); gw_gui_manager_main_interface_set_tree_root ( root); /* Loads all disks */ if ( (disks = ((GWCatalogPlugin*)gw_db_context_get_plugin ( context))->gw_db_catalog_get_db_disks ( context)) != NULL) { for ( i = 0; disks[i] != NULL; i++) { gw_cm_load_disk_node ( ctree, root, disks[i]); gw_db_disk_free ( disks[i]); } g_free ( disks); } else {} /* Loads all categories */ gw_notebook_managment_refresh_categories ( window); /* Refreshes the exploration tree */ root = gw_gui_manager_main_interface_get_tree_root ( ); gtk_ctree_sort_recursive ( ctree, root); gtk_ctree_select ( ctree, root); gtk_clist_thaw ( clist); gtk_clist_thaw ( clist_info); return result; } gint gw_cm_add_disk ( struct scan_disk_info *scan_disk) { gchar past_dir[512]; GWDBDisk * disk = NULL; gulong date; gchar *error_msg = NULL; struct vfs_stats *vfs = NULL; GWDBCategoryPK category = NULL; guint64 disk_size = G_GINT64_CONSTANT ( 0); GList *forbidden = NULL, *self = NULL, *current = NULL; gint i = 0; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWCatalogPlugin *plugin = ((GWCatalogPlugin*)gw_db_context_get_plugin ( context)); GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); GtkCList *clist_info = gw_notebook_catalog_get_clist_explorer ( window); GtkCTree *ctree = gw_gui_manager_main_interface_get_tree ( ); GtkCTreeNode *parent = gw_gui_manager_main_interface_get_tree_root ( ); #if GW_DEBUG_TIME time_t begin; time ( &begin); #endif #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif vfs = scan_disk_info_get_vfs ( scan_disk); category = scan_disk_info_get_disk_category_ref ( scan_disk); #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); vfs_stats_display ( vfs); #endif /* Creates disk node */ disk = gw_db_disk_new ( ); gw_db_disk_set_name ( disk, g_strdup ( scan_disk_info_get_disk_name ( scan_disk))); gw_db_disk_set_fsname ( disk, g_strdup ( vfs_stats_get_name ( vfs))); gw_db_disk_set_path ( disk, g_strdup ( vfs_stats_get_dir ( vfs))); gw_db_disk_set_num ( disk, scan_disk_info_get_disk_num_archive ( scan_disk)); if ( vfs_stats_get_type ( vfs) != NULL ) { gw_db_disk_set_fstype ( disk, g_strdup ( vfs_stats_get_type ( vfs))); } gw_db_disk_set_type ( disk, gw_helper_db_disk_get_db_type ( disk)); gw_db_disk_set_volume ( disk, g_strdup ( vfs_stats_get_label ( vfs))); disk_size = vfs_stats_get_total_used_space ( vfs); gw_db_disk_set_full ( disk, disk_size); disk_size = vfs_stats_get_total_free_space ( vfs); gw_db_disk_set_free ( disk, disk_size); gw_db_disk_set_date ( disk, time ( &date)); gw_db_disk_set_serial ( disk, g_strdup ( vfs_stats_get_serial_number ( vfs))); gw_db_disk_set_category ( disk, scan_disk_info_get_disk_category_ref ( scan_disk)); gw_db_disk_set_description ( disk, NULL); plugin->gw_db_catalog_add_db_disk ( context, disk); if ( scan_disk_info_get_explore_tree_structure ( scan_disk) == TRUE ) { /* Gets current folder */ if ( getcwd ( past_dir, 512) == NULL ) { error_msg = g_strconcat ( _( "Error : cannot get current folder."), "\n", strerror ( errno), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); plugin->gw_db_catalog_remove_db_disk ( context, gw_db_disk_get_ref ( disk)); gw_db_disk_free ( disk); return -1; } /* Builds the list of all the folders which must not be scanned. These forbidden folders are included mount point of the current disk to scan. */ forbidden = gw_get_drives_list ( forbidden); /* Removes the disk itself from the forbidden list. */ if ( (self = g_list_find_custom ( forbidden, gw_db_disk_get_path ( disk), (GCompareFunc)strcmp)) != NULL ) { g_free ( self->data); forbidden = g_list_remove_link ( forbidden, self); } /* Removes all the mount points which are not included in the current disk to scan. */ for ( i = 0; i < g_list_length ( forbidden); i++) { current = g_list_nth ( forbidden, i); /* Removes all mount points which are smaller or which start by the current disk to scan. */ if ( strlen ( current->data) < strlen ( gw_db_disk_get_path ( disk)) || strncmp ( gw_db_disk_get_path ( disk), current->data, strlen ( gw_db_disk_get_path ( disk)))!=0 ) { i--; g_free ( current->data); forbidden = g_list_remove_link ( forbidden, current); current = NULL; } } /* Interrupt all signals */ for ( i = 0; i < NSIG; i++) { if ( signal ( i, gw_cm_rollback_plugin_call) == SIG_ERR) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "signum %d interruption is not ready", i); #endif } else { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "signum %d interruption is ready", i); #endif } } /* Adds the new disk */ if ( gw_cm_add_dir ( scan_disk, vfs_stats_get_dir ( vfs), disk, NULL, &forbidden) == -1 ) { /* Remove the new disk */ plugin->gw_db_catalog_remove_db_disk ( context, gw_db_disk_get_ref ( disk)); gw_db_disk_free ( disk); /* Goes to the current application directory */ chdir ( past_dir); /* Frees the forbidden list. */ g_list_foreach ( forbidden, (GFunc)g_free, NULL); g_list_free ( forbidden); return -1; } /* Stop the signals interruption */ for ( i = 0; i < NSIG; i++) { if ( signal ( i, SIG_DFL) == SIG_ERR) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "signum %d interruption is not stopped", i); #endif } else { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "signum %d interruption is stopped", i); #endif } } /* Frees the forbidden list. */ g_list_foreach ( forbidden, (GFunc)g_free, NULL); g_list_free ( forbidden); /* Bug to fix : why we did it? size = dir_info_get_size ( dir_info); disk_info_set_full ( disk_info, size); */ /* Goes to the begining folder */ if ( chdir ( past_dir) == -1 ) { error_msg = g_strconcat ( _( "The disk has been added"), "\n", _( "Error : cannot go to working folder."), "\n", strerror ( errno), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); } } /* BUG : fix me please */ /* The total used space different from all files size. */ if ( !scan_disk_info_get_stop ( scan_disk) ) { scan_disk_info_get_scan_disk_set_current_statment ( scan_disk)( scan_disk_info_get_statment_controler ( scan_disk), (long double)vfs_stats_get_total_used_space ( vfs)); } /* Freezes the exploration tree */ gtk_clist_freeze ( GTK_CLIST ( ctree)); gtk_clist_freeze ( clist_info); gw_cm_load_disk_node ( ctree, parent, disk); gw_db_disk_free ( disk); gtk_ctree_sort_recursive ( ctree, parent); gtk_clist_thaw ( GTK_CLIST ( ctree)); gtk_clist_thaw ( clist_info); /* Refreshes the exploration tree */ gtk_ctree_collapse_recursive ( ctree, parent); gtk_ctree_expand ( ctree, parent); gtk_ctree_select ( ctree, parent); #if GW_DEBUG_TIME gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Elapsed time to load the catalog: %u secs\n", time ( NULL) - begin); #endif return 0; } gint gw_cm_add_dir ( struct scan_disk_info *scan_disk, gchar *directory, GWDBDisk *disk, GWDBFile *parent, GList **forbidden) { DIR *dir; struct dirent *f; struct stat f_info; #if defined ( OS_LINUX) || defined ( OS_CYGWIN) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) struct passwd *f_proprio; struct group *f_group; #endif guint ret; GWDBFile *file = NULL; gchar *info_description = NULL; #if defined ( OS_LINUX) || defined ( OS_CYGWIN) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) gchar buf[1024]; #endif gchar /**name = NULL,*/ *error_msg = NULL; GWDBCategoryPK category = NULL; char *ext = NULL; func_get_file_descr_t func_get_file_descr = NULL; func_get_files_descr_t func_get_files_descr = NULL; func_get_parent_descr_t func_get_parent_descr = NULL; gchar*** files_descr_list = NULL; int i = 0; #ifdef GW_DEBUG_MODE char *dir_name = NULL; #endif gchar *tmp = NULL; GList *self = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWCatalogPlugin *plugin = ((GWCatalogPlugin*)gw_db_context_get_plugin ( context)); #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "scan the folder : %s", directory); #endif if ( scan_disk_info_get_stop ( scan_disk) ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "stop scan disk."); #endif error_msg = g_strdup ( _( "The disk hasn't been added\nAdding canceled by user")); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; } category = scan_disk_info_get_disk_category_ref ( scan_disk); if ( chdir ( directory) == -1 ) { switch ( errno) { case EACCES : /* Folder is locked */ return 0; case EFAULT: error_msg = g_strconcat ( _( "The disk hasn't been added\n"), g_strdup_printf ( _( "%s outside the process's allocated address space."), directory), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; case ENAMETOOLONG:error_msg = g_strconcat ( _( "The disk hasn't been added\n"), g_strdup_printf ( _( "A component of the following pathname exceeded %d characters, or an entire path name exceeded %d characters : %s."), NAME_MAX, PATH_MAX, directory), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; case ENOENT: error_msg = g_strconcat ( _( "The disk hasn't been added\n"), g_strdup_printf ( _( "The following directory does not exist : %s."), directory), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; case ENOMEM: error_msg = g_strconcat ( _( "The disk hasn't been added\n"), _( "Insufficient memory to complete the operation."), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; case ENOTDIR: error_msg = g_strconcat ( _( "The disk hasn't been added\n"), g_strdup_printf ( _( "A component of the path prefix is not a directory : %s."), directory), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; #if defined ( OS_LINUX) || defined ( OS_CYGWIN) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) case ELOOP: error_msg = g_strconcat ( _( "The disk hasn't been added\n"), g_strdup_printf ( _( "Too many symbolic links were encountered in resolving following path : %s."), directory), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; #endif case EIO: error_msg = g_strconcat ( _( "The disk hasn't been added\n"), g_strdup_printf ( _( "An I/O error occurred when change directory to : %s."), directory), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; default: error_msg = g_strconcat ( _( "The disk hasn't been added\n"), _( "Unknown error"), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; } } #ifdef GW_DEBUG_MODE dir_name = getcwd ( NULL, -1); #endif /* Check if the current folder is a forbidden folder. In this case must not scan this one. */ tmp = (gchar*)g_malloc ( 1025 * sizeof ( gchar)); tmp = getcwd ( tmp, 1024); if ( (self = g_list_find_custom ( *forbidden, tmp, (GCompareFunc)strcmp)) != NULL ) { /* If the current folder is forbidden, removesit from the forbidden list because it will not be encountered at time. */ g_free ( self->data); *forbidden = g_list_remove_link ( *forbidden, self); if (tmp!=NULL) g_free ( tmp); tmp = NULL; if ( chdir ( "..") == -1 ) { error_msg = g_strdup ( _( "The disk hasn't been added\nError : cannot go to parent folder.")); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; } return 0; } if (tmp!=NULL) g_free ( tmp); tmp = NULL; if ( ( dir = opendir ( ".")) == NULL ) { switch ( errno ) { case EACCES : /* Folder is locked */ return 0; case EMFILE: error_msg = g_strconcat ( _( "The disk hasn't been added\n"), _( "Too many file descriptors in use by process."), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; case ENFILE: error_msg = g_strconcat ( _( "The disk hasn't been added\n"), _( "Too many files are currently open in the system."), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; case ENOENT: error_msg = g_strconcat ( _( "The disk hasn't been added\n"), (tmp = g_strdup_printf ( _( "The following directory does not exist, or name is an empty string : %s."), directory)), NULL); g_free ( tmp); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; case ENOMEM: error_msg = g_strconcat ( _( "The disk hasn't been added\n"), _( "Insufficient memory to complete the operation."), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; case ENOTDIR: error_msg = g_strconcat ( _( "The disk hasn't been added\n"), (tmp = g_strdup_printf ( _( "The following directory name is not a directory : %s."), directory)), NULL); g_free ( tmp); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; default: error_msg = g_strconcat ( _( "The disk hasn't been added\n"), _( "Unknown error"), NULL); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; } } while ( (f = readdir ( dir)) != NULL ) { #if defined ( OS_WIN32) || defined ( OS_CYGWIN) /* Skips this system folder. It's an unscanable folder. */ if ( (parent == NULL) && ( (strcmp ( f->d_name, "System Volume Information") == 0) || (strcmp ( f->d_name, "RECYCLER") == 0) ) ) { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "warning encounter %s%s%s", dir_name, G_DIR_SEPARATOR_S, file->d_name); #endif continue; } #endif #if defined ( OS_WIN32) if ( (ret = stat ( f->d_name, &f_info)) == -1 ) { #else if ( (ret = lstat ( f->d_name, &f_info)) == -1 ) { #endif continue; } else { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "add %s%s%s", dir_name, G_DIR_SEPARATOR_S, f->d_name); #endif file = gw_db_file_new ( ); /* File name */ gw_db_file_set_name ( file, g_strdup ( f->d_name)); /* File rights */ gw_db_file_set_rights ( file, f_info.st_mode); switch ( S_IFMT & f_info.st_mode ) { #if defined ( OS_LINUX) || defined ( OS_CYGWIN) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) case S_IFLNK: memset ( buf, '\0', 1024); #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "current link is %s/%s", directory, f->d_name); #endif //FIXME With not use G_DIR_SEPARATOR?!? if ( readlink ( (tmp = g_strconcat ( directory, "/", f->d_name, NULL)), buf, 1023) != -1 ) { if ( tmp != NULL ) { g_free ( tmp); tmp = NULL; } gw_db_file_set_name ( file, g_strconcat ( f->d_name, " -> ", buf, NULL)); } break; #endif case S_IFDIR: break; default: break; } #if defined ( OS_LINUX) || defined ( OS_CYGWIN) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) /* Owner file */ f_proprio = getpwuid ( f_info.st_uid); if ( f_proprio != NULL ) { gw_db_file_set_owner ( file, g_strdup ( f_proprio->pw_name)); } #endif #if defined ( OS_LINUX) || defined ( OS_CYGWIN) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) /* Owner group file */ f_group = getgrgid ( f_info.st_gid); if ( f_group != NULL ) { gw_db_file_set_group ( file, g_strdup ( f_group->gr_name)); } #endif /* File size */ gw_db_file_set_size ( file, f_info.st_size); if ( !scan_disk_info_get_stop ( scan_disk) ) { /* What it is the real size, f_info.st_size or f_info.st_blksize * f_info.st_blocks? */ scan_disk_info_get_scan_disk_set_current_statment ( scan_disk)( scan_disk_info_get_statment_controler ( scan_disk), f_info.st_size); } /* File inode */ gw_db_file_set_inode ( file, f_info.st_ino); /* Creation file date */ gw_db_file_set_cdate ( file, f_info.st_ctime); /* Last file access date */ gw_db_file_set_adate ( file, f_info.st_atime); /* Last file modification date */ gw_db_file_set_mdate ( file, f_info.st_mtime); /* Category file */ gw_db_file_set_category ( file, category); info_description = NULL; if ( gw_db_file_is_real_file ( file) && gw_db_file_get_size( file) > 0 && scan_disk_info_get_make_description ( scan_disk)) { if ( setjmp ( env) == 0 ) { ext = strrchr ( f->d_name, '.'); if ( ext != NULL ) { ext++; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "extension is %s", ext); #endif gw_pm_get_file_descr_func ( ext, &func_get_file_descr); if ( func_get_file_descr != NULL) { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "start plugin for file description"); #endif info_description = func_get_file_descr ( f->d_name, NULL); } else { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "no plugin for file description"); #endif } } gw_pm_get_parent_descr_func ( f->d_name, &func_get_parent_descr); if ( func_get_parent_descr != NULL) { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "start plugin for parent description"); #endif if ( (parent != NULL) && ((gw_db_file_get_description ( parent) == NULL) || (strlen ( gw_db_file_get_description ( parent)) == 0)) ) { gw_db_file_set_description ( parent, func_get_parent_descr ( f->d_name, NULL)); } } else { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "no plugin for parent description"); #endif } gw_pm_get_files_descr_func ( f->d_name, &func_get_files_descr); if ( func_get_files_descr != NULL) { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "start plugin for files description"); #endif if ( files_descr_list == NULL ) { files_descr_list = func_get_files_descr ( f->d_name, NULL); } else { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "warning!! There is already files description list"); #endif } } else { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "no plugin for files description"); #endif } } else { /* An critical error occured, should exit GWhere proprely */ tmp = (gchar*)g_malloc ( 1025 * sizeof ( gchar)); memset ( tmp, '\0', 1025); tmp = getcwd ( tmp, 1024); if ( tmp == NULL) { tmp = g_strdup_printf ( "...%s%s", G_DIR_SEPARATOR_S, directory); } error_msg = g_strdup_printf ( _( "A critical error occured when extracting file information of %s%s%s.\nSave your catalog if it is possible, exit GWhere and report this trouble to the GWhere project team please."), tmp, G_DIR_SEPARATOR_S, f->d_name); if ( tmp != NULL) { g_free ( tmp); tmp = NULL; } scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; } } /* Description file */ gw_db_file_set_description ( file, info_description); /* Adds the file to the catalog */ if ( parent == NULL) { plugin->gw_db_disk_add_db_file ( context, gw_db_disk_get_ref ( disk), file); } else { plugin->gw_db_file_add_db_file ( context, gw_db_file_get_ref ( parent), file); } if ( gw_db_file_is_directory ( file) == TRUE ) { /* Case : is a folder */ ret = 0; if ( gw_db_file_is_real_directory ( file) ) { if ( gw_cm_add_dir ( scan_disk, f->d_name, disk, file, forbidden) == -1 ) { gw_db_file_free ( file); return -1; } if ( parent != NULL) { /* Increase the parent folder size*/ gw_db_file_set_size ( parent, gw_db_file_get_size ( file) + gw_db_file_get_size ( parent)); plugin->gw_db_file_update ( context, file); } else { } } else { } } else { if ( parent != NULL) { /* Increase the parent folder size*/ gw_db_file_set_size ( parent, gw_db_file_get_size ( file) + gw_db_file_get_size ( parent)); plugin->gw_db_file_update ( context, file); } else { } } //TODO optimize it with recycling gw_db_file_free ( file); } } //TODO add this feature if ( files_descr_list != NULL ) { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "set all files description..."); #endif for ( i = 0; files_descr_list[i] != NULL; i++) { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "set file description number %d", i); gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "chearching file named %s", files_descr_list[i][0]); #endif if ( parent != NULL ) { file = plugin->gw_db_file_get_db_file_by_name ( context, gw_db_file_get_ref ( parent), files_descr_list[i][0]); } else { file = plugin->gw_db_disk_get_db_file_by_name ( context, gw_db_disk_get_ref ( disk), files_descr_list[i][0]); } if ( file != NULL && (gw_db_file_get_description ( file) == NULL || strlen ( gw_db_file_get_description ( file)) == 0)) { gw_db_file_set_description ( file, files_descr_list[i][1]); plugin->gw_db_file_update ( context, file); } else { g_free ( files_descr_list[i][1]); } if ( files_descr_list[i][0] != NULL ) { /* TODO : to remove or not ? */ g_free ( files_descr_list[i][0]); } /* TODO : to remove or not ? */ g_free ( files_descr_list[i]); } g_free ( files_descr_list); files_descr_list = NULL; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "all files description are setted"); #endif } #ifdef GW_DEBUG_MODE free ( dir_name); #endif if ( closedir ( dir) == -1 ) { error_msg = g_strdup ( _( "The disk hasn't been added\nError : cannot close current folder.")); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; } if ( chdir ( "..") == -1 ) { error_msg = g_strdup ( _( "The disk hasn't been added\nError : cannot go to parent folder.")); scan_disk_info_set_error_msg ( scan_disk, error_msg); return -1; } return 0; } void gw_cm_catalog_copy_folder ( GWDBContext *ictx, GWDBContext *octx, GWDBFilePK ifolder, GWDBFilePK ofolder) { GWCatalogPlugin *op = NULL; GWCatalogPlugin *ip = NULL; GWDBFile **files = NULL; GWDBFilePK ifilePK = NULL; GWDBFilePK ofilePK = NULL; gint i = 0; ip = gw_db_context_get_plugin ( ictx); op = gw_db_context_get_plugin ( octx); if ( (files = ip->gw_db_file_get_db_files ( ictx, ifolder)) != NULL) { for ( i = 0; files[i]!=NULL; i++) { ifilePK = gw_db_file_get_ref ( files[i]); ofilePK = op->gw_db_file_add_db_file ( octx, ofolder, files[i]); gw_cm_catalog_copy_folder ( ictx, octx, ifilePK, ofilePK); gw_db_file_free ( files[i]); } g_free ( files); } } gwhere-0.2.3/src/gwcatalogmanager.h0000744000175000017500000003676410223033710015712 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwcatalogmanager.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.
* It's a tool to load/save from/to a file formated to the GWhere file format.
* Goto to specification for file format specifications.

* Catalogs are compressed this the zlib.
* @abstract This is the catalog loader component. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @see gwdata.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwcatalogmanager.c * @author Author * @author Luis PARRAVICINI : zlib patch */ #ifndef GW_CATALOG_MANAGER_H #define GW_CATALOG_MANAGER_H #include #include "data/gwdata.h" #include "gwpluginsmanager.h" GWDBContext * current_catalog_context; gint gw_cm_load ( /*GWCatalogPlugin *plugin,*/ GWDBContext *context); gint gw_cm_add_disk ( struct scan_disk_info *scan_disk); gint gw_cm_add_dir ( struct scan_disk_info *scan_disk, gchar *directory, GWDBDisk *disk, GWDBFile *parent, GList **forbidden); /*! * @function catalog_load_file * @abstract Loads a catalog file. * @discussion This function creates the catalog's tree from a GWhere format file. * @param catalog_info the catalog's datas * @param ctree the tree where catalog will be loaded * @param parent the node in the tree where is the catalog root * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ //gint catalog_load_file ( struct catalog_file_info *catalog_info, GtkCTree *ctree, GtkCTreeNode *parent); /*! * @function catalog_load_file_version_1 * @abstract Loads a catalog file. * @discussion This function creates the catalog's tree from a GWhere format file from a file formated with file version 1.
* Goto to specification for file format specifications.
* @param catalog_info the catalog's datas * @param fic the file source descriptor * @param ctree the tree where catalog will be loaded * @param parent the node in the tree where is the catalog root * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ //gint catalog_load_file_version_1 ( struct catalog_file_info *catalog_info, gzFile fic, GtkCTree *ctree, GtkCTreeNode *parent); /*! * @function catalog_load_file_version_2 * @abstract Loads a catalog file. * @discussion This function creates the catalog's tree from a GWhere format file from a file formated with file version 2.
* Goto to specification for file format specifications.
* @param catalog_info the catalog's datas * @param fic the file source descriptor * @param ctree the tree where catalog will be loaded * @param parent the node in the tree where is the catalog root * @param sb the used string buffer to read catalog file * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ //gint catalog_load_file_version_2 ( struct catalog_file_info *catalog_info, gzFile fic, GtkCTree *ctree, GtkCTreeNode *parent, GWStringBuffer *sb); /*! * @function catalog_load_disk_1 * @abstract Loads a disk from catalog file. * @discussion This function loads a disk to the catalog's tree from a GWhere format file from a file formated with file version 1.
* Goto to specification for file format specifications.
* @param fic the file source descriptor * @param ctree the tree where disk will be loaded * @param parent the node in the tree where is the catalog root * @result returns the number under directories.
*/ //gint catalog_load_disk_1 ( gzFile fic, GtkCTree *ctree, GtkCTreeNode *parent); /*! * @function catalog_load_disk_2 * @abstract Loads a disk from catalog file. * @discussion This function loads a disk to the catalog's tree from a GWhere format file from a file formated with file version 2.
* Goto to specification for file format specifications.
* @param fic the file source descriptor * @param ctree the tree where disk will be loaded * @param parent the node in the tree where is the catalog root * @param sb the string buffer used to read the catalog file * @result returns the number under directories.
*/ //gint catalog_load_disk_2 ( gzFile fic, GtkCTree *ctree, GtkCTreeNode *parent, GWStringBuffer *sb); /*! * @function catalog_load_dir_1 * @abstract Loads a directory from catalog file. * @discussion This function loads a directory to the catalog's tree from a GWhere format file from a file formated with file version 1.
* Goto to specification for file format specifications.
* @param fic the file source descriptor * @param ctree the tree where directory will be loaded * @param parent the node in the tree where is the parent directory is * @result returns the number under directories.
*/ //gint catalog_load_dir_1 ( gzFile fic, GtkCTree *ctree, GtkCTreeNode *parent); /*! * @function catalog_load_dir_2 * @abstract Loads a directory from catalog file. * @discussion This function loads a directory to the catalog's tree from a GWhere format file from a file formated with file version 2.
* Goto to specification for file format specifications.
* @param fic the file source descriptor * @param ctree the tree where directory will be loaded * @param parent the node in the tree where is the parent directory is * @param sb the string buffer used to read the catalog file * @result returns the number under directories.
*/ //gint catalog_load_dir_2 ( gzFile fic, GtkCTree *ctree, GtkCTreeNode *parent, GWStringBuffer *sb); /*! * @function catalog_add_disk * @abstract This function adds a disk to the catalog. * @discussion This function adds a disk to the catalog's tree.
* @param scan_disk the ScanDiskInfo to scan * @param ctree the tree where the disk will be added * @param parent the node in the tree where is the catalog root * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ //gint catalog_add_disk ( struct scan_disk_info *scan_disk, GtkCTree *ctree, GtkCTreeNode *parent); /*! * @function catalog_add_dir * @abstract This function adds a directory to the catalog. * @discussion This function adds a directory to the catalog's tree.
* @param scan_disk the scan disk * @param directory the directory name to add * @param dir_info the directory informations * @param ctree the tree where the disk will be added * @param parent the node in the tree where is the catalog root * @param forbidden the list of forbidden directory to not scan * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ //gint catalog_add_dir ( struct scan_disk_info *scan_disk, gchar *directory, struct dir_info *dir_info, GtkCTree *ctree, GtkCTreeNode *parent, GList **forbidden); /*! * @function catalog_save_file * @abstract Saves a catalog to a file. * @discussion This function saves the catalog's tree to a GWhere format file. * @param file the file name to save * @param ctree the tree where catalog will be loaded * @param parent the node in the tree where is the catalog root * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ //gint catalog_save_file ( gchar *file, GtkCTree *ctree, GtkCTreeNode *parent); /*! * @function catalog_save_file_version_1 * @abstract Saves a catalog to a file. * @discussion This function saves the catalog's tree to a GWhere format file from a file formated with file version 1.
* @param file the file name to save * @param ctree the tree where catalog will be loaded * @param parent the node in the tree where is the catalog root * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ //gint catalog_save_file_version_1 ( gchar *file, GtkCTree *ctree, GtkCTreeNode *parent); /*! * @function catalog_save_file_version_2 * @abstract Saves a catalog to a file. * @discussion This function saves the catalog's tree to a GWhere format file from a file formated with file version 2.
* @param file the file name to save * @param ctree the tree where catalog will be loaded * @param parent the node in the tree where is the catalog root * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ //gint catalog_save_file_version_2 ( gchar *file, GtkCTree *ctree, GtkCTreeNode *parent); /*! * @function catalog_save_file_disk_1 * @abstract Saves a disk to a file. * @discussion This function saves the disk in the catalog's tree to a GWhere format file from a file formated with file version 1.
* @param file the file name to save * @param ctree the tree where catalog will be loaded * @param parent the node in the tree where is the catalog root * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ //gint catalog_save_file_disk_1 ( gint fic, GtkCTree *ctree, GtkCTreeNode *parent); /*! * @function catalog_save_file_disk_2 * @abstract Saves a disk to a file. * @discussion This function saves the disk in the catalog's tree to a GWhere format file from a file formated with file version 2.
* @param file the file name to save * @param ctree the tree where catalog will be loaded * @param parent the node in the tree where is the catalog root * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ //gint catalog_save_file_disk_2 ( gint fic, GtkCTree *ctree, GtkCTreeNode *parent); /*! * @function catalog_save_file_dir_1 * @abstract Saves a directory to a file. * @discussion This function saves the directory in the catalog's tree to a GWhere format file from a file formated with file version 1.
* @param file the file name to save * @param ctree the tree where catalog will be loaded * @param parent the node in the tree where is the catalog root * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ //gint catalog_save_file_dir_1 ( gint fic, GtkCTree *ctree, GtkCTreeNode *parent); /*! * @function catalog_save_file_dir_2 * @abstract Saves a directory to a file. * @discussion This function saves the directory in the catalog's tree to a GWhere format file from a file formated with file version 2.
* @param file the file name to save * @param ctree the tree where catalog will be loaded * @param parent the node in the tree where is the catalog root * @param buf the used string buffer to encode all string to file format * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ //gint catalog_save_file_dir_2 ( gzFile fic, GtkCTree *ctree, GtkCTreeNode *parent, GWStringBuffer *buf[2]); /*! * @function catalog_ctree_data_free * @abstract Frees all data's ctree. * @discussion This function frees all datas allocated for the ctree. These datas are attached to each node of the catalog's tree in order to list all files.
* @param p the list of datas * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint catalog_ctree_data_free ( GList *p); /*! * @function catalog_disk_info_new_from_table * @abstract Creates a new disk information from a catalog file. * @discussion This function creates a new disk information from table readed in a catalog file and from a file version. It's an allocation function. * @param attrib the table of attributes * @param file_version the number of file version * @result a pointer to the disk information structure.
*/ //struct disk_info * catalog_disk_info_new_from_table ( gchar **attrib, gint file_version); /*! * @function catalog_disk_info_new_from_str * @abstract Creates a new disk information from a catalog file. * @discussion This function creates a new disk information from string readed in a catalog file and from a file version. It's an allocation function. * @param str the string of attributes * @param file_version the number of file version * @param catalog_info the catalog which contains some needed categories * @result a pointer to the disk information structure.
*/ //struct disk_info * catalog_disk_info_new_from_str ( gchar *str, gint file_version, struct catalog_file_info *catalog_info); /*! * @function catalog_disk_info_to_file * @abstract Makes a string to save disk informations. * @discussion This function makes a formated string to save disk informations in a file. * @param p the disk informations to save * @param file_version the file version to save disk informations * @result the string to save.
* Returns null when an error occured.
*/ //gchar * catalog_disk_info_to_file ( struct disk_info *p, gint file_version); /*! * @function catalog_file_info_new_from_table * @abstract Creates a new file information from a catalog file. * @discussion This function creates a new file information from table readed in a catalog file and from a file version. It's an allocation function. * @param attrib the table of attributes * @param folder indicates if this is a folder * @param file_version the number of file version * @param catalog_info the catalog which contains some needed categories * @result a pointer to the file information structure.
*/ //struct file_info * catalog_file_info_new_from_table ( gchar **attrib, gboolean folder, gint file_version); /*! * @function catalog_file_info_new_from_str * @abstract Creates a new file information from a catalog file. * @discussion This function creates a new file information from a string readed in a catalog file and from a file version. It's an allocation function. * @param str the string of attributes * @param file_version the number of file version * @param catalog_info the catalog which contains some needed categories * @result a pointer to the file information structure.
*/ //struct file_info * catalog_file_info_new_from_str ( gchar *str, gint file_version, struct catalog_file_info *catalog_info); /*! * @function catalog_file_info_to_file * @abstract Makes a string to save file informations. * @discussion This function makes a formated string to save file informations in a file. * @param p the file informations to save * @param file_version the file version to save file informations * @result the string to save.
* Returns null when an error occured.
*/ //gchar * catalog_file_info_to_file ( struct file_info *p, gint file_version); void gw_cm_catalog_copy_folder ( GWDBContext *ictx, GWDBContext *octx, GWDBFilePK ifolder, GWDBFilePK ofolder); #endif gwhere-0.2.3/src/gwhelper.h0000744000175000017500000003325610243231147014223 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwhelper.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.
* It's a tool to work on the catalog tree.
* @abstract This is the catalog tree tool. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwhelper.c * @author Author */ #ifndef GW_HELPER_H #define GW_HELPER_H #include "data/gwdata.h" #include "db/gwdb.h" #include "gwpluginsmanager.h" /*! * @function gw_catalog_get_total_disks * @abstract Gets the number of disks in the catalog. * @discussion This function gets the number of disks in the catalog tree. * @param ctree the tree where is the catalog * @param node the node in the tree where is the catalog root * @result the number of disks.
* Returns -1 when an error occured. */ gint gw_catalog_get_total_disks ( GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_catalog_get_total_folders * @abstract Gets the number of folders in the catalog. * @discussion This function gets the number of folders in the catalog tree. * It's the number of all folders (and subfolders). * @param ctree the tree where is the catalog * @param node the node in the tree where is the catalog root * @result the number of folders.
* Returns -1 when an error occured. */ gint gw_catalog_get_total_folders ( GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_catalog_get_total_files * @abstract Gets the number of files in the catalog. * @discussion This function gets the number of files in the catalog tree. * It's the number of files in all folders (and subfolders). * @param ctree the tree where is the catalog * @param node the node in the tree where is the catalog root * @result the number of files.
* Returns -1 when an error occured. */ //gint gw_catalog_get_total_files ( GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_catalog_get_total_capacity * @abstract Gets the total capacity of the catalog. * @discussion This function gets the total capacity of the catalog. This * capacity is based on each capacity disk. * @param ctree the tree where is the catalog * @param node the node in the tree where is the catalog root * @result the total capacity of catalog.
* Returns -1 when an error occured. */ //long double gw_catalog_get_total_capacity ( GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_catalog_get_total_used_space * @abstract Gets the total used space of the catalog. * @discussion This function gets the total used space of the catalog. This * capacity is based on used space of each disk. * @param ctree the tree where is the catalog * @param node the node in the tree where is the catalog root * @result the total used space of catalog.
* Returns -1 when an error occured. */ //long double gw_catalog_get_total_used_space ( GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_catalog_get_total_free_space * @abstract Gets the total free space of the catalog. * @discussion This function gets the total free space of the catalog. This * capacity is based on free space of each disk. * @param ctree the tree where is the catalog * @param node the node in the tree where is the catalog root * @result the total free space of catalog.
* Returns -1 when an error occured. */ //long double gw_catalog_get_total_free_space ( GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_catalog_get_num_disk_with_type * @abstract Gets the number of disks of one type. * @discussion This function gets the number of disks of one type.
* "Other" is the type for all other unreconized disk type.
* Warning : this function is too CRAZY!! To used even if * you know what you do. * @param ctree the tree where is the catalog * @param node the node in the tree where is the catalog root * @param type the disk type to select * @result the number of disks of this type.
* Returns -1 when an error occured. */ //gint gw_catalog_get_num_disk_with_type ( GtkCTree *ctree, GtkCTreeNode *node, gchar *type); /*! * @function gw_disk_get_total_folders * @abstract Gets the number of folders in the disk. * @discussion This function gets the number of folders in the disk in the * catalog tree. It's the number of all folders (and subfolders). * @param ctree the tree where is the catalog * @param node the node in the tree where is the disk root * @result the number of folders.
* Returns -1 when an error occured. */ gint gw_disk_get_total_folders ( GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_disk_get_total_files * @abstract Gets the number of files in the disk. * @discussion This function gets the number of files in the disk in the catalog * tree. It's the number of files in all folders (and subfolders). * @param ctree the tree where is the catalog * @param node the node in the tree where is the disk root * @result the number of files.
* Returns -1 when an error occured. */ //gint gw_disk_get_total_files ( GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_disk_get_max_num * @abstract Gets the number of files in the disk. * @discussion This function gets the biggest disk number archive. * @param ctree the tree where is the catalog * @param node the node in the tree where is the catalog root * @result the max number archive disk.
* Returns -1 when an error occured. */ //gint gw_disk_get_max_num ( GtkCTree *ctree, GtkCTreeNode *root); /*! * @function gw_disk_name_is_exist * @abstract Gets if the disk name exist * @discussion This function gets if the disk name is allready used by another disk. * Warning : in future new parameters => GtkCTree, GtkCTreeNode!! * @param name the disk name * @result is exist or no.
* Returns FALSE when an error occured. */ //gboolean gw_disk_name_is_exist ( gchar *name); /*! * @function gw_disk_num_is_exist * @abstract Gets if the disk number archive exist * @discussion This function gets if the disk number archive is allready used by another disk. * Warning : in future new parameters => GtkCTree, GtkCTreeNode!! * @param name the disk number archive * @result is exist or no.
* Returns FALSE when an error occured. */ //gboolean gw_disk_num_is_exist ( gint num); /*! * @function gw_folder_get_catalog * @abstract Gets the catalog of the folder * @discussion This function gets the catalog of the folder. * @param ctree the tree where is the catalog * @param node the node in the tree where is the folder * @result the node in the tree where is the catalog root. */ GtkCTreeNode * gw_folder_get_catalog ( GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_folder_get_disk * @abstract Gets the disk of the folder * @discussion This function gets the disk of the folder. * @param ctree the tree where is the catalog * @param node the node in the tree where is the folder * @result the node in the tree where is the disk root.
* Returns NULL when an error occured. */ GtkCTreeNode * gw_folder_get_disk ( GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_folder_get_disk_name * @abstract Gets the disk name of the folder * @discussion This function gets the disk name of the folder. * @param ctree the tree where is the catalog * @param node the node in the tree where is the folder * @result the disk name. Must be freed with g_free().
* Returns NULL when an error occured. */ //gchar * gw_folder_get_disk_name ( GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_folder_get_disk_type * @abstract Gets the disk type of the folder * @discussion This function gets the disk type of the folder. * @param ctree the tree where is the catalog * @param node the node in the tree where is the folder * @result the disk type. Must be freed with g_free().
* Returns NULL when an error occured. */ //gchar * gw_folder_get_disk_type ( GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_folder_get_location_on_disk * @abstract Gets the folder location on the disk * @discussion This function gets the folder location on the disk. * @param ctree the tree where is the catalog * @param node the node in the tree where is the folder * @result the full location of the folder. Must be freed with g_free().
* Returns NULL when an error occured. */ //gchar * gw_folder_get_location_on_disk ( GtkCTree *ctree, GtkCTreeNode *node); /*! * @function gw_disk_get_num_archive * @abstract Checks if the disk number archive is valid * @discussion This function checks if the disk number archive is valid. In order to be valid * the number archive must be unique. If is not valid the function generates a valid * number archive. This new number archive is not an allready used number archive. * It's calculed with : gw_disk_get_max_num + 1.
* If the archive number is valid the function returns this number. * @param num the number archive * @result a valid number archive.
* Returns -1 when an error occured. */ //gint gw_disk_get_num_archive ( gchar *num); /*! * @function gw_disk_get_name * @abstract Checks if the disk name is valid * @discussion This function checks if the disk name is valid. In order to be valid * the name must be unique. If is not valid the function generates a valid * name. This new name is not an allready used name. * It's calculed with : "name ( i)" (where i is an incremental number).
* If the name is valid the function returns this name. * @param num the name * @result a valid name. Must be freed with g_free().
* Returns NULL when an error occured. */ //gchar * gw_disk_get_name ( gchar *name); /*! * @function gw_folder_name_is_exist * @abstract Gets if the folder name exist * @discussion This function gets if the folder name is already used by another folder * or file (in the same parent folder). * Warning : in future new parameters => GtkCTree, GtkCTreeNode!! * @param name the folder name * @result is exist or no.
* Returns FALSE when an error occured. */ //gboolean gw_folder_name_is_exist ( GtkCTreeNode *folder, gchar *name); gboolean gw_helper_db_catalog_is_open ( ); gboolean gw_helper_db_catalog_is_open_and_modified ( ); gchar * gw_helper_db_catalog_get_usefull_name ( GWDBCatalog *catalog); gchar * gw_helper_db_catalog_get_full_name ( GWDBCatalog *catalog); gboolean gw_helper_db_catalog_is_new ( GWDBCatalog *catalog); GdkPixmap * gw_helper_db_disk_get_pixmap ( GWDBDisk *disk); GdkBitmap * gw_helper_db_disk_get_bitmap ( GWDBDisk *disk); GWDBDiskType gw_helper_db_disk_get_db_type ( GWDBDisk *disk); gint gw_helper_db_catalog_get_nb_db_disk_of_type ( GWDBContext *context, GWDBDiskType type); gboolean gw_helper_db_disk_num_is_exist ( GWDBContext *context, gint num); gint gw_helper_db_disk_get_max_num ( GWDBContext *context); gint gw_helper_db_disk_get_num_archive ( GWDBContext *context, gchar *num); gboolean gw_helper_db_disk_name_is_exist ( GWDBContext *context, gchar *name); gchar * gw_helper_db_disk_get_name ( GWDBContext *context, gchar *name); gboolean gw_helper_db_file_name_is_exist ( GWDBContext *context, GWDBFilePK file, gchar *name); guint64 gw_helper_plugin_db_catalog_get_capacity ( GWDBContext *context); guint64 gw_helper_plugin_db_catalog_get_full ( GWDBContext *context); guint64 gw_helper_plugin_db_catalog_get_free ( GWDBContext *context); GWDBCategory * gw_helper_plugin_db_catalog_get_db_category_by_index ( GWDBContext *context, gint index); GWDBCategory * gw_helper_plugin_db_catalog_get_db_category_by_name ( GWDBContext *context, gchar *name); GWDBDisk * gw_helper_plugin_db_catalog_get_db_disk_by_name ( GWDBContext *context, gchar *name); GWDBFile * gw_helper_plugin_db_disk_get_db_file_by_name ( GWDBContext *context, GWDBDiskPK ref, gchar *name); GWDBFile * gw_helper_plugin_db_file_get_db_file_by_name ( GWDBContext *context, GWDBFilePK ref, gchar *name); gchar * gw_helper_plugin_db_file_get_location ( GWDBContext *context, GWDBFilePK ref); gchar * gw_helper_db_file_get_cdate_to_str ( GWDBFile *file); gchar * gw_helper_db_file_get_adate_to_str ( GWDBFile *file); gchar * gw_helper_db_file_get_mdate_to_str ( GWDBFile *file); gchar * gw_helper_db_disk_get_date_to_str ( GWDBDisk *disk); /*! * @function gw_helper_search_item_info_get_date_to_str * @abstract Gets the formated search item date. * @discussion This function gets the formated search item information date.
* @param si the search item information to get formated date * @result The formated date. Must be freed with g_free().
* Returns NULL when an error occured.
*/ gchar * gw_helper_search_item_info_date_to_str ( struct search_item_info *si); #endif gwhere-0.2.3/src/gwdevicemanager.c0000744000175000017500000005042210271277545015540 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gwsupport.h" #include "gwdevicemanager.h" /* To open and close files */ #include /* lseek read close */ #include /* open */ #include /* exit */ #include /* errno */ #include /* strncmp malloc */ #include /* perror */ #include /* toupper */ /* To mount device */ #include /* stat */ #if defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) #include #include #include #endif #if defined ( OS_LINUX) || defined ( OS_CYGWIN) #include /* setmntent getmntent endmntent */ #include /* mount umount */ #include #define EXT_SUPER_MAGIC 0x137d #define EXT2_OLD_SUPER_MAGIC 0xEF51 #define EXT2_SUPER_MAGIC 0xEF53 #define ISOFS_SUPER_MAGIC 0x9660 #define MSDOS_SUPER_MAGIC 0x4d44 #endif /* To get information on the file system */ #if defined ( OS_LINUX) || defined ( OS_CYGWIN) #include /* statfs */ #endif #if defined ( OS_WIN32) || defined ( OS_CYGWIN) #include #include #include /* GetLogicalDriveStrings*/ #include /* toupper */ #include #include #if defined ( OS_WIN32) #include #endif /* Define the structures to eject under Win95/98/Me */ #if !defined ( VWIN32_DIOC_DOS_IOCTL) #define VWIN32_DIOC_DOS_INT13 4 #define VWIN32_DIOC_DOS_IOCTL 1 typedef struct _DIOC_REGISTERS { DWORD reg_EBX; DWORD reg_EDX; DWORD reg_ECX; DWORD reg_EAX; DWORD reg_EDI; DWORD reg_ESI; DWORD reg_Flags; } DIOC_REGISTERS, *PDIOC_REGISTERS; #endif /* VWIN32_DIOC_DOS_IOCTL */ /* Intel x86 processor status flags */ #define CARRY_FLAG 0x0001 #endif #include "tools/gwtools.h" #include "gwapplicationmanager.h" #include "gwsupermount.h" gint gw_dm_device_load_to_vfs_stats ( struct vfs_stats *p, gchar *dir) { /* This function loads all information about a file system designed by his full path name (stored in the parameter "dir") as "/mnt/cdrom". Theses information are stored in a structure called vfs_stats. */ #if defined ( OS_CYGWIN) || defined ( OS_WIN32) gchar *device_name = NULL; gchar *volume_name = NULL; gchar *serial_number = NULL; gchar *device_type = NULL; gulong nb = 0; guint errmode; #endif #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( p == NULL ) { /* The virtual file system hasn't been allocated */ #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "VFS is null"); #endif return -1; } if ( dir == NULL ) { /* The file system path is NULL */ #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "filesystem path is null"); #endif return -1; } #if defined ( OS_LINUX) /* Checks if the device is in the mounted device table (/etc/mtab) */ if ( gw_dm_search_disk_in_tab_file_to_vfs_stats ( p, "/etc/mtab", dir) == 0 ) { return 0; } /* Checks if the device is in the mountabled device table (/etc/fstab) */ if ( gw_dm_search_disk_in_tab_file_to_vfs_stats ( p, "/etc/fstab", dir) == 0 ) { return 0; } #elif defined ( OS_WIN32) || defined ( OS_CYGWIN) errmode = SetErrorMode ( SEM_FAILCRITICALERRORS ); device_name = g_strdup_printf ( "\\\\.\\%s", dir); vfs_stats_set_name ( p , device_name); vfs_stats_set_dir ( p, g_strdup ( dir)); vfs_stats_set_options ( p, NULL); if ( gw_dm_is_disk_in_drive ( dir) ) { gw_fs_get_type ( device_name, &device_type); if ( device_type == NULL ) { switch ( GetDriveType ( dir)) { case DRIVE_UNKNOWN: break; case DRIVE_NO_ROOT_DIR: break; case DRIVE_REMOVABLE: switch ( toupper ( dir[0])) { case 'A': g_strdup ( "/dev/fd0");break; case 'B': g_strdup ( "/dev/fd1");break; } break; case DRIVE_FIXED: break; case DRIVE_REMOTE: break; case DRIVE_CDROM: device_type = g_strdup ( "iso9660"); break; case DRIVE_RAMDISK: break; default : break; } } vfs_stats_set_type ( p , device_type); vfs_stats_set_ismounted ( p, TRUE); /* FIX BUG : how to know how many files contains a disk? */ /*vfs_stats_set_nb_files ( p, 0);*/ vfs_stats_set_blocks_size ( p, 1024L); nb = gw_drive_get_capacity ( dir); vfs_stats_set_blocks ( p, nb); nb = gw_drive_get_free_space ( dir); vfs_stats_set_blocks_free ( p, nb); gw_fs_get_serial_number ( device_name, &serial_number); vfs_stats_set_serial_number ( p, serial_number); gw_fs_get_volume_name ( device_name, &volume_name); vfs_stats_set_label ( p, volume_name); } else { vfs_stats_set_ismounted ( p, FALSE); } SetErrorMode ( errmode ); return 0; #endif /* If the path file system doesn't exist */ return -1; } gboolean gw_dm_disk_try_mount_from_vfs_stats ( struct vfs_stats *p) { /* // First methode failed : single user cannot use mount() if ( mount ( vfs_stats_get_name ( p), vfs_stats_get_dir ( p), vfs_stats_get_type ( p), 0xc0ed0000|MS_RDONLY, "") == -1 ) { if ( errno == EBUSY ) { g_print ( "try_mount : device busy\n"); return TRUE; } else { g_print ( "try_mount : cannot mount\n"); return FALSE; } } else { umount ( vfs_stats_get_dir ( p)); g_print ( "try_mount : can mount\n"); return TRUE; } */ /* // Second methode failed : cannot detect if the device is allready mounted if ( gw_dm_disk_mount_from_vfs_stats ( p) == TRUE ) { gw_dm_disk_umount_from_vfs_stats ( p); return TRUE; } return FALSE; */ /* // Third methode failed : umount an umounted device doesn't failed if ( gw_dm_disk_umount_from_vfs_stats ( p) == TRUE ) { gw_dm_disk_mount_from_vfs_stats ( p); return TRUE; } else { if ( gw_dm_disk_mount_from_vfs_stats ( p) == TRUE ) { gw_dm_disk_umount_from_vfs_stats ( p); return TRUE; } return FALSE; } return FALSE; */ /* This function should not be used. It checks if the file system can be mounted in order to know if there is any disk in drive. */ struct stat statbuf; guint fic; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Gets rights of the disk */ if ( stat ( vfs_stats_get_name ( p), &statbuf) == -1 ) { perror ( "stat"); return FALSE; } /* If it's a regular file */ if ( S_ISREG ( statbuf.st_mode) ) { perror ( "S_ISREG"); return FALSE; } /* Cannot read only the file */ if ( access ( vfs_stats_get_name ( p), R_OK) != 0 ) { perror ( "access"); return FALSE; } /* Opens the device */ if ( ( fic = open ( vfs_stats_get_name ( p), O_RDONLY ) ) == -1 ) { perror ( "open"); return FALSE; } /* Closes the device file system */ close ( fic); return TRUE; } gint gw_dm_search_disk_in_tab_file_to_vfs_stats ( struct vfs_stats *p, const gchar *file_tab, const gchar *dir) { /* This function is used only on mount support systems. It searches all information about the file system designed by his full path name (stored in the parameter "dir") as "/mnt/cdrom" in the designed "mount table" (stored in the parameter "file_tab"). */ #if defined ( OS_LINUX) || defined ( OS_CYGWIN) FILE *tab = NULL; struct mntent *partition = NULL; struct statfs sts; gchar *volume_name = NULL; gulong size = 0; gboolean has_mounted = FALSE; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( p == NULL ) { /* The virtual file system hasn't been allocated */ return -1; } if ( dir == NULL ) { /* The file system path is NULL */ return -1; } /* Opens the device table file */ if ( (tab = setmntent ( file_tab, "r")) != NULL ) { while ( (partition = getmntent ( tab)) != NULL) { if ( (partition->mnt_dir != NULL) && (strcmp ( partition->mnt_dir, dir) == 0) ) { /* Bug to fix : must free all data before set new informations */ vfs_stats_set_name ( p , g_strdup ( partition->mnt_fsname)); vfs_stats_set_dir ( p, g_strdup ( partition->mnt_dir)); vfs_stats_set_options ( p, g_strsplit ( partition->mnt_opts, ",", 0)); vfs_stats_set_type ( p , g_strdup ( partition->mnt_type)); if ( strncmp ( file_tab, "/etc/mtab", 9) == 0 ) { /* If the device table file is /etc/mtab */ vfs_stats_set_ismounted ( p, TRUE); } else if ( strncmp ( file_tab, "/etc/fstab", 10) == 0 ) { /* If the device table file is /etc/fstab */ vfs_stats_set_ismounted ( p, FALSE); } if ( gw_dm_disk_can_mounted_from_vfs_stats ( p) ) { if ( !gw_dm_disk_is_mounted_from_vfs_stats ( p) ) { has_mounted = gw_dm_disk_mount_from_vfs_stats ( p); } if ( statfs ( dir, &sts) != -1 ) { size = sts.f_files; vfs_stats_set_nb_files ( p, size); vfs_stats_set_blocks_size ( p, sts.f_bsize); size = sts.f_blocks; vfs_stats_set_blocks ( p, size); size = sts.f_bfree; vfs_stats_set_blocks_free ( p, size); /* FIX BUG : how to get serial number? */ /*vfs_stats_set_serial_number ( p, g_strdup_printf ( "%d", sts.f_fsid);*/ if ( vfs_stats_get_type ( p) != NULL ) { if ( sts.f_type == EXT_SUPER_MAGIC ) { vfs_stats_set_type ( p, g_strdup ( "ext")); } else if ( sts.f_type == EXT2_OLD_SUPER_MAGIC || sts.f_type == EXT2_SUPER_MAGIC ) { vfs_stats_set_type ( p, g_strdup ( "ext2")); } else if ( sts.f_type == ISOFS_SUPER_MAGIC ) { vfs_stats_set_type ( p, g_strdup ( "iso9660")); } else if ( sts.f_type == MSDOS_SUPER_MAGIC ) { vfs_stats_set_type ( p, g_strdup ( "vfat")); } else { } } } if ( (vfs_stats_get_type ( p) != NULL) && (strcmp ( vfs_stats_get_type ( p), "iso9660") == 0) ) { volume_name = gw_fs_iso9660_get_volume_name ( vfs_stats_get_name ( p)); } else { gw_fs_get_volume_name ( vfs_stats_get_name ( p), &volume_name); } /* Why this following code?? volume must be different to NULL or equals to NULL?? *//* if ( (volume_name != NULL) && (vfs_stats_get_type ( p) != NULL) && ( strcmp ( vfs_stats_get_type ( p), "vfat") == 0) ) { volume_name = gw_fs_fat16_get_volume_name ( vfs_stats_get_name ( p)); }*/ vfs_stats_set_label ( p, volume_name); if ( !vfs_stats_get_ismounted ( p) && has_mounted ) { gw_dm_disk_umount_from_vfs_stats ( p); } } else { /* The virtual file system cannot be mounted */ vfs_stats_set_ismounted ( p, FALSE); } #ifdef GW_DEBUG_MODE vfs_stats_display ( p); #endif /* Closes the /ect/fstab or /etc/mtab file. */ endmntent ( tab); return 0; } } /* Closes the /ect/fstab or /etc/mtab file. */ endmntent ( tab); } #endif return -1; } gboolean gw_dm_disk_mount_from_vfs_stats ( struct vfs_stats *p) { /* This function mount a file system with the external program "mount". */ #if defined ( OS_LINUX) || defined ( OS_CYGWIN) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) int pid; /* pid number */ int status; /* process status */ int fd[2]; /* pipe descriptor */ char *argv[4] = {"mount", vfs_stats_get_dir ( p), 0}; char retour[201]; struct statfs stat_fs; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif /* To prevent unexpected mount with supermount on Mandrake or submount on SuSe. */ if ( vfs_stats_get_type ( p) != NULL && ((strncmp ( vfs_stats_get_type ( p), "supermount", 10) == 0 ) || (strncmp ( vfs_stats_get_type ( p), "subfs", 5) == 0 )) ) { return statfs ( vfs_stats_get_dir ( p), &stat_fs); } /* Creates pipe */ if ( pipe ( fd) != 0 ) { /* Cannot create pipe */ perror ( "pipe"); return FALSE; } /* Creates a fork */ pid = fork ( ); if ( pid == 0 ) { /* If it's the child */ close ( fd[0]); close ( 2); close ( 1); /* Redirect the output error to the pipe */ dup2 ( fd[1], 2); close ( fd[1]); if ( execv ( GW_PROG_PATH_MOUNT, argv) == -1 ) { perror ( "execv"); } exit ( 127); } else { /* If it's the parent */ if ( pid == -1 ) { perror ( "fork"); } } close ( fd[1]); /* Gets the pipe data */ gw_pipe_get_data ( fd[0], retour); if ( waitpid ( pid, & status, 0) == -1 ) { perror ( "waitpid"); } if ( WEXITSTATUS ( status) != 0 ) { return FALSE; } #endif return TRUE; } gboolean gw_dm_disk_umount_from_vfs_stats ( struct vfs_stats *p) { #if defined ( OS_LINUX) || defined ( OS_CYGWIN) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) /* This function try to unmount the file system with the externalm program "umount". */ gint pid; /* pid number */ gint status; /* process status */ gint fd[2]; /* pipe descriptor */ gchar *argv[4] = {"umount", vfs_stats_get_dir ( p), 0}; gchar retour[201]; struct statfs stat_fs; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif /* To prevent unexpected mount with supermount on Mandrake or submount on SuSe. */ if ( (vfs_stats_get_type ( p) != NULL) && ((strncmp ( vfs_stats_get_type ( p), "supermount", 10) == 0 ) || (strncmp ( vfs_stats_get_type ( p), "subfs", 5) == 0 )) ) { return statfs ( vfs_stats_get_dir ( p), &stat_fs); } /* Creates pipe */ if ( pipe ( fd) != 0 ) { perror ( "pipe"); return FALSE; } /* Creates fork */ pid = fork ( ); if ( pid == 0 ) { /* If it's the child */ close ( fd[0]); close ( 2); close ( 1); /* Redirect the output error to the pipe */ dup2 ( fd[1], 2); close ( fd[1]); if ( execv ( GW_PROG_PATH_UMOUNT, argv) == -1 ) { perror ( "execv"); } exit ( 127); } else { /* If it's the parent */ if ( pid == -1 ) { perror ( "fork"); } } close ( fd[1]); /* Gets the pipe data */ gw_pipe_get_data ( fd[0], retour); /* Waits the child process end */ if ( waitpid ( pid, & status, 0) == -1 ) { perror ( "waitpid"); } if ( WEXITSTATUS ( status) != 0 ) { return FALSE; } #endif return TRUE; } gint gw_pipe_get_data ( gint entry, gchar * line) { gint nb; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif while ( (nb = read ( entry, line, 200)) > 0 ) { line[nb] = '\0'; }; if ( nb < 0 ) { perror ( "read"); }; return 0; } gint gw_dm_disk_get_device_name ( const gchar *mount_point, gchar **device_name) { gint result = -1; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( mount_point != NULL ) { if ( strlen ( mount_point) > 10 ) { switch ( mount_point[10]) { case 'a' : *device_name = g_strdup ( "/dev/fd0"); result = 0; break; case 'b' : *device_name = g_strdup ( "/dev/fd1"); result = 0; break; case 'c' : *device_name = g_strdup ( "/dev/sda1"); result = 0; break; case 'd' : *device_name = g_strdup ( "/dev/sda2"); result = 0; break; default : break; } } } return result; } gboolean gw_dm_disk_is_mounted_from_vfs_stats ( struct vfs_stats *p) { /* This function checks if the file system is already mounted. */ gboolean success = FALSE; #if defined ( OS_LINUX) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) gchar *type = NULL; #endif #ifdef GW_DEBUG_DATA_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( p != NULL ) { #if defined ( OS_LINUX) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) type = vfs_stats_get_type ( p); /* If the supermount is activated under Mandrake system or submount is activated under SuSe, a mount test is needed. */ if ( (type != NULL) && ((strncmp ( type, "supermount", 10) == 0) || (strncmp ( type, "subfs", 5) == 0)) ) { /* If the device is in supermount mode, try to acces it */ success = gw_dm_disk_try_mount_from_vfs_stats ( p); // success = gw_dm_is_disk_in_drive ( vfs_stats_get_dir ( p)); } else { /* Returns the mount state */ success = vfs_stats_get_ismounted ( p); } #elif defined ( OS_WIN32) || defined ( OS_CYGWIN) success = gw_dm_is_disk_in_drive ( vfs_stats_get_dir ( p)); #endif } return success; } gboolean gw_dm_disk_can_mounted_from_vfs_stats ( struct vfs_stats *p) { /* This function checks if a file system can be mounted, without mount it. */ #ifdef GW_DEBUG_DATA_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( p != NULL ) { if ( vfs_stats_get_ismounted ( p) == TRUE ) { return TRUE; } else { return gw_dm_disk_try_mount_from_vfs_stats ( p); } } return FALSE; } gboolean gw_dm_is_disk_in_drive ( const gchar *drive_path) { /* This function checks if there is a disk in the drive designed by the full path name (stored in the parameter "drive_path"). */ gboolean result = FALSE; #if defined ( OS_LINUX) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) FILE *tab = NULL; struct mntent *partition = NULL; gchar *device_path = NULL; struct stat statbuf; guint fic; #elif defined ( OS_WIN32) || defined ( OS_CYGWIN) guint errmode; DWORD max_file_len; DWORD system_flags; #endif #ifdef GW_DEBUG_DATA_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( drive_path != NULL ) { /* How to detect if a disk is present in a drive under BSD system? */ #if defined ( OS_LINUX) /*|| defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD)*/ /* Opens the device table file */ if ( (tab = setmntent ( "/etc/mtab", "r")) != NULL ) { while ( ((partition = getmntent ( tab)) != NULL) && (device_path == NULL)) { if ( (partition->mnt_dir != NULL) && (strcmp ( partition->mnt_dir, drive_path) == 0) ) { device_path = g_strdup ( partition->mnt_fsname); } } /* Closes the device table file */ endmntent ( tab); } if ( device_path == NULL ) { /* Opens the device table file */ if ( (tab = setmntent ( "/etc/fstab", "r")) != NULL ) { while ( ((partition = getmntent ( tab)) != NULL) && (device_path == NULL)) { if ( (partition->mnt_dir != NULL) && (strcmp ( partition->mnt_dir, drive_path) == 0) ) { device_path = g_strdup ( partition->mnt_fsname); } } /* Closes the device table file */ endmntent ( tab); } } if ( device_path != NULL ) { /* Gets rights of the disk */ if ( stat ( device_path, &statbuf) != -1 ) { /* If it's a regular file */ if ( !S_ISREG ( statbuf.st_mode) ) { /* Cannot read only the file */ if ( access ( device_path, R_OK) == 0 ) { /* Opens the device */ if ( ( fic = open ( device_path, O_RDONLY ) ) != -1 ) { result = TRUE; } /* Closes the device file system */ close ( fic); } } } g_free ( device_path); } #elif defined ( OS_WIN32) || defined ( OS_CYGWIN) errmode = SetErrorMode ( SEM_FAILCRITICALERRORS); result = GetVolumeInformation ( drive_path, NULL, 0, NULL, &max_file_len, &system_flags, NULL, 0); SetErrorMode ( errmode); #endif } #ifdef GW_DEBUG_DATA_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "%s is %savailable", drive_path,result?"":"un"); #endif return result; } gwhere-0.2.3/src/gwdevicemanager.h0000744000175000017500000001505510247706151015541 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwdevicemanager.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a component to manage devices. * @author Sébastien LECACHEUR * @author Grégory BLOQUEL * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwdevicemanager.c * @author Author */ #ifndef GW_DEVICE_MANAGER_H #define GW_DEVICE_MANAGER_H #include #include "data/gwdata.h" /*! * @function gw_dm_device_load_to_vfs_stats * @abstract Loads the virtual file system stats. * @discussion This function loads the virtual file system. Initialize * all informations as name, path, total size, free space, * label, ... * @param p the virtual file system to load * @param dir the file system path * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_dm_device_load_to_vfs_stats ( struct vfs_stats *p, gchar *dir); /*! * @function gw_dm_disk_try_mount_from_vfs_stats * @abstract Tries to mount the disk. * @discussion This function tries to mount the disk of the virtual file system stats.
* Use the /bin/mount and /bin/umount programs to mount disk * @param p the virtual file system stats to try to mount disk * @result TRUE if can be mounted or FALSE if can be not mounted.
* Returns FALSE when an error occured. */ gboolean gw_dm_disk_try_mount_from_vfs_stats ( struct vfs_stats *p); /*! * @function gw_dm_search_disk_in_tab_file_to_vfs_stats * @abstract Searches and sets informations from the device table * @discussion This function searches and sets informations from the device table.
* @param p the virtual file system stats to search and set informations * @param tab_file the device table file name * @param dir the file system path * @result TRUE if the disk found and loaded or FALSE if hasn't been found.
* Returns FALSE when an error occured. */ gboolean gw_dm_search_disk_in_tab_file_to_vfs_stats ( struct vfs_stats *p, const gchar *tab_file, const gchar *dir); /*! * @function gw_dm_disk_mount_from_vfs_stats * @abstract Mounts the disk. * @discussion This function mounts the disk of the virtual file system stats.
* Use the /bin/mount programs to mount disk * @param p the virtual file system stats to try to mount disk * @result TRUE if can mount or FALSE if cannot mount.
* Returns FALSE when an error occured. */ gboolean gw_dm_disk_mount_from_vfs_stats ( struct vfs_stats *p); /*! * @function gw_dm_disk_umount_from_vfs_stats * @abstract Umounts the disk. * @discussion This function umounts the disk of the virtual file system stats.
* Use the /bin/umount programs to umount disk * @param p the virtual file system stats to try to umount disk * @result TRUE if can umount or FALSE if cannot umount.
* Returns FALSE when an error occured. */ gboolean gw_dm_disk_umount_from_vfs_stats ( struct vfs_stats *p); /*! * @function gw_pipe_get_data * @abstract Gets data in the pipe. * @discussion This function gets the data in the pipe.
* @param entry the pipe to get data * @param line the string to extract data from pipe * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_pipe_get_data ( gint entry, gchar * line); /*! * @function gw_dm_disk_get_device_name * @abstract Gets the device name of a mount point. * @discussion This function gets the device name of a mount point.
* Warning : it's an ugly function. Runs only for floppy drive * (1 and 2) and for first primary disk (partition 1 and 2). * It was developped in the cas eof the experimental port on Cygwin. * @param mount_point the mount point path * @param device_name a pointer to get device name (Note that device_name * must be free with g_free). * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_dm_disk_get_device_name ( const gchar *mount_point, gchar **device_name); /*! * @function gw_dm_disk_is_mounted_from_vfs_stats * @abstract Gets if is mounted. * @discussion This function tries and gets if the virtual file system stats is mounted.
* @param p the virtual file system stats to get if is mounted * @result TRUE if is mounted or FALSE if is not mounted.
* Returns FALSE when an error occured. */ gboolean gw_dm_disk_is_mounted_from_vfs_stats ( struct vfs_stats *p); /*! * @function gw_dm_disk_can_mounted_from_vfs_stats * @abstract Gets if can be mounted. * @discussion This function gets if the virtual file system stats can be mounted.
* @param p the virtual file system stats to get if can be mounted * @result TRUE if can be mounted or FALSE if can be not mounted.
* Returns FALSE when an error occured. */ gboolean gw_dm_disk_can_mounted_from_vfs_stats ( struct vfs_stats *p); /*! * @function gw_dm_is_disk_in_drive * @abstract Gets if there is a disk in the drive. * @discussion This function gets if there is a disk in the drive.
* Use mount as drive_path under Linux-like system.
* Use the drive letter ("A:\", "D:\", ...) under win32 system.
* @param drive_path the drive path * @result TRUE if there is a disk or FALSE if there is no disk.
* Returns FALSE when an error occured. */ gboolean gw_dm_is_disk_in_drive ( const gchar *drive_path); #endif gwhere-0.2.3/src/gwguimanager.c0000744000175000017500000004325110506322663015060 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include /* strlen */ #include "gwsupport.h" #include "gwguimanager.h" #include #include "gui/gwgui.h" #include "gui/gwreferences.h" #include "gwapplicationmanager.h" GtkWindow *window; GtkCTreeNode *root; GtkWindow * gw_gui_manager_main_interface_create ( ) { GtkWidget *main_window = NULL; GtkWidget *vbox = NULL; GtkWidget *menu_bar = NULL; GtkWidget *tool_bar = NULL; GtkWidget *notebook = NULL; GtkWidget *status_bar = NULL; GtkAccelGroup *accel_group = NULL; gint x = -1; gint y = -1; gint height = -1; gint width = -1; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif accel_group = gtk_accel_group_new ( ); /* Main window */ main_window = gtk_window_new ( GTK_WINDOW_TOPLEVEL); window = GTK_WINDOW ( main_window); gtk_window_set_policy ( window, TRUE, TRUE, FALSE); /* Checks if have last size and cheks if the window can be displayed in the current screen. */ if ( (height = gw_am_get_settings_tol ( GW_VALUE_APP_WIN_HEIGHT)) < 0 ) { height = GW_VALUE_APP_WIN_HEIGHT_DEFAULT; } height = MIN ( height, gdk_screen_height ( )); if ( (width = gw_am_get_settings_tol ( GW_VALUE_APP_WIN_WIDTH)) < 0 ) { width = GW_VALUE_APP_WIN_WIDTH_DEFAULT; } width = MIN ( width, gdk_screen_width ( )); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "window size is %dx%d", width, height); #endif /* It is better to use gtk_widget_set_usize() or gtk_window_set_default_size()? */ gtk_window_set_default_size ( GTK_WINDOW ( main_window), width, height); /* Checks if have lasty position and checks if the window can be displayed in the current screen. */ if ( ((x = gw_am_get_settings_tol ( GW_VALUE_APP_WIN_X)) >= 0) && ((y = gw_am_get_settings_tol ( GW_VALUE_APP_WIN_Y)) >= 0) ) { gtk_widget_set_uposition ( main_window, x, y); } else { gtk_window_set_position ( GTK_WINDOW ( main_window), GTK_WIN_POS_CENTER); } /* Checking on position and size doesn't support shifted positions of the windows compared to the screen. */ gtk_window_set_title ( GTK_WINDOW ( main_window), PROJECT_NAME); gtk_signal_connect ( GTK_OBJECT ( main_window), "delete_event", GTK_SIGNAL_FUNC ( gw_menu_file_exit_click), NULL); gtk_signal_connect ( GTK_OBJECT ( main_window), "destroy", GTK_SIGNAL_FUNC ( gw_menu_file_exit_click), NULL); gtk_widget_realize ( main_window); /* Vertical box */ vbox = gtk_vbox_new ( FALSE, 0); gtk_widget_ref ( vbox); gtk_object_set_data_full ( GTK_OBJECT ( main_window), "VbMainWindow", vbox, (GtkDestroyNotify) gtk_widget_unref); gtk_container_add ( GTK_CONTAINER ( main_window), vbox); /* Menu bar */ menu_bar = gw_menu_create ( window, accel_group, vbox); gtk_box_pack_start ( GTK_BOX ( vbox), menu_bar, FALSE, FALSE, 0); /* Tool bar */ tool_bar = gw_tool_bar_create_and_add ( window, vbox); /* Notebook */ notebook = gw_notebook_create ( window, vbox); gtk_box_pack_start ( GTK_BOX ( vbox), notebook, TRUE, TRUE, 0); /* Status bar */ status_bar = gw_status_bar_create_and_add ( window, vbox); gtk_window_add_accel_group ( window, accel_group); return window; } gint gw_gui_manager_main_interface_set_tree_root ( GtkCTreeNode *node) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif root = node; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT if ( root == NULL ) { gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "root node is NULL"); } #endif return 0; } GtkWindow * gw_gui_manager_main_interface_get_main_window ( void) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT if ( window == NULL ) { gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "main window is NULL"); } #endif return window; } GtkWindow * gw_gui_manager_main_interface_get_progress_bar_box ( void) { GtkWindow *progress_bar_box = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif progress_bar_box = gtk_object_get_data ( GTK_OBJECT ( window), GW_REF_PROGRESS_BAR_BOX); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT if ( progress_bar_box == NULL ) { gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "progress bar box is NULL"); } #endif return progress_bar_box; } GtkCTree * gw_gui_manager_main_interface_get_tree ( void) { GtkCTree *tree = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif tree = GTK_CTREE ( gtk_object_get_data ( GTK_OBJECT ( window), GW_REF_TREE)); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT if ( tree == NULL ) { gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "tree is NULL"); } #endif return tree; } GtkCTreeNode * gw_gui_manager_main_interface_get_tree_root ( void) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( root == NULL ) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "root node is NULL"); #endif } return root; } void gw_gui_manager_main_interface_refresh ( void) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif while ( gtk_events_pending ( ) ) { gtk_main_iteration ( ); } } void gw_gui_manager_main_interface_update_all ( void) { #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "refreshing categories..."); #endif gw_notebook_managment_refresh_categories ( window); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "updating menus..."); #endif gw_gui_manager_main_interface_update_menus ( ); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "updating devices informations...."); #endif gw_gui_manager_main_interface_update_notebook_catalog ( ); gw_gui_manager_main_interface_update_notebook_search ( ); gw_gui_manager_main_interface_update_notebook_managment ( ); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "all updates and refresh are done!!"); #endif } void gw_gui_manager_main_interface_update_menus ( void) { gchar *files = NULL; gchar **files_list = NULL; gint i = 0, size = 0; gint max_nb_files = GW_VALUE_APP_RECENT_SIZE_DEFAULT; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( (files = gw_am_get_settings ( GW_VALUE_APP_RECENTS_FILES)) != NULL) { if ( (max_nb_files = gw_am_get_settings_tol ( GW_VALUE_APP_RECENT_SIZE)) == -1 ) { max_nb_files = GW_VALUE_APP_RECENT_SIZE_DEFAULT; } files_list = g_strsplit ( files, G_SEARCHPATH_SEPARATOR_S, -1); /* Gets the number of recents opened files. */ for ( i = 0; files_list[i] != NULL; i++) { } size = i; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Current history size is %d", size); #endif if ( size > 0 ) { /* Removes all unwanted items (all over the max size). */ if ( size > max_nb_files ) { for ( i = max_nb_files; files_list[i] != NULL; i++) { g_free ( files_list[i]); files_list[i] = NULL; } } /* Removes the last item if is empty (for the case where the list is ended by ";"). */ if ( files_list[size - 1] != NULL ) { if ( strlen ( files_list[size - 1]) == 0 ) { g_free ( files_list[size - 1]); files_list[size - 1] = NULL; } } } gw_menu_file_set_recents_files ( window, files_list); g_strfreev ( files_list); } } void gw_gui_manager_main_interface_update_notebook_catalog ( void) { GtkCTree *tree = NULL; GtkCTreeNode *selection = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( (tree = gw_gui_manager_main_interface_get_tree ( )) != NULL ) { if ( (GTK_CLIST ( tree)->selection != NULL) && ((selection = GTK_CTREE_NODE ( GTK_CLIST ( tree)->selection->data)) != NULL) ) { gtk_ctree_select ( GTK_CTREE ( tree), selection); } else { gw_notebook_catalog_clist_explorer_set_column_title_disk ( ); } } else { gw_notebook_catalog_clist_explorer_set_column_title_disk ( ); } return; } void gw_gui_manager_main_interface_update_notebook_search ( void) { gint value = 0; gchar *str = NULL; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif str = gw_am_get_settings ( GW_VALUE_APP_SEARCH_STRING); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "search string => %s", str); #endif gw_notebook_search_set_search_text ( gw_gui_manager_main_interface_get_main_window ( ), str); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_CASE_SENSITIVE)) == -1 ) { value = GW_VALUE_APP_SEARCH_CASE_SENSITIVE_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "use case sensitive => %d", value); #endif gw_notebook_search_set_option_case_sensitive ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_TYPE)) == -1 ) { value = GW_VALUE_APP_SEARCH_TYPE_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "search type => %d", value); #endif gw_notebook_search_set_option_search_type ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_FILE_NAME)) == -1 ) { value = GW_VALUE_APP_SEARCH_FILE_NAME_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "match with files name => %d", value); #endif gw_notebook_search_set_option_match_file ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_FOLDER_NAME)) == -1 ) { value = GW_VALUE_APP_SEARCH_FOLDER_NAME_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "match with folders name => %d", value); #endif gw_notebook_search_set_option_match_folder ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_DISK_NAME)) == -1 ) { value = GW_VALUE_APP_SEARCH_DISK_NAME_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "match with disks name => %d", value); #endif gw_notebook_search_set_option_match_disk ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_CATEGORY_NAME)) == -1 ) { value = GW_VALUE_APP_SEARCH_CATEGORY_NAME_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "math woth categories name => %d", value); #endif gw_notebook_search_set_option_match_category ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_DESCRIPTION)) == -1 ) { value = GW_VALUE_APP_SEARCH_DESCRIPTION_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "use case sensitive => %d", value); #endif gw_notebook_search_set_option_match_description ( gw_gui_manager_main_interface_get_main_window ( ), value); #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "updating the search column properties"); #endif gw_notebook_search_clist_search_set_column_title ( ); } void gw_gui_manager_main_interface_update_notebook_managment ( void) { gint value = 0; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_DISK_DISPLAY_INFO)) == -1 ) { value = GW_VALUE_APP_DISK_DISPLAY_INFO_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "display info => %d", value); #endif gw_notebook_managment_set_option_display_info ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_DISK_SCAN_EXPLORE_TREE_STRUCTURE)) == -1 ) { value = GW_VALUE_APP_DISK_SCAN_EXPLORE_TREE_STRUCTURE_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "explore tree structure => %d", value); #endif gw_notebook_managment_set_option_explore_tree_structure ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_DISK_SCAN_EXPLORE_ARCHIVE)) == -1 ) { value = GW_VALUE_APP_DISK_SCAN_EXPLORE_ARCHIVE_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "explore archive => %d", value); #endif gw_notebook_managment_set_option_explore_archive ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_DISK_SCAN_CATEGORY)) == -1) { value = GW_VALUE_APP_DISK_SCAN_CATEGORY_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "category recursive => %d", value); #endif gw_notebook_managment_set_option_category_recursive ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_DISK_SCAN_DESCRIPTION)) == -1 ) { value = GW_VALUE_APP_DISK_SCAN_DESCRIPTION_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "make description => %d", value); #endif gw_notebook_managment_set_option_make_description ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_DISK_SCAN_USE_PATTERN)) == -1 ) { value = GW_VALUE_APP_DISK_SCAN_USE_PATTERN_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "use pattern => %d", value); #endif gw_notebook_managment_set_option_use_pattern ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_DISK_SCAN_LABEL)) == -1 ) { value = GW_VALUE_APP_DISK_SCAN_LABEL_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "use volume name => %d", value); #endif gw_notebook_managment_set_option_use_disk_label ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_DISK_AUTOMOUNT)) == -1 ) { value = GW_VALUE_APP_DISK_AUTOMOUNT_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "automount => %d", value); #endif gw_notebook_managment_set_option_automount ( gw_gui_manager_main_interface_get_main_window ( ), value); if ( (value = gw_am_get_settings_tol ( GW_VALUE_APP_DISK_EJECT)) == -1 ) { value = GW_VALUE_APP_DISK_EJECT_DEFAULT; } #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "eject => %d", value); #endif gw_notebook_managment_set_option_eject ( gw_gui_manager_main_interface_get_main_window ( ), value); } void gw_gui_manager_exit ( void) { GtkWindow *window = NULL; gchar *selected_device = NULL; gint x, y, width, height; gint position = 0; #ifdef GW_DEBUG_GUI_CALLBACK_COMPONENT gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif window = gw_gui_manager_main_interface_get_main_window ( ); if ( window != NULL ) { /* Saves the horizontal pane position which is in the catalog tabbed pane. */ if ( (position = gw_notebook_catalog_get_hpan_position ( window)) != -1 ) { gw_am_set_settings ( GW_VALUE_APP_EXPLORER_HPAN_POSITION, g_strdup_printf ( "%d", position)); } /* Saves the last selected device. */ selected_device = gw_notebook_managment_get_device_dir ( window); if ( selected_device != NULL ) { gw_am_set_settings ( GW_VALUE_APP_DISK_SELECTED, selected_device); } /* Saves the main window size and position. */ if ( gw_am_get_settings_tol ( GW_VALUE_APP_GUI_AUTOSAVE) == 1 ) { gdk_window_get_position ( GTK_WIDGET ( window)->window, &x, &y); gdk_window_get_size ( GTK_WIDGET ( window)->window, &width, &height); gw_am_set_settings ( GW_VALUE_APP_WIN_X, g_strdup_printf ( "%d", x)); gw_am_set_settings ( GW_VALUE_APP_WIN_Y, g_strdup_printf ( "%d", y)); gw_am_set_settings ( GW_VALUE_APP_WIN_WIDTH, g_strdup_printf ( "%d", width)); gw_am_set_settings ( GW_VALUE_APP_WIN_HEIGHT, g_strdup_printf ( "%d", height)); } /* Destroyes the main window. */ gtk_widget_destroy ( GTK_WIDGET ( window)); } } gwhere-0.2.3/src/gwguimanager.h0000744000175000017500000001276210023202520015047 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwguimanager.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* GWhere is a GUI application (Graphical User Interface). This interface contains many components. In order to acces to * theses components the API many functions.

* All graphical components are GtkWidget. Theses widget can be referenced to the application with the function :
* gtk_object_set_data_full ( gtk_object_referencer, "reference_object", gtk_object_referenced, (GtkDestroyNotify) gtk_widget_unref);

*
* * * * * *
NameTypeDesription
* @abstract This is a component to manage GWhere GUI. * @author Sébastien LECACHEUR * @author Grégory BLOQUEL * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwguimanager.c * @author Author */ #ifndef GW_GUI_MANAGER_H #define GW_GUI_MANAGER_H /*! * @function gw_gui_manager_main_interface_create * @abstract Creates the main window. * @discussion This function creates the main application window. * This window can be destroyed when exit program. * @result the main window.
* Returns NULL when an error occured. */ GtkWindow * gw_gui_manager_main_interface_create ( void); /*! * @function gw_gui_manager_main_interface_set_tree_root * @abstract Sets the tree's root explorer of the catalog. * @discussion This function sets the tree's root explorer the catalog. * @param node the new node of catalog * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_gui_manager_main_interface_set_tree_root ( GtkCTreeNode *node); /*! * @function gw_gui_manager_main_interface_get_main_window * @abstract Gets the main window of application. * @discussion This function gets the main window of the application. * @result the main window. */ GtkWindow * gw_gui_manager_main_interface_get_main_window ( void); /*! * @function gw_gui_manager_main_interface_get_progress_bar_box * @abstract Gets the progress bar box. * @discussion This function gets the progress bar box. * @result the progress bar box. */ GtkWindow * gw_gui_manager_main_interface_get_progress_bar_box ( void); /*! * @function gw_gui_manager_main_interface_get_tree * @abstract Gets the tree explorer of the catalog. * @discussion This function gets the tree explorer the catalog. * @result the tree catalog. */ GtkCTree * gw_gui_manager_main_interface_get_tree ( void); /*! * @function gw_gui_manager_main_interface_get_tree_root * @abstract Gets the tree's root explorer of the catalog. * @discussion This function gets the tree's root explorer the catalog. * @result the tree's root catalog. */ GtkCTreeNode * gw_gui_manager_main_interface_get_tree_root ( void); /*! * @function gw_gui_manager_main_interface_refresh * @abstract Refreshes the graphical interface of application. * @discussion This function refreshes the graphical interface of application. */ void gw_gui_manager_main_interface_refresh ( void); /*! * @function gw_gui_manager_main_interface_update_all * @abstract Updates all GUI components. * @discussion This function updates all GUI components. */ void gw_gui_manager_main_interface_update_all ( void); /*! * @function gw_gui_manager_main_interface_update_menus * @abstract Updates all menus. * @discussion This function updates all menus. */ void gw_gui_manager_main_interface_update_menus ( void); /*! * @function gw_gui_manager_main_interface_update_notebook_catalog * @abstract Updates the notebook catalog. * @discussion This function updates the notebook catalog. */ void gw_gui_manager_main_interface_update_notebook_catalog ( void); /*! * @function gw_gui_manager_main_interface_update_notebook_managment * @abstract Updates the notebook managment. * @discussion This function updates the notebook managment. */ void gw_gui_manager_main_interface_update_notebook_managment ( void); /*! * @function gw_gui_manager_main_interface_update_notebook_search * @abstract Updates the notebook search. * @discussion This function updates the notebook search. */ void gw_gui_manager_main_interface_update_notebook_search ( void); /*! * @function gw_gui_manager_exit * @abstract Called when exit program. * @discussion This function is called when exit program. */ void gw_gui_manager_exit ( void); #endif gwhere-0.2.3/src/gwpluginsmanager.c0000744000175000017500000007701210506324357015761 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gwsupport.h" #include "gwpluginsmanager.h" #include #include /* opendir readir closedir */ #include /* strstr */ #include "gwapplicationmanager.h" #include "gwhelper.h" GWPluginsManager my_plugins_manager; typedef struct gw_plugin_s { GModule *module; gpointer data; }GWPlugin; typedef gboolean (*func_gw_plugin_load_t)(GWPlugin*); typedef gboolean (*func_gw_plugin_unload_t)(gchar*,GWPlugin*,gpointer); typedef gchar* (*func_gw_plugin_key_t)(GWPlugin*); GHashTable * gw_plugin_manager_load_plugins ( const gchar *directory, const gchar *extension, func_gw_plugin_load_t gw_plugin_load, func_gw_plugin_key_t gw_plugin_key) { GHashTable *plugins = NULL; DIR *plugins_dir = NULL; struct dirent *dentry = NULL; gchar *file_ext = NULL; gchar *module_path = NULL; GModule *module = NULL; GWPlugin *plugin = NULL; if ( directory != NULL ) { if ( extension != NULL) { if ( gw_plugin_load != NULL) { if ( gw_plugin_key != NULL) { // Creates the hashtable to store all the plugins plugins = g_hash_table_new ( g_str_hash, g_str_equal); // Tries to open the plugins directory if ( (plugins_dir = opendir ( directory)) != NULL ) { // Scans the plugins directory while ( (dentry = readdir ( plugins_dir)) != NULL ) { // Checks the file name if ( dentry->d_name != NULL ) { // Search the file extension if ( (file_ext = strrchr ( dentry->d_name, '.')) != NULL ) { // Checks if the file extension correspond to a plugin file if ( strcasecmp ( ++file_ext, extension) == 0 ) { // Builds the module (plugin) path module_path = g_strconcat ( directory, G_DIR_SEPARATOR_S, dentry->d_name, NULL); // Tries to load the found module if ( (module = g_module_open ( module_path, 0)) != NULL ) { // Checks if the plugin can be loaded and load it plugin = (GWPlugin*)g_malloc ( sizeof ( GWPlugin)); memset ( plugin, '\0', sizeof ( GWPlugin)); plugin->module = module; if ( gw_plugin_load ( plugin) == TRUE ) { g_hash_table_insert ( plugins, gw_plugin_key ( plugin), plugin); } else { g_free ( plugin); plugin = NULL; } } else {} g_free ( module_path); } else {} } else {} file_ext = NULL; } else {} } closedir ( plugins_dir); } else {} } else {} } else {} } else {} } else {} return plugins; } gboolean gw_plugin_load_catalog_plugin ( GWPlugin *plugin) { gboolean result = FALSE; GModule *module = NULL; GWCatalogPlugin *catalog_plugin = NULL; func_gw_plugin_get_info_t func_gw_plugin_get_info = NULL; func_gw_db_catalog_create_t func_gw_db_catalog_create = NULL; func_gw_db_catalog_open_t func_gw_db_catalog_open = NULL; func_gw_db_catalog_save_t func_gw_db_catalog_save = NULL; func_gw_db_catalog_close_t func_gw_db_catalog_close = NULL; func_gw_db_catalog_get_db_catalog_t func_gw_db_catalog_get_db_catalog = NULL; func_gw_db_catalog_get_db_category_t func_gw_db_catalog_get_db_category = NULL; func_gw_db_catalog_get_db_disk_t func_gw_db_catalog_get_db_disk = NULL; func_gw_db_catalog_get_db_file_t func_gw_db_catalog_get_db_file = NULL; func_gw_db_catalog_get_db_categories_t func_gw_db_catalog_get_db_categories = NULL; func_gw_db_catalog_get_db_disks_t func_gw_db_catalog_get_db_disks = NULL; func_gw_db_disk_get_db_files_t func_gw_db_disk_get_db_files = NULL; func_gw_db_file_get_db_files_t func_gw_db_file_get_db_files = NULL; func_gw_db_file_get_db_disk_t func_gw_db_file_get_db_disk = NULL; func_gw_db_file_get_parent_db_file_t func_gw_db_file_get_parent_db_file = NULL; func_gw_db_catalog_add_db_category_t func_gw_db_catalog_add_db_category = NULL; func_gw_db_catalog_add_db_disk_t func_gw_db_catalog_add_db_disk = NULL; func_gw_db_disk_add_db_file_t func_gw_db_disk_add_db_file = NULL; func_gw_db_file_add_db_file_t func_gw_db_file_add_db_file = NULL; func_gw_db_catalog_remove_db_category_t func_gw_db_catalog_remove_db_category = NULL; func_gw_db_catalog_remove_db_disk_t func_gw_db_catalog_remove_db_disk = NULL; func_gw_db_catalog_remove_db_file_t func_gw_db_catalog_remove_db_file = NULL; func_gw_db_catalog_update_t func_gw_db_catalog_update = NULL; func_gw_db_category_update_t func_gw_db_category_update = NULL; func_gw_db_disk_update_t func_gw_db_disk_update = NULL; func_gw_db_file_update_t func_gw_db_file_update = NULL; func_gw_db_catalog_get_nb_db_files_t func_gw_db_catalog_get_nb_db_files = NULL; func_gw_db_catalog_get_nb_db_folders_t func_gw_db_catalog_get_nb_db_folders = NULL; func_gw_db_catalog_get_nb_db_disks_t func_gw_db_catalog_get_nb_db_disks = NULL; func_gw_db_disk_get_nb_db_files_t func_gw_db_disk_get_nb_db_files = NULL; func_gw_db_disk_get_nb_db_folders_t func_gw_db_disk_get_nb_db_folders = NULL; func_gw_db_catalog_get_capacity_t func_gw_db_catalog_get_capacity = NULL; func_gw_db_catalog_get_full_t func_gw_db_catalog_get_full = NULL; func_gw_db_catalog_get_free_t func_gw_db_catalog_get_free = NULL; func_gw_db_catalog_get_db_category_by_index_t func_gw_db_catalog_get_db_category_by_index = NULL; func_gw_db_catalog_get_db_category_by_name_t func_gw_db_catalog_get_db_category_by_name = NULL; func_gw_db_catalog_get_db_disk_by_name_t func_gw_db_catalog_get_db_disk_by_name = NULL; func_gw_db_disk_get_db_file_by_name_t func_gw_db_disk_get_db_file_by_name = NULL; func_gw_db_file_get_db_file_by_name_t func_gw_db_file_get_db_file_by_name = NULL; func_gw_db_file_get_location_t func_gw_db_file_get_location = NULL; if ( (module = plugin->module) != NULL ) { g_module_symbol ( module, "plugin_get_info", (gpointer *)(&func_gw_plugin_get_info)); g_module_symbol ( module, "plugin_db_catalog_create", (gpointer *)(&func_gw_db_catalog_create)); g_module_symbol ( module, "plugin_db_catalog_open", (gpointer *)(&func_gw_db_catalog_open)); g_module_symbol ( module, "plugin_db_catalog_save", (gpointer *)(&func_gw_db_catalog_save)); g_module_symbol ( module, "plugin_db_catalog_close", (gpointer *)(&func_gw_db_catalog_close)); g_module_symbol ( module, "plugin_db_catalog_get_capacity", (gpointer *)(&func_gw_db_catalog_get_capacity)); g_module_symbol ( module, "plugin_db_catalog_get_full", (gpointer *)(&func_gw_db_catalog_get_full)); g_module_symbol ( module, "plugin_db_catalog_get_free", (gpointer *)(&func_gw_db_catalog_get_free)); g_module_symbol ( module, "plugin_db_catalog_get_nb_db_files", (gpointer *)(&func_gw_db_catalog_get_nb_db_files)); g_module_symbol ( module, "plugin_db_catalog_get_nb_db_folders", (gpointer *)(&func_gw_db_catalog_get_nb_db_folders)); g_module_symbol ( module, "plugin_db_catalog_get_nb_db_disks", (gpointer *)(&func_gw_db_catalog_get_nb_db_disks)); g_module_symbol ( module, "plugin_db_catalog_get_db_catalog", (gpointer *)(&func_gw_db_catalog_get_db_catalog)); g_module_symbol ( module, "plugin_db_catalog_get_db_category", (gpointer *)(&func_gw_db_catalog_get_db_category)); g_module_symbol ( module, "plugin_db_catalog_get_db_disk", (gpointer *)(&func_gw_db_catalog_get_db_disk)); g_module_symbol ( module, "plugin_db_catalog_get_db_file", (gpointer *)(&func_gw_db_catalog_get_db_file)); g_module_symbol ( module, "plugin_db_catalog_get_db_categories", (gpointer *)(&func_gw_db_catalog_get_db_categories)); g_module_symbol ( module, "plugin_db_catalog_get_db_disks", (gpointer *)(&func_gw_db_catalog_get_db_disks)); g_module_symbol ( module, "plugin_db_disk_get_nb_db_files", (gpointer *)(&func_gw_db_disk_get_nb_db_files)); g_module_symbol ( module, "plugin_db_disk_get_nb_db_folders", (gpointer *)(&func_gw_db_disk_get_nb_db_folders)); g_module_symbol ( module, "plugin_db_disk_get_db_files", (gpointer *)(&func_gw_db_disk_get_db_files)); g_module_symbol ( module, "plugin_db_file_get_db_files", (gpointer *)(&func_gw_db_file_get_db_files)); g_module_symbol ( module, "plugin_db_catalog_get_db_category_by_index", (gpointer *)(&func_gw_db_catalog_get_db_category_by_index)); g_module_symbol ( module, "plugin_db_catalog_get_db_category_by_name", (gpointer *)(&func_gw_db_catalog_get_db_category_by_name)); g_module_symbol ( module, "plugin_db_catalog_get_db_disk_by_name", (gpointer *)(&func_gw_db_catalog_get_db_disk_by_name)); g_module_symbol ( module, "plugin_db_disk_get_db_file_by_name", (gpointer *)(&func_gw_db_disk_get_db_file_by_name)); g_module_symbol ( module, "plugin_db_file_get_db_file_by_name", (gpointer *)(&func_gw_db_file_get_db_file_by_name)); g_module_symbol ( module, "plugin_db_file_get_db_disk", (gpointer *)(&func_gw_db_file_get_db_disk)); g_module_symbol ( module, "plugin_db_file_get_parent_db_file", (gpointer *)(&func_gw_db_file_get_parent_db_file)); g_module_symbol ( module, "plugin_db_file_get_location", (gpointer *)(&func_gw_db_file_get_location)); g_module_symbol ( module, "plugin_db_catalog_add_db_category", (gpointer *)(&func_gw_db_catalog_add_db_category)); g_module_symbol ( module, "plugin_db_catalog_add_db_disk", (gpointer *)(&func_gw_db_catalog_add_db_disk)); g_module_symbol ( module, "plugin_db_disk_add_db_file", (gpointer *)(&func_gw_db_disk_add_db_file)); g_module_symbol ( module, "plugin_db_file_add_db_file", (gpointer *)(&func_gw_db_file_add_db_file)); g_module_symbol ( module, "plugin_db_catalog_remove_db_category", (gpointer *)(&func_gw_db_catalog_remove_db_category)); g_module_symbol ( module, "plugin_db_catalog_remove_db_disk", (gpointer *)(&func_gw_db_catalog_remove_db_disk)); g_module_symbol ( module, "plugin_db_catalog_remove_db_file", (gpointer *)(&func_gw_db_catalog_remove_db_file)); g_module_symbol ( module, "plugin_db_catalog_update", (gpointer *)(&func_gw_db_catalog_update)); g_module_symbol ( module, "plugin_db_category_update", (gpointer *)(&func_gw_db_category_update)); g_module_symbol ( module, "plugin_db_disk_update", (gpointer *)(&func_gw_db_disk_update)); g_module_symbol ( module, "plugin_db_file_update", (gpointer *)(&func_gw_db_file_update)); if ( func_gw_plugin_get_info!=NULL && func_gw_db_catalog_create!=NULL && func_gw_db_catalog_open!=NULL && func_gw_db_catalog_save!=NULL && func_gw_db_catalog_close!=NULL && func_gw_db_catalog_get_nb_db_files!=NULL && func_gw_db_catalog_get_nb_db_folders!=NULL && func_gw_db_catalog_get_nb_db_disks!=NULL && func_gw_db_catalog_get_db_catalog!=NULL && func_gw_db_catalog_get_db_category!=NULL && func_gw_db_catalog_get_db_disk!=NULL && func_gw_db_catalog_get_db_file!=NULL && func_gw_db_catalog_get_db_categories!=NULL && func_gw_db_catalog_get_db_disks!=NULL && func_gw_db_disk_get_nb_db_files!=NULL && func_gw_db_disk_get_nb_db_folders!=NULL && func_gw_db_disk_get_db_files!=NULL && func_gw_db_file_get_db_files!=NULL && func_gw_db_file_get_db_disk!=NULL && func_gw_db_file_get_parent_db_file!=NULL && func_gw_db_catalog_add_db_category!=NULL && func_gw_db_catalog_add_db_disk!=NULL && func_gw_db_disk_add_db_file!=NULL && func_gw_db_file_add_db_file!=NULL && func_gw_db_catalog_remove_db_category!=NULL && func_gw_db_catalog_remove_db_disk!=NULL && func_gw_db_catalog_remove_db_file!=NULL && func_gw_db_catalog_update!=NULL && func_gw_db_category_update!=NULL && func_gw_db_disk_update!=NULL && func_gw_db_file_update!=NULL ) { if ( (catalog_plugin = (GWCatalogPlugin*)g_malloc ( sizeof ( GWCatalogPlugin))) != NULL ) { memset ( catalog_plugin, '\0', sizeof ( GWCatalogPlugin)); catalog_plugin->gw_plugin_get_info = func_gw_plugin_get_info; catalog_plugin->gw_db_catalog_create = func_gw_db_catalog_create; catalog_plugin->gw_db_catalog_open = func_gw_db_catalog_open; catalog_plugin->gw_db_catalog_save = func_gw_db_catalog_save; catalog_plugin->gw_db_catalog_close = func_gw_db_catalog_close; if ( func_gw_db_catalog_get_capacity != NULL) { catalog_plugin->gw_db_catalog_get_capacity = func_gw_db_catalog_get_capacity; } else { catalog_plugin->gw_db_catalog_get_capacity = gw_helper_plugin_db_catalog_get_capacity; } if ( func_gw_db_catalog_get_full != NULL) { catalog_plugin->gw_db_catalog_get_full = func_gw_db_catalog_get_full; } else { catalog_plugin->gw_db_catalog_get_full = gw_helper_plugin_db_catalog_get_full; } if ( func_gw_db_catalog_get_free != NULL) { catalog_plugin->gw_db_catalog_get_free = func_gw_db_catalog_get_free; } else { catalog_plugin->gw_db_catalog_get_free = gw_helper_plugin_db_catalog_get_free; } catalog_plugin->gw_db_catalog_get_nb_db_files = func_gw_db_catalog_get_nb_db_files; catalog_plugin->gw_db_catalog_get_nb_db_folders = func_gw_db_catalog_get_nb_db_folders; catalog_plugin->gw_db_catalog_get_nb_db_disks = func_gw_db_catalog_get_nb_db_disks; catalog_plugin->gw_db_catalog_get_db_catalog = func_gw_db_catalog_get_db_catalog; catalog_plugin->gw_db_catalog_get_db_category = func_gw_db_catalog_get_db_category; catalog_plugin->gw_db_catalog_get_db_disk = func_gw_db_catalog_get_db_disk; catalog_plugin->gw_db_catalog_get_db_file = func_gw_db_catalog_get_db_file; catalog_plugin->gw_db_catalog_get_db_categories = func_gw_db_catalog_get_db_categories; catalog_plugin->gw_db_catalog_get_db_disks = func_gw_db_catalog_get_db_disks; catalog_plugin->gw_db_disk_get_nb_db_files = func_gw_db_disk_get_nb_db_files; catalog_plugin->gw_db_disk_get_nb_db_folders = func_gw_db_disk_get_nb_db_folders; catalog_plugin->gw_db_disk_get_db_files = func_gw_db_disk_get_db_files; catalog_plugin->gw_db_file_get_db_files = func_gw_db_file_get_db_files; if ( func_gw_db_catalog_get_db_category_by_index != NULL) { catalog_plugin->gw_db_catalog_get_db_category_by_index = func_gw_db_catalog_get_db_category_by_index; } else { catalog_plugin->gw_db_catalog_get_db_category_by_index = gw_helper_plugin_db_catalog_get_db_category_by_index; } if ( func_gw_db_catalog_get_db_category_by_name != NULL) { catalog_plugin->gw_db_catalog_get_db_category_by_name = func_gw_db_catalog_get_db_category_by_name; } else { catalog_plugin->gw_db_catalog_get_db_category_by_name = gw_helper_plugin_db_catalog_get_db_category_by_name; } if ( func_gw_db_catalog_get_db_disk_by_name != NULL) { catalog_plugin->gw_db_catalog_get_db_disk_by_name = func_gw_db_catalog_get_db_disk_by_name; } else { catalog_plugin->gw_db_catalog_get_db_disk_by_name = gw_helper_plugin_db_catalog_get_db_disk_by_name; } if ( func_gw_db_disk_get_db_file_by_name != NULL) { catalog_plugin->gw_db_disk_get_db_file_by_name = func_gw_db_disk_get_db_file_by_name; } else { catalog_plugin->gw_db_disk_get_db_file_by_name = gw_helper_plugin_db_disk_get_db_file_by_name; } if ( func_gw_db_file_get_db_file_by_name != NULL) { catalog_plugin->gw_db_file_get_db_file_by_name = func_gw_db_file_get_db_file_by_name; } else { catalog_plugin->gw_db_file_get_db_file_by_name = gw_helper_plugin_db_file_get_db_file_by_name; } catalog_plugin->gw_db_file_get_db_disk = func_gw_db_file_get_db_disk; catalog_plugin->gw_db_file_get_parent_db_file = func_gw_db_file_get_parent_db_file; if ( func_gw_db_file_get_location != NULL) { catalog_plugin->gw_db_file_get_location = func_gw_db_file_get_location; } else { catalog_plugin->gw_db_file_get_location = gw_helper_plugin_db_file_get_location; } catalog_plugin->gw_db_catalog_add_db_category = func_gw_db_catalog_add_db_category; catalog_plugin->gw_db_catalog_add_db_disk = func_gw_db_catalog_add_db_disk; catalog_plugin->gw_db_disk_add_db_file = func_gw_db_disk_add_db_file; catalog_plugin->gw_db_file_add_db_file = func_gw_db_file_add_db_file; catalog_plugin->gw_db_catalog_remove_db_category = func_gw_db_catalog_remove_db_category; catalog_plugin->gw_db_catalog_remove_db_disk = func_gw_db_catalog_remove_db_disk; catalog_plugin->gw_db_catalog_remove_db_file = func_gw_db_catalog_remove_db_file; catalog_plugin->gw_db_catalog_update = func_gw_db_catalog_update; catalog_plugin->gw_db_category_update = func_gw_db_category_update; catalog_plugin->gw_db_disk_update = func_gw_db_disk_update; catalog_plugin->gw_db_file_update = func_gw_db_file_update; plugin->data = catalog_plugin; result = TRUE; } else {} } else {} } else {} return result; } gboolean gw_plugin_unload_catalog_plugin ( gchar *key, GWPlugin *plugin, gpointer data) { gboolean result = TRUE; if ( key != NULL ) { g_free ( key); } else {} if ( plugin != NULL ) { if ( plugin->module != NULL ) { g_module_close ( plugin->module); } else {} g_free ( plugin); } return result; } gchar * gw_plugin_key_catalog_plugin ( GWPlugin *plugin) { gchar *key = NULL; GWCatalogPlugin *catalog_plugin = plugin->data; key = g_strdup ( gw_plugin_info_get_name ( catalog_plugin->gw_plugin_get_info ( ))); return key; } gint gw_pm_init ( ) { gint result = -1; GModule *module = NULL; gchar *module_path = NULL; func_get_author_t func_get_author = NULL; func_get_info_t func_get_info = NULL; func_get_help_t func_get_help = NULL; func_get_allowed_ext_t func_get_allowed_ext = NULL; func_get_allowed_name_t func_get_allowed_name = NULL; func_get_file_descr_t func_get_file_descr = NULL; func_get_files_descr_t func_get_files_descr = NULL; func_get_parent_descr_t func_get_parent_descr = NULL; DIR *plugins_descr_dir = NULL; struct dirent *dentry = NULL; char *so = NULL; gchar **allowed_ext = NULL; gchar **allowed_name = NULL; int i = 0; gchar *plugins_dir = NULL; #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( g_module_supported ( ) ) { if ( (my_plugins_manager.catalog_plugins = gw_plugin_manager_load_plugins ( gw_package_get_plugins_catalog_dir ( ), G_MODULE_SUFFIX, &gw_plugin_load_catalog_plugin, &gw_plugin_key_catalog_plugin)) != NULL) { /* Plugins are loaded. */ } else { /* Plugins loading failed. */ } my_plugins_manager.descr_plugins = g_hash_table_new ( g_str_hash, g_str_equal/*(GCompareFunc)strcasecmp*/); my_plugins_manager.file_descr_funcs = g_hash_table_new ( g_str_hash, g_str_equal/*(GCompareFunc)strcasecmp*/); my_plugins_manager.files_descr_funcs = g_hash_table_new ( g_str_hash, g_str_equal/*(GCompareFunc)strcasecmp*/); my_plugins_manager.parent_descr_funcs = g_hash_table_new ( g_str_hash, g_str_equal/*(GCompareFunc)strcasecmp*/); #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Starting the scan of %s...", PACKAGE_PLUGINS_DESCRIPTION_DIR); #endif if ( (plugins_dir = gw_package_get_plugins_description_dir ( )) != NULL ) { if ( (plugins_descr_dir = opendir ( plugins_dir)) != NULL ) { while ( (dentry = readdir ( plugins_descr_dir)) != NULL ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Current file is %s", dentry->d_name); #endif if ( dentry->d_name != NULL ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Checking the file %s", dentry->d_name); #endif if ( (so = strrchr ( dentry->d_name, '.')) != NULL ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "File extension is founded : %s", so); #endif if ( strcasecmp ( ++so, G_MODULE_SUFFIX) == 0 ) { /* The file extension is a valid extension for module file. */ #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "The file extension founded is supported : %s.", so); #endif module_path = g_strconcat ( PACKAGE_PLUGINS_DESCRIPTION_DIR, G_DIR_SEPARATOR_S, dentry->d_name, NULL); #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Trying to load %s...", module_path); #endif module = g_module_open ( module_path, 0); if ( module != NULL ) { g_module_symbol ( module, "plugin_get_author", (gpointer *)(&func_get_author)); g_module_symbol ( module, "plugin_get_info", (gpointer *)(&func_get_info)); g_module_symbol ( module, "plugin_get_help", (gpointer *)(&func_get_help)); g_module_symbol ( module, "plugin_get_allowed_ext", (gpointer *)(&func_get_allowed_ext)); g_module_symbol ( module, "plugin_get_allowed_name", (gpointer *)(&func_get_allowed_name)); g_module_symbol ( module, "plugin_get_file_descr", (gpointer *)(&func_get_file_descr)); g_module_symbol ( module, "plugin_get_files_descr", (gpointer *)(&func_get_files_descr)); g_module_symbol ( module, "plugin_get_parent_descr", (gpointer *)(&func_get_parent_descr)); if ( (func_get_author != NULL) && (func_get_info != NULL) && (func_get_help != NULL) ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Module name is %s", g_module_name ( module)); gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Module author is %s", func_get_author ( )!=NULL?func_get_author ( ):""); gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Module info is %s", func_get_info ( )!=NULL?func_get_info ( ):""); gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Module help is %s", func_get_help ( )!=NULL?func_get_help ( ):""); #endif if ( (func_get_allowed_ext != NULL) && (func_get_file_descr != NULL) ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Module allowed_ext is %s", func_get_allowed_ext ( )); #endif if ( (func_get_allowed_ext ( ) != NULL) && (strlen ( func_get_allowed_ext ( )) > 0) ) { allowed_ext = g_strsplit ( func_get_allowed_ext ( ), "|", -1); if ( allowed_ext != NULL ) { for ( i = 0; allowed_ext[i] != NULL; i++) { g_hash_table_insert ( my_plugins_manager.descr_plugins, g_strdup ( func_get_allowed_ext ( )), module); #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "plugin %s added", allowed_ext[i]); #endif g_strdown ( allowed_ext[i]); g_hash_table_insert ( my_plugins_manager.file_descr_funcs, g_strdup ( allowed_ext[i]), func_get_file_descr); } g_strfreev ( allowed_ext); allowed_ext = NULL; } } } if ( (func_get_allowed_name != NULL) && (func_get_allowed_name ( ) != NULL) && ((func_get_files_descr != NULL) || (func_get_parent_descr != NULL)) ) { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Module allowed_name is %s", func_get_allowed_name ( )); #endif if ( (func_get_allowed_name ( ) != NULL) && (strlen ( func_get_allowed_name ( )) > 0) ) { allowed_name = g_strsplit ( func_get_allowed_name ( ), "|", -1); if ( allowed_name != NULL ) { for ( i = 0; allowed_name[i] != NULL; i++) { g_hash_table_insert ( my_plugins_manager.descr_plugins, g_strdup ( func_get_allowed_name ( )), module); g_strdown ( allowed_name[i]); if ( func_get_files_descr != NULL ) { g_hash_table_insert ( my_plugins_manager.files_descr_funcs, g_strdup ( allowed_name[i]), func_get_files_descr); #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "plugin %s added", allowed_name[i]); #endif } if ( func_get_parent_descr != NULL ) { g_hash_table_insert ( my_plugins_manager.parent_descr_funcs, g_strdup ( allowed_name[i]), func_get_parent_descr); #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "plugin %s added", allowed_name[i]); #endif } } g_strfreev ( allowed_name); allowed_name = NULL; } } } } } else { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "unabble to load plugin %s, error :%s", dentry->d_name, g_module_error ( )); #endif } g_free ( module_path); module_path = NULL; } else { /* The file extension is not supported as module file extension. */ #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "The file extension founded is not supported : %s.", so); #endif } } else { /* Unable to find the file extension. */ #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "No file extension has been founded.", NULL); #endif } so = NULL; } else { /* Unable to get the file name. */ #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "File name is null (inode=%d).", dentry->d_ino); #endif } } closedir ( plugins_descr_dir); } else { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "%s not found.", PACKAGE_PLUGINS_DESCRIPTION_DIR); #endif } g_free ( plugins_dir); } #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Scan of %s is stopped.", PACKAGE_PLUGINS_DESCRIPTION_DIR); #endif gw_pm_set_current_catalog_plugin ( gw_pm_get_default_catalog_plugin ( )); } else { #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Dynamic modules are not supported!!"); #endif } return result; } gboolean gw_pm_module_close ( gchar * key, GModule *value, gpointer data) { gboolean result = FALSE; #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( key != NULL ) { g_free ( key); } if ( value != NULL ) { g_module_close ( value); } return result; } gint gw_pm_get_file_descr_func ( const gchar *ext, func_get_file_descr_t *f) { gint result = -1; gchar *ext_lower = NULL; #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( (my_plugins_manager.file_descr_funcs != NULL) && (ext != NULL) ) { g_strdown ( ext_lower = g_strdup ( ext)); *f = g_hash_table_lookup ( my_plugins_manager.file_descr_funcs, ext_lower); g_free ( ext_lower); } return result; } gint gw_pm_get_files_descr_func ( const gchar *name, func_get_files_descr_t *f) { gint result = -1; gchar *name_lower = NULL; #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( (my_plugins_manager.files_descr_funcs != NULL) && ( name != NULL) ) { g_strdown ( name_lower = g_strdup ( name)); *f = g_hash_table_lookup ( my_plugins_manager.files_descr_funcs, name_lower); g_free ( name_lower); } return result; } gint gw_pm_get_parent_descr_func ( const gchar *name, func_get_parent_descr_t *f) { gint result = -1; gchar *name_lower = NULL; #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( (my_plugins_manager.parent_descr_funcs != NULL) && (name != NULL) ) { g_strdown ( name_lower = g_strdup ( name)); *f = g_hash_table_lookup ( my_plugins_manager.parent_descr_funcs, name_lower); g_free ( name_lower); } return result; } gint gw_pm_exit ( ) { gint result = -1; #if GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( my_plugins_manager.catalog_plugins != NULL ) { // g_hash_table_foreach_remove ( my_plugins_manager.catalog_plugins, (GHRFunc)gw_pm_module_close, NULL); g_hash_table_foreach_remove ( my_plugins_manager.catalog_plugins, (GHRFunc)gw_plugin_unload_catalog_plugin, NULL); g_hash_table_destroy ( my_plugins_manager.catalog_plugins); my_plugins_manager.catalog_plugins = NULL; } if ( my_plugins_manager.file_descr_funcs != NULL ) { g_hash_table_destroy ( my_plugins_manager.file_descr_funcs); my_plugins_manager.file_descr_funcs = NULL; } if ( my_plugins_manager.files_descr_funcs != NULL ) { g_hash_table_destroy ( my_plugins_manager.files_descr_funcs); my_plugins_manager.files_descr_funcs = NULL; } if ( my_plugins_manager.parent_descr_funcs != NULL ) { g_hash_table_destroy ( my_plugins_manager.parent_descr_funcs); my_plugins_manager.parent_descr_funcs = NULL; } if ( my_plugins_manager.descr_plugins != NULL ) { g_hash_table_foreach_remove ( my_plugins_manager.descr_plugins, (GHRFunc)gw_pm_module_close, NULL); g_hash_table_destroy ( my_plugins_manager.descr_plugins); my_plugins_manager.descr_plugins = NULL; } return result; } GWCatalogPlugin * gw_pm_get_catalog_plugin ( gchar* name) { GWCatalogPlugin * catalog_plugin = NULL; if ( my_plugins_manager.catalog_plugins != NULL) { GWPlugin *plugin = g_hash_table_lookup ( my_plugins_manager.catalog_plugins, name); if ( plugin != NULL) { catalog_plugin = plugin->data; } else {} } else {} return catalog_plugin; } GWCatalogPlugin * gw_pm_get_default_catalog_plugin ( ) { //TODO read the plugin name in the settings return gw_pm_get_catalog_plugin ( "GWhere catalog"); } void gw_pm_add_plugin_name ( gpointer key, gpointer value, gpointer data) { gchar **names = data; gchar *name = key; GWPlugin *plugin = value; gint i = 0; if ( data!=NULL && key!=NULL) { /* Doesn't add the current catalog plugin */ if ( plugin->data != gw_pm_get_current_catalog_plugin ( )) { for ( i = 0; names[i] != NULL; i++); names[i] = name; } else {} } } gchar ** gw_pm_get_all_catalog_import_plugin_name ( ) { gchar **names = NULL; gint i = 0, nb = 0; if ( my_plugins_manager.catalog_plugins != NULL ) { if ( (nb = g_hash_table_size ( my_plugins_manager.catalog_plugins)) > 0 ) { if ( gw_pm_get_current_catalog_plugin ( ) != NULL ) { nb--; } names = (gchar**)g_malloc0 ( sizeof ( gchar*) * ( nb + 1)); for ( i = 0; i < (nb + 1); i++) names[i] = NULL; g_hash_table_foreach ( my_plugins_manager.catalog_plugins, (GHFunc)gw_pm_add_plugin_name, names); } else {} } else {} return names; } gchar ** gw_pm_get_all_catalog_export_plugin_name ( ) { gchar **names = NULL; gint i = 0, nb = 0; if ( my_plugins_manager.catalog_plugins != NULL ) { if ( (nb = g_hash_table_size ( my_plugins_manager.catalog_plugins)) > 0 ) { if ( gw_pm_get_current_catalog_plugin ( ) != NULL ) { nb--; } names = (gchar**)g_malloc0 ( sizeof ( gchar*) * ( nb + 1)); for ( i = 0; i < (nb + 1); i++) names[i] = NULL; g_hash_table_foreach ( my_plugins_manager.catalog_plugins, (GHFunc)gw_pm_add_plugin_name, names); } else {} } else {} return names; } void gw_pm_set_current_catalog_plugin ( GWCatalogPlugin *ctg_plugin) { my_plugins_manager.current_ctg_plugin = ctg_plugin; } GWCatalogPlugin * gw_pm_get_current_catalog_plugin ( ) { return my_plugins_manager.current_ctg_plugin; } void gw_pm_set_selected_import_catalog_plugin ( GWCatalogPlugin *ctg_plugin) { my_plugins_manager.selected_import_ctg_pugin = ctg_plugin; } GWCatalogPlugin * gw_pm_get_selected_import_catalog_plugin ( ) { return my_plugins_manager.selected_import_ctg_pugin; } void gw_pm_set_selected_export_catalog_plugin ( GWCatalogPlugin *ctg_plugin) { my_plugins_manager.selected_export_ctg_pugin = ctg_plugin; } GWCatalogPlugin * gw_pm_get_selected_export_catalog_plugin ( ) { return my_plugins_manager.selected_export_ctg_pugin; } gwhere-0.2.3/src/gwpluginsmanager.h0000744000175000017500000001106110247706151015754 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwpluginsmanager.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a component to manage GWhere application. * @author Sébastien LECACHEUR * @author Grégory BLOQUEL * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwpluginsmanager.c * @ref plugins/gwdescr.h * @ref plugins/gwcatalog.h * @author Author */ #ifndef GW_PLUGINS_MANAGER_H #define GW_PLUGINS_MANAGER_H #include #include "plugins/gwdescr.h" #include "plugins/gwcatalog.h" /*! * @typedef GWPluginsManager * @discussion Common data structure for the plugin manager * @field catalog_plugins list of all catalog plugins * @field descr_plugins list of all description plugins */ typedef struct gw_plugins_manager { GHashTable *catalog_plugins; GHashTable *descr_plugins; GHashTable *file_descr_funcs; GHashTable *files_descr_funcs; GHashTable *parent_descr_funcs; GWCatalogPlugin *current_ctg_plugin; GWCatalogPlugin *selected_import_ctg_pugin; GWCatalogPlugin *selected_export_ctg_pugin; }GWPluginsManager; /*! * @function gw_pm_init * @abstract Initializes the plugins settings. * @discussion This function initializes the plugins settings. * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_pm_init ( ); /*! * @function gw_pm_get_file_descr_func * @abstract Gets the function to use from one file extension. * @discussion This function gets the function to use from one file extension. * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_pm_get_file_descr_func ( const gchar *ext, func_get_file_descr_t *f); /*! * @function gw_pm_get_files_descr_func * @abstract Gets the function to use from one file extension. * @discussion This function gets the function to use from one file extension. * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_pm_get_files_descr_func ( const gchar *ext, func_get_files_descr_t *f); /*! * @function gw_pm_get_parent_descr_func * @abstract Gets the function to use from one file extension. * @discussion This function gets the function to use from one file extension. * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_pm_get_parent_descr_func ( const gchar *ext, func_get_parent_descr_t *f); /*! * @function gw_pm_exit * @abstract Exits the plugins manager and processes to all savings. * @discussion This function exits the plugins manager and processes to all savings. * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured. */ gint gw_pm_exit ( ); GWCatalogPlugin * gw_pm_get_default_catalog_plugin ( ); GWCatalogPlugin * gw_pm_get_catalog_plugin ( gchar* name); gchar ** gw_pm_get_all_catalog_import_plugin_name ( ); gchar ** gw_pm_get_all_catalog_export_plugin_name ( ); void gw_pm_set_current_catalog_plugin ( GWCatalogPlugin *ctg_plugin); GWCatalogPlugin * gw_pm_get_current_catalog_plugin ( ); void gw_pm_set_selected_import_catalog_plugin ( GWCatalogPlugin *ctg_plugin); GWCatalogPlugin * gw_pm_get_selected_import_catalog_plugin ( ); void gw_pm_set_selected_export_catalog_plugin ( GWCatalogPlugin *ctg_plugin); GWCatalogPlugin * gw_pm_get_selected_export_catalog_plugin ( ); #endif gwhere-0.2.3/src/gwsearchengine.c0000744000175000017500000004026610256622232015374 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gwsupport.h" #include "gwsearchengine.h" #include #include /* strcmp */ #include "data/gwdata.h" #include "tools/gwtools.h" #include "res/gwres.h" #include "gui/gwgui.h" #include "gwapplicationmanager.h" #include "gwguimanager.h" #include "gwhelper.h" gulong search_engine_search_in_disk ( GtkWindow *w, struct user_quick_search *uqs) { GtkCList *clist_result = NULL; GtkCTreeNode *root = gw_gui_manager_main_interface_get_tree_root ( ); struct engine_quick_search *engine_qs = NULL; gulong result = 0; gboolean all_words = FALSE; GWRegex regex; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWCatalogPlugin *plugin = NULL; GWDBDisk **disks = NULL; GWDBFile **files = NULL; gint i = 0, j = 0; GWDBCategory *category = NULL; if ( context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { engine_qs = user_quick_search_to_engine_quick_search ( uqs); if ( (all_words = gw_am_get_settings_tol ( GW_VALUE_APP_SEARCH_TYPE_KEY_WORDS_MODE)) == -1 ) { all_words = GW_VALUE_APP_SEARCH_TYPE_KEY_WORDS_MODE_DEFAULT; } engine_quick_search_set_match_all_key_words ( engine_qs, !all_words); clist_result = gw_notebook_search_get_clist_search ( w); memset ( ®ex, '\0', sizeof ( GWRegex)); if ( engine_quick_search_get_type ( engine_qs) != SEARCH_TYPE_KEY_WORDS ) { if ( regcomp ( &(regex.r), engine_quick_search_get_pattern ( engine_qs), (engine_quick_search_get_case_sensitive ( engine_qs)==FALSE?REG_ICASE:0)|REG_NOSUB) != 0) { /* Regcomp error!! */ } } if ( (root != NULL) && ( ((engine_quick_search_get_type ( engine_qs) == SEARCH_TYPE_KEY_WORDS) && (engine_quick_search_get_key_words ( engine_qs) != NULL)) || (engine_quick_search_get_pattern ( engine_qs) != NULL)) ) { /* Clears the old search result */ gtk_clist_clear ( clist_result); /* Browses all disks of catalog */ if ( (disks = plugin->gw_db_catalog_get_db_disks ( context)) != NULL) { for ( i = 0; disks[i] != NULL; i++) { category = plugin->gw_db_catalog_get_db_category ( context, gw_db_disk_get_category ( disks[i])); if ( search_engine_check_disk_match ( disks[i], category, engine_qs, ®ex) == 0 ) { search_engine_add_disk ( clist_result, disks[i], category); result++; } else { gw_db_category_free ( category); } if ( (files = plugin->gw_db_disk_get_db_files ( context, gw_db_disk_get_ref ( disks[i]))) != NULL) { for ( j = 0; files[j] != NULL; j++) { category = plugin->gw_db_catalog_get_db_category ( context, gw_db_file_get_category ( files[j])); if ( search_engine_check_file_match ( files[j], category, engine_qs, ®ex) == 0 ) { search_engine_add_item ( clist_result, files[j], category); result++; } else { gw_db_category_free ( category); } if ( gw_db_file_is_real_directory ( files[j])) { result += search_engine_search_in_dir ( files[j], engine_qs, ®ex); } else {} gw_db_file_free ( files[j]); } g_free ( files); } else {} gw_db_disk_free ( disks[i]); } g_free ( disks); } } if ( engine_quick_search_get_type ( engine_qs) != SEARCH_TYPE_KEY_WORDS ) { regfree ( &(regex.r)); } } else {} } else {} return result; } gulong search_engine_search_in_dir ( GWDBFile *folder, struct engine_quick_search *eqs, GWRegex *regex) { GtkCList *clist_result = NULL; GtkWindow *window = gw_gui_manager_main_interface_get_main_window ( ); gulong result = 0; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWCatalogPlugin *plugin = NULL; GWDBFile **files = NULL; GWDBCategory *category = NULL; gint i = 0; if ( context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { clist_result = gw_notebook_search_get_clist_search ( window); if ( (files = plugin->gw_db_file_get_db_files ( context, gw_db_file_get_ref ( folder))) != NULL) { for ( i = 0; files[i] != NULL; i++) { category = plugin->gw_db_catalog_get_db_category ( context, gw_db_file_get_category ( files[i])); if ( search_engine_check_file_match ( files[i], category, eqs, regex) == 0 ) { search_engine_add_item ( clist_result, files[i], category); result++; } else { gw_db_category_free ( category); } if ( gw_db_file_is_real_directory ( files[i])) { result += search_engine_search_in_dir ( files[i], eqs, regex); } else { } gw_db_file_free ( files[i]); } g_free ( files); } else { } } else {} } else {} return result; } gint search_engine_check_disk_match ( GWDBDisk *disk, GWDBCategory *category, struct engine_quick_search *eqs, GWRegex *regex) { gint result = -1; gchar *word = NULL; gchar **words = NULL; gint i = 0; gint all_words = -1; gboolean case_sensitive; if ( ( disk != NULL ) || ( eqs != NULL ) ) { if ( engine_quick_search_get_match_disk ( eqs) ) { case_sensitive = engine_quick_search_get_case_sensitive ( eqs); if ( engine_quick_search_get_type ( eqs) == SEARCH_TYPE_KEY_WORDS ) { words = engine_quick_search_get_key_words ( eqs); all_words = !engine_quick_search_get_match_all_key_words ( eqs); if ( all_words == 0) { result = -1; for ( i = 0; ((words[i] != NULL) && ( result == -1)); i++) { if ( gw_strcmp_strregex ( gw_db_disk_get_name ( disk), words[i], case_sensitive) == 0 ) { result = 0; break; } } if ( engine_quick_search_get_match_category ( eqs) && category != NULL ) { for ( i = 0; ((words[i] != NULL) && ( result == -1)); i++) { if ( gw_strcmp_strregex ( gw_db_category_get_name ( category), words[i], case_sensitive) == 0 ) { result = 0; break; } } } if ( engine_quick_search_get_match_description ( eqs) && gw_db_disk_get_description ( disk) != NULL ) { for ( i = 0; ((words[i] != NULL) && ( result == -1)); i++) { if ( gw_strcmp_strregex ( gw_db_disk_get_description ( disk), words[i], case_sensitive) == 0 ) { result = 0; break; } } } } else { result = 0; for ( i = 0; ((words[i] != NULL) && ( result == 0)); i++) { if ( gw_strcmp_strregex ( gw_db_disk_get_name ( disk), words[i], case_sensitive) != 0 ) { result = -1; break; } } if ( result != 0) { if ( engine_quick_search_get_match_category ( eqs) ) { result = 0; for ( i = 0; ((words[i] != NULL) && ( result == 0)); i++) { if ( gw_strcmp_strregex ( gw_db_category_get_name ( category), words[i], case_sensitive) != 0 ) { result = -1; break; } } } if ( result != 0 ) { if ( engine_quick_search_get_match_description ( eqs) ) { result = 0; for ( i = 0; ((words[i] != NULL) && ( result == 0)); i++) { if ( gw_strcmp_strregex ( gw_db_disk_get_description ( disk), words[i], case_sensitive) != 0 ) { result = -1; break; } } } } } } } else { word = engine_quick_search_get_pattern ( eqs); if ( (regexec ( &(regex->r), gw_db_disk_get_name ( disk), 0, NULL, 0) == 0 ) || (engine_quick_search_get_match_category ( eqs) && gw_db_category_get_name ( category) != NULL && regexec ( &(regex->r), gw_db_category_get_name ( category), 0, NULL, 0) == 0) || (engine_quick_search_get_match_description ( eqs) && gw_db_disk_get_description ( disk) != NULL && regexec ( &(regex->r), gw_db_disk_get_description ( disk), 0, NULL, 0) == 0)) { result = 0; } } } } return result; } gint search_engine_check_file_match ( GWDBFile *file, GWDBCategory *category, struct engine_quick_search *eqs, GWRegex *regex) { gint result = -1; gchar *word = NULL; gchar **words = NULL; gint i = 0; gint all_words = -1; gboolean case_sensitive; if ( ( file != NULL ) || ( eqs != NULL ) ) { if ( ( engine_quick_search_get_match_file ( eqs) && !gw_db_file_is_real_directory ( file) ) || ( engine_quick_search_get_match_folder ( eqs) && gw_db_file_is_real_directory ( file) ) ) { case_sensitive = engine_quick_search_get_case_sensitive ( eqs); if ( engine_quick_search_get_type ( eqs) == SEARCH_TYPE_KEY_WORDS ) { words = engine_quick_search_get_key_words ( eqs); all_words = !engine_quick_search_get_match_all_key_words ( eqs); if ( all_words == 0) { result = -1; for ( i = 0; ((words[i] != NULL) && ( result == -1)); i++) { if ( gw_strcmp_strregex ( gw_db_file_get_name ( file), words[i], case_sensitive) == 0 ) { result = 0; break; } } if ( engine_quick_search_get_match_category ( eqs) && category != NULL ) { for ( i = 0; ((words[i] != NULL) && ( result == -1)); i++) { if ( gw_strcmp_strregex ( gw_db_category_get_name ( category), words[i], case_sensitive) == 0 ) { result = 0; break; } } } if ( engine_quick_search_get_match_description ( eqs) && gw_db_file_get_description ( file) != NULL ) { for ( i = 0; ((words[i] != NULL) && ( result == -1)); i++) { if ( gw_strcmp_strregex ( gw_db_file_get_description ( file), words[i], case_sensitive) == 0 ) { result = 0; break; } } } } else { result = 0; for ( i = 0; ((words[i] != NULL) && ( result == 0)); i++) { if ( gw_strcmp_strregex ( gw_db_file_get_name ( file), words[i], case_sensitive) != 0 ) { result = -1; break; } } if ( result != 0 ) { if ( engine_quick_search_get_match_category ( eqs) ) { result = 0; for ( i = 0; ((words[i] != NULL) && ( result == 0)); i++) { if ( gw_strcmp_strregex ( gw_db_category_get_name ( category), words[i], case_sensitive) != 0 ) { result = -1; break; } } } if ( result != 0 ) { if ( engine_quick_search_get_match_description ( eqs) && gw_db_file_get_description ( file) != NULL ) { result = 0; for ( i = 0; ((words[i] != NULL) && ( result == 0)); i++) { if ( gw_strcmp_strregex ( gw_db_file_get_description ( file), words[i], case_sensitive) != 0 ) { result = -1; break; } } } } } } } else { word = engine_quick_search_get_pattern ( eqs); if ( (regexec ( &(regex->r), gw_db_file_get_name ( file), 0, NULL, 0) == 0 ) || (engine_quick_search_get_match_category ( eqs) && gw_db_category_get_name ( category) != NULL && regexec ( &(regex->r), gw_db_category_get_name ( category), 0, NULL, 0) == 0) || (engine_quick_search_get_match_description ( eqs) && gw_db_file_get_description ( file) != NULL && regexec ( &(regex->r), gw_db_file_get_description ( file), 0, NULL, 0) == 0)) { result = 0; } } } } return result; } gint search_engine_add_item ( GtkCList *clist, GWDBFile *file, GWDBCategory *category) { gint result = -1; gchar *info[7]; gint row, i; gchar *text_utf8 = NULL; gchar *location = NULL, *tmp = NULL; struct search_item_info *search_item = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWCatalogPlugin *plugin = NULL; GWDBDisk *disk = NULL; if ( context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { if ( file != NULL ) { disk = plugin->gw_db_file_get_db_disk ( context, gw_db_file_get_ref ( file)); g_strdup_to_gtk_text ( gw_db_file_get_name ( file), info[0]); g_strdup_to_gtk_text ( gw_db_disk_get_name ( disk), info[1]); g_strdup_to_gtk_text ( (location = plugin->gw_db_file_get_location ( context, gw_db_file_get_ref ( file))), info[2]); text_utf8 = gw_l_byte_to_str_format ( gw_db_file_get_size ( file)); g_strdup_to_gtk_text ( text_utf8, info[3]); g_free ( text_utf8); tmp = gw_helper_db_file_get_cdate_to_str ( file); g_strdup_to_gtk_text ( tmp, info[4]); g_free ( tmp); g_strdup_to_gtk_text ( gw_db_category_get_name ( category), info[5]); g_strdup_to_gtk_text ( gw_db_file_get_description ( file), info[6]); gw_str_replace_char ( info[6], '\n', ' '); row = gtk_clist_append ( clist, info); search_item = search_item_info_new ( ); if ( gw_db_file_is_real_directory ( file)) { search_item_info_set_type ( search_item, SEARCH_ITEM_TYPE_FOLDER); } else { search_item_info_set_type ( search_item, SEARCH_ITEM_TYPE_FILE); } search_item_info_set_name ( search_item, g_strdup ( gw_db_file_get_name ( file))); search_item_info_set_disk ( search_item, g_strdup ( gw_db_disk_get_name ( disk))); search_item_info_set_path ( search_item, location); search_item_info_set_size ( search_item, gw_db_file_get_size ( file)); search_item_info_set_date ( search_item, gw_db_file_get_cdate ( file)); search_item_info_set_category ( search_item, category); if ( gw_db_file_get_description ( file) != NULL ) { search_item_info_set_description ( search_item, g_strdup ( gw_db_file_get_description ( file))); } /* Note : doesn't give the free function else data will be destroy from database */ gtk_clist_set_row_data_full ( clist, row, (struct search_item_info*)search_item, /*(GtkDestroyNotify)search_item_info_free*/NULL); if ( gw_db_file_is_real_directory ( file)) { gtk_clist_set_pixtext ( clist, row, 0, info[0], 5, PixFolder, MskFolder); } else { gtk_clist_set_pixtext ( clist, row, 0, info[0], 5, PixFile, MskFile); } for ( i = 0; i <= 6; i++) { g_free ( info[i]); } gw_db_disk_free ( disk); result = 0; } } else {} } else {} return result; } gint search_engine_add_disk ( GtkCList *clist, GWDBDisk *disk, GWDBCategory *category) { gint result = -1; gchar *info[7]; gint row, i; gchar *text_utf8 = NULL; gchar *tmp = NULL; struct search_item_info *search_item = NULL; if ( disk != NULL ) { g_strdup_to_gtk_text ( gw_db_disk_get_name ( disk), info[0]); g_strdup_to_gtk_text ( gw_db_disk_get_name ( disk), info[1]); g_strdup_to_gtk_text ( "", info[2]); text_utf8 = gw_ui64_byte_to_str_format ( gw_db_disk_get_full ( disk)); g_strdup_to_gtk_text ( text_utf8, info[3]); g_free ( text_utf8); tmp = gw_helper_db_disk_get_date_to_str ( disk); g_strdup_to_gtk_text ( tmp, info[4]); g_free ( tmp); g_strdup_to_gtk_text ( gw_db_category_get_name ( category), info[5]); g_strdup_to_gtk_text ( gw_db_disk_get_description ( disk), info[6]); gw_str_replace_char ( info[6], '\n', ' '); row = gtk_clist_append ( clist, info); //TODO don't use SearchItem but DiskInfo search_item = search_item_info_new ( ); search_item_info_set_type ( search_item, SEARCH_ITEM_TYPE_DISK); search_item_info_set_name ( search_item, g_strdup ( gw_db_disk_get_name ( disk))); search_item_info_set_disk ( search_item, g_strdup ( gw_db_disk_get_name ( disk))); search_item_info_set_size ( search_item, gw_db_disk_get_full ( disk)); search_item_info_set_date ( search_item, gw_db_disk_get_date ( disk)); search_item_info_set_category ( search_item, category); search_item_info_set_description ( search_item, g_strdup ( gw_db_disk_get_description ( disk))); /* Note : doesn't give the free function else data will be destroy from database */ gtk_clist_set_row_data_full ( clist, row, (struct search_item_info*)search_item, (GtkDestroyNotify) search_item_info_free); gtk_clist_set_pixtext ( clist, row, 0, info[0], 5, gw_helper_db_disk_get_pixmap ( disk), gw_helper_db_disk_get_bitmap ( disk)); for ( i = 0; i <= 6; i++) { g_free ( info[i]); } result = 0; } return result; } gwhere-0.2.3/src/gwsearchengine.h0000744000175000017500000001174610222307465015403 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsearchengine.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a component to manage GWhere application. * @author Sébastien LECACHEUR * @author Grégory BLOQUEL * @version 1.0 2003/02/10 * @see gwsupport.h * @see data/gwenginequicksearch.h * @see data/gwuserquicksearch.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwsearchengine.c * @author Author */ #ifndef GW_SEARCH_ENGINE_H #define GW_SEARCH_ENGINE_H #include #include /* regcomp regexec */ #include "data/gwdata.h" typedef struct gw_regex_s { regex_t r; gint cflags; size_t no_sub; } GWRegex; /*! * @function search_engine_search_in_disk * @abstract Searchs items in a disk. * @discussion This function searchs items in a disk. * @param w the main window * @param uqs the user quick search to search * @result the number of matched items. */ gulong search_engine_search_in_disk ( GtkWindow *w, struct user_quick_search *uqs); /*! * @function search_engine_search_in_dir * @abstract Searchs items in a directory. * @discussion This function searchs items in a directory. * @param w the main window * @param eqs the engine quick search to search * @result the number of matched items. */ //gulong search_engine_search_in_dir ( GtkCTree *ctree, GtkCTreeNode *node, struct engine_quick_search *eqs, GWRegex *regex); gulong search_engine_search_in_dir ( GWDBFile *folder, struct engine_quick_search *eqs, GWRegex *regex); /*! * @function search_engine_check_disk_match * @abstract Checks if specified disk matched with search. * @discussion This function checks if specified disk matched with search. * @param disk the disk information to check * @param eqs the search properties * @result Returns 0 if the disk matches.
* Returns -1 otherwise or if an error occured. */ //gint search_engine_check_disk_match ( struct disk_info *disk, struct engine_quick_search *eqs, GWRegex *regex); gint search_engine_check_disk_match ( GWDBDisk *disk, GWDBCategory *category, struct engine_quick_search *eqs, GWRegex *regex); /*! * @function search_engine_check_file_match * @abstract Checks if specified file matched with search. * @discussion This function checks if specified file matched with search. * @param file the file information to check * @param eqs the search properties * @result Returns 0 if the file matches.
* Returns -1 otherwise or if an error occured. */ //gint search_engine_check_file_match ( struct file_info *file, struct engine_quick_search *eqs, GWRegex *regex); gint search_engine_check_file_match ( GWDBFile *file, GWDBCategory *category, struct engine_quick_search *eqs, GWRegex *regex); /*! * @function search_engine_add_item * @abstract Adds a file in the search result list. * @discussion This function adds a file in the search result list. * @param clist the search result list * @param ctree the tree where is the file to add * @param node the node where is the file to add * @param file the file information to add * @result an error code.
* Returns -1 if an error occured. */ //gint search_engine_add_item ( GtkCList *clist, GtkCTree *ctree, GtkCTreeNode *node, struct file_info *file_info); gint search_engine_add_item ( GtkCList *clist, GWDBFile *file, GWDBCategory *category); /*! * @function search_engine_add_disk * @abstract Adds a disk in the search result list. * @discussion This function adds a disk in the search result list. * @param clist the search result list * @param ctree the tree where is the file to add * @param node the node where is the file to add * @param disk the disk information to add * @result an error code.
* Returns -1 if an error occured. */ //gint search_engine_add_disk ( GtkCList *clist, GtkCTree *ctree, GtkCTreeNode *node, struct disk_info *disk_info); gint search_engine_add_disk ( GtkCList *clist, GWDBDisk *disk, GWDBCategory *category); #endif gwhere-0.2.3/src/gwsupermount.c0000744000175000017500000012651010271302602015150 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gwsupport.h" #include "gwsupermount.h" #include /* To open and close files */ #include #include #include /* malloc free */ #include /* codes d'erreur */ #include /* strncmp */ #include /* sprintf */ /* To mount partition */ #include #if defined ( OS_LINUX) || defined ( OS_CYGWIN) /* To get informations about a file system */ #include /* To eject a CD */ #include #include #endif #if defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) /* To eject a CD */ #include #include #include #define CDROMEJECT CDIOCEJECT #endif /* To eject a CD. */ #if defined ( OS_WIN32) || defined ( OS_CYGWIN_DEPRECATED) #include #include #endif /* Must be after gwsupport.h!! */ #if defined ( OS_LINUX) /* #include */ #include #endif #if defined ( OS_LINUX) #include #include #endif #if defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) #include #include #include #endif #if defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) #include #endif #if defined ( OS_CYGWIN) #include /* cygwin_conv_to_full_win32_path */ #endif #if defined ( OS_CYGWIN) || defined ( OS_WIN32) #include /* opendir */ #include /* opendir */ #endif #if defined ( OS_WIN32) || defined ( OS_CYGWIN) #include #include #include /* GetLogicalDriveStrings*/ #include /* toupper */ #include #include #if defined ( OS_WIN32) #include #endif /* Define the structures to eject under Win95/98/Me */ #if !defined ( VWIN32_DIOC_DOS_IOCTL) #define VWIN32_DIOC_DOS_IOCTL 1 typedef struct _DIOC_REGISTERS { DWORD reg_EBX; DWORD reg_EDX; DWORD reg_ECX; DWORD reg_EAX; DWORD reg_EDI; DWORD reg_ESI; DWORD reg_Flags; } DIOC_REGISTERS, *PDIOC_REGISTERS; #endif /* VWIN32_DIOC_DOS_IOCTL */ #endif GList * gw_get_drives_list ( GList *g) { #if defined ( HAVE_MOUNT_SYSTEM) && !defined (OS_LINUX) && !defined (OS_FREEBSD) && !defined (OS_OPENBSD) && !defined (OS_NETBSD) #if defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) struct fstab *partition = NULL; gchar *fsname = NULL; gint status = -1; gint i = 0; struct statfs *mnt = NULL; int count = 0; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif #ifdef GW_DEBUG_MODE count = getmntinfo ( &mnt, MNT_NOWAIT); g_print ( "%d mount points are listed in getmntinfo()\n",count); #endif for ( i = 0; i < count; i++) { #ifdef GW_DEBUG_MODE g_print("%s at %d position\n",mnt[i].f_mntfromname,i); #endif if ( mnt[i].f_fstypename!=NULL && strcmp(mnt[i].f_fstypename!=NULL,"procfs")!=0 && strcmp(mnt[i].f_fstypename!=NULL,"kernfs")!=0 && strcmp(mnt[i].f_fstypename!=NULL,"swap")!=0) { #ifdef GW_DEBUG_MODE g_print ( "getfsent() : add %s\n",mnt[i].f_mntonname); #endif fsname = g_strdup ( mnt[i].f_mntonname); g = g_list_insert_sorted ( g, fsname, (GCompareFunc)strcmp); } else { #ifdef GW_DEBUG_MODE g_print ( "getfsent() : fstab->fs_vfstype==%s for %s\n",mnt[i].f_mntfromname,mnt[i].f_mntonname); #endif } } #ifdef __DEPRECATED__ /* Opens the /etc/fstab file. */ if ( (status = setfsent ( )) == 1 ) { while ( (partition = getfsent ( )) != NULL) { i++; g_print("%s at %d position\n",partition->fs_spec,i); if ( partition->fs_vfstype != NULL ) { if ( (strcmp ( partition->fs_vfstype, "procfs") != 0) && (strcmp ( partition->fs_vfstype, "kernfs") != 0) && (strcmp ( partition->fs_vfstype, "swap") != 0) ) { g_print ( "getfsent() : add %s\n",partition->fs_file); fsname = g_strdup ( partition->fs_file); g = g_list_insert_sorted ( g, fsname, (GCompareFunc)strcmp); } else { g_print ( "getfsent() : fstab->fs_vfstype==%s for %s\n",partition->fs_vfstype,partition->fs_file); } } else { g_print ( "getfsent() : fstab->fs_vfstype==NULL for %s\n",partition->fs_file); } } /* Closes the /etc/fstab file. */ endfsent ( ); } else { g_print ( "setfsent() : cannot open /etc/fstab (%d)\n",status); } g_print ( "%d mount points are listed in /etc/fstab\n",i); #endif #endif #elif defined ( HAVE_MOUNT_SYSTEM) && !defined (OS_FREEBSD) && !defined (OS_OPENBSD) && !defined (OS_NETBSD) FILE *fstab = NULL; struct mntent *partition = NULL; gchar *fsname = NULL; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens the /etc/fstab file. */ if ( (fstab = setmntent ( "/etc/fstab", "r")) != NULL ) { while ( ( partition = getmntent ( fstab)) != NULL) { if ( partition->mnt_type != NULL ) { if ( (strcmp ( partition->mnt_type, "proc") != 0) && (strcmp ( partition->mnt_type, "devpts") != 0) && (strcmp ( partition->mnt_type, "swap") != 0) ) { fsname = g_strdup ( partition->mnt_dir); g = g_list_insert_sorted ( g, fsname, (GCompareFunc)strcmp); } } } /* Closes the /etc/fstab file. */ endmntent ( fstab); } /* Opens the /etc/mtab file. */ if ( (fstab = setmntent ( "/etc/mtab", "r")) != NULL ) { while ( ( partition = getmntent ( fstab)) != NULL) { if ( partition->mnt_type != NULL ) { if ( (strcmp ( partition->mnt_type, "proc") != 0) && (strcmp ( partition->mnt_type, "devpts") != 0) && (strcmp ( partition->mnt_type, "swap") != 0) ) { /* Check if the device is not already in the drives list (due to the first reading of /etc/fstab). */ if ( g_list_find_custom ( g, partition->mnt_dir, (GCompareFunc)strcmp) == NULL ) { fsname = g_strdup ( partition->mnt_dir); g = g_list_insert_sorted ( g, fsname, (GCompareFunc)strcmp); } } } } /* Closes the /etc/mtab file. */ endmntent ( fstab); } #elif defined ( HAVE_MOUNT_SYSTEM) && (defined (OS_FREEBSD) || defined (OS_OPENBSD) || defined (OS_NETBSD)) struct fstab *partition = NULL; gchar *fsname = NULL; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens the /etc/fstab file. */ setfsent ( ); while ( (partition = getfsent ( )) != NULL ) { if ( partition->fs_vfstype != NULL ) { if ( (strcmp ( partition->fs_vfstype, "procfs") != 0) && ( strcmp ( partition->fs_vfstype, "swap") != 0) ) { fsname = g_strdup ( partition->fs_file); g = g_list_insert_sorted ( g, fsname, (GCompareFunc)strcmp); } } } /* Closes the /etc/mtab file. */ endfsent( ); #elif defined ( OS_WIN32) || defined ( OS_CYGWIN) /* Floppy drive A: and B: are listed at the end of list because cannot fix bug on GtkCombo when user click on the button and the first item of the list is selected. */ gchar *textPtr = NULL; gchar buffer[128]; gchar formatBuffer[128]; gchar floppy_drives[2] = {'\0','\0'}; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Gets the drives string */ GetLogicalDriveStringsA ( sizeof ( buffer), buffer); /* Adds the drives as necessary */ textPtr = buffer; while ( *textPtr != '\0') { if ( toupper ( textPtr[0]) == 'A' ) { floppy_drives[0] = textPtr[0]; } else if ( toupper ( textPtr[0]) == 'B' ) { floppy_drives[1] = textPtr[0]; } else { /* Builds the actual displayable string */ sprintf ( formatBuffer, "%c:\\", toupper ( textPtr[0])); /* Adds to the list */ g = g_list_insert_sorted ( g, g_strdup ( formatBuffer), (GCompareFunc)strcmp); } textPtr += (strlen ( textPtr) + 1); } if ( floppy_drives[0] != '\0' ) { /* Builds the actual displayable string */ sprintf ( formatBuffer, "%c:\\", toupper ( floppy_drives[0])); /* Adds to the list */ g = g_list_append ( g, g_strdup ( formatBuffer)); } if ( floppy_drives[1] != '\0' ) { /* Builds the actual displayable string */ sprintf ( formatBuffer, "%c:\\", toupper ( floppy_drives[1])); /* Adds to the list */ g = g_list_append ( g, g_strdup ( formatBuffer)); } #endif return g; } gboolean gw_drive_eject ( const gchar *drive_path) { gboolean l_result = FALSE; #if defined ( HAVE_MOUNT_SYSTEM) && !defined (OS_FREEBSD) && !defined (OS_OPENBSD) && !defined (OS_NETBSD) && !defined ( OS_MACOS) && !defined ( OS_MACOSX) && !defined ( OS_DARWIN) FILE *fstab = NULL; struct mntent *pm = NULL; gint fd = 0; gint status; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s() : drive=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, drive_path); #endif /* Opens the /etc/fstab file. */ if ( (fstab = setmntent ( "/etc/fstab", "r")) != NULL ) { while ( (pm = getmntent ( fstab)) != NULL) { if ( (pm->mnt_dir != NULL) && (strcmp ( pm->mnt_dir, drive_path) == 0) ) { /* Search the type of mount. */ // if ( (pm->mnt_type != NULL) && ((strcmp ( pm->mnt_type,"supermount") == 0)||(strcmp ( pm->mnt_type,"subfs") == 0)) ) { if ( (pm->mnt_type != NULL) && (strcmp ( pm->mnt_type,"supermount") == 0) ) { /* Gets the name of the device. */ char *temp; //FIXME memory leak ? temp = strtok ( hasmntopt ( pm, "dev"), "="); temp = strtok ( NULL, "="); if ( temp ) { fd = open ( temp, O_RDONLY|O_NONBLOCK ); } } else { fd = open ( pm->mnt_fsname, O_RDONLY|O_NONBLOCK ); } if ( fd >= 0 ) { #if defined ( OS_FREEBSD_DEPRECATED) || defined ( OS_OPENBSD_DEPRECATED) || defined ( OS_NETBSD_DEPRECATED) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) ioctl ( fd, CDIOCALLOW); #endif status = ioctl ( fd, CDROMEJECT); close ( fd); } l_result = TRUE; } } /* Closes the /etc/fstab file. */ endmntent ( fstab); } #elif defined ( HAVE_MOUNT_SYSTEM) && (defined ( OS_FREEBSD) || defined ( OS_FREEBSD) || defined ( OS_FREEBSD)) struct fstab* partition = NULL; gint fd = 0; gint status; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens the /etc/fstab file. */ setfsent ( ); while ( (partition = getfsent ( )) != NULL ) { if ( (partition->fs_file != NULL) && (strcmp ( partition->fs_file, drive_path) == 0) ) { fd = open ( partition->fs_spec, O_RDONLY ); if ( fd >= 0 ) { status = ioctl ( fd, CDIOCEJECT); close ( fd); } l_result = TRUE; break; } } /* Closes the /etc/fstab file. */ endfsent ( ); #elif defined ( OS_WIN32) || defined ( OS_CYGWIN_DEPRECATED) HANDLE hdl_file = NULL; DWORD lp_bytes_returned; gchar *device_name = NULL; #ifdef GW_DEBUG_MODE LPVOID msg = NULL; #endif DWORD dw_result; BYTE by_drive; DIOC_REGISTERS regs = {0}; guint errmode; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s() : drive=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, drive_path); #endif if ( drive_path != NULL ) { errmode = SetErrorMode ( SEM_FAILCRITICALERRORS); /* Win2K ejection code */ if ( GetVersion() < 0x80000000 ) { #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s() : using NT kernel API\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* I don't know with but the drive letter has to be passed without a trailing slash (ie "\\.\C:" instead of "\\.\C:\"). */ device_name = g_strdup_printf ( "\\\\.\\%s", drive_path); if ( device_name[strlen(device_name)-1] == '\\') { device_name[strlen(device_name)-1] = '\0'; } if ( (hdl_file = CreateFile ( (char *)device_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL)) != NULL ) { /*if ( (hdl_file = CreateFile ( (char *)device_name, GENERIC_READ, 0 , NULL, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL)) != NULL ) {*/ l_result = DeviceIoControl ( hdl_file, IOCTL_STORAGE_EJECT_MEDIA, NULL, 0, NULL, 0, &lp_bytes_returned, NULL); #ifdef GW_DEBUG_TOOLS_COMPONENT if ( l_result == FALSE ) { FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError ( ), 0, (LPTSTR) &msg, 0, NULL ); g_print ( "*** GW - %s (%d) :: %s() : an win32 error occured, %s (%d)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, msg, GetLastError ( )); LocalFree( msg ); } #endif CloseHandle ( hdl_file); } else { #ifdef GW_DEBUG_TOOLS_COMPONENT FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError ( ), 0, (LPTSTR) &msg, 0, NULL ); g_print ( "*** GW - %s (%d) :: %s() : an win32 error occured, %s (%d)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, msg, GetLastError ( )); LocalFree( msg ); #endif } g_free ( device_name); } else { /* Win95/98/ME */ #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s() : using Win9x kernel API\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Create the handle to VWIN32 */ if ( (hdl_file = CreateFile ( "\\\\.\\vwin32", 0, 0, NULL, 0, FILE_FLAG_DELETE_ON_CLOSE, NULL)) != NULL ) { /* Convert logical disk name to DOS-like disk name */ by_drive = (toupper ( *drive_path) - 'A') + 1; /* Let's eject now : Int 21H function 440DH minor code 49h */ regs.reg_EAX = 0x440D; regs.reg_EBX = by_drive; regs.reg_ECX = MAKEWORD ( 0x49, 0x08); /* minor code */ l_result = DeviceIoControl ( hdl_file, VWIN32_DIOC_DOS_IOCTL, ®s, sizeof ( regs), ®s, sizeof ( regs), &dw_result, 0); #ifdef GW_DEBUG if ( l_result == FALSE ) { FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError ( ), 0, (LPTSTR) &msg, 0, NULL ); g_print ( "*** GW - %s (%d) :: %s() : an win32 error occured, %s (%d)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, msg, GetLastError ( )); LocalFree( msg ); } #endif CloseHandle ( hdl_file) ; } else { #ifdef GW_DEBUG FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError ( ), 0, (LPTSTR) &msg, 0, NULL ); g_print ( "*** GW - %s (%d) :: %s() : an win32 error occured, %s (%d)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, msg, GetLastError ( )); LocalFree( msg ); #endif } } SetErrorMode ( errmode); } #endif return l_result; } #ifdef HAVE_MOUNT_SYSTEM gint gw_drive_mount ( const gchar *drive_path) { gint l_result = -1; #if !defined ( OS_FREEBSD) && !defined ( OS_OPENBSD) && !defined ( OS_NETBSD) && !defined ( OS_MACOS) && !defined ( OS_MACOSX) && !defined ( OS_DARWIN) static gchar *filesystemtype[] = {"iso9660", "fat", "ext2", "vfat", "msdos", "minix", "ext"}; FILE *fstab = NULL; struct mntent *pm = NULL; gint j = 0; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens the /etc/fstab file. */ if ( (fstab = setmntent ( "/etc/fstab", "r")) != NULL ) { while ( (pm = getmntent ( fstab)) != NULL) { if ( (pm->mnt_dir != NULL) && (strcmp ( pm->mnt_dir, drive_path) == 0) ) { /* Search if the mount point is not automatic. */ if ( hasmntopt ( pm, "noauto") != NULL ) { if ( (pm->mnt_type != NULL) && (strcmp ( pm->mnt_type, "auto") == 0) ) { /* If the file system is not indicated, try with the most used types. */ while ( j <= 6 ) { if ( mount ( pm->mnt_fsname, pm->mnt_dir, filesystemtype[j++], 0xc0ed0000|MS_RDONLY, "") == 0 ) { /* The mount point is not mounted correctly. */ l_result = 0; } else { switch ( errno ) { case EPERM : g_print ( "L'utilisateur n'est pas le Super-User\n"); l_result = -1; break; case ENODEV : /* Ce type de système de fichier n'existe pas */ g_print ( "Warning : %s doesn't exist!!\n", filesystemtype[j-1]); l_result = -1; break; case ENOTBLK : g_print ( "Specialfile n'est pas un fichier special en mode bloc\n"); l_result = -1; break; case EBUSY : /* Le point de montage est déjà monté */ l_result = -1; break; case EINVAL : /* Le type de système de fichier est invalide */ break; case EFAULT : g_print ( "L'un des arguments pointe en-dehors de l'espace d'adressage accessible.\n"); l_result = -1; break; case ENOMEM : g_print ( "Pas assez de mémoire pour le noyau.\n"); l_result = -1; break; case ENAMETOOLONG : g_print ( "Un des arguments est trop long.\n"); l_result = -1; break; case ENOENT : g_print ( "Un répertoire des arguments n'existe pas ou est un lien symbolique pointant nulle part.\n"); l_result = -1; break; case ENOTDIR : g_print ( "Le point de montage, ou l'un des éléments du chemin d'accès au périphérique n'est pas un répertoire.\n"); l_result = -1; break; case EACCES : g_print ( "Un élément de chemin d'accès n'est pas consultable,\n"); l_result = -1; break; case ENXIO : g_print ( "Le nombre majeur du périphérique specialfile est invalide.\n"); l_result = -1; break; case EMFILE : g_print ( "Table de montage pleine.\n"); l_result = -1; break; default : /* Problème lors du montage */ g_print ( "Aie!!\n"); l_result = -1; break; } } } g_print ( "Le filesystemtype de ce point de montage n'est pas reconnu.\n"); g_print ( "Cela est surement du par la présence du paramètre \"auto\" dans le fichier /etc/fstab.\n"); g_print ( "Pour pouvoir utiliser ce point de montage avec l'automount dans GWhere veuillez\n"); g_print ( "préciser le filesystemtype dans le fichier /etc/fstab\n"); } else { /* If the fyle system is not reconized. */ if ( mount ( pm->mnt_fsname, pm->mnt_dir, pm->mnt_type, 0xc0ed0000|MS_RDONLY, "") == 0 ) { l_result = 0; } else { /* In the case the mount failed.*/ switch ( errno) { case EPERM : g_print ( "L'utilisateur n'est pas le Super-User\n"); break; case ENODEV : g_print ( "Le fylesystemtype n'est pas configuré ds le noyau\n"); break; case ENOTBLK : g_print ( "Specialfile n'est pas un fichier special en mode bloc\n"); break; case EBUSY : g_print ( "Specialfile est dèjà monté"); l_result = 1; break; case EINVAL : g_print ( "Specialfile a un superbloc invalide\n"); break; case EFAULT : g_print ( "L'un des arguments pointe en-dehors de l'espace d'adressage accessible.\n"); break; case ENOMEM : g_print ( "Pas assez de mémoire pour le noyau.\n"); break; case ENAMETOOLONG : g_print ( "Un des arguments est trop long.\n"); break; case ENOENT : g_print ( "Un répertoire des arguments n'existe pas ou est un lien symbolique pointant nulle part.\n"); break; case ENOTDIR : g_print ( "Le point de montage, ou l'un des éléments du chemin d'accès au périphérique n'est pas un répertoire.\n"); break; case EACCES : g_print ( "Un élément de chemin d'accès n'est pas consultable,\n"); break; case ENXIO : g_print ( "Le nombre majeur du périphérique specialfile est invalide.\n"); break; case EMFILE : g_print ( "Table de montage pleine.\n"); break; default : g_print ( "Erreur non référencée!!\n"); break; } } /* If mount failed. */ g_print ( "Aie!! (bis)\n"); l_result = -1; } } else { /* If the mount point is not automatic, the function doesn't try to mount it. */ l_result = 1; } } } /* Closes the /ect/fstab file. */ endmntent ( fstab); } #elif defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) struct fstab* pm = NULL; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens the /etc/fstab file. */ setfsent ( ); while ( (pm = getfsent ( )) != NULL ) { if ( (pm->fs_file != NULL) && (strcmp ( pm->fs_file, drive_path) == 0) ) { /* Search if the mount point is not automatic. */ if ( (pm->fs_mntops != NULL) && (strstr ( pm->fs_mntops, "noauto") != NULL) ) { /* Mount it */ if ( mount ( pm->fs_vfstype, pm->fs_file, MNT_RDONLY, NULL) == 0 ) { l_result = 0; } else { /* In the case the mount failed.*/ switch ( errno) { case EPERM : g_print ( "L'utilisateur n'est pas le Super-User\n"); break; case ENODEV : g_print ( "Le fylesystemtype n'est pas configuré ds le noyau\n"); break; case ENOTBLK : g_print ( "Specialfile n'est pas un fichier special en mode bloc\n"); break; case EBUSY : g_print ( "Specialfile est dèjà monté"); l_result = 1; break; case EINVAL : g_print ( "Specialfile a un superbloc invalide\n"); break; case EFAULT : g_print ( "L'un des arguments pointe en-dehors de l'espace d'adressage accessible.\n"); break; case ENOMEM : g_print ( "Pas assez de mémoire pour le noyau.\n"); break; case ENAMETOOLONG : g_print ( "Un des arguments est trop long.\n"); break; case ENOENT : g_print ( "Un répertoire des arguments n'existe pas ou est un lien symbolique pointant nulle part.\n"); break; case ENOTDIR : g_print ( "Le point de montage, ou l'un des éléments du chemin d'accès au périphérique n'est pas un répertoire.\n"); break; case EACCES : g_print ( "Un élément de chemin d'accès n'est pas consultable,\n"); break; case ENXIO : g_print ( "Le nombre majeur du périphérique specialfile est invalide.\n"); break; case EMFILE : g_print ( "Table de montage pleine.\n"); break; default : g_print ( "Erreur non référencée!!\n"); break; } } /* If mount failed. */ g_print ( "Aie!! (bis)\n"); l_result = -1; } else { /* If the mount point is not automatic, the function doesn't try to mount it. */ l_result = 1; } } } /* Closes the /etc/fstab file. */ endfsent ( ); #endif return l_result; } gboolean gw_drive_umount ( const gchar *drive_path) { gboolean l_result = FALSE; #if !defined ( OS_FREEBSD) && !defined ( OS_OPENBSD) && !defined ( OS_NETBSD) && !defined ( OS_MACOS) && !defined ( OS_MACOSX) && !defined ( OS_DARWIN) FILE *fstab = NULL; struct mntent *pm = NULL; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens the /etc/fstab file. */ if ( (fstab = setmntent ( "/etc/fstab", "r")) != NULL ) { while ( (pm = getmntent ( fstab)) != NULL) { if ( (pm->mnt_dir != NULL) && (strcmp ( pm->mnt_dir, drive_path) == 0) ) { if ( umount ( pm->mnt_fsname/*, pm->mnt_dir, pm->mnt_type, 0xc0ed0000|MS_RDONLY, ""*/) == 0 ) { l_result = TRUE; } } } /* Closes the /etc/fstab file. */ endmntent ( fstab); } #elif defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) struct fstab* pm = NULL; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens the /etc/fstab file. */ setfsent ( ); while ( (pm = getfsent ( )) != NULL ) { if ( (pm->fs_file != NULL) && (strcmp ( pm->fs_file, drive_path) == 0) ) { if ( unmount ( pm->fs_file, 0) == 0 ) { l_result = TRUE; break; } } } /* Closes the /etc/fstab file. */ endfsent ( ); #endif return l_result; } gchar * gw_drive_get_device_type ( const gchar *drive_path) { gchar *device_type = NULL; #if !defined ( OS_FREEBSD) && !defined ( OS_OPENBSD) && !defined ( OS_NETBSD) && !defined ( OS_MACOS) && !defined ( OS_MACOSX) && !defined ( OS_DARWIN) FILE *mtab = NULL; FILE *fstab = NULL; struct mntent *partition = NULL; gchar **options = NULL, **fs_type = NULL, **fs_device = NULL; gint i; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens the /etc/mtab file. */ if ( (mtab = setmntent ( "/etc/mtab", "r")) != NULL ) { while ( ( partition = getmntent ( mtab)) != NULL ) { if ( (partition->mnt_dir != NULL) && (strcmp ( partition->mnt_dir, drive_path) == 0) ) { if ( (partition->mnt_type != NULL) && ((strncmp ( "supermount", partition->mnt_type, 10) == 0)||(strncmp ( "subfs", partition->mnt_type, 5)==0)) ) { /* Gets the mount options and search the option auto. */ if ( partition->mnt_opts != NULL ) { options = g_strsplit ( partition->mnt_opts, ",", 0); for ( i = 0; options[i] != NULL; i++) { if ( (strncmp ( options[i], "fs=", 3) == 0) && (fs_type == NULL) ) { fs_type = g_strsplit ( options[i], "=", 2); } if ( (strncmp ( options[i], "dev=", 4) == 0) && (fs_device == NULL) ) { fs_device = g_strsplit ( options[i], "=", 2); } } } else { /* Should we trait this error?? */ } if ( fs_device == NULL && strncmp("subfs",partition->mnt_type,5) == 0 ) { fs_device = (gchar**)g_malloc0(3*sizeof(gchar*)); fs_device[0] = g_strdup(""); fs_device[1] = g_strdup(partition->mnt_fsname); fs_device[2] = NULL; } device_type = g_strdup_printf ( "%s [ %s ]", fs_device[1], fs_type[1]); if ( fs_device != NULL ) { g_strfreev ( fs_device); fs_device = NULL; } if ( fs_type != NULL ) { g_strfreev ( fs_type); fs_type = NULL; } if ( options != NULL ) { g_strfreev ( options); options = NULL; } } else if ( strncmp ( "/dev/hd", partition->mnt_fsname, 7) == 0 ) { device_type = g_strdup_printf ( "HD [ %s ]", partition->mnt_type); } else if ( strncmp ( "/dev/cdrom", partition->mnt_fsname, 10) == 0 ) { device_type = g_strdup_printf ( "CD-ROM [ %s ]", partition->mnt_type); } else if ( strncmp ( "/dev/scd", partition->mnt_fsname, 8) == 0 ) { device_type = g_strdup_printf ( "CD-ROM [ %s ]", partition->mnt_type); } else if ( strncmp ( "/dev/fd", partition->mnt_fsname, 7) == 0 ) { device_type = g_strdup_printf ( "Floppy [ %s ]", partition->mnt_type); } else { device_type = g_strdup ( partition->mnt_type); } } } /* Closes the /etc/mtab file. */ endmntent ( mtab); } if ( device_type == NULL ) { /* If the disk is not mounted. */ /* Opens the /etc/fstab file. */ if ( (fstab = setmntent ( "/etc/fstab", "r")) != NULL ) { while ( ( partition = getmntent ( fstab)) != NULL ) { if ( (partition->mnt_dir != NULL) && (strcmp ( partition->mnt_dir, drive_path) == 0) ) { if ( (partition->mnt_type != NULL) && ((strncmp ( "supermount", partition->mnt_type, 10) == 0)||(strncmp ( "subfs", partition->mnt_type, 5) == 0)) ) { /* Gets the mount options and search the option auto. */ if ( partition->mnt_opts != NULL ) { options = g_strsplit ( partition->mnt_opts, ",", 0); for ( i = 0; options[i] != NULL; i++) { if ( (strncmp ( options[i], "fs=", 3) == 0) && (fs_type == NULL) ) { fs_type = g_strsplit ( options[i], "=", 2); } if ( (strncmp ( options[i], "dev=", 4) == 0) && (fs_device == NULL) ) { fs_device = g_strsplit ( options[i], "=", 2); } } } else { /* Should we trait this error?? */ } if ( fs_device == NULL && strncmp("subfs",partition->mnt_type,5) == 0 ) { fs_device = (gchar**)g_malloc0(3*sizeof(gchar*)); fs_device[0] = g_strdup(""); fs_device[1] = g_strdup(partition->mnt_fsname); fs_device[2] = NULL; } device_type = g_strdup_printf ( "%s [ %s ]", fs_device[1], fs_type[1]); if ( fs_device != NULL ) { g_strfreev ( fs_device); fs_device = NULL; } if ( fs_type != NULL ) { g_strfreev ( fs_type); fs_type = NULL; } if ( options != NULL ) { g_strfreev ( options); options = NULL; } } else if ( strncmp ( "/dev/hd", partition->mnt_fsname, 7) == 0 ) { device_type = g_strdup_printf ( "HD [ %s ]", partition->mnt_type); } else if ( strncmp ( "/dev/cdrom", partition->mnt_fsname, 10) == 0 ) { device_type = g_strdup_printf ( "CD-ROM [ %s ]", partition->mnt_type); } else if ( strncmp ( "/dev/scd", partition->mnt_fsname, 8) == 0 ) { device_type = g_strdup_printf ( "CD-ROM [ %s ]", partition->mnt_type); } else if ( strncmp ( "/dev/fd", partition->mnt_fsname, 7) == 0 ) { device_type = g_strdup_printf ( "Floppy [ %s ]", partition->mnt_type); } else if ( strncmp ( "/dev/zip", partition->mnt_fsname, 8) == 0 ) { device_type = g_strdup_printf ( "Zip [ %s ]", partition->mnt_type); } else { device_type = g_strdup ( partition->mnt_type); } } } /* Closes the /etc/fstab file. */ endmntent ( fstab); } } #elif defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) struct fstab* partition = NULL; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens the /etc/fstab file. */ setfsent ( ); while ( (partition = getfsent ( )) != NULL) { if ( (partition->fs_spec != NULL) && (partition->fs_vfstype != NULL) ) { if ( strncmp ( "/dev/ad", partition->fs_spec, 7) == 0 ) { device_type = g_strdup_printf ( "HD [ %s ]", partition->fs_vfstype); } else if ( strncmp ( "/dev/acd", partition->fs_spec, 8) == 0 ) { device_type = g_strdup_printf ( "CD-ROM [ %s ]", partition->fs_vfstype); } else if ( strncmp ( "/dev/scd", partition->fs_spec, 8) == 0 ) { device_type = g_strdup_printf ( "CD-ROM [ %s ]", partition->fs_vfstype); } else if ( strncmp ( "/dev/fd", partition->fs_spec, 7) == 0 ) { device_type = g_strdup_printf ( "Floppy [ %s ]", partition->fs_vfstype); } else { device_type = g_strdup ( partition->fs_vfstype); } } } /* Closes the /etc/fstab file. */ endfsent ( ); #endif return device_type; } gchar * gw_drive_get_device_name ( const gchar *drive_path) { gchar * device_name = NULL; #if !defined ( OS_FREEBSD) && !defined ( OS_OPENBSD) && !defined ( OS_NETBSD) && !defined ( OS_MACOS) && !defined ( OS_MACOSX) && !defined ( OS_DARWIN) FILE *tab = NULL; struct mntent *partition = NULL; gchar **fs_device = NULL; gchar **options = NULL; int i = 0; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens only the /etc/mtab file because the result must be returned only if the drive is mounted. */ if ( (tab = setmntent ( "/etc/mtab", "r")) != NULL ) { while ( (partition = getmntent ( tab)) != NULL) { if ( (partition->mnt_dir != NULL) && (strcmp ( partition->mnt_dir, drive_path) == 0) ) { // if ( (partition->mnt_type != NULL) && ((strncmp ( "supermount", partition->mnt_type, 10) == 0)||(strncmp ( "subfs", partition->mnt_type, 5) == 0)) ) { if ( (partition->mnt_type != NULL) && (strncmp ( "supermount", partition->mnt_type, 10) == 0)) { /* Gets the mount options and search the option auto. */ if ( partition->mnt_opts != NULL ) { options = g_strsplit ( partition->mnt_opts, ",", 0); for ( i = 0; options[i] != NULL; i++) { if ( strncmp ( options[i], "dev=", 4) == 0 ) { if ( (fs_device = g_strsplit ( options[i], "=", 2)) != NULL ) { device_name = g_strdup ( fs_device[1]); g_strfreev ( fs_device); fs_device = NULL; } } } } else { /* Should we trait this error?? */ } if ( options != NULL ) { g_strfreev ( options); options = NULL; } } else { device_name = g_strdup ( partition->mnt_fsname); } } } /* Closes the /etc/mtab file. */ endmntent ( tab); } #elif defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) struct statfs* pstats = NULL; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Get list of mounted devices. */ int i, mfs_count = getmntinfo ( &pstats, MNT_WAIT); for ( i = 0; i < mfs_count; i++) { if ( (pstats[i].f_mntonname != NULL) && (strcmp ( pstats[i].f_mntonname, drive_path) == 0) ) { device_name = g_strdup ( pstats[i].f_mntfromname); break; } } #endif return device_name; } gboolean gw_drive_is_mounted ( const gchar *drive_path) { gboolean l_result = FALSE; #if !defined ( OS_FREEBSD) && !defined ( OS_OPENBSD) && !defined ( OS_NETBSD) && !defined ( OS_MACOS) && !defined ( OS_MACOSX) && !defined ( OS_DARWIN) FILE *tab = NULL; struct mntent *partition = NULL; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens the file /etc/mtab. */ if ( (tab = setmntent ( "/etc/mtab", "r")) != NULL ) { while ( (partition = getmntent ( tab)) != NULL) { if ( (partition->mnt_dir != NULL) && (strcmp ( partition->mnt_dir, drive_path) == 0) ) { /* If the disk is not in the /etc/mtab then it is mounted. */ l_result = TRUE; } } /* Closes the /etc/mtab file. */ endmntent ( tab); } #elif defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) struct statfs* pstats = NULL; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Gets list of mounted devices. */ int i, mfs_count = getmntinfo ( &pstats, MNT_WAIT); for ( i = 0; i < mfs_count; i++) { if ( (pstats[i].f_mntonname != NULL) && (strcmp ( pstats[i].f_mntonname, drive_path) == 0) ) { l_result = TRUE; break; } } #endif return l_result; } gboolean gw_drive_is_mountable ( const gchar *drive_path) { gboolean l_result = FALSE; #if !defined ( OS_FREEBSD) && !defined ( OS_OPENBSD) && !defined ( OS_NETBSD) && !defined ( OS_MACOS) && !defined ( OS_MACOSX) && !defined ( OS_DARWIN) FILE *tab = NULL; struct mntent *partition = NULL; gchar **options = NULL; gint i; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens the /etc/mtab file. */ if ( (tab = setmntent ( "/etc/fstab", "r")) != NULL ) { while ( (partition = getmntent ( tab)) != NULL) { if ( (partition->mnt_dir != NULL) && (strcmp ( partition->mnt_dir, drive_path) == 0) ) { /* If the disk is in the /etc/mtab file then it is mounted. */ /* Gets the mount options and search the option auto. */ if ( partition->mnt_opts != NULL ) { options = g_strsplit ( partition->mnt_opts, ",", 0); for ( i = 0; options[i] != NULL; i++) { if ( strncmp ( options[i], "auto", 4) == 0 ) { l_result = TRUE; } } if ( options != NULL ) { g_strfreev ( options); options = NULL; } } else { /* Should we trait this error?? */ } } } /* Closes the /etc/fstab file. */ endmntent ( tab); } #elif defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) struct fstab* pm = NULL; gchar **options = NULL; gint i; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens the /etc/fstab file. */ setfsent ( ); while ( (pm = getfsent ( )) != NULL ) { if ( (pm->fs_file != NULL) && (strcmp ( pm->fs_file, drive_path) == 0) ) { /* Gets the mount options and search the option auto. */ if ( pm->fs_mntops != NULL ) { options = g_strsplit ( pm->fs_mntops, ",", 0); for ( i = 0; options[i] != NULL; i++) { if ( strncmp ( options[i], "auto", 4) == 0 ) { l_result = TRUE; break; } } if ( options != NULL ) { g_strfreev ( options); } } else { /* Should we trait this error?? */ } } } /* Closes the /etc/fstab file. */ endfsent ( ); #endif return l_result; } #endif #if defined ( OS_WIN32) || defined ( OS_CYGWIN) /*! * @function gw_drive_get_space_stats * @abstract Gets the space stats of the drive. * @discussion This function gets the space stats of the drive.
* Note: for Win/2000 or later, the amount of available * space may be less than the amount of free space if * disk quotas are enabled.
* This routine loads GetDiskFreeSpaceEx at run-time to * allow this to work with all 32-bit versions of Windows * (including all versions of Win/95).
* @param drive_path the access path of drive * @param avail_kb amount of available space for current user (Kb) * @param total_kb total space on disk (Kb) * @param free_kb free space on disk (Mb) * @result an error code.
* Returns 0 when it's done. * Returns 606 when it's unable to identify system type.
* Returns 648 when it's unable to load library.
* Returns 649 when disk name may be invalid or Disk not accessible.
*/ int gw_drive_get_space_stats ( const gchar drive_path[], unsigned long *avail_kb, unsigned long *total_kb, unsigned long *free_kb) { ULARGE_INTEGER ul_avail_bytes,ul_free_total_bytes,ul_used_total_bytes; HINSTANCE hinst_lib; int result = -1; int flag_os; int sys_version; int sys_major; int sys_minor; int sys_pack; DWORD sectors_by_cluster, bytes_per_sector, num_free_clusters, total_clusters; FARPROC GWGetDiskFreeSpaceExA = NULL; #ifdef GW_DEBUG_MODE LPVOID msg = NULL; #endif guint errmode; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Determine Windows OS version. */ if ( (result = gw_win32_get_version ( &sys_version, &sys_major, &sys_minor, &sys_pack)) == 0 ) { /* flag_os=1 for versions before Win95B(OSR2) flag_os=2 for all NT versions, and Win versions Win/95B and higher (i.e. Win/98, Win/ME etc.) */ flag_os = 1; if ( sys_version > 2 ) { flag_os = 2; } if ( (sys_version == 2) && (sys_pack > 0) ) { flag_os = 2; /* Win/95(OSR2) */ } /* Case of NT or Windows after and including Win/95(OSR2) Here we can use GetDiskFreeSpaceEx. */ if ( flag_os == 2 ) { /* Loads the library dynamically. */ if ( (hinst_lib = LoadLibraryA ( "KERNEL32.DLL")) != NULL ) { /* Get procedure address. */ GWGetDiskFreeSpaceExA = GetProcAddress ( hinst_lib, "GetDiskFreeSpaceExA"); errmode = SetErrorMode ( SEM_FAILCRITICALERRORS); if ( GWGetDiskFreeSpaceExA ( drive_path, &ul_avail_bytes, &ul_used_total_bytes, &ul_free_total_bytes) ) { *total_kb = ul_used_total_bytes.QuadPart / 1024; *free_kb = ul_free_total_bytes.QuadPart / 1024; *avail_kb = ul_avail_bytes.QuadPart / 1024; result = 0; } else { #ifdef GW_DEBUG FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError ( ), 0, (LPTSTR) &msg, 0, NULL ); g_print ( "*** GW - %s (%d) :: %s() : an win32 error occured, %s (%d)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, msg, GetLastError ( )); LocalFree( msg ); #endif /* If GetDiskFreeSpaceExA failed, most certainly it is because drive name was invalid. */ result = 649; } SetErrorMode ( errmode); FreeLibrary ( hinst_lib); } else { #ifdef GW_DEBUG FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError ( ), 0, (LPTSTR) &msg, 0, NULL ); g_print ( "*** GW - %s (%d) :: %s() : an win32 error occured, %s (%d)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, msg, GetLastError ( )); LocalFree( msg ); #endif result = 648; } } /* Case of Windows older than Win/95B(OSR2). Here we have to use GetDiskFreeSpace. */ if ( flag_os == 1 ) { errmode = SetErrorMode ( SEM_FAILCRITICALERRORS); if ( GetDiskFreeSpaceA ( drive_path, §ors_by_cluster, &bytes_per_sector, &num_free_clusters, &total_clusters) ) { *avail_kb = ul_avail_bytes.QuadPart / 1024; *total_kb = ul_used_total_bytes.QuadPart / 1024; *free_kb = ul_free_total_bytes.QuadPart / 1024; result = 0; } else { #ifdef GW_DEBUG FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError ( ), 0, (LPTSTR) &msg, 0, NULL ); g_print ( "*** GW - %s (%d) :: %s() : an win32 error occured, %s (%d)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, msg, GetLastError ( )); LocalFree( msg ); #endif result = 649; } SetErrorMode ( errmode); } } return result; } #endif gulong gw_drive_get_capacity ( const gchar *drive_path) { gulong l_result = 0; #if defined ( OS_LINUX) || defined ( OS_CYGWIN_DEPRECATED) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) struct statfs sts; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Gets rights of the drive. */ if ( statfs ( drive_path, &sts) != -1 ) { l_result = sts.f_bsize * sts.f_blocks; } #elif defined ( OS_WIN32) || defined ( OS_CYGWIN) long total_kb = 0, avail_kb = 0, free_kb = 0; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( gw_drive_get_space_stats ( drive_path, &avail_kb, &total_kb, &free_kb) == 0) { l_result = total_kb; } #endif return l_result; } gulong gw_drive_get_free_space ( const gchar *drive_path) { gulong l_result = 0; #if defined ( OS_LINUX) || defined ( OS_CYGWIN_DEPRECATED) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) struct statfs sts; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Gets rights of the drive. */ if ( statfs ( drive_path, &sts) != -1 ) { l_result = sts.f_bsize * sts.f_bfree; } #elif defined ( OS_WIN32) || defined ( OS_CYGWIN) long total_kb = 0, avail_kb = 0, free_kb = 0; #ifdef GW_DEBUG_MODE g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( gw_drive_get_space_stats ( drive_path, &avail_kb, &total_kb, &free_kb) == 0) { l_result = free_kb; } #endif return l_result; } gwhere-0.2.3/src/gwsupermount.h0000744000175000017500000001454510023202520015152 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsupermount.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a component to manipulate disks. * @author Sébastien LECACHEUR * @author Grégory BLOQUEL * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwsupermount.c * @author Author */ #ifndef GW_SUPERMOUNT_H #define GW_SUPERMOUNT_H /*! * @function gw_get_drives_list * @abstract Gets the list of all drives in the system. * @discussion This function gets the list of all drives in the system.
* Search all mount points for Unix-like system or all logical * drives for Win32 system. * @param drives_list the list to store the list. * @result the list of drives.
* Returns NULL when an error occured. */ GList * gw_get_drives_list ( GList *drives_list); /*! * @function gw_drive_eject * @abstract Ejects the drive. * @discussion This function ejects the drive.
* Warning : eject only CD-ROM drive.
* On Unix-like system the drive path is the mount point.
* On Win32 system the drive path is the drive letter, use "[A-Z]:\".
* @param drive_path the access path of drive. * @result Returns TRUE if it's done.
* Returns FALSE when an error occured. */ gboolean gw_drive_eject ( const gchar *drive_path); #ifdef HAVE_MOUNT_SYSTEM /*! * @function gw_drive_mount * @abstract Tries to mount the drive. * @discussion This function tries to mount the drive.
* Warning : only for Unix-like system with super-user rights.
* On Unix-like system the drive path is the mount point.
* @param drive_path the access path of drive. * @result Returns O if it's done.
* Returns 1 if it is already mounted.
* Returns -1 when an error occured. */ gint gw_drive_mount ( const gchar *drive_path); /*! * @function gw_drive_umount * @abstract Tries to unmount the drive. * @discussion This function tries to unmount the drive.
* Warning : only for Unix-like system with super-user rights.
* On Unix-like system the drive path is the mount point.
* @param drive_path the access path of drive. * @result Returns TRUE if it's done.
* Returns FALSE when an error occured. */ gboolean gw_drive_umount ( const gchar *drive_path); /*! * @function gw_drive_get_device_type * @abstract Gets the type of the device. * @discussion This function gets the type of the device.
* Warning : only for Unix-like system.
* On Unix-like system the drive path is the mount point.
* @param drive_path the access path of drive. * @result Device type.
* Returns NULL when an error occured. */ gchar * gw_drive_get_device_type ( const gchar *drive_path); /*! * @function gw_drive_get_device_name * @abstract Gets the name of the device. * @discussion This function gets the name of the device.
* Warning : only for Unix-like system.
* On Unix-like system the drive path is the mount point.
* @param drive_path the access path of drive. * @result Device name.
* Returns NULL when an error occured. */ gchar * gw_drive_get_device_name ( const gchar *drive_path); /*! * @function gw_drive_is_mounted * @abstract Checks if the drive is mounted. * @discussion This function checks if the drive is mounted.
* Warning : only for Unix-like system.
* On Unix-like system the drive path is the mount point.
* @param drive_path the access path of drive. * @result Returns TRUE if the drive is mounted.
* Returns FALSE if the drive is not mounted or when an error occured. */ gboolean gw_drive_is_mounted ( const gchar *drive_path); /*! * @function gw_drive_is_mountable * @abstract Checks if the drive is mountable. * @discussion This function checks if the drive is mountable.
* Warning : deprecated function!!
* Warning : only for Unix-like system.
* On Unix-like system the drive path is the mount point.
* @param drive_path the access path of drive. * @result Returns TRUE if the drive is mountable.
* Returns FALSE if the drive is not mountable or when an error occured. */ gboolean gw_drive_is_mountable ( const gchar *drive_path); #endif /*! * @function gw_drive_get_capacity * @abstract Gets the capacity of the drive. * @discussion This function gets the capacity of the drive..
* Warning : deprecated function!!
* Warning : under win32 the size is inKbytes.
* On Unix-like system the drive path is the mount point.
* @param drive_path the access path of drive. * @result the capacity of the drive.
* Returns 0 when an error occured. */ gulong gw_drive_get_capacity ( const gchar *drive_path); /*! * @function gw_drive_get_free_space * @abstract Gets the free space of the drive. * @discussion This function gets the free space of the drive..
* Warning : deprecated function!!
* Warning : under win32 the size is in Kbytes.
* On Unix-like system the drive path is the mount point.
* @param drive_path the access path of drive. * @result the free space of the drive.
* Returns 0 when an error occured. */ gulong gw_drive_get_free_space ( const gchar *drive_path); #endif gwhere-0.2.3/src/gwsupport.c0000744000175000017500000002506710267553453014471 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gwsupport.h" /* #ifdef HAVE_CONFIG_H #if defined ( OS_LINUX) || defined ( OS_CYGWIN ) #include #elif defined ( OS_WIN32) #include "../config_win32.h" #endif #endif */ #if defined ( OS_WIN32) #include #endif #include /* atoi */ #include #include #include #include /* This is an internally used function to check if a pixmap file exists. */ static gchar* check_file_exists ( const gchar *directory, const gchar *filename); /* This is an internally used function to create pixmaps. */ static GtkWidget* create_dummy_pixmap ( GtkWidget *widget); GtkWidget* lookup_widget ( GtkWidget *widget, const gchar *widget_name) { GtkWidget *parent, *found_widget; for (;;) { if (GTK_IS_MENU (widget)) parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); else parent = widget->parent; if (parent == NULL) break; widget = parent; } found_widget = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (widget), widget_name); if (!found_widget) g_warning ("Widget not found: %s", widget_name); return found_widget; } /* This is a dummy pixmap we use when a pixmap can't be found. */ static char *dummy_pixmap_xpm[] = { /* columns rows colors chars-per-pixel */ "1 1 1 1", " c None", /* pixels */ " " }; /* This is an internally used function to create pixmaps. */ static GtkWidget* create_dummy_pixmap ( GtkWidget *widget) { GdkColormap *colormap; GdkPixmap *gdkpixmap; GdkBitmap *mask; GtkWidget *pixmap; colormap = gtk_widget_get_colormap (widget); gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d ( NULL, colormap, &mask, NULL, dummy_pixmap_xpm); if (gdkpixmap == NULL) g_error ("Couldn't create replacement pixmap."); pixmap = gtk_pixmap_new (gdkpixmap, mask); gdk_pixmap_unref (gdkpixmap); gdk_bitmap_unref (mask); return pixmap; } static GList *pixmaps_directories = NULL; /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory ( const gchar *directory) { pixmaps_directories = g_list_prepend ( pixmaps_directories, g_strdup (directory)); } /* This is an internally used function to create pixmaps. */ GtkWidget* create_pixmap ( GtkWidget *widget, const gchar *filename) { gchar *found_filename = NULL; GdkColormap *colormap; GdkPixmap *gdkpixmap; GdkBitmap *mask; GtkWidget *pixmap; GList *elem; /* We first try any pixmaps directories set by the application. */ elem = pixmaps_directories; while (elem) { found_filename = check_file_exists ((gchar*)elem->data, filename); if (found_filename) break; elem = elem->next; } /* If we haven't found the pixmap, try the source directory. */ if (!found_filename) { found_filename = check_file_exists ("../pixmaps", filename); } if (!found_filename) { g_warning (_("Couldn't find pixmap file: %s"), filename); return create_dummy_pixmap (widget); } colormap = gtk_widget_get_colormap (widget); gdkpixmap = gdk_pixmap_colormap_create_from_xpm ( NULL, colormap, &mask, NULL, found_filename); if (gdkpixmap == NULL) { g_warning (_("Error loading pixmap file: %s"), found_filename); g_free (found_filename); return create_dummy_pixmap (widget); } g_free (found_filename); pixmap = gtk_pixmap_new (gdkpixmap, mask); gdk_pixmap_unref (gdkpixmap); gdk_bitmap_unref (mask); return pixmap; } /* This is an internally used function to check if a pixmap file exists. */ gchar* check_file_exists ( const gchar *directory, const gchar *filename) { gchar *full_filename; struct stat s; gint status; full_filename = (gchar*) g_malloc ( strlen ( directory) + 1 + strlen ( filename) + 1); strcpy ( full_filename, directory); strcat ( full_filename, G_DIR_SEPARATOR_S); strcat ( full_filename, filename); status = stat ( full_filename, &s); if ( status == 0 && S_ISREG ( s.st_mode) ) { return full_filename; } g_free ( full_filename); return NULL; } #if defined ( OS_WIN32) || defined ( OS_CYGWIN) int gw_win32_get_version ( int *sys_type, int *version_major, int *version_minor, int *service_pack) { BOOL result; OSVERSIONINFO osvi; char pack[4]="-1"; /* First check what version of Windows we're in. */ osvi.dwOSVersionInfoSize = sizeof ( OSVERSIONINFO); result = GetVersionEx ( &osvi); if ( !result ) { /* Unable to identify system version. */ return 606; } /* The system Type (1=Win3.1, 2=Win95, 3=Win98/ME, 4=Win/ME, 5=Win/NT, 6=Win/2000). */ if ( osvi.dwPlatformId == VER_PLATFORM_WIN32s ) { *sys_type = 1; } if ( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) { *sys_type = 2; } if ( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT ) { *sys_type = 5; } /* Major version number. */ *version_major = osvi.dwMajorVersion; if ( *version_major >= 5 ) { *sys_type = 6; } /* Minor version number. */ *version_minor = osvi.dwMinorVersion; /* For Win/98, minor version is greater than zero. */ if ( (*sys_type == 2) && (*version_minor > 0) ) { *sys_type = 3; } /* For Win/ME, minor version is 90 or greater. */ if ( (*sys_type == 3) && (*version_minor >= 90) ) { *sys_type = 4; } /* Service Pack info : For NT/2000, extract the service pack as a number. */ *service_pack = -1; if ( (*sys_type >= 5) && (strcmp ( osvi.szCSDVersion, "Service Pack")) ) { pack[0] = osvi.szCSDVersion[12]; pack[1] = osvi.szCSDVersion[13]; pack[2] = osvi.szCSDVersion[14]; *service_pack = atoi ( pack); } /* For Win/95, use Build Number to extract OSR info and return in service_pack. */ if ( *sys_type == 2 ) { *service_pack = 0; if ( osvi.dwBuildNumber > 67109814 ) { /* OSR2 (4.00.950B) */ *service_pack = 1; } } if ( *version_major == 5 ) { if ( *version_minor == 0 ) { *sys_type = 6; } if ( *version_minor == 1 ) { *sys_type = 7; } if ( *version_minor == 2 ) { *sys_type = 8; } } return 0; } #endif int gw_os_get_version_str ( gchar **version) { gchar *os_version = NULL; #if defined ( OS_WIN32) int sys_type; int version_major; int version_minor; int service_pack; #endif #if defined ( OS_LINUX) os_version = g_strdup ( "GNU/Linux"); #elif defined ( OS_CYGWIN) os_version = g_strdup ( "Cygwin"); #elif defined ( OS_FREEBSD) os_version = g_strdup ( "FreeBSD"); #elif defined ( OS_OPENBSD) os_version = g_strdup ( "OpenBSD"); #elif defined ( OS_NETBSD) os_version = g_strdup ( "NetBSD"); #elif defined ( OS_WIN32) if ( gw_win32_get_version ( &sys_type, &version_major, &version_minor, &service_pack) == 0 ) { switch ( sys_type ) { case 0 : break; case 1 : os_version = g_strdup ( "MS Windows 3.x"); break; case 2 : if ( service_pack == 0 ) { os_version = g_strdup ( "MS Windows 95 OSR1"); } else { os_version = g_strdup ( "MS Windows 95 OSR2"); } break; case 3 : os_version = g_strdup ( "MS Windows 98"); break; case 4 : os_version = g_strdup ( "MS Windows ME"); break; case 5 : if ( version_minor == 0 ) { os_version = g_strdup_printf ( "MS Windows NT v4.00 SP%d", service_pack); } else if ( version_minor == 51) { os_version = g_strdup_printf ( "MS Windows NT v3.51 SP%d", service_pack); } else { os_version = g_strdup_printf ( "MS Windows NT SP%d", service_pack); } break; case 6 : os_version = g_strdup_printf ( "MS Windows 2000 SP%d", service_pack); break; case 7 : os_version = g_strdup ( "MS Windows XP"); break; case 8 : os_version = g_strdup ( "MS Windows server 2003 family"); break; default : break; } } else { os_version = g_strdup ( "MS Windows"); } #elif defined ( OS_UNKNOWN) os_version = g_strdup ( _("unknown")); #endif *version = os_version; return 0; } #if defined ( OS_WIN32) char * gw_package_get_dir ( char *subdir) { char *dir = NULL; HKEY hkey = 0; char install_dir[2048]; unsigned long dwLen = sizeof ( install_dir); memset(install_dir,'\0',2048); if ( RegOpenKey ( HKEY_LOCAL_MACHINE, "SOFTWARE\\GWhere", &hkey) == ERROR_SUCCESS ) { if ( RegQueryValueEx ( hkey, "Install_Dir", NULL, NULL, (LPBYTE)&install_dir, &dwLen) == ERROR_SUCCESS ) { if ( install_dir!=NULL && strlen ( install_dir)>0 ) { dir = g_strconcat ( install_dir, G_DIR_SEPARATOR_S, subdir, NULL); } } RegCloseKey (hkey); } if ( RegOpenKey ( HKEY_CURRENT_USER, "SOFTWARE\\GWhere", &hkey) == ERROR_SUCCESS ) { if ( RegQueryValueEx ( hkey, "Install_Dir", NULL, NULL, (LPBYTE)&install_dir, &dwLen) == ERROR_SUCCESS ) { if ( install_dir!=NULL && strlen ( install_dir)>0 ) { dir = g_strconcat ( install_dir, G_DIR_SEPARATOR_S, subdir, NULL); } } RegCloseKey (hkey); } if ( dir == NULL ) { dir = g_strdup ( subdir); } return dir; } #endif char * gw_package_get_locale_dir ( void) { char *locale_dir = NULL; #if defined ( OS_WIN32) locale_dir = gw_package_get_dir ( PACKAGE_LOCALE_DIR); #else locale_dir = g_strdup ( PACKAGE_LOCALE_DIR); #endif if ( locale_dir == NULL) { locale_dir = g_strdup ( PACKAGE_LOCALE_DIR); } return locale_dir; } char * gw_package_get_plugins_description_dir ( void) { char *plugins_dir = NULL; #if defined ( OS_WIN32) plugins_dir = gw_package_get_dir ( PACKAGE_PLUGINS_DESCRIPTION_DIR); #else plugins_dir = g_strdup ( PACKAGE_PLUGINS_DESCRIPTION_DIR); #endif return plugins_dir; } char * gw_package_get_plugins_catalog_dir ( void) { char *plugins_dir = NULL; #if defined ( OS_WIN32) plugins_dir = gw_package_get_dir ( PACKAGE_PLUGINS_CATALOG_DIR); #else plugins_dir = g_strdup ( PACKAGE_PLUGINS_CATALOG_DIR); #endif return plugins_dir; } char * gw_package_get_plugins_dir ( void) { char *plugins_dir = NULL; #if defined ( OS_WIN32) plugins_dir = gw_package_get_dir ( PACKAGE_PLUGINS_DIR); #else plugins_dir = g_strdup ( PACKAGE_PLUGINS_DIR); #endif return plugins_dir; } gwhere-0.2.3/src/gwsupport.h0000744000175000017500000001653110222307465014461 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwsupport.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a configure component. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwsupport.c * @author Author */ #include #ifndef GW_SUPPORT_H #define GW_SUPPORT_H #ifdef HAVE_CONFIG_H #if defined ( OS_WIN32) #include "../win32/config.h" #else #include #endif #endif #if defined ( OS_WIN32) || defined ( OS_CYGWIN) #include #endif #if defined ( HAVE_GTK20) /*! @define GTK_WINDOW_DIALOG Define it for GTK 2.0 compilation */ #define GTK_WINDOW_DIALOG GTK_WINDOW_TOPLEVEL #endif #define str_equals(a,b) ((a==NULL&&b==NULL)||(a!=NULL&&b!=NULL&&strcmp(a,b)==0)) #if defined ( HAVE_GTK12) /*! @define g_strdup_to_gtk_text With GTK 1.2 just duplicate string */ #define g_strdup_to_gtk_text(str,text) if(str!=NULL){text=g_strdup(str);}else{text=g_strdup("");} #elif defined ( HAVE_GTK20) /*! @define g_strdup_to_gtk_text With GTK 2.0 encode string to UTF-8 */ #define g_strdup_to_gtk_text(str,text) if(str!=NULL){text=g_locale_to_utf8(str,-1,NULL,NULL,NULL);}else{text=g_strdup("");} #endif #if defined ( HAVE_GTK12) /*! @define g_strlen_gtk_text With GTK 1.2 just duplicate call strlen */ #define g_strlen_gtk_text(str) strlen(str) #elif defined ( HAVE_GTK20) /*! @define g_strlen_gtk_text With GTK 2.0 give the UTF-8 string length */ #define g_strlen_gtk_text(str) g_utf8_strlen(str,-1) #endif #if defined ( HAVE_GTK12) /*! @define g_strdup_from_gtk_text With GTK 1.2 just duplicate string */ #define g_strdup_from_gtk_text(str,text) if(str!=NULL){text=g_strdup(str);}else{text=g_strdup("");} #elif defined ( HAVE_GTK20) /*! @define g_strdup_from_gtk_text With GTK 2.0 decode string from UTF-8 */ #define g_strdup_from_gtk_text(str,text) if(str!=NULL){text=g_locale_from_utf8(str,-1,NULL,NULL,NULL);}else{text=g_strdup("");} #endif #if defined ( OS_LINUX) || defined ( OS_FREEBSD) || defined ( OS_OPENBSD) || defined ( OS_NETBSD) || defined ( OS_MACOS) || defined ( OS_MACOSX) || defined ( OS_DARWIN) /*! @define HAVE_MOUNT_SYSTEM Define system with mount system */ #define HAVE_MOUNT_SYSTEM #endif /* Defines extra long number format */ #ifndef G_HAVE_GINT64 typdef guint64 guint32; #define G_MAXUINT64 G_MAXULONG #define G_GUINT64_FORMAT "u" #define strtoui64(x,y,z) strtoul(x,y,z) #elif defined ( HAVE_GTK12) #define G_GUINT64_FORMAT "llu" #define strtoui64(x,y,z) strtoull(x,y,z) #else #define strtoui64(x,y,z) strtoull(x,y,z) #endif /* Defines plugin file extension*/ #if defined ( HAVE_GTK12) #if defined ( OS_WIN32) #define G_MODULE_SUFFIX "dll" #else #define G_MODULE_SUFFIX "so" #endif #endif /* * Standard gettext macros. */ #ifdef ENABLE_NLS # include # undef _ # define _(String) dgettext (PACKAGE, String) /* # define _(String) gettext ( String) */ # ifdef gettext_noop # define N_(String) gettext_noop (String) # else # define N_(String) (String) # endif #else # define textdomain(String) (String) # define gettext(String) (String) # define dgettext(Domain,Message) (Message) # define dcgettext(Domain,Message,Type) (Message) # define bindtextdomain(Domain,Directory) (Domain) # define _(String) (String) # define N_(String) (String) #endif /* * Public Functions. */ /* * This function returns a widget in a component created by Glade. * Call it with the toplevel widget in the component (i.e. a window/dialog), * or alternatively any widget in the component, and the name of the widget * you want returned. */ GtkWidget * lookup_widget ( GtkWidget *widget, const gchar *widget_name); /* get_widget() is deprecated. Use lookup_widget instead. */ #define get_widget lookup_widget /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory ( const gchar *directory); /* * Private Functions. */ /* This is used to create the pixmaps in the interface. */ GtkWidget * create_pixmap ( GtkWidget *widget, const gchar *filename); /* This is used in of Win9x where they aren't home folder. */ #if defined ( OS_WIN32) #define GW_HOME_DIR "C:\\Windows\\LocalSettings" #else #define GW_HOME_DIR "/home" #endif #if defined ( OS_WIN32) || defined ( OS_CYGWIN) /*! * @function gw_win32_get_version * @abstract Gets the system version number and service pack number. * @discussion This function gets the system version number and service pack number.
* This works for Win 3.x(Win32s) and Win/95/98/ME and also Win/NT/2000.
* sys_type has the following values :
*
    *
  • 0 = Unknown
  • *
  • 1 = Win 3.x
  • *
  • 2 = Win 95
  • *
  • 3 = Win 98
  • *
  • 4 = Win ME
  • *
  • 5 = Win NT
  • *
  • 6 = Win 2000
  • *
  • 7 = Win XP
  • *
  • 8 = Win Server 2003 familly
  • *
* version_major is (e.g.) 4 for Win/NT, 5 for Win/2000.
* version_minor is (e.g.) 51 for NT v3.51, 0 for NT v 4.00.
* service_pack (service pack #) is meaningful for NT or 2000 * (and also for Win/95, where it is returned as 0 or 1 to * indicate Win/95 or Win/95B(OSR2) respectively).
* @param sys_type type of system * @param version_major major version of system * @param version_minor minor version of system * @param service_pack service pack number of system * @result an error code.
* Returns 0 when it's done. * Returns 606 when it's unable to identify system type.
* Returns 648 when it's unable to load library.
* Returns 649 when disk name may be invalid or Disk not accessible.
*/ int gw_win32_get_version ( int *sys_type, int *version_major, int *version_minor, int *service_pack); #endif /*! * @function gw_os_get_version_str * @abstract Gets the operating system version. * @discussion This function gets the formatted operating system version.
* @param version string to store system version must be freed * with g_free(). * @result an error code.
* Returns 0 when it's done. * Returns -1 when an error occured. */ int gw_os_get_version_str ( gchar **version); char * gw_package_get_locale_dir ( void); char * gw_package_get_plugins_dir ( void); char * gw_package_get_plugins_description_dir ( void); char * gw_package_get_plugins_catalog_dir ( void); #endif gwhere-0.2.3/src/main.c0000744000175000017500000000472710267553617013345 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gwsupport.h" #include "main.h" #include #include #include #if defined ( OS_WIN32) #include #endif #include "gwapplicationmanager.h" #include "gwguimanager.h" int main (int argc, char *argv[]) { char *locale_dir = NULL; #ifdef GW_DEBUG_MODE #ifdef HAVE_GTK20 g_mem_set_vtable ( glib_mem_profiler_table); #endif gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "application is starting ==> memory status : "); g_mem_profile ( ); #endif #ifdef ENABLE_NLS #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "NLS enabled"); #endif setlocale ( LC_ALL, ""); if ( (locale_dir = gw_package_get_locale_dir ( )) != NULL) { #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "Locale is %s", locale_dir); #endif bindtextdomain ( PACKAGE, locale_dir); textdomain ( PACKAGE); g_free ( locale_dir); } #endif gtk_set_locale ( ); // g_log_set_handler ( "Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL); // g_log_set_handler ( "Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL); gtk_init ( &argc, &argv); #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "application is initializing ==> memory status : "); g_mem_profile ( ); #endif gw_am_init ( argc, argv); #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "application is loading catalog ==> memory status : "); g_mem_profile ( ); #endif /* Enter the main loop */ gtk_main ( ); #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, "application is exited ==> memory status : "); g_mem_profile ( ); #endif return 0; } gwhere-0.2.3/src/main.h0000744000175000017500000000253310023202520013311 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header main.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a main header of the project. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref main.c * @author Author */ gwhere-0.2.3/src/Makefile.am0000744000175000017500000000171610506327077014277 0ustar bartbart## Process this file with automake to produce Makefile.in SUBDIRS = tools db data res gui plugins INCLUDES = \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/src/res \ -I$(top_srcdir)/src/tools \ -I$(top_srcdir)/src/db \ -I$(top_srcdir)/src/data \ -I$(top_srcdir)/src/gui \ @GTK_CFLAGS@ \ -D${HOST_OS} bin_PROGRAMS = gwhere gwhere_SOURCES = \ main.c main.h \ gwsupport.c gwsupport.h \ gwcatalogmanager.c gwcatalogmanager.h \ gwhelper.c gwhelper.h \ gwsearchengine.c gwsearchengine.h \ gwsupermount.c gwsupermount.h \ gwapplicationmanager.c gwapplicationmanager.h \ gwguimanager.c gwguimanager.h \ gwpluginsmanager.c gwpluginsmanager.h \ gwdevicemanager.c gwdevicemanager.h gwhere_LDADD = \ @top_srcdir@/src/res/libgwres.a \ @top_srcdir@/src/tools/libgwtools.a \ @top_srcdir@/src/plugins/libgwplugins.a \ @top_srcdir@/src/db/libgwdb.a \ @top_srcdir@/src/data/libgwdata.a \ @top_srcdir@/src/gui/libgwgui.a \ @GTK_LIBS@ \ $(INTLLIBS) gwhere_LDFLAGS = \ gwhere-0.2.3/src/Makefile.in0000744000175000017500000003523410506327606014310 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ SUBDIRS = tools db data res gui plugins INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir)/src/res -I$(top_srcdir)/src/tools -I$(top_srcdir)/src/db -I$(top_srcdir)/src/data -I$(top_srcdir)/src/gui @GTK_CFLAGS@ -D${HOST_OS} bin_PROGRAMS = gwhere gwhere_SOURCES = main.c main.h gwsupport.c gwsupport.h gwcatalogmanager.c gwcatalogmanager.h gwhelper.c gwhelper.h gwsearchengine.c gwsearchengine.h gwsupermount.c gwsupermount.h gwapplicationmanager.c gwapplicationmanager.h gwguimanager.c gwguimanager.h gwpluginsmanager.c gwpluginsmanager.h gwdevicemanager.c gwdevicemanager.h gwhere_LDADD = @top_srcdir@/src/res/libgwres.a @top_srcdir@/src/tools/libgwtools.a @top_srcdir@/src/plugins/libgwplugins.a @top_srcdir@/src/db/libgwdb.a @top_srcdir@/src/data/libgwdata.a @top_srcdir@/src/gui/libgwgui.a @GTK_LIBS@ $(INTLLIBS) gwhere_LDFLAGS = mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = bin_PROGRAMS = gwhere$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) DEFS = @DEFS@ -I. -I$(srcdir) -I.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ gwhere_OBJECTS = main.$(OBJEXT) gwsupport.$(OBJEXT) \ gwcatalogmanager.$(OBJEXT) gwhelper.$(OBJEXT) gwsearchengine.$(OBJEXT) \ gwsupermount.$(OBJEXT) gwapplicationmanager.$(OBJEXT) \ gwguimanager.$(OBJEXT) gwpluginsmanager.$(OBJEXT) \ gwdevicemanager.$(OBJEXT) gwhere_DEPENDENCIES = @top_srcdir@/src/res/libgwres.a \ @top_srcdir@/src/tools/libgwtools.a \ @top_srcdir@/src/plugins/libgwplugins.a @top_srcdir@/src/db/libgwdb.a \ @top_srcdir@/src/data/libgwdata.a @top_srcdir@/src/gui/libgwgui.a CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best DEP_FILES = .deps/gwapplicationmanager.P .deps/gwcatalogmanager.P \ .deps/gwdevicemanager.P .deps/gwguimanager.P .deps/gwhelper.P \ .deps/gwpluginsmanager.P .deps/gwsearchengine.P .deps/gwsupermount.P \ .deps/gwsupport.P .deps/main.P SOURCES = $(gwhere_SOURCES) OBJECTS = $(gwhere_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-binPROGRAMS: clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) distclean-binPROGRAMS: maintainer-clean-binPROGRAMS: install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) list='$(bin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: gwhere$(EXEEXT): $(gwhere_OBJECTS) $(gwhere_DEPENDENCIES) @rm -f gwhere$(EXEEXT) $(LINK) $(gwhere_LDFLAGS) $(gwhere_OBJECTS) $(gwhere_LDADD) $(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. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = src distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-binPROGRAMS install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall-binPROGRAMS uninstall: uninstall-recursive all-am: Makefile $(PROGRAMS) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \ distclean-tags distclean-depend distclean-generic \ clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-binPROGRAMS \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/src/Makefile.win0000744000175000017500000000263210243231235014461 0ustar bartbart# Project: gwhere # Makefile created for GWhere CC = gcc.exe WINDRES = windres.exe RES = gwhere.res OBJ = gwcatalogmanager.o gwhelper.o gwdevicemanager.o gwguimanager.o gwpluginsmanager.o main.o gwsearchengine.o gwsupermount.o gwsupport.o gwapplicationmanager.o $(RES) # use the --enable-mem-profile=yes option to debug memory desallocation LIBS = $(GTKLIBS) -LC:/MINGW/lib -LC:/MINGW/mingw_extra/lib -LC:/GTK/lib $(GWLIBS) -mno-cygwin -fnative-struct -lintl -mno-cygwin -fnative-struct -lzdll -lwsock32 -static -lregex -lmingwex -lglib-2.0 -lgmodule-2.0 GTKLIBS = -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv GWLIBS = res/libgwres.a plugins/libgwplugins.a db/libgwdb.a data/libgwdata.a tools/libgwtools.a gui/libgwgui.a INCS = $(GWINCS) $(GTKINCS) -IC:/MINGW/include -IC:/MINGW/mingw_extra/include -IC:/GTK/include GTKINCS = -IC:/GTK/include/gtk-2.0 -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/atk-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include GWINCS = -I. BIN = gwhere.exe CFLAGS = $(INCS) -O2 -Wall -fnative-struct -DHAVE_CONFIG_H -DOS_WIN32 -DGTK_ENABLE_BROKEN -s -mwindows .PHONY: clean all: $(BIN) clean: rm -f $(OBJ) $(BIN) $(BIN): $(OBJ) $(CC) $(OBJ) $(GWLIBS) -o $(BIN) $(LIBS) $(CFLAGS) gwhere.res: $(WINDRES) -i ..\win32\gwhere.rc -I rc -o gwhere.res -O coff gwhere-0.2.3/src/plugins/0000755000175000017500000000000010506575521013715 5ustar bartbartgwhere-0.2.3/src/plugins/descr/0000755000175000017500000000000010506575521015015 5ustar bartbartgwhere-0.2.3/src/plugins/descr/html.c0000744000175000017500000001042210501635637016125 0ustar bartbart/* GWhere. * Copyright (C) 2000 1999 by Balázs Terényi * Modified Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "tools/gwtools.h" //#define __DEBUG__ 1 char * g_module_check_init ( void) { #ifdef __DEBUG__ printf ( "HTML module is loading...\n"); #endif return NULL; } const char * plugin_get_author ( void) { return "Sébastien LECACHEUR"; } const char * plugin_get_info ( void) { return "This plugin allow to extract title from HTML file."; } const char * plugin_get_version ( void) { return "1.0.0"; } const char * plugin_get_help ( void) { return NULL; } const char * plugin_get_allowed_ext ( void) { return "html|htm"; } char * plugin_get_file_descr ( const char *filepath, const char *mode) { char *descr = NULL, *tmp_descr = NULL; FILE *file = NULL; int len; // char *title_start = NULL; // char *title_end = NULL; char buff_original[512]; // The original readed strings char buff[512]; // The readed strings to lower char databuff[2048]; // The original readed strings after the tag // char databuff_lower[2048]; gboolean found = FALSE; gboolean finished = FALSE; int start = 0, end = 0; char *current = NULL, *bad = NULL; #ifdef __DEBUG__ g_print("File is %s\n",filepath); #endif //free(descr); //free(descr); //g_print("test\n"); //g_print("segfault%s\n",NULL); if ( filepath != NULL ) { if ( (file = fopen ( filepath, "rb")) != NULL ) { memset ( buff_original, '\0', 512); memset ( buff, '\0', 512); memset ( databuff, '\0', 2048); /* Reads the line or a maximum of 512 characters */ while ( (!finished) && (fgets ( buff_original, 512, file) != NULL) ) { #ifdef __DEBUG__ g_print("line=%s\n", buff_original); #endif strcpy ( buff, buff_original); g_strdown ( buff); start = 0; end = strlen ( buff); if (!found) { if ( (current = strstr ( buff, "<title>")) != NULL ) { start = current - buff + 7; found = TRUE; } else { } } else { } if ( found) { if ( (current = strstr ( &buff[start], "")) != NULL ) { end = current - buff; finished = TRUE; } else { } } else { } if ( found) { strncat ( databuff, &buff_original[start], end - start); } else { } if (!finished) { } else { if ( (len = strlen ( databuff)) > 0 ) { descr = (char*)g_malloc ( len + 1); memset ( descr, '\0', len + 1); strcpy ( descr, databuff); if ( (tmp_descr = gw_str_replace_str ( descr, "\r\n", " ")) != NULL ) { g_free ( descr); descr = tmp_descr; tmp_descr = NULL; } gw_str_replace_char ( descr, '\n', ' '); gw_str_delete_char ( descr, '\t'); g_strstrip ( descr); } else { } } if ( !finished ) { /* Cannot find a tag after a or a tag. */ if ( strstr ( &buff[start], "") != NULL ) { finished = TRUE; } else if ( strstr ( &buff[start], "") != NULL ) { finished = TRUE; } } else { bad = NULL; if ( (bad = strstr ( &buff[start], "")) != NULL ) { } else if ( (bad = strstr ( &buff[start], "")) != NULL ) { } if ( (bad != NULL) && (bad < current) ) { if ( descr != NULL) { g_free ( descr); descr = NULL; } } } } fclose ( file); } } #ifdef __DEBUG__ g_print("descr=%s\n",descr!=NULL?descr:"(null)"); #endif return descr; } void g_module_unload ( void) { #ifdef __DEBUG__ printf ( "HTML module is unloading...\n"); #endif } gwhere-0.2.3/src/plugins/descr/Makefile.am0000744000175000017500000000307310506322476017054 0ustar bartbartlibdir = $(exec_prefix)/share/${PACKAGE}/plugins/descr lib_LTLIBRARIES = libgwplugindescriptionavi.la \ libgwplugindescriptiondescript_ion.la \ libgwplugindescriptionfile_id_diz.la \ libgwplugindescriptionhtml.la \ libgwplugindescriptionmp3.la \ libgwplugindescriptionmpc.la libgwplugindescriptionavi_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugindescriptiondescript_ion_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugindescriptionfile_id_diz_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugindescriptionhtml_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugindescriptionmp3_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugindescriptionmpc_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugindescriptionavi_la_SOURCES = avi.c libgwplugindescriptiondescript_ion_la_SOURCES = descript_ion.c libgwplugindescriptionfile_id_diz_la_SOURCES = file_id_diz.c libgwplugindescriptionhtml_la_SOURCES = html.c libgwplugindescriptionmp3_la_SOURCES = mp3.c libgwplugindescriptionmpc_la_SOURCES = mpc.c INCLUDES = \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/src \ @GTK_CFLAGS@ libgwplugindescriptiondescript_ion_la_LIBADD = \ @top_srcdir@/src/tools/libgwtools.a libgwplugindescriptionfile_id_diz_la_LIBADD = \ @top_srcdir@/src/tools/libgwtools.a libgwplugindescriptionhtml_la_LIBADD = \ @top_srcdir@/src/tools/libgwtools.a libgwplugindescriptionmp3_la_LIBADD = \ @top_srcdir@/src/tools/libgwtools.a gwhere-0.2.3/src/plugins/descr/Makefile.in0000744000175000017500000003453310506327653017074 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ libdir = $(exec_prefix)/share/${PACKAGE}/plugins/descr lib_LTLIBRARIES = libgwplugindescriptionavi.la libgwplugindescriptiondescript_ion.la libgwplugindescriptionfile_id_diz.la libgwplugindescriptionhtml.la libgwplugindescriptionmp3.la libgwplugindescriptionmpc.la libgwplugindescriptionavi_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugindescriptiondescript_ion_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugindescriptionfile_id_diz_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugindescriptionhtml_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugindescriptionmp3_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugindescriptionmpc_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugindescriptionavi_la_SOURCES = avi.c libgwplugindescriptiondescript_ion_la_SOURCES = descript_ion.c libgwplugindescriptionfile_id_diz_la_SOURCES = file_id_diz.c libgwplugindescriptionhtml_la_SOURCES = html.c libgwplugindescriptionmp3_la_SOURCES = mp3.c libgwplugindescriptionmpc_la_SOURCES = mpc.c INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir)/src @GTK_CFLAGS@ libgwplugindescriptiondescript_ion_la_LIBADD = @top_srcdir@/src/tools/libgwtools.a libgwplugindescriptionfile_id_diz_la_LIBADD = @top_srcdir@/src/tools/libgwtools.a libgwplugindescriptionhtml_la_LIBADD = @top_srcdir@/src/tools/libgwtools.a libgwplugindescriptionmp3_la_LIBADD = @top_srcdir@/src/tools/libgwtools.a mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../../config.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libgwplugindescriptionavi_la_LIBADD = libgwplugindescriptionavi_la_OBJECTS = avi.lo libgwplugindescriptiondescript_ion_la_DEPENDENCIES = \ @top_srcdir@/src/tools/libgwtools.a libgwplugindescriptiondescript_ion_la_OBJECTS = descript_ion.lo libgwplugindescriptionfile_id_diz_la_DEPENDENCIES = \ @top_srcdir@/src/tools/libgwtools.a libgwplugindescriptionfile_id_diz_la_OBJECTS = file_id_diz.lo libgwplugindescriptionhtml_la_DEPENDENCIES = \ @top_srcdir@/src/tools/libgwtools.a libgwplugindescriptionhtml_la_OBJECTS = html.lo libgwplugindescriptionmp3_la_DEPENDENCIES = \ @top_srcdir@/src/tools/libgwtools.a libgwplugindescriptionmp3_la_OBJECTS = mp3.lo libgwplugindescriptionmpc_la_LIBADD = libgwplugindescriptionmpc_la_OBJECTS = mpc.lo CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best DEP_FILES = .deps/avi.P .deps/descript_ion.P .deps/file_id_diz.P \ .deps/html.P .deps/mp3.P .deps/mpc.P SOURCES = $(libgwplugindescriptionavi_la_SOURCES) $(libgwplugindescriptiondescript_ion_la_SOURCES) $(libgwplugindescriptionfile_id_diz_la_SOURCES) $(libgwplugindescriptionhtml_la_SOURCES) $(libgwplugindescriptionmp3_la_SOURCES) $(libgwplugindescriptionmpc_la_SOURCES) OBJECTS = $(libgwplugindescriptionavi_la_OBJECTS) $(libgwplugindescriptiondescript_ion_la_OBJECTS) $(libgwplugindescriptionfile_id_diz_la_OBJECTS) $(libgwplugindescriptionhtml_la_OBJECTS) $(libgwplugindescriptionmp3_la_OBJECTS) $(libgwplugindescriptionmpc_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu src/plugins/descr/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libgwplugindescriptionavi.la: $(libgwplugindescriptionavi_la_OBJECTS) $(libgwplugindescriptionavi_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libgwplugindescriptionavi_la_LDFLAGS) $(libgwplugindescriptionavi_la_OBJECTS) $(libgwplugindescriptionavi_la_LIBADD) $(LIBS) libgwplugindescriptiondescript_ion.la: $(libgwplugindescriptiondescript_ion_la_OBJECTS) $(libgwplugindescriptiondescript_ion_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libgwplugindescriptiondescript_ion_la_LDFLAGS) $(libgwplugindescriptiondescript_ion_la_OBJECTS) $(libgwplugindescriptiondescript_ion_la_LIBADD) $(LIBS) libgwplugindescriptionfile_id_diz.la: $(libgwplugindescriptionfile_id_diz_la_OBJECTS) $(libgwplugindescriptionfile_id_diz_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libgwplugindescriptionfile_id_diz_la_LDFLAGS) $(libgwplugindescriptionfile_id_diz_la_OBJECTS) $(libgwplugindescriptionfile_id_diz_la_LIBADD) $(LIBS) libgwplugindescriptionhtml.la: $(libgwplugindescriptionhtml_la_OBJECTS) $(libgwplugindescriptionhtml_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libgwplugindescriptionhtml_la_LDFLAGS) $(libgwplugindescriptionhtml_la_OBJECTS) $(libgwplugindescriptionhtml_la_LIBADD) $(LIBS) libgwplugindescriptionmp3.la: $(libgwplugindescriptionmp3_la_OBJECTS) $(libgwplugindescriptionmp3_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libgwplugindescriptionmp3_la_LDFLAGS) $(libgwplugindescriptionmp3_la_OBJECTS) $(libgwplugindescriptionmp3_la_LIBADD) $(LIBS) libgwplugindescriptionmpc.la: $(libgwplugindescriptionmpc_la_OBJECTS) $(libgwplugindescriptionmpc_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libgwplugindescriptionmpc_la_LDFLAGS) $(libgwplugindescriptionmpc_la_OBJECTS) $(libgwplugindescriptionmpc_la_LIBADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = src/plugins/descr distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/plugins/descr/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-libLTLIBRARIES install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-libLTLIBRARIES uninstall: uninstall-am all-am: Makefile $(LTLIBRARIES) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(libdir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir mostlyclean-depend \ distclean-depend clean-depend maintainer-clean-depend info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/src/plugins/descr/Makefile.win0000744000175000017500000001035310233762420017245 0ustar bartbart# Project: pluginsdescr # Makefile created for GWhere CC = gcc.exe WINDRES = windres.exe RES = AVI_OBJ = avi.o DESCRIPT_ION_OBJ = descript_ion.o FILE_ID_DIZ_OBJ = file_id_diz.o HTML_OBJ = html.o MP3_OBJ = mp3.o MPC_OBJ = mpc.o OBJ = $(AVI_OBJ) $(DESCRIPT_ION_OBJ) $(FILE_ID_DIZ_OBJ) $(HTML_OBJ) $(MP3_OBJ) $(MPC_OBJ) $(RES) AVI_BIN = libgwplugindescriptionavi.dll DESCRIPT_ION_BIN = libgwplugindescriptiondescript_ion.dll FILE_ID_DIZ_BIN = libgwplugindescriptionfile_id_diz.dll HTML_BIN = libgwplugindescriptionhtml.dll MP3_BIN = libgwplugindescriptionmp3.dll MPC_BIN = libgwplugindescriptionmpc.dll BIN = $(AVI_BIN) $(DESCRIPT_ION_BIN) $(FILE_ID_DIZ_BIN) $(HTML_BIN) $(MP3_BIN) $(MPC_BIN) LIBS = $(GTKLIBS) -LC:/MINGW/lib -LC:/MINGW/mingw_extra/lib -LC:/GTK/lib $(GWLIBS) -mno-cygwin -fnative-struct -lintl -mno-cygwin -fnative-struct -lzdll -lwsock32 -static -lregex -lmingwex -lglib-2.0 -lgmodule-2.0 GTKLIBS = -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv GWLIBS = ../../tools/libgwtools.a INCS = $(GWINCS) $(GTKINCS) -IC:/MINGW/include -IC:/MINGW/mingw_extra/include -IC:/GTK/include GTKINCS = -IC:/GTK/include/gtk-2.0 -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/atk-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include GWINCS = -I../.. CFLAGS = $(INCS) -O2 -Wall -fnative-struct -DHAVE_CONFIG_H -DOS_WIN32 -DGTK_ENABLE_BROKEN -s -mwindows .PHONY: clean all: $(BIN) clean: rm -f $(OBJ) $(BIN) DLLWRAP=dllwrap.exe AVI_EXPFILE=liblibgwplugindescriptionavi.exp AVI_DEFFILE=liblibgwplugindescriptionavi.def AVI_STATICLIB=liblibgwplugindescriptionavi.a DESCRIPT_ION_EXPFILE=liblibgwplugindescriptiondescript_ion.exp DESCRIPT_ION_DEFFILE=liblibgwplugindescriptiondescript_ion.def DESCRIPT_ION_STATICLIB=liblibgwplugindescriptiondescript_ion.a FILE_ID_DIZ_EXPFILE=liblibgwplugindescriptionfile_id_diz.exp FILE_ID_DIZ_DEFFILE=liblibgwplugindescriptionfile_id_diz.def FILE_ID_DIZ_STATICLIB=liblibgwplugindescriptionfile_id_diz.a HTML_EXPFILE=liblibgwplugindescriptionhtml.exp HTML_DEFFILE=liblibgwplugindescriptionhtml.def HTML_STATICLIB=liblibgwplugindescriptionhtml.a MP3_EXPFILE=liblibgwplugindescriptionmp3.exp MP3_DEFFILE=liblibgwplugindescriptionmp3.def MP3_STATICLIB=liblibgwplugindescriptionmp3.a MPC_EXPFILE=liblibgwplugindescriptionmpc.exp MPC_DEFFILE=liblibgwplugindescriptionmpc.def MPC_STATICLIB=liblibgwplugindescriptionmpc.a $(BIN): $(OBJ) $(DLLWRAP) --driver-name $(CC) --output-exp $(AVI_EXPFILE) --output-def $(AVI_DEFFILE) --implib $(AVI_STATICLIB) -o $(AVI_BIN) $(AVI_OBJ) ..\..\tools\libgwtools.a ..\..\data\libgwdata.a ..\..\res\libgwres.a $(LIBS) $(CFLAGS) $(DLLWRAP) --driver-name $(CC) --output-exp $(DESCRIPT_ION_EXPFILE) --output-def $(DESCRIPT_ION_DEFFILE) --implib $(DESCRIPT_ION_STATICLIB) -o $(DESCRIPT_ION_BIN) $(DESCRIPT_ION_OBJ) ..\..\tools\libgwtools.a ..\..\data\libgwdata.a ..\..\res\libgwres.a $(LIBS) $(CFLAGS) $(DLLWRAP) --driver-name $(CC) --output-exp $(FILE_ID_DIZ_EXPFILE) --output-def $(FILE_ID_DIZ_DEFFILE) --implib $(FILE_ID_DIZ_STATICLIB) -o $(FILE_ID_DIZ_BIN) $(FILE_ID_DIZ_OBJ) ..\..\tools\libgwtools.a ..\..\data\libgwdata.a ..\..\res\libgwres.a $(LIBS) $(CFLAGS) $(DLLWRAP) --driver-name $(CC) --output-exp $(HTML_EXPFILE) --output-def $(HTML_DEFFILE) --implib $(HTML_STATICLIB) -o $(HTML_BIN) $(HTML_OBJ) ..\..\tools\libgwtools.a ..\..\data\libgwdata.a ..\..\res\libgwres.a $(LIBS) $(CFLAGS) $(DLLWRAP) --driver-name $(CC) --output-exp $(MP3_EXPFILE) --output-def $(MP3_DEFFILE) --implib $(MP3_STATICLIB) -o $(MP3_BIN) $(MP3_OBJ) ..\..\tools\libgwtools.a ..\..\data\libgwdata.a ..\..\res\libgwres.a $(LIBS) $(CFLAGS) $(DLLWRAP) --driver-name $(CC) --output-exp $(MPC_EXPFILE) --output-def $(MPC_DEFFILE) --implib $(MPC_STATICLIB) -o $(MPC_BIN) $(MPC_OBJ) ..\..\tools\libgwtools.a ..\..\data\libgwdata.a ..\..\res\libgwres.a $(LIBS) $(CFLAGS) avi.o: avi.c $(CC) -c avi.c -o avi.o $(CFLAGS) descript_ion.o: descript_ion.c $(CC) -c descript_ion.c -o descript_ion.o $(CFLAGS) file_id_diz.o: file_id_diz.c $(CC) -c file_id_diz.c -o file_id_diz.o $(CFLAGS) html.o: html.c $(CC) -c html.c -o html.o $(CFLAGS) mp3.o: mp3.c $(CC) -c mp3.c -o mp3.o $(CFLAGS) mpc.o: mpc.c mppdec.h $(CC) -c mpc.c -o mpc.o $(CFLAGS) gwhere-0.2.3/src/plugins/descr/mp3.c0000744000175000017500000006435610501635653015675 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "tools/gwtools.h" //#define __DEBUG__ 1 /* ID3 v1 */ typedef struct { char tag[3]; char title[30]; char artist[30]; char album[30]; char year[4]; char comment[30]; unsigned char genre; } stream_id3v1; /* ID3 v1X */ typedef struct { char tag[3]; char title[90]; char artist[50]; char album[50]; char comment[50]; unsigned char genre; } stream_id3v1X; /* ID3 */ typedef struct { char *version; char *title; char *artist; char *album; char *year; char *comment; char *genre; char *track; char *encoder; char *url; char *compositer; char *copyright; int gennum; int tracknum; } id3; const int genre_largest = 145; const char * const genres[] = { "Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk", "Grunge", "Hip-Hop", "Jazz", "Metal", "New Age", "Oldies", "Other", "Pop", "R&B", "Rap", "Reggae", "Rock", "Techno", "Industrial", "Alternative", "Ska", "Death Metal", "Pranks", "Soundtrack", "Euro-Techno", "Ambient", "Trip-Hop", "Vocal", "Jazz+Funk", "Fusion", "Trance", "Classical", "Instrumental", "Acid", "House", "Game", "Sound Clip", "Gospel", "Noise", "AlternRock", "Bass", "Soul", "Punk", "Space", "Meditative", "Instrumental Pop", "Instrumental Rock", "Ethnic", "Gothic", "Darkwave", "Techno-Industrial", "Electronic", "Pop-Folk", "Eurodance", "Dream", "Southern Rock", "Comedy", "Cult", "Gangsta", "Top 40", "Christian Rap", "Pop/Funk", "Jungle", "Native American", "Cabaret", "New Wave", "Psychadelic", "Rave", "Showtunes", "Trailer", "Lo-Fi", "Tribal", "Acid Punk", "Acid Jazz", "Polka", "Retro", "Musical", "Rock & Roll", "Hard Rock", "Folk", "Folk-Rock", "National Folk", "Swing", "Fast Fusion", "Bebob", "Latin", "Revival", "Celtic", "Bluegrass", "Avantgarde", "Gothic Rock", "Progressive Rock", "Psychedelic Rock", "Symphonic Rock", "Slow Rock", "Big Band", "Chorus", "Easy Listening", "Acoustic", "Humour", "Speech", "Chanson", "Opera", "Chamber Music", "Sonata", "Symphony", "Booty Bass", "Primus", "Porn Groove", "Satire", "Slow Jam", "Club", "Tango", "Samba", "Folklore", "Ballad", "Power Ballad", "Rhytmic Soul", "Freestyle", "Duet", "Punk Rock", "Drum Solo", "Acapella", "Euro-House", "Dance Hall", "Goa", "Drum & Bass", "Club-House", "Hardcore", "Terror", "Indie", "BritPop", "Negerpunk", "Polsk Punk", "Beat", "Christian Gangsta Rap", "Heavy Metal", "Black Metal", "Crossover", "Contemporary Christian", "Christian Rock", "Merengue", "Salsa", "Trash Metal", "Unknown" }; #define MASK_SYNC 0xFFE00000 #define MASK_MPEG 0x180000 #define SHIFT_MPEG 19 #define MPEG_VERSION_1 3 #define MPEG_VERSION_2 2 #define MPEG_VERSION_2_5 0 #define MASK_LAYER 0x60000 #define SHIFT_LAYER 17 #define LAYER_VERSION_1 3 #define LAYER_VERSION_2 2 #define LAYER_VERSION_3 1 #define MASK_BITRATE 0xF000 #define SHIFT_BITRATE 12 #define MASK_FREQ 0xC00 #define SHIFT_FREQ 10 #define MASK_CHAN 0xC0 #define SHIFT_CHAN 6 #define INVALID_HEADER 2 int bitrates[2][3][15] = { { /* layer 3 */ {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320}, /* layer 2 */ {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384}, /* layer 1 */ {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448} }, { /* layer 3 */ {8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160}, /* layer 2 */ {8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160}, /* layer 1 */ {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256} } }; int freqs[3][3] = { /* MPEG 1 */ {44100, 48000, 32000}, /* MPEG 2 */ {22050, 24000, 16000}, /* MPEG 2.5 */ {11025, 12000, 8000} }; struct mp3data { int mpeg_version; int layer_desc; int bitrate; int frequency; int channels; }; int file_mp3_get_header ( const char *filename, struct mp3data *mp3) { FILE *file = NULL; unsigned long int header = 0; int c = '\0'; char chunk[4]; short size = 0; int sample_rate = 0; if ( !(file = fopen ( filename, "rb")) ) { perror ( "fopen"); return 1; } if ( fread ( &chunk, sizeof ( char) * 4, 1, file) != 1 ) { fclose ( file); return INVALID_HEADER; } if ( strncmp ( chunk, "RIFF", 4) == 0 ) { /* It's a wav file */ fread ( &chunk, sizeof ( char) * 4, 1, file); fread ( &chunk, sizeof ( char) * 4, 1, file); if ( strncmp ( chunk, "WAVE", 4) != 0 ) { fclose ( file); return INVALID_HEADER; } fread ( &chunk, sizeof ( char) * 4, 1, file); if ( strncmp ( chunk, "fmt ", 4) != 0 ) { fclose ( file); return INVALID_HEADER; } fread ( &chunk, sizeof ( char) * 4, 1, file); fread ( &size, sizeof ( short), 1, file); if ( size != 0x0055 ) { fclose ( file); return INVALID_HEADER; } mp3->mpeg_version = MPEG_VERSION_1; mp3->layer_desc = LAYER_VERSION_3; fread ( &size, sizeof ( short), 1, file); mp3->channels = size; fread ( &sample_rate, sizeof ( int), 1, file); mp3->frequency = sample_rate; fread ( &sample_rate, sizeof ( int), 1, file); mp3->bitrate = (sample_rate&0x00F0); fclose ( file); } else { /* It's a real MP3 file */ rewind ( file); while ( ((c = fgetc ( file)) != 0xff) && (c != EOF)); if ( feof ( file) ) { fclose ( file); return INVALID_HEADER; } ungetc ( c, file); fread ( &header, 1, sizeof ( header), file); fclose ( file); header = ntohl ( header); if ( (header & MASK_SYNC) != MASK_SYNC ) { return INVALID_HEADER; } mp3->mpeg_version = ((header & MASK_MPEG) >> SHIFT_MPEG); mp3->layer_desc = ((header & MASK_LAYER) >> SHIFT_LAYER); /* Causes pain for MPEG_VERSION_2_5. */ mp3->bitrate = bitrates[(mp3->mpeg_version == MPEG_VERSION_1)?0:1][mp3->layer_desc - 1][((header & MASK_BITRATE) >> SHIFT_BITRATE)]; switch ( mp3->mpeg_version) { case MPEG_VERSION_1: mp3->frequency = freqs[0][((header & MASK_FREQ) >> SHIFT_FREQ)]; break; case MPEG_VERSION_2: mp3->frequency = freqs[1][((header & MASK_FREQ) >> SHIFT_FREQ)]; break; case MPEG_VERSION_2_5: mp3->frequency = freqs[2][((header & MASK_FREQ) >> SHIFT_FREQ)]; break; } if ( ((header & MASK_CHAN) >> SHIFT_CHAN) == 3) { mp3->channels = 1; } else { mp3->channels = 2; } } return 0; } int file_read_id3v1 ( FILE *file, id3 *id3tag) { int temp; stream_id3v1 id3; stream_id3v1X id3x; char *buffer; #ifdef __DEBUG__ g_print ( "read id3v1\n"); #endif fseek ( file, -128, SEEK_END); if ( (temp = fread ( &id3, 128, 1, file)) == 1 ) { if (!strncmp ( id3.tag, "TAG", 3)) { id3tag->title = (char*)g_malloc ( sizeof ( char) * 31); memset ( id3tag->title, '\0', 31); /* str_kept_ascii ( id3.title, 30); */ strncpy ( id3tag->title, id3.title, 30); gw_str_trim ( id3tag->title); if ( strlen ( id3tag->title) == 0) { g_free ( id3tag->title); id3tag->title = NULL; } id3tag->artist = (char*)g_malloc ( sizeof ( char) * 31); memset ( id3tag->artist, '\0', 31); /* str_kept_ascii ( id3.artist, 30); */ strncpy ( id3tag->artist, id3.artist, 30); gw_str_trim ( id3tag->artist); if ( strlen ( id3tag->artist) == 0) { g_free ( id3tag->artist); id3tag->artist = NULL; } id3tag->album = (char*)g_malloc ( sizeof ( char) * 31); memset ( id3tag->album, '\0', 31); /* str_kept_ascii ( id3.album, 30); */ strncpy ( id3tag->album, id3.album, 30); gw_str_trim ( id3tag->album); if ( strlen ( id3tag->album) == 0) { g_free ( id3tag->album); id3tag->album = NULL; } id3tag->year = (char*)g_malloc ( sizeof ( char) * 5); memset ( id3tag->year, '\0', 5); /* str_kept_ascii ( id3.year, 4); */ strncpy ( id3tag->year, id3.year, 4); gw_str_trim ( id3tag->year); if ( strlen ( id3tag->year) == 0) { g_free ( id3tag->year); id3tag->year = NULL; } if ( (id3.comment[28] == 0x00) && (id3.comment[29] != 0x00) ) { id3tag->comment = (char*)g_malloc ( sizeof ( char) * 29); memset ( id3tag->comment, '\0', 29); /* str_kept_ascii ( id3.comment, 30); */ strncpy ( id3tag->comment, id3.comment, 28); gw_str_trim ( id3tag->comment); if ( strlen ( id3tag->comment) == 0) { g_free ( id3tag->comment); id3tag->comment = NULL; } id3tag->tracknum = id3.comment[29] & 0xFF; id3tag->tracknum++; id3tag->track = (char*)g_malloc ( sizeof ( char) * 4); memset ( id3tag->track, '\0', 4); snprintf ( id3tag->track, 3, "%d", id3tag->tracknum); id3tag->version = g_strdup ( "1.1"); } else { id3tag->comment = (char*)g_malloc ( sizeof ( char) * 31); memset ( id3tag->comment, '\0', 31); /* str_kept_ascii ( id3.comment, 30); */ strncpy ( id3tag->comment, id3.comment, 30); gw_str_trim ( id3tag->comment); if ( strlen ( id3tag->comment) == 0) { g_free ( id3tag->comment); id3tag->comment = NULL; } id3tag->version = g_strdup ( "1.0"); } id3tag->gennum = id3.genre & 0xFF; if ((id3tag->gennum < 0) || (id3tag->gennum >= genre_largest)) { id3tag->gennum = 255; } id3tag->genre = (char*)g_malloc ( sizeof ( char) * 31); memset ( id3tag->genre, '\0', 31); strcpy ( id3tag->genre, genres[(id3tag->gennum<=genre_largest)?id3tag->gennum:genre_largest]); /* str_kept_ascii ( id3tag->genre); */ if ( strlen ( id3tag->genre) == 0) { g_free ( id3tag->genre); id3tag->genre = NULL; } return 0; } } #ifdef __DEBUG__ g_print ( "readed %d\n", temp); #endif #ifdef __DEBUG__ g_print ( "read id3v1x\n"); #endif if ( fseek ( file, -384, SEEK_END) != -1) { if ( (temp = fread ( &id3x, 256, 1, file)) == 1 ) { if ( !strncmp ( id3x.tag, "TXG", 3)) { buffer = (char*)g_malloc ( sizeof ( char) * 121); strncpy ( buffer, id3tag->title, 30); strncat ( buffer, id3x.title, 90); g_free ( id3tag->title); id3tag->title = buffer; id3tag->title[strlen(id3tag->title)]='\0'; gw_str_trim ( id3tag->title); if ( strlen ( id3tag->title) == 0) { g_free ( id3tag->title); id3tag->title = NULL; } buffer = (char*)g_malloc ( sizeof ( char) * 81); strncpy ( buffer, id3tag->artist, 30); strncat ( buffer, id3x.artist, 50); g_free ( id3tag->artist); id3tag->artist = buffer; id3tag->artist[strlen(id3tag->artist)]='\0'; gw_str_trim ( id3tag->artist); if ( strlen ( id3tag->artist) == 0) { g_free ( id3tag->artist); id3tag->artist = NULL; } buffer = (char*)g_malloc ( sizeof ( char) * 81); strncpy ( buffer, id3tag->album, 30); strncat ( buffer, id3x.album, 50); g_free ( id3tag->album); id3tag->album = buffer; id3tag->album[strlen(id3tag->album)]='\0'; gw_str_trim ( id3tag->album); id3tag->album[strlen(id3tag->album)]='\0'; if ( strlen ( id3tag->album) == 0) { g_free ( id3tag->album); id3tag->album = NULL; } buffer = (char*)g_malloc ( sizeof ( char) * 81); strncpy ( buffer, id3tag->comment, 30); strncat ( buffer, id3x.comment, 50); g_free ( id3tag->comment); id3tag->comment = buffer; id3tag->comment[strlen(id3tag->album)]='\0'; gw_str_trim ( id3tag->comment); id3tag->comment[strlen(id3tag->comment)]='\0'; if ( strlen ( id3tag->comment) == 0) { g_free ( id3tag->comment); id3tag->comment = NULL; } buffer = (char*)g_malloc ( sizeof ( char) * 5); strncpy ( buffer, id3tag->version, 4); strncat ( buffer, "X", 1); g_free ( id3tag->version); id3tag->version = buffer; id3tag->version[strlen(id3tag->version)]='\0'; } } #ifdef __DEBUG__ g_print ( "readed %d\n", temp); #endif } return 1; } unsigned int file_read_size ( const unsigned char *size_stream, const int length) { unsigned int tag_size = 0; int i; const int SHIFT = (length - 1) * 7; /* Starting value in order to shift. */ /* Decodes number. */ for (i = 0; i < length; i++) { tag_size |= (unsigned int)size_stream[i] << (SHIFT - (i * 7)); } return tag_size; } void file_read_string_from_id3v2 ( FILE* file, const unsigned int size, char** value) { char buffer[size]; char *tmp = NULL; int i,j; if ( size > 0 ) { *value = (char*)g_malloc ( sizeof ( char) * (size + 1)); memset ( *value, '\0', size + 1); tmp = *value; /* Reads the data. */ fread ( buffer, size, 1, file); /* Adds data to the temporary stream. */ for (i = 0, j = 0; i < size; i++) { /* Filters the undisplayable data. */ if ( (buffer[i] >= 32) && (buffer[i] <= 126) ) { tmp[j] = buffer[i]; j++; } } /* Checks if data is empty. */ if ( j == 0 ) { g_free ( *value); *value = NULL; } else { /* Completes the stream by 0 character (it is really mandatory thanks memset?). */ while ( j <= size ) { tmp[j++] = '\0'; } /* Removes all leading and endind spaces. */ gw_str_trim ( &tmp[0]); /* Checks if data is empty. */ if ( strlen ( *value) == 0 ) { g_free ( *value); *value = NULL; } } } return; } void file_read_id3v24 ( FILE* file, id3 *id3tag) { char tag_stream[5]; unsigned char size[4]; unsigned int field_size; int tag_size; long pos = 0; #ifdef __DEBUG__ g_print ( "read id3v24\n"); #endif /* Checks the size of id3 tag. */ fseek ( file, 6L, SEEK_SET); fread ( size, 4, 1, file); tag_size = file_read_size ( size, 4); while ( pos < tag_size ) { /* Reads the field name. */ fread ( tag_stream, 4, 1, file); tag_stream[4] = '\0'; /* Reads the field size. */ fread ( size, 4, 1, file); field_size = file_read_size ( size, 4); fseek ( file, 2L, SEEK_CUR); /* Checks if the size tag is always valid. */ if ( pos + 4 + 4 + field_size > tag_size) { return; } /* Chooses the good informations. */ if ( tag_stream != NULL ) { if ( !strcmp ( tag_stream, "TOAL") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->album); } else if (!strcmp(tag_stream, "TPE1") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->artist); } else if ( !strcmp ( tag_stream, "TYER") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->year); } else if ( !strcmp ( tag_stream, "TIT2") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->title); } else if ( !strcmp ( tag_stream, "COMM") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->comment); } else if ( !strcmp ( tag_stream, "TRCK") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->track); } else if ( !strcmp ( tag_stream, "TENC") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->encoder); } else if ( !strcmp ( tag_stream, "WXXX") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->url); } else if ( !strcmp ( tag_stream, "TCOP") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->copyright); } else if ( !strcmp ( tag_stream, "TCOM") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->compositer); } else if ( !strcmp ( tag_stream, "TCON") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->genre); } else fseek ( file, field_size, SEEK_CUR); } /* Gets the current position in the file. */ pos = ftell ( file); } return; } void file_read_id3v23 ( FILE* file, id3 *id3tag) { char tag_stream[5]; unsigned char size[4]; unsigned int field_size; int tag_size; long pos = 0; #ifdef __DEBUG__ g_print ( "read id3v23\n"); #endif /* Checks the size of id3 tag. */ fseek ( file, 6L, SEEK_SET); fread ( size, 4, 1, file); tag_size = file_read_size ( size, 4); while ( pos < tag_size ) { /* Reads the field name. */ fread ( tag_stream, 4, 1, file); tag_stream[4] = '\0'; /* Reads the field size. */ fread ( size, 4, 1, file); field_size = file_read_size ( size, 4); /* Checks if the size tag is always valid. */ if ( pos + 4 + 4 + field_size > tag_size) { return; } fseek ( file, 2L, SEEK_CUR); /* Chooses the good informations. */ if ( tag_stream != NULL ) { if ( !strcmp ( tag_stream, "TALB") ) { file_read_string_from_id3v2 ( file, field_size, &(id3tag->album)); } else if ( !strcmp ( tag_stream, "TPE1") ) { file_read_string_from_id3v2 ( file, field_size, &(id3tag->artist)); } else if ( !strcmp ( tag_stream, "TYER") ) { file_read_string_from_id3v2 ( file, field_size, &(id3tag->year)); } else if ( !strcmp ( tag_stream, "TIT2")) { file_read_string_from_id3v2 ( file, field_size, &(id3tag->title)); } else if ( !strcmp ( tag_stream, "COMM") ) { file_read_string_from_id3v2 ( file, field_size, &(id3tag->comment)); } else if ( !strcmp ( tag_stream, "TRCK") ) { file_read_string_from_id3v2 ( file, field_size, &(id3tag->track)); } else if ( !strcmp ( tag_stream, "TENC") ) { file_read_string_from_id3v2 ( file, field_size, &(id3tag->encoder)); } else if ( !strcmp ( tag_stream, "WXXX") ) { file_read_string_from_id3v2 ( file, field_size, &(id3tag->url)); } else if ( !strcmp ( tag_stream, "TCOP") ) { file_read_string_from_id3v2 ( file, field_size, &(id3tag->copyright)); } else if ( !strcmp ( tag_stream, "TCOM") ) { file_read_string_from_id3v2 ( file, field_size, &(id3tag->compositer)); } else if ( !strcmp ( tag_stream, "TCON") ) { file_read_string_from_id3v2 ( file, field_size, &(id3tag->genre)); } else { fseek ( file, field_size, SEEK_CUR); } } /* Gets the current position in the file. */ pos = ftell ( file); } return; } void file_read_id3v22 ( FILE* file, id3 *id3tag) { char tag_stream[4]; unsigned char size[4]; unsigned int field_size; int tag_size; long pos = 0; #ifdef __DEBUG__ g_print ( "read id3v22\n"); #endif /* Checks the size of id3 tag. */ fseek ( file, 6L, SEEK_SET); fread ( size, 4, 1, file); tag_size = file_read_size ( size, 4); while ( pos < tag_size) { /* Reads the field name. */ fread ( tag_stream, 3, 1, file); tag_stream[3] = '\0'; /* Reads the field size. */ fread ( size, 3, 1, file); field_size = file_read_size ( size, 3); /* Checks if the size tag is always valid. */ if ( pos + 4 + 4 + field_size > tag_size) { return; } /* Reads the good informations. */ if ( tag_stream != NULL ) { if ( !strcmp ( tag_stream, "TAL") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->album); } else if ( !strcmp ( tag_stream, "TP1") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->artist); } else if ( !strcmp ( tag_stream, "TYE") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->year); } else if ( !strcmp ( tag_stream, "TT2") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->title); } else if ( !strcmp ( tag_stream, "TRK") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->track); } else if ( !strcmp ( tag_stream, "TYE") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->year); } else if ( !strcmp ( tag_stream, "TCM") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->compositer); } else if ( !strcmp ( tag_stream, "TCO") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->genre); } else if ( !strcmp ( tag_stream, "WXX") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->url); } else if ( !strcmp ( tag_stream, "TEN") ) { file_read_string_from_id3v2 ( file, field_size, &id3tag->encoder); } else { fseek ( file, field_size, SEEK_CUR); } } /* Gets the current position in the file. */ pos = ftell ( file); } return; } void file_read_id3v2_version ( FILE* file, char *version) { fseek ( file, 3L, SEEK_SET); fread ( version, 1, 1, file); return; } void file_read_id3v2 ( FILE* file, id3 *id3tag) { char version; #ifdef __DEBUG__ g_print ( "read id3v2\n"); #endif /* Reads the size of the tag. */ file_read_id3v2_version ( file, &version); /* Chooses the good version. */ if (version == 2) { id3tag->version = g_strdup ( "2.2"); file_read_id3v22 ( file, id3tag); } else if (version == 3) { id3tag->version = g_strdup ( "2.3"); file_read_id3v23 ( file, id3tag); } else if (version == 4) { id3tag->version = g_strdup ( "2.4"); file_read_id3v24 ( file, id3tag); } return; } char * g_module_check_init ( void) { #ifdef __DEBUG__ g_print ( "MP3 module is loading...\n"); #endif return NULL; } const char * plugin_get_author ( void) { return "Sébastien LECACHEUR"; } const char * plugin_get_info ( void) { return "This plugin allow to extract description in MP3 file from ID3 Tag version 1.0, 1.0x, 1.1, 1.1x, 2.2, 2.3, 2.4."; } const char * plugin_get_version ( void) { return "1.0.0"; } const char * plugin_get_help ( void) { return "No help at time"; } const char * plugin_get_allowed_ext ( void) { return "mp1|mp2|mp3"; } char * plugin_get_file_descr ( const char *filepath, const char *mode) { struct mp3data mp3; id3 tag; float ver = 0; int layer = 0, err = 1; FILE *file = NULL; char id3indentifier[4] = ""; gchar *descr = NULL, *tmp = NULL; if ( filepath != NULL ) { #ifdef __DEBUG__ g_print ( "\nStarting extraction of %s :\n", filepath); #endif if ( !(err = file_mp3_get_header ( filepath, &mp3))) { if (mp3.mpeg_version == MPEG_VERSION_1) { ver = 1; } if (mp3.mpeg_version == MPEG_VERSION_2) { ver = 2; } if (mp3.mpeg_version == MPEG_VERSION_2_5) { ver = 2.5; } if (mp3.layer_desc == LAYER_VERSION_1) { layer = 1; } if (mp3.layer_desc == LAYER_VERSION_2) { layer = 2; } if (mp3.layer_desc == LAYER_VERSION_3) { layer = 3; } } else { #ifdef __DEBUG__ if ( err == INVALID_HEADER ) { g_print ( "- Invalid header!!\n"); } #endif } tag.version = NULL; tag.title = NULL; tag.artist = NULL; tag.album = NULL; tag.year = NULL; tag.comment = NULL; tag.genre = NULL; tag.track = NULL; tag.url = NULL; tag.compositer = NULL; tag.copyright = NULL; tag.tracknum = -1; tag.gennum = -1; if ( (file = fopen ( filepath, "rb")) != NULL ) { fread ( id3indentifier, sizeof ( char) * 3, 1, file); id3indentifier[3] = '\0'; if ( !( strncmp ( id3indentifier, "ID3", 3))) { file_read_id3v2 ( file, &tag); } else { file_read_id3v1 ( file, &tag); } fclose ( file); #ifdef __DEBUG__ if ( tag.version != NULL) { g_print ( "- Version : id3v%s\n", tag.version); g_print ( "- Title : %s\n", tag.title); g_print ( "- Artist : %s\n", tag.artist); g_print ( "- Album : %s\n", tag.album); g_print ( "- Year : %s\n", tag.year); g_print ( "- Comment : %s\n", tag.comment); g_print ( "- Genre : %s\n", tag.genre); g_print ( "- Track : %s\n", tag.track); g_print ( "- URL : %s\n", tag.url); g_print ( "- Compositer : %s\n", tag.compositer); g_print ( "- Copyright : %s\n", tag.copyright); } #endif if ( !err) { if ( mp3.mpeg_version != MPEG_VERSION_2_5 ) { descr = g_strdup_printf ( "MPEG Version %.0f, Layer %i\nBitrate:%i KBit/s\nFrequency:%i Hz\nMode:%s\n",ver, layer, mp3.bitrate, mp3.frequency, ((mp3.channels == 2)?"Stereo":"Mono")); } else { descr = g_strdup_printf ( "MPEG Version %.0f, Layer %i\nFrequency:%i Hz\nMode:%s\n",ver, layer, mp3.frequency, ((mp3.channels == 2)?"Stereo":"Mono")); } } if ( tag.version != NULL ) { if ( descr == NULL ) { descr = g_strdup ( ""); } if ( tag.title != NULL ) { descr = g_strconcat ( (tmp = descr), "Title:", tag.title, "\n", NULL); g_free ( tmp); } if ( tag.artist != NULL ) { descr = g_strconcat ( (tmp = descr), "Artist:", tag.artist, "\n", NULL); g_free ( tmp); } if ( tag.album != NULL ) { descr = g_strconcat ( (tmp = descr), "Album:", tag.album, "\n", NULL); g_free ( tmp); } if ( tag.genre != NULL ) { descr = g_strconcat ( (tmp = descr), "Genre:", tag.genre, "\n", NULL); g_free ( tmp); } } if ( tag.version != NULL ) { if ( tag.version != NULL) g_free ( tag.version); if ( tag.title != NULL) g_free ( tag.title); if ( tag.artist != NULL) g_free ( tag.artist); if ( tag.album != NULL) g_free ( tag.album); if ( tag.year != NULL) g_free ( tag.year); if ( tag.comment != NULL) g_free ( tag.comment); if ( tag.genre != NULL) g_free ( tag.genre); if ( tag.track != NULL) g_free ( tag.track); if ( tag.url != NULL) g_free ( tag.url); if ( tag.compositer != NULL) g_free ( tag.compositer); if ( tag.copyright != NULL) g_free ( tag.copyright); } } #ifdef __DEBUG__ g_print ( "Extracted description is :\nSTART\n%s\nEND\n", descr); #endif } return descr; } void g_module_unload ( void) { #ifdef __DEBUG__ g_print ( "MP3 module is unloading...\n"); #endif } gwhere-0.2.3/src/plugins/descr/avi.c0000744000175000017500000005051110506315064015735 0ustar bartbart/* GWhere. * Copyright (C) 2003 by Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include /* WAVE form IDs */ #define WAVE_FORMAT_UNKNOWN 0x0000 /* Microsoft Corporation */ #ifndef WAVE_FORMAT_PCM #define WAVE_FORMAT_PCM 0x0001 /* PCM -> "PCM" */ #endif #define WAVE_FORMAT_ADPCM 0x0002 /* Microsoft Corporation -> "MS ADPCM" */ #define WAVE_FORMAT_IEEE_FLOAT 0x0003 /* Microsoft Corporation */ #define WAVE_FORMAT_VSELP 0x0004 /* Compaq Computer Corp. -> "Ima-0ADPCM VSELP" */ #define WAVE_FORMAT_IBM_CVSD 0x0005 /* IBM Corporation */ #define WAVE_FORMAT_ALAW 0x0006 /* Microsoft Corporation -> "A-Law" */ #define WAVE_FORMAT_MULAW 0x0007 /* Microsoft Corporation -> "u-Law" */ #define WAVE_FORMAT_DTS 0x0008 /* Microsoft Corporation */ #define WAVE_FORMAT_OKI_ADPCM 0x0010 /* OKI */ #define WAVE_FORMAT_DVI_ADPCM 0x0011 /* Intel Corporation -> "IMA ADPCM" */ #define WAVE_FORMAT_IMA_ADPCM (WAVE_FORMAT_DVI_ADPCM) /* Intel Corporation */ #define WAVE_FORMAT_MEDIASPACE_ADPCM 0x0012 /* Videologic */ #define WAVE_FORMAT_SIERRA_ADPCM 0x0013 /* Sierra Semiconductor Corp */ #define WAVE_FORMAT_G723_ADPCM 0x0014 /* Antex Electronics Corporation */ #define WAVE_FORMAT_DIGISTD 0x0015 /* DSP Solutions, Inc. */ #define WAVE_FORMAT_DIGIFIX 0x0016 /* DSP Solutions, Inc. */ #define WAVE_FORMAT_DIALOGIC_OKI_ADPCM 0x0017 /* Dialogic Corporation */ #define WAVE_FORMAT_MEDIAVISION_ADPCM 0x0018 /* Media Vision, Inc. */ #define WAVE_FORMAT_CU_CODEC 0x0019 /* Hewlett-Packard Company */ #define WAVE_FORMAT_YAMAHA_ADPCM 0x0020 /* Yamaha Corporation of America */ #define WAVE_FORMAT_SONARC 0x0021 /* Speech Compression */ #define WAVE_FORMAT_DSPGROUP_TRUESPEECH 0x0022 /* DSP Group, Inc */ #define WAVE_FORMAT_ECHOSC1 0x0023 /* Echo Speech Corporation */ #define WAVE_FORMAT_AUDIOFILE_AF36 0x0024 /* Virtual Music, Inc. */ #define WAVE_FORMAT_APTX 0x0025 /* Audio Processing Technology */ #define WAVE_FORMAT_AUDIOFILE_AF10 0x0026 /* Virtual Music, Inc. */ #define WAVE_FORMAT_PROSODY_1612 0x0027 /* Aculab plc */ #define WAVE_FORMAT_LRC 0x0028 /* Merging Technologies S.A. */ #define WAVE_FORMAT_DOLBY_AC2 0x0030 /* Dolby Laboratories */ #define WAVE_FORMAT_GSM610 0x0031 /* Microsoft Corporation -> "MS GSM 6.10" */ #define WAVE_FORMAT_MSNAUDIO 0x0032 /* Microsoft Corporation -> "MSN Audio" */ #define WAVE_FORMAT_ANTEX_ADPCME 0x0033 /* Antex Electronics Corporation */ #define WAVE_FORMAT_CONTROL_RES_VQLPC 0x0034 /* Control Resources Limited */ #define WAVE_FORMAT_DIGIREAL 0x0035 /* DSP Solutions, Inc. */ #define WAVE_FORMAT_DIGIADPCM 0x0036 /* DSP Solutions, Inc. */ #define WAVE_FORMAT_CONTROL_RES_CR10 0x0037 /* Control Resources Limited */ #define WAVE_FORMAT_NMS_VBXADPCM 0x0038 /* Natural MicroSystems */ #define WAVE_FORMAT_CS_IMAADPCM 0x0039 /* Crystal Semiconductor IMA ADPCM */ #define WAVE_FORMAT_ECHOSC3 0x003A /* Echo Speech Corporation */ #define WAVE_FORMAT_ROCKWELL_ADPCM 0x003B /* Rockwell International */ #define WAVE_FORMAT_ROCKWELL_DIGITALK 0x003C /* Rockwell International */ #define WAVE_FORMAT_XEBEC 0x003D /* Xebec Multimedia Solutions Limited */ #define WAVE_FORMAT_G721_ADPCM 0x0040 /* Antex Electronics Corporation */ #define WAVE_FORMAT_G728_CELP 0x0041 /* Antex Electronics Corporation */ #define WAVE_FORMAT_MSG723 0x0042 /* Microsoft Corporation */ #define WAVE_FORMAT_MPEG 0x0050 /* Microsoft Corporation -> "MPEG Layer-1/2" */ #define WAVE_FORMAT_RT24 0x0052 /* InSoft, Inc. */ #define WAVE_FORMAT_PAC 0x0053 /* InSoft, Inc. */ #define WAVE_FORMAT_MPEGLAYER3 0x0055 /* ISO/MPEG Layer3 Format Tag -> "MPEG Layer-3" */ #define WAVE_FORMAT_LUCENT_G723 0x0059 /* Lucent Technologies */ #define WAVE_FORMAT_CIRRUS 0x0060 /* Cirrus Logic */ #define WAVE_FORMAT_ESPCM 0x0061 /* ESS Technology */ #define WAVE_FORMAT_VOXWARE 0x0062 /* Voxware Inc */ #define WAVE_FORMAT_CANOPUS_ATRAC 0x0063 /* Canopus, co., Ltd. */ #define WAVE_FORMAT_G726_ADPCM 0x0064 /* APICOM */ #define WAVE_FORMAT_G722_ADPCM 0x0065 /* APICOM */ #define WAVE_FORMAT_DSAT_DISPLAY 0x0067 /* Microsoft Corporation */ #define WAVE_FORMAT_VOXWARE_BYTE_ALIGNED 0x0069 /* Voxware Inc -> "Voxware Metasound" */ #define WAVE_FORMAT_VOXWARE_AC8 0x0070 /* Voxware Inc -> "Voxware Metasound" */ #define WAVE_FORMAT_VOXWARE_AC10 0x0071 /* Voxware Inc -> "Voxware Metasound" */ #define WAVE_FORMAT_VOXWARE_AC16 0x0072 /* Voxware Inc -> "Voxware Metasound" */ #define WAVE_FORMAT_VOXWARE_AC20 0x0073 /* Voxware Inc */ #define WAVE_FORMAT_VOXWARE_RT24 0x0074 /* Voxware Inc -> "Voxware Metasound" */ #define WAVE_FORMAT_VOXWARE_RT29 0x0075 /* Voxware Inc -> "Voxware Metasound" */ #define WAVE_FORMAT_VOXWARE_RT29HW 0x0076 /* Voxware Inc -> "Voxware Metasound" */ #define WAVE_FORMAT_VOXWARE_VR12 0x0077 /* Voxware Inc -> "Voxware Metasound" */ #define WAVE_FORMAT_VOXWARE_VR18 0x0078 /* Voxware Inc -> "Voxware Metasound" */ #define WAVE_FORMAT_VOXWARE_TQ40 0x0079 /* Voxware Inc */ #define WAVE_FORMAT_SOFTSOUND 0x0080 /* Softsound, Ltd. */ #define WAVE_FORMAT_VOXWARE_TQ60 0x0081 /* Voxware Inc */ #define WAVE_FORMAT_MSRT24 0x0082 /* Microsoft Corporation */ #define WAVE_FORMAT_G729A 0x0083 /* AT&T Labs, Inc. */ #define WAVE_FORMAT_MVI_MVI2 0x0084 /* Motion Pixels */ #define WAVE_FORMAT_DF_G726 0x0085 /* DataFusion Systems (Pty) (Ltd) */ #define WAVE_FORMAT_DF_GSM610 0x0086 /* DataFusion Systems (Pty) (Ltd) */ #define WAVE_FORMAT_ISIAUDIO 0x0088 /* Iterated Systems, Inc. */ #define WAVE_FORMAT_ONLIVE 0x0089 /* OnLive! Technologies, Inc. */ #define WAVE_FORMAT_SBC24 0x0091 /* Siemens Business Communications Sys */ #define WAVE_FORMAT_DOLBY_AC3_SPDIF 0x0092 /* Sonic Foundry */ #define WAVE_FORMAT_MEDIASONIC_G723 0x0093 /* MediaSonic */ #define WAVE_FORMAT_PROSODY_8KBPS 0x0094 /* Aculab plc */ #define WAVE_FORMAT_ZYXEL_ADPCM 0x0097 /* ZyXEL Communications, Inc. */ #define WAVE_FORMAT_PHILIPS_LPCBB 0x0098 /* Philips Speech Processing */ #define WAVE_FORMAT_PACKED 0x0099 /* Studer Professional Audio AG */ #define WAVE_FORMAT_MALDEN_PHONYTALK 0x00A0 /* Malden Electronics Ltd. */ #define WAVE_FORMAT_RHETOREX_ADPCM 0x0100 /* Rhetorex Inc. */ #define WAVE_FORMAT_IRAT 0x0101 /* BeCubed Software Inc. */ #define WAVE_FORMAT_VIVO_G723 0x0111 /* Vivo Software */ #define WAVE_FORMAT_VIVO_SIREN 0x0112 /* Vivo Software */ #define WAVE_FORMAT_DIGITAL_G723 0x0123 /* Digital Equipment Corporation */ #define WAVE_FORMAT_SANYO_LD_ADPCM 0x0125 /* Sanyo Electric Co., Ltd. */ #define WAVE_FORMAT_SIPROLAB_ACEPLNET 0x0130 /* Sipro Lab Telecom Inc. -> "ACELP.net" */ #define WAVE_FORMAT_SIPROLAB_ACELP4800 0x0131 /* Sipro Lab Telecom Inc. -> "ACELP.net" */ #define WAVE_FORMAT_SIPROLAB_ACELP8V3 0x0132 /* Sipro Lab Telecom Inc. -> "ACELP.net" */ #define WAVE_FORMAT_SIPROLAB_G729 0x0133 /* Sipro Lab Telecom Inc. -> "ACELP.net" */ #define WAVE_FORMAT_SIPROLAB_G729A 0x0134 /* Sipro Lab Telecom Inc. -> "ACELP.net" */ #define WAVE_FORMAT_SIPROLAB_KELVIN 0x0135 /* Sipro Lab Telecom Inc. -> "ACELP.net" */ #define WAVE_FORMAT_G726ADPCM 0x0140 /* Dictaphone Corporation */ #define WAVE_FORMAT_QUALCOMM_PUREVOICE 0x0150 /* Qualcomm, Inc. */ #define WAVE_FORMAT_QUALCOMM_HALFRATE 0x0151 /* Qualcomm, Inc. */ #define WAVE_FORMAT_TUBGSM 0x0155 /* Ring Zero Systems, Inc. */ #define WAVE_FORMAT_MSAUDIO1 0x0160 /* Microsoft Corporation -> "DivX WMA" */ #define WAVE_FORMAT_DIVXWMA 0x0161 /* -> "DivX WMA" */ #define WAVE_FORMAT_CREATIVE_ADPCM 0x0200 /* Creative Labs, Inc */ #define WAVE_FORMAT_CREATIVE_FASTSPEECH8 0x0202 /* Creative Labs, Inc */ #define WAVE_FORMAT_CREATIVE_FASTSPEECH10 0x0203 /* Creative Labs, Inc */ #define WAVE_FORMAT_UHER_ADPCM 0x0210 /* UHER informatic GmbH */ #define WAVE_FORMAT_QUARTERDECK 0x0220 /* Quarterdeck Corporation */ #define WAVE_FORMAT_ILINK_VC 0x0230 /* I-link Worldwide */ #define WAVE_FORMAT_RAW_SPORT 0x0240 /* Aureal Semiconductor */ #define WAVE_FORMAT_IPI_HSX 0x0250 /* Interactive Products, Inc. */ #define WAVE_FORMAT_IPI_RPELP 0x0251 /* Interactive Products, Inc. */ #define WAVE_FORMAT_CS2 0x0260 /* Consistent Software */ #define WAVE_FORMAT_SONY_SCX 0x0270 /* Sony Corp. */ #define WAVE_FORMAT_FM_TOWNS_SND 0x0300 /* Fujitsu Corp. */ #define WAVE_FORMAT_BTV_DIGITAL 0x0400 /* Brooktree Corporation */ #define WAVE_FORMAT_INTEL_MUSIC_CODER 0x0401 /* -> "Intel Music Coder" */ #define WAVE_FORMAT_QDESIGN_MUSIC 0x0450 /* QDesign Corporation */ #define WAVE_FORMAT_VME_VMPCM 0x0680 /* AT&T Labs, Inc. */ #define WAVE_FORMAT_TPC 0x0681 /* AT&T Labs, Inc. */ #define WAVE_FORMAT_OLIGSM 0x1000 /* Ing C. Olivetti & C., S.p.A. */ #define WAVE_FORMAT_OLIADPCM 0x1001 /* Ing C. Olivetti & C., S.p.A. */ #define WAVE_FORMAT_OLICELP 0x1002 /* Ing C. Olivetti & C., S.p.A. */ #define WAVE_FORMAT_OLISBC 0x1003 /* Ing C. Olivetti & C., S.p.A. */ #define WAVE_FORMAT_OLIOPR 0x1004 /* Ing C. Olivetti & C., S.p.A. */ #define WAVE_FORMAT_LH_CODEC 0x1100 /* Lernout & Hauspie */ #define WAVE_FORMAT_NORRIS 0x1400 /* Norris Communications, Inc. */ #define WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS 0x1500 /* AT&T Labs, Inc. */ #define WAVE_FORMAT_DVM 0x2000 /* FAST Multimedia AG -> "AC3 DVM" */ #ifndef WAVE_FORMAT_EXTENSIBLE #define WAVE_FORMAT_EXTENSIBLE 0xFFFE /* Microsoft -> "Extended Wave header" */ #endif #define WAVE_FORMAT_DEVELOPMENT 0xFFFF /* the WAVE_FORMAT_DEVELOPMENT format tag can be used during the development phase of a new wave format. Before shipping, you MUST acquire an official format tag from Microsoft. */ struct main_avi_header { int micro_sec_per_frame; int max_bytes_per_sec; int reserved1; int flag; int frames; int initiale_frames; int streams; int suggested_buffer_size; int xres; int yres; int scale; int rate; int start; int length; }; struct avi_stream_header { char codec[4]; int flags; int reserved1; int initial_frames; int scale; int rate; int start; int length; int suggested_buffer_size; int quality; int sample_size; }; struct avi_stream_header_extended { char flux[16]; char divx_tag[4]; }; struct avi_tag_list { char strl[4]; char strh[4]; int length_strh; char type[4]; /* vids=video auds=audio */ }; struct avi_audio_header { struct avi_tag_list tag; struct avi_stream_header avi_audio_header; }; struct avi_audio_header_extended { char flux[7]; short wav_tag; }; struct avi_list_header { char id[4]; /* RIFF */ char f0[4]; char avi_list[8]; /* AVI LIST */ }; struct avi_video_1 { struct avi_list_header avi_list; char f1[4]; char hdrl[4]; char avih[4]; int length; /* length of main_avi_header, should be equal to 0x38 */ struct main_avi_header header; char list_1[4]; int length_list_1; /* length of first stream LIST */ struct avi_tag_list tag; struct avi_stream_header avi_video_header; }; struct avi_video_2 { char list_2[4]; /* JUNK, strd, LIST */ int length_list_2; struct avi_audio_header avi_audio_header; struct avi_audio_header_extended avi_audio_header_ext; }; struct avi_audio { char f1[128]; int rate; }; struct avi { struct avi_video_1 video; struct avi_stream_header_extended avi_video_ext; struct avi_video_2 audio; }; char * g_module_check_init ( void) { #ifdef __DEBUG__ printf ( "AVI module is loading...\n"); #endif return NULL; } const char * plugin_get_author ( void) { return "Sébastien LECACHEUR"; } const char * plugin_get_info ( void) { return "This plugin allow to extract title from AVI file."; } const char * plugin_get_version ( void) { return "1.0.0"; } const char * plugin_get_help ( void) { return NULL; } const char * plugin_get_allowed_ext ( void) { return "avi"; } char * plugin_get_file_descr ( const char *filepath, const char *mode) { char *descr = NULL; FILE *file = NULL; char codec_video_name[21]; char codec_audio_name[21]; char codec_tag1[5]; char codec_tag2[5]; struct avi a; char *ret = NULL; if ( filepath != NULL ) { if ( (file = fopen ( filepath, "rb")) != NULL ) { fseek(file,0,SEEK_SET); fread(&(a.video),sizeof(a.video),1,file); if ( (strncmp ( "RIFF", a.video.avi_list.id, 4) == 0) && (strncmp ( "AVI LIST", a.video.avi_list.avi_list, 8) == 0) ) { fseek(file,a.video.tag.length_strh-(sizeof(struct avi_stream_header)+4),SEEK_CUR); fread(&(a.video.tag.strh),sizeof(char)*4,1,file); fread(&(a.video.tag.length_strh),sizeof(int),1,file); fread(&(a.avi_video_ext),sizeof(struct avi_stream_header_extended),1,file); fseek(file,a.video.tag.length_strh-sizeof(struct avi_stream_header_extended),SEEK_CUR); fread(&(a.audio.list_2),sizeof(a.audio.list_2),1,file); ret = (char*) malloc(1024); if((a.video.header.frames<=0)||(a.video.header.xres<=0)||(a.video.header.yres<=0)) { sprintf ( ret, "Unrecognised AVI format"); } else { strncpy ( codec_tag1, a.video.avi_video_header.codec, 4); codec_tag1[4] = '\0'; strncpy ( codec_tag2, a.avi_video_ext.divx_tag, 4); codec_tag2[4] = '\0'; g_strdown ( codec_tag1); g_strdown ( codec_tag2); if ( a.video.header.streams >= 2 ) { while ( ((a.audio.list_2[0] != 'L') || (a.audio.list_2[1] != 'I') || (a.audio.list_2[2] != 'S') || (a.audio.list_2[3] != 'T')) && (!feof ( file)) ) { a.audio.list_2[0] = a.audio.list_2[1]; a.audio.list_2[1] = a.audio.list_2[2]; a.audio.list_2[2] = a.audio.list_2[3]; fread(&(a.audio.list_2[3]),sizeof(a.audio.list_2[3]),1,file); } if ( (a.audio.list_2[0] == 'L') && (a.audio.list_2[1] == 'I') && (a.audio.list_2[2] == 'S') && (a.audio.list_2[3] == 'T') && (!feof ( file)) ) { fread(&(a.audio.length_list_2),sizeof(a.audio.length_list_2),1,file); fread(&(a.audio.avi_audio_header),sizeof(struct avi_audio_header),1,file); fseek(file,a.audio.avi_audio_header.tag.length_strh-(sizeof(struct avi_audio_header)-12),SEEK_CUR); fread(&(a.audio.avi_audio_header_ext),sizeof(struct avi_audio_header_extended),1,file); switch ( a.audio.avi_audio_header_ext.wav_tag ) { case WAVE_FORMAT_PCM : strncpy ( codec_audio_name, "PCM", 3); codec_audio_name[3] = '\0'; break; case WAVE_FORMAT_ADPCM : strncpy ( codec_audio_name, "MS ADPCM", 8); codec_audio_name[8] = '\0'; break; case WAVE_FORMAT_VSELP : strncpy ( codec_audio_name, "Ima-0ADPCM VSELP", 16); codec_audio_name[16] = '\0'; break; case WAVE_FORMAT_ALAW : strncpy ( codec_audio_name, "A-Law", 5); codec_audio_name[5] = '\0'; break; case WAVE_FORMAT_MULAW : strncpy ( codec_audio_name, "u-Law", 5); codec_audio_name[5] = '\0'; break; case WAVE_FORMAT_DVI_ADPCM : strncpy ( codec_audio_name, "IMA ADPCM", 9); codec_audio_name[9] = '\0'; break; case WAVE_FORMAT_GSM610 : strncpy ( codec_audio_name, "MS GSM 6.10", 11); codec_audio_name[11] = '\0'; break; case WAVE_FORMAT_MSNAUDIO : strncpy ( codec_audio_name, "MSN Audio", 9); codec_audio_name[9] = '\0'; break; case WAVE_FORMAT_MPEG : strncpy ( codec_audio_name, "MPEG Layer-1/2", 14); codec_audio_name[14] = '\0'; break; case WAVE_FORMAT_MPEGLAYER3 : strncpy ( codec_audio_name, "MPEG Layer-3", 12); codec_audio_name[12] = '\0'; break; case WAVE_FORMAT_VOXWARE_BYTE_ALIGNED : case WAVE_FORMAT_VOXWARE_AC8 : case WAVE_FORMAT_VOXWARE_AC10 : case WAVE_FORMAT_VOXWARE_AC16 : case WAVE_FORMAT_VOXWARE_RT24 : case WAVE_FORMAT_VOXWARE_RT29HW : case WAVE_FORMAT_VOXWARE_VR12 : case WAVE_FORMAT_VOXWARE_VR18 : case WAVE_FORMAT_VOXWARE_RT29 : strncpy ( codec_audio_name, "Voxware Metasound", 17); codec_audio_name[17] = '\0'; break; case WAVE_FORMAT_SIPROLAB_ACELP4800 : case WAVE_FORMAT_SIPROLAB_ACELP8V3 : case WAVE_FORMAT_SIPROLAB_G729 : case WAVE_FORMAT_SIPROLAB_G729A : case WAVE_FORMAT_SIPROLAB_KELVIN : case WAVE_FORMAT_SIPROLAB_ACEPLNET : strncpy ( codec_audio_name, "ACELP.net", 9); codec_audio_name[9] = '\0'; break; case WAVE_FORMAT_MSAUDIO1 : case WAVE_FORMAT_DIVXWMA : strncpy ( codec_audio_name, "DivX WMA", 8); codec_audio_name[8] = '\0'; break; case WAVE_FORMAT_INTEL_MUSIC_CODER : strncpy ( codec_audio_name, "Intel Music Coder", 17); codec_audio_name[17] = '\0'; break; case WAVE_FORMAT_DVM : strncpy ( codec_audio_name, "AC3 DVM", 7); codec_audio_name[7] = '\0'; break; case WAVE_FORMAT_EXTENSIBLE : strncpy ( codec_audio_name, "Extended Wave header", 20); codec_audio_name[20] = '\0'; break; default : strncpy ( codec_audio_name, "unknown audio codec", 19); codec_audio_name[19] = '\0'; break; } } } else { strncpy ( codec_audio_name, "no audio", 8); codec_audio_name[8] = '\0'; } if ( a.video.header.streams >= 1 ) { if ( (strcmp(codec_tag1,"div3") == 0) && (strcmp(codec_tag2,"div3") == 0) ) { strncpy ( codec_video_name, "DivX 3 Low-Motion", 17); codec_video_name[17] = '\0'; } else if ( (strcmp(codec_tag1,"div4") == 0) && (strcmp(codec_tag2,"div3") == 0) ) { strncpy ( codec_video_name, "DivX 3 Fast-Motion", 18); codec_video_name[18] = '\0'; } else if ( ((strcmp(codec_tag1,"xvid") == 0) || (strcmp(codec_tag1,"divx") == 0)) && (strcmp(codec_tag2,"divx") == 0) ) { strncpy ( codec_video_name, "DivX 4 (OpenDivX)", 17); codec_video_name[17] = '\0'; } else if ( (strcmp(codec_tag1,"divx") == 0) && (strcmp(codec_tag2,"dx50") == 0) ) { strncpy ( codec_video_name, "DivX 5.0", 8); codec_video_name[8] = '\0'; } else if ( (strcmp(codec_tag1,"xvid") == 0) && (strcmp(codec_tag2,"xvid") == 0) ) { strncpy ( codec_video_name, "XviD", 4); codec_video_name[4] = '\0'; } else if ( (strcmp(codec_tag1,"iv31") == 0) && (strcmp(codec_tag2,"iv31") == 0) ) { strncpy ( codec_video_name, "Indeo Interactive", 17); codec_video_name[17] = '\0'; } else if ( (strcmp(codec_tag1,"iv32") == 0) && (strcmp(codec_tag2,"iv32") == 0) ) { strncpy ( codec_video_name, "Indeo Interactive", 17); codec_video_name[17] = '\0'; } else if ( (strcmp(codec_tag1,"iv41") == 0) && (strcmp(codec_tag2,"iv41") == 0) ) { strncpy ( codec_video_name, "Indeo Interactive", 17); codec_video_name[17] = '\0'; } else if ( (strcmp(codec_tag1,"iv50") == 0) && (strcmp(codec_tag2,"iv50") == 0) ) { strncpy ( codec_video_name, "Indeo Interactive", 17); codec_video_name[17] = '\0'; } else if ( strcmp(codec_tag1,"rle ") == 0 ) { strncpy ( codec_video_name, "RLE", 3); codec_video_name[3] = '\0'; } else { strncpy ( codec_video_name, "Unknown video codec", 19); codec_video_name[19] = '\0'; } } else { strncpy ( codec_video_name, "No video", 8); codec_video_name[8] = '\0'; } sprintf ( ret, "%s (%d x %d), %s", codec_video_name, a.video.header.xres, a.video.header.yres, codec_audio_name); } } descr = ret; fclose ( file); } } return descr; } void g_module_unload ( void) { #ifdef __DEBUG__ printf ( "AVI module is unloading...\n"); #endif } gwhere-0.2.3/src/plugins/descr/descript_ion.c0000744000175000017500000001743210501635622017645 0ustar bartbart/* GWhere. * Copyright (C) 2003 by Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "tools/gwtools.h" gchar ** gw_str_split ( gchar *str); //#define __DEBUG__ 1 char * g_module_check_init ( void) { #ifdef __DEBUG__ printf ( "DESCRIPT.ION module is loading...\n"); #endif return NULL; } const char * plugin_get_author ( void) { return "Sébastien LECACHEUR"; } const char * plugin_get_info ( void) { return "This plugin allow to extract current folder's files informations from DESCRIPT.ION file."; } const char * plugin_get_version ( void) { return "1.0.0"; } const char * plugin_get_help ( void) { return NULL; } const char * plugin_get_allowed_name ( void) { return "DESCRIPT.ION"; } char *** plugin_get_files_descr ( const char *filepath, const char *mode) { /* A possible improvment is to use StringBuffer to read the file and generate description without reading the file in one time and without using g_strsplit() function. */ char ***descr = NULL; FILE *file = NULL; char buff[512]; char *file_content = NULL; char *file_content_tmp = NULL; char **lines; int size = 0; int nb_lines = 0; int i = 0, j = 0; #ifdef __DEBUG__ g_print ("current file is %s\n", filepath); #endif if ( filepath != NULL ) { if ( (file = fopen ( filepath, "rb")) != NULL ) { while ( fgets ( buff, 512, file) != NULL) { gw_str_delete_char ( buff, '\r'); size += sizeof ( char) * (strlen ( buff)<511?strlen ( buff):511); file_content_tmp = realloc ( file_content, size + 1); if ( file_content == NULL ) { if ( file_content_tmp != NULL ) { file_content_tmp[0] = '\0'; } } if ( file_content_tmp != NULL ) { file_content = file_content_tmp; } else { free ( file_content); file_content = NULL; break; } memcpy ( &(file_content[strlen(file_content)]), buff, (strlen ( buff)<511?strlen ( buff):511)+1); } fclose ( file); } if ( file_content != NULL ) { lines = g_strsplit ( file_content, "\n", -1); if ( lines != NULL) { for ( i = 0; lines[i] != NULL; i++) { #ifdef __DEBUG__ g_print("current_line[%d]=%s\n",i,lines[i]); #endif if ( (strchr ( lines[i], ' ' ) != NULL) || (strchr ( lines[i], '\t' ) != NULL) ) { nb_lines++; } } #ifdef __DEBUG__ g_print("nb_descr=%d\n",nb_lines); #endif descr = (gchar***)g_malloc0 ( sizeof ( gchar **) * (nb_lines+1)); for ( i = 0; i <= nb_lines; i++) descr[i] = NULL; for ( i = 0; lines[i] != NULL; i++) { /* This followinf code is deprecated because g_strsplit() has not the same behavior between GTK+ 1.2 and GTK+ 2.0 or GNU/Linux and Win32. if ( strchr ( lines[i], ' ' ) != NULL ) { descr[j] = NULL; descr[j] = g_strsplit ( lines[i], " " , 2); gw_str_trim ( descr[j][1]); j++; } else if ( strchr ( lines[i], '\t' ) != NULL ) { descr[j] = NULL; descr[j] = g_strsplit ( lines[i], "\t" , 2); gw_str_trim ( descr[j][1]); j++; } */ descr[j] = gw_str_split ( lines[i]); if (descr[j] != NULL) j++; #ifdef __DEBUG__ g_print("current descr nb=%d/%d\n",j,i); if ( descr[j-1] != NULL ) { g_print("file=%s\n",descr[j-1][0]); g_print("descr=%s\n",descr[j-1][1]); } else { g_print("descr[%d] is NULL\n",j-1); } #endif g_free ( lines[i]); } descr[nb_lines] = NULL; g_free ( lines); } free ( file_content); } } return descr; } void g_module_unload ( void) { #ifdef __DEBUG__ printf ( "DESCRIPT.ION module is unloading...\n"); #endif } gchar ** gw_str_split ( gchar *str) { gint start_file = 0; gint end_file = 0; gint start_descr = 0; gint end_descr = 0; gint descr_pos = 0; gchar *file_name = NULL; gchar *file_descr = NULL; gchar **descr = NULL; if ( str != NULL ) { /* Search the begin of the file name. */ while ( (isspace(str[start_file])==1) && (str[start_file]!='\0')) { start_file++; } #ifdef __DEBUG__ g_print("File name starts at %d\n",start_file); #endif if ( str[start_file]!='\0') { /* The begin of file name was founded. */ end_file = start_file+1; /* Search the end of the file name. */ while ( (isspace(str[end_file])==0) && (str[end_file]!='\0')) { end_file++; } #ifdef __DEBUG__ g_print("File name ends at %d\n",end_file); #endif if ( str[end_file]!='\0') { /* The end of file name was founded. */ start_descr = end_file+1; /* Search the begin of the file description. */ while ( (isspace(str[start_descr])!=0) && (str[start_descr]!='\0')) { start_descr++; } #ifdef __DEBUG__ g_print("File description starts at %d\n",start_descr); #endif if ( str[start_descr]!='\0') { /* The begin of file description was founded. */ end_descr = start_descr+1; descr_pos = end_descr; /* Search the end of the file descrption. */ while ( str[descr_pos]!='\0') { if ( isspace(str[descr_pos])==0 ) { /* A new character is founded in the description. */ end_descr = descr_pos; } descr_pos++; } #ifdef __DEBUG__ g_print("File description ends at %d\n",end_descr); #endif } else { /* There is only file name. */ } } else { /* There is only file name. */ } } else { /* There is no file name. */ } if ( end_descr != 0 ) { file_name = (gchar*)g_malloc0(sizeof(gchar)*(end_file-start_file+1)); file_descr = (gchar*)g_malloc0(sizeof(gchar)*(end_descr-start_descr+2)); memcpy(file_name,&str[start_file],end_file-start_file); str[end_file-start_file]='\0'; memcpy(file_descr,&str[start_descr],end_descr-start_descr+1); str[end_descr-start_descr+1]='\0'; descr = (gchar**)g_malloc0(sizeof(gchar*)*3); descr[0] = file_name; descr[1] = file_descr; descr[2] = NULL; // to use g_strfreev() after #ifdef __DEBUG__ g_print("File description is %s for %s\n", descr[1],descr[0]); #endif } else { /* Do not generate any file description. */ } } return descr; } gwhere-0.2.3/src/plugins/descr/file_id_diz.c0000744000175000017500000000476410506322435017430 0ustar bartbart/* GWhere. * Copyright (C) 2003 by Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "tools/gwtools.h" char * g_module_check_init ( void) { #ifdef __DEBUG__ printf ( "FILE_ID.DIZ module is loading...\n"); #endif return NULL; } const char * plugin_get_author ( void) { return "Sébastien LECACHEUR"; } const char * plugin_get_info ( void) { return "This plugin allow to extract parent folder informations from FILE_ID.DIZ file."; } const char * plugin_get_version ( void) { return "1.0.0"; } const char * plugin_get_help ( void) { return NULL; } const char * plugin_get_allowed_name ( void) { return "FILE_ID.DIZ"; } char * plugin_get_parent_descr ( const char *filepath, const char *mode) { char *descr = NULL; FILE *file = NULL; char buff[512]; char *file_content = NULL; char *file_content_tmp = NULL; int size = 0; if ( filepath != NULL ) { if ( (file = fopen ( filepath, "rb")) != NULL ) { while ( fgets ( buff, 512, file) != NULL) { gw_str_delete_char ( buff, '\r'); size += sizeof ( char) * (strlen ( buff)<511?strlen ( buff):511); file_content_tmp = realloc ( file_content, size + 1); if ( file_content == NULL ) { if ( file_content_tmp != NULL ) { file_content_tmp[0] = '\0'; } } if ( file_content_tmp != NULL ) { file_content = file_content_tmp; } else { free ( file_content); file_content = NULL; break; } memcpy ( &(file_content[strlen(file_content)]), buff, (strlen ( buff)<511?strlen ( buff):511)+1); } fclose ( file); descr = file_content; } } return descr; } void g_module_unload ( void) { #ifdef __DEBUG__ printf ( "FILE_ID.DIZ module is unloading...\n"); #endif } gwhere-0.2.3/src/plugins/descr/mppdec.h0000744000175000017500000012152110023202520016415 0ustar bartbart/* Copyright (C) Andree Buschmann and Frank Klemm * Modified Raphael MARINIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ //// Macros typical for Compilers: // // __TURBOC__ Turbo-C, Borland-C // __BORLANDC__ Borland-C // __ZTC__ Zortech-C // _MSC_VER Microsoft-C // __EMX__ Eberhard Mattes EMX (GNU based) // __GNUC__ GNU C based compiler (also Cygwin) // __CYGWIN__ Cygnus Windows C-Compiler (GNU based) //// Macros typical for Operating Systems // // __linux__ Linux // __bsdi__ BSDi // __FreeBSD__ FreeBSD // __NetBSD__ NetBSD // __OpenBSD__ OpenBSD // __unix__ Unix ???????? // _WIN16 16 bit-Windows // _WIN32 32 bit-Windows (WIN32 is wrong, not defined by not MSC) (also __GNUC__ + _WIN32 is possible) // _HPUX_SOURCE HP-UX // __BEOS__ BeOS // ??????? MS-DOS and relatives //// Macros typical for special conformances // System 5 Release 4 (SVr4) // System 5 ID (SVID) // POSIX 1.0 // POSIX 1.0b // X/OPEN // BSD 4.3 // BSD 4.4 // ANSI // Makros zum Manipulieren von Sockets + Files in einem rein (+0x4000) // Zeiten wieder raus TIME/TIME_T/DTIME #ifndef MPPDEC_MPPDEC_H #define MPPDEC_MPPDEC_H //// optimization/feature defines ////////////////////////////////// /*#ifndef NOT_INCLUDE_CONFIG_H # include "config.h" #endif #include "./mpp.h" */ //// portable system includes ////////////////////////////////////// #include #include #include #include #include #include #include #include //// system dependent system includes ////////////////////////////// // low level I/O, where are prototypes and constants? #if defined _WIN32 || defined __TURBOC__ || defined __ZTC__ || defined _MSC_VER # include # include # include # include # include #elif defined __unix__ || defined __linux__ # include # include # include # include # include # include #else // .... hier Includes für neues Betriebssystem einfügen (mit vorgestellten: #elif defined) # include # include # include # include #endif #if defined __linux__ # include #elif defined __FreeBSD__ # include #elif defined _MSC_VER # include #endif #if defined _WIN32 # undef USE_OSS_AUDIO # undef USE_ESD_AUDIO # undef USE_SUN_AUDIO #else # undef USE_WIN_AUDIO #endif #if defined __TURBOC__ # undef USE_OSS_AUDIO # undef USE_ESD_AUDIO # undef USE_SUN_AUDIO # undef USE_NICE # undef USE_REALTIME #endif #if defined MAKE_32BIT_FPU # undef USE_OSS_AUDIO # undef USE_ESD_AUDIO # undef USE_SUN_AUDIO #endif #if defined USE_DIET || defined MAKE_24BIT || defined MAKE_32BIT || defined MAKE_32BIT_FPU # undef USE_ESD_AUDIO #endif #if defined MAKE_16BIT || defined MAKE_24BIT || defined MAKE_32BIT || defined MAKE_32BIT_FPU # undef USE_ASM #endif #if INT_MAX < 2147483647L # undef USE_ASM #endif // sound card #if defined USE_OSS_AUDIO # include # include # if defined __linux__ # include # elif defined __bsdi__ # include # elif defined __FreeBSD__ # include # elif defined __NetBSD__ || defined __OpenBSD__ # include # else # include # endif #endif /* USE_OSS_AUDIO */ #if defined USE_ESD_AUDIO #undef USE_ESD_AUDIO //# include #endif #if defined USE_SUN_AUDIO # include #endif #ifdef MPP_ENCODER # undef USE_HTTP #endif #ifdef USE_HTTP # ifdef _WIN32 # include # else # include # endif #endif #if defined USE_WIN_AUDIO # include # define WINAUDIO_FD ((FILE_T)-128) #elif defined USE_IRIX_AUDIO # define IRIXAUDIO_FD ((FILE_T)-127) #endif #define NULL_FD ((FILE_T)-126) #if defined USE_NICE && !defined _WIN32 # include #endif // scheduler stuff #if defined USE_REALTIME && !defined _WIN32 # include #endif #ifndef O_BINARY # ifdef _O_BINARY # define O_BINARY _O_BINARY # else # define O_BINARY 0 # endif #endif #if defined _WIN32 || defined __TURBOC__ # define strncasecmp(__s1,__s2,__n) strnicmp ((__s1), (__s2), (__n)) # define strcasecmp(__s1,__s2) stricmp ((__s1), (__s2)) # define MKDIR(__dir,__attr) mkdir ((__dir)) #else # define MKDIR(__dir,__attr) mkdir ((__dir), (__attr)) #endif #if defined _WIN32 # include # define snprintf _snprintf # define getcwd(__buff,__len) _getcwd ((__buff), (__len)) # define sleep(__sec) Sleep ((__sec) * 1000) #endif #if defined _WIN32 # define TIME_T long # define TIME(__x) time ( &(__x) ) # define DTIME(__x,__y) ( (double)(__y) - (__x) ) #else # define TIME_T struct timeval # define TIME(__x) gettimeofday ( &(__x), NULL ) # define DTIME(__x,__y) ( ((double)(__y).tv_sec - (__x).tv_sec) + 1.e-6 * ((double)(__y).tv_usec - (__x).tv_usec) ) #endif #if defined __GNUC__ # define inline __inline__ # define restrict #elif defined _WIN32 # define inline __inline # define restrict #else # define inline # define restrict #endif #define FILEIO 1 //// Binary/Low-Level-IO /////////////////////////////////////////// // // All file I/O is basicly handled via an ANSI file pointer (type: FILE*) in // FILEIO-Mode 1 and via a POSIX file descriptor (type: int) in // FILEIO-Mode 2 and 3. // // Some operation are only available via the POSIX interface (fcntl, setmode, // ...) so we need a function to get the file descriptor from a file pointer. // In FILEIO-Mode 2 and 3 this is a dummy function because we always working // with this file descriptors. // #if FILEIO == 1 # if defined __BORLANDC__ || defined _WIN32 # define FILENO(__fp) _fileno ((__fp)) # elif defined __CYGWIN__ || defined __TURBOC__ || defined __unix__ || defined __EMX__ || defined _MSC_VER # define FILENO(__fp) fileno ((__fp)) # else # define FILENO(__fp) fileno ((__fp)) # endif #else # define FILENO(__fd) (__fd) #endif // // If we have access to a file via file name, we can open the file with an // additional "b" or a O_BINARY within the (f)open function to get a // transparent untranslated data stream which is necessary for audio bitstream // data and also for PCM data. If we are working with // stdin/stdout/FILENO_STDIN/FILENO_STDOUT we can't open the file with this // attributes, because the files are already open. So we need a non // standardized sequence to switch to this mode (not necessary for Unix). // Mostly the sequency is the same for incoming and outgoing streams, but only // mostly so we need one for IN and one for OUT. // Macros are called with the file pointer and you get back the untransalted file // pointer which can be equal or different from the original. // #if defined __EMX__ # define SETBINARY_IN(__fp) (_fsetmode ( (__fp), "b" ), (__fp)) # define SETBINARY_OUT(__fp) (_fsetmode ( (__fp), "b" ), (__fp)) #elif defined __TURBOC__ || defined __BORLANDC__ # define SETBINARY_IN(__fp) (setmode ( FILENO ((__fp)), O_BINARY ), (__fp)) # define SETBINARY_OUT(__fp) (setmode ( FILENO ((__fp)), O_BINARY ), (__fp)) #elif defined __CYGWIN__ # define SETBINARY_IN(__fp) (setmode ( FILENO ((__fp)), _O_BINARY ), (__fp)) # define SETBINARY_OUT(__fp) (setmode ( FILENO ((__fp)), _O_BINARY ), (__fp)) #elif defined _WIN32 # define SETBINARY_IN(__fp) (_setmode ( FILENO ((__fp)), _O_BINARY ), (__fp)) # define SETBINARY_OUT(__fp) (_setmode ( FILENO ((__fp)), _O_BINARY ), (__fp)) #elif defined _MSC_VER # define SETBINARY_IN(__fp) (setmode ( FILENO ((__fp)), O_BINARY ), (__fp)) # define SETBINARY_OUT(__fp) (setmode ( FILENO ((__fp)), O_BINARY ), (__fp)) #elif defined __unix__ # define SETBINARY_IN(__fp) (__fp) # define SETBINARY_OUT(__fp) (__fp) #elif 0 # define SETBINARY_IN(__fp) (freopen ( NULL, "rb", (__fp) ), (__fp)) # define SETBINARY_OUT(__fp) (freopen ( NULL, "wb", (__fp) ), (__fp)) #else # define SETBINARY_IN(__fp) (__fp) # define SETBINARY_OUT(__fp) (__fp) #endif // file I/O using ANSI buffered file I/O via file pointer FILE* (fopen, fread, fwrite, fclose) #if FILEIO == 1 # define OFF_T signed long # define FILE_T FILE* # define OPEN(name) fopen (name, "rb" ) # define OPENRW(name) fopen (name, "r+b") # define CREATE(name) fopen (name, "wb" ) # define INVALID_FILEDESC NULL # define CLOSE(fp) fclose (fp) // CLOSE returns -1 on error, otherwise 0 # define READ(fp,ptr,len) fread (ptr, 1, len, fp) // READ returns -1 or 0 on error/EOF, otherwise > 0 # define READ1(fp,ptr) fread (ptr, 1, 1, fp) // READ returns -1 or 0 on error/EOF, otherwise > 0 # define WRITE(fp,ptr,len) fwrite (ptr, 1, len, fp) // WRITE returns -1 or 0 on error/EOF, otherwise > 0 # define SEEK(fp,offs,lbl) fseek (fp, offs, lbl) // SEEK returns -1 on error, otherwise >= 0 # define FILEPOS(fp) ftell (fp) // FILEPOS returns -1 on error, otherwise >= 0 # define STDIN stdin # define STDOUT stdout # define STDERR stderr # define FDOPEN(fd,mode) fdopen (fd, mode) # define FLUSH(fp) fflush (fp) # define FEOF(fp) feof (fp) #endif /* FILEIO==1 */ // file I/O using POSIX unbuffered file I/O via file descriptors (open, read, write, close) #if FILEIO == 2 # ifdef WIN32 # define OFF_T _off_t # else # define OFF_T off_t # endif # define FILE_T int # define OPEN(name) open (name, O_RDONLY|O_BINARY) # define OPENRW(name) open (name, O_RDWR |O_BINARY) # define CREATE(name) open (name, O_WRONLY|O_BINARY|O_TRUNC|O_CREAT, 0644) # define INVALID_FILEDESC (-1) # define CLOSE(fd) close (fd) // CLOSE returns -1 on error, otherwise 0 # if defined HAVE_INCOMPLETE_READ # define READ(fd,ptr,len) complete_read (fd, ptr, len) // READ returns -1 or 0 on error/EOF, otherwise > 0 # else # define READ(fd,ptr,len) (size_t)read (fd, ptr, len)// READ returns -1 or 0 on error/EOF, otherwise > 0 # endif # define READ1(fd,ptr) (size_t)read (fd, ptr, 1) // READ returns -1 or 0 on error/EOF, otherwise > 0 # define WRITE(fd,ptr,len) (size_t)write (fd, ptr, len)// WRITE returns -1 or 0 on error/EOF, otherwise > 0 # define SEEK(fd,offs,lbl) lseek (fd, offs, lbl) // SEEK returns -1 on error, otherwise >= 0 # define FILEPOS(fd) lseek (fd, 0L, SEEK_CUR) // FILEPOS returns -1 on error, otherwise >= 0 # define STDIN 0 # define STDOUT 1 # define STDERR 2 # define FDOPEN(fd,mode) (fd) # define FLUSH(fd) (void)(fd) # ifdef _WIN32 # define FEOF(fd) _eof (fd) # else # define FEOF(fd) ((void)fd,0) # endif #endif /* FILEIO==2 */ // file I/O using Turbo-C lowest level unbuffered file I/O via file descriptors (_open, _read, _write, _close) #if FILEIO == 3 # define OFF_T signed long # define FILE_T int # define OPEN(name) _open (name, O_RDONLY) # define OPENRW(name) _open (name, O_RDWR ) # define CREATE(name) _creat(name, 0) # define INVALID_FILEDESC (-1) # define CLOSE(fd) _close (fd) // CLOSE returns -1 on error, otherwise 0 # define READ(fd,ptr,len) (size_t)_read (fd, ptr, len)// READ returns -1 or 0 on error/EOF, otherwise > 0 # define READ1(fd,ptr) (size_t)_read (fd, ptr, 1) // READ returns -1 or 0 on error/EOF, otherwise > 0 # define WRITE(fd,ptr,len) (size_t)_write (fd, ptr, len)// WRITE returns -1 or 0 on error/EOF, otherwise > 0 # define SEEK(fd,offs,lbl) lseek (fd, offs, lbl) // SEEK returns -1 on error, otherwise >= 0 # define FILEPOS(fd) lseek (fd, 0L, SEEK_CUR) // FILEPOS returns -1 on error, otherwise >= 0 # define STDIN 0 # define STDOUT 1 # define STDERR 2 # undef SETBINARY_IN # undef SETBINARY_OUT # define SETBINARY_IN(fd) (fd) # define SETBINARY_OUT(fd) (fd) # define FDOPEN(fd,mode) (fd) # define FLUSH(fd) (void)(fd) # define FEOF(fd) ((void)fd,0) #endif /* FILEIO==3 */ #if FILEIO != 2 && defined USE_HTTP # error HTTP can only be used by FILEIO==2 #endif #if defined _WIN32 || defined __BEOS__ # define WRITE_SOCKET(sock,ptr,len) send (sock, ptr, len, 0) # define READ_SOCKET(sock,ptr,len) recv (sock, ptr, len, 0) #else # define WRITE_SOCKET(sock,ptr,len) write (sock, ptr, len) # define READ_SOCKET(sock,ptr,len) read (sock, ptr, len) #endif #ifdef _WIN32 # define POPEN_READ_BINARY_OPEN(cmd) _popen ((cmd), "rb") # define POPEN_WRITE_BINARY_OPEN(cmd) _popen ((cmd), "wb") # define PCLOSE(fp) _pclose(fp) #else # define POPEN_READ_BINARY_OPEN(cmd) popen ((cmd), "r") # define POPEN_WRITE_BINARY_OPEN(cmd) popen ((cmd), "w") # define PCLOSE(fp) pclose(fp) #endif #if defined __unix__ || defined __bsdi__ || defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__ || defined __TURBOC__ || defined _WIN32 # define ISATTY(fd) isatty (fd) #else # define ISATTY(fd) 0 #endif // Path separator #if defined __unix__ || defined __bsdi__ || defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__ # define PATH_SEP '/' # define DRIVE_SEP '\0' # define EXE_EXT "" # define DEV_NULL "/dev/null" # define ENVPATH_SEP ':' #elif defined _WIN32 || defined __TURBOC__ || defined __ZTC__ || defined _MSC_VER # define PATH_SEP '\\' # define DRIVE_SEP ':' # define EXE_EXT ".exe" # define DEV_NULL "\\nul" # define ENVPATH_SEP ';' #else # define PATH_SEP '/' // Amiga: C:/ # define DRIVE_SEP ':' # define EXE_EXT "" # define DEV_NULL "nul" # define ENVPATH_SEP ';' #endif // maximum length of file names #ifndef PATHLEN_MAX # if defined FILENAME_MAX # define PATHLEN_MAX FILENAME_MAX # elif INT_MAX < 2147483647L # define PATHLEN_MAX 128 # else # define PATHLEN_MAX 1024 # endif #endif /* !PATHLEN_MAX */ #ifdef _WIN32 # define TitleBar(text) SetConsoleTitle (text) #else # define TitleBar(text) (void) (text) #endif #define SPEAKER_FRONT_LEFT 0x00000001 #define SPEAKER_FRONT_RIGHT 0x00000002 #define SPEAKER_FRONT_CENTER 0x00000004 #define SPEAKER_LOW_FREQUENCY 0x00000008 #define SPEAKER_BACK_LEFT 0x00000010 #define SPEAKER_BACK_RIGHT 0x00000020 #define SPEAKER_FRONT_LEFT_OF_CENTER 0x00000040 #define SPEAKER_FRONT_RIGHT_OF_CENTER 0x00000080 #define SPEAKER_BACK_CENTER 0x00000100 #define SPEAKER_SIDE_LEFT 0x00000200 #define SPEAKER_SIDE_RIGHT 0x00000400 #define SPEAKER_TOP_CENTER 0x00000800 #define SPEAKER_TOP_FRONT_LEFT 0x00001000 #define SPEAKER_TOP_FRONT_CENTER 0x00002000 #define SPEAKER_TOP_FRONT_RIGHT 0x00004000 #define SPEAKER_TOP_BACK_LEFT 0x00008000 #define SPEAKER_TOP_BACK_CENTER 0x00010000 #define SPEAKER_TOP_BACK_RIGHT 0x00020000 #define SPEAKER_RESERVED 0x80000000 //// constants ///////////////////////////////////////////////////// #define MAXCH 2 #ifdef USE_SV8 # define MAX_SV "SV8" #else # define MAX_SV "SV7" #endif #ifdef USE_ASM # define BUILD "3DNow/SSE" #else # define BUILD "" #endif #define COPYRIGHT "(C) 1999-2003 Buschmann/Klemm/Piecha/Wolf" #define DECODER_DELAY (512 - 32 + 1) #define BLK_SIZE (36 * 32) //// logging defines, for development only ///////////////////////// #if defined _WIN32 || defined __TURBOC__ # define LOGPATH ".\\" # define MUSICPATH "D:\\AUDIO\\" #else # define LOGPATH "./" # define MUSICPATH "/Archive/Audio/" #endif #define _(x) (void)(fprintf(stderr,"<%d>\n",(x)),fflush(stderr)) #ifdef DEBUG # define REP(x) (void)(x) #else # define REP(x) #endif //// numerical constants /////////////////////////////////////////// #define C00 (Float) 0.500000000000000000000000L // Cxx = 0.5 / cos (xx*M_PI/64) #define C01 (Float) 0.500602998235196301334178L #define C02 (Float) 0.502419286188155705518560L #define C03 (Float) 0.505470959897543659956626L #define C04 (Float) 0.509795579104159168925062L #define C05 (Float) 0.515447309922624546962323L #define C06 (Float) 0.522498614939688880640101L #define C07 (Float) 0.531042591089784174473998L #define C08 (Float) 0.541196100146196984405269L #define C09 (Float) 0.553103896034444527838540L #define C10 (Float) 0.566944034816357703685831L #define C11 (Float) 0.582934968206133873665654L #define C12 (Float) 0.601344886935045280535340L #define C13 (Float) 0.622504123035664816182728L #define C14 (Float) 0.646821783359990129535794L #define C15 (Float) 0.674808341455005746033820L #define C16 (Float) 0.707106781186547524436104L #define C17 (Float) 0.744536271002298449773679L #define C18 (Float) 0.788154623451250224773056L #define C19 (Float) 0.839349645415527038721463L #define C20 (Float) 0.899976223136415704611808L #define C21 (Float) 0.972568237861960693780520L #define C22 (Float) 1.060677685990347471323668L #define C23 (Float) 1.169439933432884955134476L #define C24 (Float) 1.306562964876376527851784L #define C25 (Float) 1.484164616314166277319733L #define C26 (Float) 1.722447098238333927796261L #define C27 (Float) 2.057781009953411550808880L #define C28 (Float) 2.562915447741506178719328L #define C29 (Float) 3.407608418468718785698107L #define C30 (Float) 5.101148618689163857960189L #define C31 (Float)10.190008123548056810994678L #define SS05 (Float) 0.840896415253714543018917L // 0.5^0.25 #ifndef M_PI # define M_PI 3.1415926535897932384626433832795029 // 4*atan(1) # define M_PIl 3.1415926535897932384626433832795029L # define M_LN2 0.6931471805599453094172321214581766 // ln(2) # define M_LN2l 0.6931471805599453094172321214581766L # define M_LN10 2.3025850929940456840179914546843642 // ln 10 */ # define M_LN10l 2.3025850929940456840179914546843642L #endif //// 'Cdecl' forces to use standard C/C++ calling convention /////// #if defined _WIN32 # define Cdecl __cdecl #elif defined __ZTC__ # define Cdecl _cdecl #elif defined __TURBOC__ # define Cdecl cdecl #else # define Cdecl #endif //// expect handling of GCC //////////////////////////////////////// #ifdef __GNUC__ # if __GNUC__ < 3 # define __builtin_expect(cond,exp) (cond) # ifndef expect # define expect(cond,exp) __builtin_expect(cond,exp) # endif # else # ifndef expect # define expect(cond,exp) __builtin_expect(cond,exp) # endif # endif #else # define __builtin_expect(cond,exp) (cond) # ifndef expect # define expect(cond,exp) __builtin_expect(cond,exp) # endif #endif #define if0(x) if (expect(x,0)) #define if1(x) if (expect(x,1)) #define while0(x) while (expect(x,0)) #define while1(x) while (expect(x,1)) #ifndef __GNUC__ # define __attribute__(x) #else # define __attribute__(x) #endif //// Remaining macros ////////////////////////////////////////////// // selects input buffer size and some constants needed for input buffer handling #ifndef IBUFLOG2 // must be at least 10 (bitrate always <626 kbps) or better 11 ( <1253 kbps) # if INT_MAX < 2147483647L # define IBUFLOG2 11 // 8 KByte buffer, possible 11...13 (32 KByte limit) # else # define IBUFLOG2 21 // 8 MByte buffer, possible 11...29 ( 2 GByte limit) # endif #endif #define IBUFSIZE ((size_t)(1LU<<(IBUFLOG2))) #define IBUFSIZE2 ((size_t)((IBUFSIZE)/2)) #define IBUFMASK ((size_t)((IBUFSIZE)-1)) // save memory space for 16 bit compiler (data + stack < 64 KByte) #if INT_MAX < 2147483647L # if VIRT_SHIFT > 6 # undef VIRT_SHIFT # define VIRT_SHIFT 6 # endif # if IBUFLOG2 > 11 # undef IBUFLOG2 # define IBUFLOG2 11 # endif # define USE_HUFF_PACK # define USE_ARRAY_PACK #endif // generate a macro which contains information about compile time settings #define STR(x) _STR(x) #define _STR(x) #x #ifdef NDEBUG # define _T1 "" #else # define _T1 "DEBUG " #endif #if defined USE_OSS_AUDIO || defined USE_ESD_AUDIO || defined USE_SUN_AUDIO || defined USE_WIN_AUDIO # define _T2 "SND " #else # define _T2 "" #endif #ifdef USE_NICE # define _T3 "NICE " #else # define _T3 "" #endif #if defined USE_REALTIME # define _T4 "RT " #else # define _T4 "" #endif #ifdef HAVE_IEEE754_FLOAT # define _T5 "IEEE " #else # define _T5 "" #endif #define _T6 "IO=" STR(FILEIO) " " #ifdef USE_HUFF_PACK # define _T7 "H-PCK " #else # define _T7 "" #endif #ifdef USE_ARRAY_PACK # define _T8 "A-PCK " #else # define _T8 "" #endif #define _T9 "SHFT=" STR(VIRT_SHIFT) " " #define _T10 "IBUF=" STR(IBUFLOG2) " " #define COMPILER_FLAGS _T1 _T2 _T3 _T4 _T5 _T6 _T7 _T8 _T9 _T10 // align a pointer by maybe incrementing it #define ALIGN(ptr,alignment) \ (void*)((((ptrdiff_t)(ptr)) & (-(ptrdiff_t)(alignment))) + (alignment)) // alignt einen Zeiger mit alignment, das Quellarray sollte mindestens alignment-1 Bytes länger als die erforderliche Länge sein //// Simple types ////////////////////////////////////////////////// #if CHAR_BIT == 8 && SCHAR_MAX == 127L typedef unsigned char Uint8_t; // guaranteed 8 bit unsigned integer type with range 0...255 typedef signed char Int8_t; // guaranteed 8 bit signed integer type with range -128...127 #else # error No 8 bit int type found. Tested: char #endif #if SHRT_MAX == 32767L typedef unsigned short int Uint16_t; // guaranteed 16 bit unsigned integer type with range 0...65535 typedef signed short int Int16_t; // guaranteed 16 bit signed integer type with range -32768...32767 #else # error No 16 bit int type found. Tested: short #endif #if INT_MAX == 2147483647L typedef unsigned int Uint32_t; // guaranteed 32 bit unsigned integer type with range 0...4294967295 typedef signed int Int32_t; // guaranteed 32 bit signed integer type with range -2147483648...2147483647 #elif LONG_MAX == 2147483647L typedef unsigned long int Uint32_t; // guaranteed 32 bit unsigned integer type with range 0...4294967295 typedef signed long int Int32_t; // guaranteed 32 bit signed integer type with range -2147483648...2147483647 #else # error No 32 bit int type found. Tested: int, long #endif #if defined __C99__ // C9x has a type which is exact 64 bit typedef int64_t Int64_t; typedef uint64_t Uint64_t; #elif defined __GNUC__ // GCC uses long long as 64 bit typedef signed long long Int64_t; typedef unsigned long long Uint64_t; #elif defined LLONG_MAX // long long (when existing) is normally 64 bit typedef signed long long Int64_t; typedef unsigned long long Uint64_t; #elif LONG_MAX > 0xFFFFFFFFLU // long is longer than 33 bit, assume 64 bit typedef signed long Int64_t; typedef unsigned long Uint64_t; #elif defined _WIN32 // Microsoft and Intel call it __int64 typedef signed __int64 Int64_t; typedef unsigned __int64 Uint64_t; #else # define NO_INT64_T // no type mapped to 64 bit integer #endif #if defined _WIN32 && !defined __GNUC__ && !defined __C99__ typedef signed long ssize_t; #endif #ifdef USE_ARRAY_PACK typedef signed char Bool_t; // ==0: false, !=0: true #else typedef signed int Bool_t; // ==0: false, !=0: true #endif typedef Uint32_t Ibuf_t; // type for input buffer, currently this type must be 32 bit typedef signed char Schar; // at least -127...+127 typedef unsigned char Uchar; // at least 0...255 typedef signed short int Short; // at least -32767...+32767, memory economic type typedef unsigned short int Ushort; // at least 0...65535, memory economic type typedef signed int Int; // at least -32767...+32767, fast type typedef unsigned int Uint; // at least 0...65535, fast type typedef signed long int Long; // at least -2147483647...+2147483647, but more is better typedef unsigned long int Ulong; // at least 0...4294967295, but more is better // size_t; // size of memory objects // ptrdiff_t; // pointer differences, may be larger than size_t typedef float Float32_t; // guaranteed 32 bit floating point type typedef double Float64_t; // guaranteed 64 bit floating point type typedef float Float; // fastest floating point type, memory economic (used for all PCM calculations) #define SIZEOF_Float 4 // size of the type 'Float' in sizeof units typedef double Double; // floating point with extended precision (more than 32 bit mantissa) typedef long double Ldouble; // most exact floating point format #if defined MAKE_16BIT || defined MAKE_24BIT || defined MAKE_32BIT # ifdef NO_INT64_T # error No 64 bit int type found, needed for HQ 16...32 bit output # endif typedef Int32_t IntSample_t; # if defined MAKE_32BIT # define SAMPLE_SIZE 32 # define PROG_NAME "mppdec32" # define SAMPLE_SIZE_STRING " (32 bit HQ)" # define Write_PCM(fd,p,b) Write_PCM_HQ_32bit ( fd, p, b ) # define Synthese_Filter(Stream,offset,Vi,Yi,chs,ch) \ Synthese_Filter_32_C ( Stream, offset, Vi, Yi, chs, ch ) # undef USE_ESD_AUDIO # elif defined MAKE_24BIT # define SAMPLE_SIZE 24 # define PROG_NAME "mppdec24" # define SAMPLE_SIZE_STRING " (24 bit HQ)" # define Write_PCM(fd,p,b) Write_PCM_HQ_24bit ( fd, p, b ) # define Synthese_Filter(Stream,offset,Vi,Yi,chs,ch) \ Synthese_Filter_32_C ( Stream, offset, Vi, Yi, chs, ch ) # undef USE_ESD_AUDIO # elif defined MAKE_16BIT # define SAMPLE_SIZE 16 # define PROG_NAME "mppdec16" # define SAMPLE_SIZE_STRING " (16 bit HQ)" # define Write_PCM(fd,p,b) Write_PCM_HQ_16bit ( fd, p, b ) # define Synthese_Filter(Stream,offset,Vi,Yi,chs,ch) \ Synthese_Filter_32_C ( Stream, offset, Vi, Yi, chs, ch ) # endif #elif defined MAKE_32BIT_FPU typedef Float32_t IntSample_t; # define SAMPLE_SIZE 32 # define PROG_NAME "mppdec32FP" # define SAMPLE_SIZE_STRING " (32 bit FP)" # define Write_PCM(fd,p,b) Write_PCM_32bit ( fd, p, b ) # define Synthese_Filter(Stream,offset,Vi,Yi,chs,ch) \ Synthese_Filter_32FP_C ( Stream, offset, Vi, Yi, chs ) #else typedef Int16_t IntSample_t; # define SAMPLE_SIZE 16 # define PROG_NAME "mppdec" # define SAMPLE_SIZE_STRING "" # define Write_PCM(fd,p,b) Write_PCM_16bit ( fd, p, b ) # ifdef USE_ASM # define Synthese_Filter(Stream,offset,Vi,Yi,chs,ch) \ Synthese_Filter_16 ( Stream, offset, Vi, Yi, chs ) # else # define Synthese_Filter(Stream,offset,Vi,Yi,chs,ch) \ Synthese_Filter_16_C ( Stream, offset, Vi, Yi, chs ) # endif /* USE_ASM */ #endif //// More complex types //////////////////////////////////////////// typedef Int quant_t ; #ifdef USE_ARRAY_PACK typedef Schar scf_t ; typedef Schar res_t ; typedef Uchar pack_t; #else typedef Int scf_t ; typedef Int res_t ; typedef Int pack_t; #endif typedef struct { #ifndef MPP_ENCODER Uint32_t Code; // >=32 bit # ifdef USE_HUFF_PACK Schar Value; // >= 7 bit Uchar Length; // >= 4 bit # else Int Value; Uint Length; # endif #else # ifdef USE_HUFF_PACK Uint8_t Length; // >= 4 bit Uint8_t ___; Uint16_t Code; // >= 14 bit # else Uint Code; Uint Length; # endif #endif } Huffman_t ; typedef struct { Uint Code : 16; // >= 14 bit Uint Length : 8; // >= 4 bit } HuffSrc_t ; typedef struct { OFF_T FileSize; Int GenreNo; Int TrackNo; char* Genre ; char* Year ; char* Track ; char* Title ; char* Artist ; char* Album ; char* Comment; } TagInfo_t ; typedef void (*SyntheseFilter16_t) ( Int16_t* Stream, Int* const offset, Float* Vi, const Float Yi[36][32], Uint channels ); typedef void (*SyntheseFilter32_t) ( Int32_t* Stream, Int* const offset, Float* Vi, const Float Yi[36][32], Uint channels, Uint ch ); typedef Int (*HeaderWriter_t) ( FILE_T outputFile, Ldouble SampleFreq, Uint BitsPerSample, Uint Channels, Double SamplesPerChannel ); #if defined MAKE_16BIT || defined MAKE_24BIT || defined MAKE_32BIT typedef struct { const Float* FilterCoeff; Uint64_t Mask; Float64_t Add; Float Dither; Uint32_t Overdrives; Int64_t MaxLevel; Bool_t NoShaping; Float ErrorHistory [MAXCH] [16]; // max. 2 channels, 16th order Noise shaping Float DitherHistory [MAXCH] [16]; Int32_t LastRandomNumber [MAXCH]; } dither_t; #else typedef struct { Uint32_t Overdrives; Int32_t MaxLevel; } dither_t; #endif //// Variables ///////////////////////////////////////////////////// // decode.c extern Ibuf_t InputBuff [IBUFSIZE]; // Lesebuffer für den MP+-Datenstrom extern size_t InputCnt; // aktueller Offset in diesem Buffer // huffsv7.c extern Huffman_t HuffHdr [10]; extern Huffman_t HuffSCFI [ 4]; extern Huffman_t HuffDSCF [16]; extern Huffman_t HuffQ1 [2] [ 3*3*3]; extern Huffman_t HuffQ2 [2] [ 5*5]; extern Huffman_t HuffQ3 [2] [ 7]; extern Huffman_t HuffN3 [2] [ 7*7]; extern Huffman_t HuffQ4 [2] [ 9]; extern Huffman_t HuffQ5 [2] [15]; extern Huffman_t HuffQ6 [2] [31]; extern Huffman_t HuffQ7 [2] [63]; extern Huffman_t HuffN8 [2][127]; extern const Huffman_t* HuffQ [2] [ 8]; extern const Huffman_t* HuffN [2] [ 9]; extern Uint8_t LUT1_0 [1<< 6]; extern Uint8_t LUT1_1 [1<< 9]; extern Uint8_t LUT2_0 [1<< 7]; extern Uint8_t LUT2_1 [1<<10]; extern Uint8_t LUT3_0 [1<< 4]; extern Uint8_t LUT3_1 [1<< 5]; extern Uint8_t LUT4_0 [1<< 4]; extern Uint8_t LUT4_1 [1<< 5]; extern Uint8_t LUT5_0 [1<< 6]; extern Uint8_t LUT5_1 [1<< 8]; extern Uint8_t LUT6_0 [1<< 7]; extern Uint8_t LUT6_1 [1<< 7]; extern Uint8_t LUT7_0 [1<< 8]; extern Uint8_t LUT7_1 [1<< 8]; extern Uint8_t LUTDSCF [1<< 6]; // huffsv46.c extern const Huffman_t* Entropie [18]; extern const Huffman_t* Region [32]; extern Huffman_t SCFI_Bundle [ 8]; extern Huffman_t DSCF_Entropie [13]; // mppdec.c extern Float YY [MAXCH] [36] [32]; extern scf_t SCF_Index[MAXCH] [32] [ 3]; // Skalierungsfaktor extern res_t Res [MAXCH] [32]; // Auflösungsstufen der Teilbänder extern quant_t QQ [MAXCH] [32] [36]; // quantisierte Samples extern Bool_t MS_Band [32]; // subbandweiser Flag für M/S-Signalführung extern Bool_t MS_used; // globaler Flag für M/S-Signalführung extern Bool_t IS_used; extern Uint DUMPSELECT; #define LITTLE 0 #define BIG 1 extern Bool_t output_endianess; #if defined HAVE_LITTLE_ENDIAN # define machine_endianess LITTLE #elif defined HAVE_BIG_ENDIAN # define machine_endianess BIG #endif // requant.c extern Float __SCF [8 + 128]; // tabellierte Skalenfaktoren von -8 bis +127 #define SCF ( __SCF + 8 ) extern Int8_t Q_bit [32]; // Anzahl Bits für Speicherung der Auflösung (SV6) extern Int8_t Q_res [32] [16]; // Index -> Auflösung (SV6) extern Int Min_Band; extern Int Max_Band; extern Float __Cc7 [1 + 18]; extern const Uint __Dc7 [1 + 18]; #define Cc7 ( __Cc7 + 1 ) #define Dc7 ( __Dc7 + 1 ) extern Float Cc8 [20]; extern const Uint Dc8 [20]; // synthtab.c extern const Float Cos64 [32]; extern const Float Di_opt [32] [16]; // stderr.c extern Bool_t stderr_silent; //// procedures/functions ////////////////////////////////////////// // cpu_feat.c Bool_t Cdecl Has_MMX ( void ); Bool_t Cdecl Has_SIMD ( void ); Bool_t Cdecl Has_SIMD2 ( void ); Bool_t Cdecl Has_3DNow ( void ); // decode.c void Bitstream_init ( void ); Ulong BitsRead ( void ); Uint32_t Bitstream_read ( Int bits ); Uint32_t Bitstream_peek ( Uint pos, Int bits ); void Bitstream_skip ( Uint bits ); Uint32_t Bitstream_preview ( Int bits ); // dto., aber Daten werden noch nicht abquitiert int Read_Bitstream ( Uint StreamVersion, Uint channels ); // directory.c int IsDirectory ( const char* path ); // http.c int http_open ( const char* URL ); // huffsv7.c void Init_Huffman_Decoder_SV7 ( void ); void Init_Huffman_Encoder_SV7 ( void ); // huffsv46.c void Init_Huffman_Decoder_SV4_6 ( void ); // id3tag.c Int Read_ID3V1_Tags ( FILE_T fp, TagInfo_t* tip ); Int Read_APE_Tags ( FILE_T fp, TagInfo_t* tip ); // codetable_enc.c/codetable_dec.c void Init_Decoder_Huffman_Tables ( void ); void Init_Encoder_Huffman_Tables ( void ); // requant.c void Init_QuantTab ( Int maximum_Band, Bool_t used_IS, Double amplification, Uint StreamVersion ); // synth.c Uint32_t random_int ( void ); void Cdecl Calculate_New_V_i387 ( const Float* Sample, Float* V ); void Cdecl Calculate_New_V_3DNow ( const Float* Sample, Float* V ); void Cdecl New_V_Helper2 ( Float* A, const Float* Sample ); void Cdecl New_V_Helper3 ( Float* A, const Float* Sample ); void Cdecl New_V_Helper4 ( Float* V ); void Cdecl VectorMult_i387 ( void* buff, const Float* V ); void Cdecl VectorMult_3DNow ( void* buff, const Float* V ); void Cdecl VectorMult_SIMD ( void* buff, const Float* V ); void Synthese_Filter_16_C ( Int16_t* Stream, Int* const offset, Float* Vi, const Float Yi[36][32], Uint channels ); void Synthese_Filter_32_C ( Int32_t* Stream, Int* const offset, Float* Vi, const Float Yi[36][32], Uint channels, Uint channel ); void Cdecl Reset_FPU ( void ); void Cdecl Reset_FPU_3DNow ( void ); void Cdecl memcpy_dn_MMX ( void* dst, const void* src, size_t words64byte ); void Cdecl memcpy_dn_SIMD ( void* dst, const void* src, size_t words128byte ); void Init_Dither ( Int bits, int shapingtype, Double dither ); void OverdriveReport ( void ); SyntheseFilter16_t Get_Synthese_Filter ( void ); // tools.c size_t Read_LittleEndians ( FILE_T fp, Uint32_t* dst, size_t words32bit ); void Requantize_MidSideStereo ( Int Stop_Band, const Bool_t* used_MS, unsigned int StreamVersion ); void Requantize_IntensityStereo ( Int Start_Band, Int Stop_Band ); void Resort_HuffTable ( Huffman_t* const Table, const size_t elements, Int offset ); void Make_HuffTable ( Huffman_t* dst, const HuffSrc_t* src, size_t len ); void Make_LookupTable ( Uint8_t* LUT, size_t LUT_len, const Huffman_t* const Table, const size_t elements ); size_t complete_read ( int fd, void* dest, size_t bytes ); // cpu.h void Init_FPU ( void ); // wave_out.c Int Write_WAVE_Header ( FILE_T outputFile, Ldouble SampleFreq, Uint BitsPerSample, Uint Channels, Double SamplesPerChannel ); Int Write_AIFF_Header ( FILE_T outputFile, Ldouble SampleFreq, Uint BitsPerSample, Uint Channels, Double SamplesPerChannel ); Int Write_Raw_Header ( FILE_T outputFile, Ldouble SampleFreq, Uint BitsPerSample, Uint Channels, Double SamplesPerChannel ); Int Set_DSP_OSS_Params ( FILE_T outputFile, Ldouble SampleFreq, Uint BitsPerSample, Uint Channels ); Int Set_DSP_Sun_Params ( FILE_T outputFile, Ldouble SampleFreq, Uint BitsPerSample, Uint Channels ); Int Set_ESD_Params ( FILE_T dummyFile , Ldouble SampleFreq, Uint BitsPerSample, Uint Channels ); Int Set_WIN_Params ( FILE_T dummyFile , Ldouble SampleFreq, Uint BitsPerSample, Uint Channels ); Int Set_IRIX_Params ( FILE_T dummyFile , Ldouble SampleFreq, Uint BitsPerSample, Uint Channels ); size_t Write_PCM_16bit ( FILE_T outputFile, const Int16_t* data, size_t len ); size_t Write_PCM_HQ_16bit ( FILE_T outputFile, const Int32_t* data, size_t len ); size_t Write_PCM_HQ_24bit ( FILE_T outputFile, const Int32_t* data, size_t len ); size_t Write_PCM_HQ_32bit ( FILE_T outputFile, const Int32_t* data, size_t len ); int WIN_Play_Samples ( const void* buff, size_t len ); int IRIX_Play_Samples ( const void* buff, size_t len ); int WIN_Audio_close ( void ); int IRIX_Audio_close ( void ); // priority.c void DisableSUID ( void ); void EnableSUID ( void ); int SetPriority ( unsigned int prio ); // pipeopen.c FILE* pipeopen ( const char* command, const char* filename ); // stderr.c void SetStderrSilent ( Bool_t state ); Bool_t GetStderrSilent ( void ); int Cdecl stderr_printf ( const char* format, ... ); // _setargv.c long treewalk ( const char* start, const char** mask, int (*fn)(const char* filename, void* aux), void* aux ); void mysetargv ( int* argc, char*** argv, const char** extentions ); #if ENDIAN == HAVE_BIG_ENDIAN # define swab32(dst,psrc) dst = *(uint32_t*)(psrc) #else # if defined __i386__ /* 486+ */ # define swab32(dst,psrc) __asm__ ( "bswap %0" : "=r" (dst) : "0" (*(uint32_t*)(psrc)) ) # else # define swab32(dst,psrc) \ ((uint8_t*)&(dst))[0] = ((uint8_t*)(psrc))[3], \ ((uint8_t*)&(dst))[1] = ((uint8_t*)(psrc))[2], \ ((uint8_t*)&(dst))[2] = ((uint8_t*)(psrc))[1], \ ((uint8_t*)&(dst))[3] = ((uint8_t*)(psrc))[0] # endif #endif #endif /* MPPDEC_MPPDEC_H */ /* end of mppdec.h */ gwhere-0.2.3/src/plugins/descr/mpc.c0000744000175000017500000007207010506315272015742 0ustar bartbart/* GWhere. * Copyright (C) Andree Buschmann and Frank Klemm * Modified Raphael MARINIER * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ //#define _TEST_STANDALONE //#define __DEBUG__ 1 #include #include #include #include "mppdec.h" /* * List of known Genres. 256 genres are possible with version 1/1.1 tags, * but not yet used. */ static const char* GenreList [] = { "Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk", "Grunge", "Hip-Hop", "Jazz", "Metal", "New Age", "Oldies", "Other", "Pop", "R&B", "Rap", "Reggae", "Rock", "Techno", "Industrial", "Alternative", "Ska", "Death Metal", "Pranks", "Soundtrack", "Euro-Techno", "Ambient", "Trip-Hop", "Vocal", "Jazz+Funk", "Fusion", "Trance", "Classical", "Instrumental", "Acid", "House", "Game", "Sound Clip", "Gospel", "Noise", "AlternRock", "Bass", "Soul", "Punk", "Space", "Meditative", "Instrumental Pop", "Instrumental Rock", "Ethnic", "Gothic", "Darkwave", "Techno-Industrial", "Electronic", "Pop-Folk", "Eurodance", "Dream", "Southern Rock", "Comedy", "Cult", "Gangsta", "Top 40", "Christian Rap", "Pop/Funk", "Jungle", "Native American", "Cabaret", "New Wave", "Psychadelic", "Rave", "Showtunes", "Trailer", "Lo-Fi", "Tribal", "Acid Punk", "Acid Jazz", "Polka", "Retro", "Musical", "Rock & Roll", "Hard Rock", "Folk", "Folk/Rock", "National Folk", "Swing", "Fast-Fusion", "Bebob", "Latin", "Revival", "Celtic", "Bluegrass", "Avantgarde", "Gothic Rock", "Progressive Rock", "Psychedelic Rock", "Symphonic Rock", "Slow Rock", "Big Band", "Chorus", "Easy Listening", "Acoustic", "Humour", "Speech", "Chanson", "Opera", "Chamber Music", "Sonata", "Symphony", "Booty Bass", "Primus", "Porn Groove", "Satire", "Slow Jam", "Club", "Tango", "Samba", "Folklore", "Ballad", "Power Ballad", "Rhythmic Soul", "Freestyle", "Duet", "Punk Rock", "Drum Solo", "A capella", "Euro-House", "Dance Hall", "Goa", "Drum & Bass", "Club House", "Hardcore", "Terror", "Indie", "BritPop", "NegerPunk", "Polsk Punk", "Beat", "Christian Gangsta", "Heavy Metal", "Black Metal", "Crossover", "Contemporary C", "Christian Rock", "Merengue", "Salsa", "Thrash Metal", "Anime", "JPop", "SynthPop" }; struct APETagFooterStruct { Uint8_t ID [8]; // should equal 'APETAGEX' Uint8_t Version [4]; // currently 1000 (version 1.000) Uint8_t Length [4]; // the complete size of the tag, including this footer Uint8_t TagCount [4]; // the number of fields in the tag Uint8_t Flags [4]; // the tag flags (none currently defined) Uint8_t Reserved [8]; // reserved for later use }; char * get_extra_info ( FILE *f, int size); #ifdef _TEST_STANDALONE char * plugin_get_file_descr ( const char *filepath, const char *mode); int main ( int argc, char **argv) { if (argc==1) { printf ( "usage: mpc_info file\n"); return 0; } for (int i=1;i 0) && (dst [i-1] == ' ') ) { i--; } dst [i] = '\0'; } /* * Evaluate ID version 1/1.1 tags of a file given by 'fp' and fills out Tag * information in 'tip'. Tag information also contains the effective file * length (without the tags if tags are present). Return 1 if there is * usable information inside the file. Note there's also the case possible * that the file contains empty tags, the the file size is truncated by the * 128 bytes but the function returns 0. * * If there're no tags, all strings containing '\0', the Genre pointer is * NULL and GenreNo and TrackNo are -1. * * Returns 0 if there is no tag or invalid tag * Returns 1 if there is a tag * */ int Read_ID3V1_Tags ( FILE_T fp, TagInfo_t* tip ) { Uint8_t tmp [128]; OFF_T file_pos; const char* q; memset ( tip, 0, sizeof(*tip) ); tip->GenreNo = -1; tip->TrackNo = -1; if ( -1 == (file_pos = FILEPOS (fp)) ) return 0; if ( -1 == SEEK ( fp, -128L, SEEK_END ) ) return 0; tip->FileSize = FILEPOS (fp); if ( 128 != READ ( fp, tmp, 128 ) ) return 0; SEEK ( fp, file_pos, SEEK_SET ); if ( 0 != memcmp ( tmp, "TAG", 3 ) ) { tip->FileSize += 128; return 0; } if ( !tmp[3] && !tmp[33] && !tmp[63] && !tmp[93] && !tmp[97] ) return 0; memcpy_crop ( tip->Title =(char*) realloc (tip->Title , 31),(const char*) tmp + 3, 30 ); memcpy_crop ( tip->Artist =(char*) realloc (tip->Artist , 31),(const char*) tmp + 33, 30 ); memcpy_crop ( tip->Album =(char*) realloc (tip->Album , 31),(const char*) tmp + 63, 30 ); memcpy_crop ( tip->Year = (char*)realloc (tip->Year , 5),(const char*) tmp + 93, 4 ); memcpy_crop ( tip->Comment =(char*) realloc (tip->Comment, 31),(const char*) tmp + 97, 30 ); q = tmp[127] < sizeof(GenreList)/sizeof(*GenreList) ? GenreList [tip->GenreNo = tmp[127]] : "???"; strcpy ( tip->Genre = (char*)realloc (tip->Genre, strlen(q)+1), q ); // Index 0 may be true if file is very short tip->Track =(char*) realloc (tip->Track, 6); if ( tmp[125] == 0 && (tmp[126] != 0 || tip->FileSize < 66000 ) ) sprintf ( tip->Track, "[%02d]", tip->TrackNo = tmp[126] ); else strcpy ( tip->Track, " " ); return 1; } static Uint32_t Read_LE_Uint32 ( const Uint8_t* p ) { return ((Uint32_t)p[0] << 0) | ((Uint32_t)p[1] << 8) | ((Uint32_t)p[2] << 16) | ((Uint32_t)p[3] << 24); } #define TAG_ANALYZE(item,elem) \ if ( 0 == memcmp (p, #item, sizeof #item ) ) { \ p += sizeof #item; \ tip->elem = (char*)realloc (tip->elem, len+1); \ memcpy ( tip->elem, p, len ); \ tip->elem [len] = '\0'; \ p += len; \ } else Int Read_APE_Tags ( FILE_T fp, TagInfo_t* tip ) { OFF_T file_pos = 0; Uint32_t len = 0; Uint32_t flags = 0; unsigned char buff [8192]; unsigned char *p = NULL; unsigned char *end = NULL; struct APETagFooterStruct T; Uint32_t TagLen = 0; Uint32_t TagCount = 0; Uint32_t tmp = 0; memset(buff,0,8192); memset(tip,0,sizeof(*tip)); tip->GenreNo = -1; tip->TrackNo = -1; if ( -1 == (file_pos = FILEPOS (fp)) ) { goto notag; } if ( -1 == SEEK ( fp, 0L, SEEK_END ) ) { goto notag; } tip->FileSize = FILEPOS (fp); if ( -1 == SEEK ( fp, -(long)sizeof T, SEEK_END ) ) { goto notag; } if ( sizeof(T) != READ ( fp, &T, sizeof T ) ) { goto notag; } if ( memcmp ( T.ID, "APETAGEX", sizeof(T.ID) ) != 0 ) { goto notag; } tmp = Read_LE_Uint32(T.Version); if ( tmp != 1000 && tmp != 2000 ) { goto notag; } TagLen = Read_LE_Uint32 (T.Length); if ( TagLen <= sizeof(T) ) { goto notag; } if ( -1 == SEEK ( fp, -(long)TagLen, SEEK_END ) ) { goto notag; } tip->FileSize = FILEPOS (fp); // memset ( buff, 0, sizeof(buff) ); if ( TagLen - sizeof(T) != READ ( fp, buff, TagLen - sizeof(T)) ) { goto notag; } SEEK ( fp, file_pos, SEEK_SET ); TagCount = Read_LE_Uint32 (T.TagCount); end = buff + TagLen - sizeof(T); for ( p = buff; p < end && TagCount--; ) { len = Read_LE_Uint32 ( p ); p += 4; flags = Read_LE_Uint32 ( p ); p += 4; #ifdef __DEBUG__ g_print("buff[%d]=%s\n",p-buff,p); #endif TAG_ANALYZE(Title,Title) TAG_ANALYZE(Album,Album) TAG_ANALYZE(Artist,Artist) TAG_ANALYZE(Album,Album) TAG_ANALYZE(Comment,Comment) TAG_ANALYZE(Track,Track) TAG_ANALYZE(Year,Year) TAG_ANALYZE(Genre,Genre) { p += strlen((const char*)p) + 1 + len; } } if ( tip->Track != NULL && tip->Track[0] != '\0' ) { tip->TrackNo = atoi (tip->Track); tip->Track =(char*) realloc (tip->Track, 13 ); sprintf ( tip->Track, "[%02d]", tip->TrackNo ); } else { tip->Track =(char*) realloc (tip->Track, 5 ); strcpy ( tip->Track, " " ); } /* Genre wird noch nicht ausdekodiert */ return 1; notag: SEEK ( fp, file_pos, SEEK_SET ); return 0; } /***** extra info ********/ //fonction pour lire le fichier mpc. void DecodeFile ( FILE_T InputFile,int FileSize , int *bitrate_ret,char **time_ret, char **streamversion_ret, char **profile_ret ); static const char* EncoderName ( int encoderno ); static Int32_t JumpID3v2 ( void ); static const char* PrintTime ( Double samples, char sign ); static const char* ProfileName ( Uint profile ); // profile is 0...15, where 1, 5...15 is used // global du décodeur : static Ulong InputBuffRead; static Uint StreamVersion; Bool_t TrueGaplessPresent = 0; // is true gapless used? Int LastValidSamples = 0; // number of valid samples within last frame Uint DUMPSELECT = 0; unsigned int SampleFreq = 44100; static int Channels = 2; static const Uint16_t sftable [4] = { 44100, 48000, 37800, 32000 }; Int Bitrate; Bool_t MS_used = 0; // 0: all is LR coded, 1: MS or LR coding per subband Bool_t IS_used = 0; // is IS used (if yes, a fixed number of subbands is IS coded) //static Float Scale = 1.; // user defined scale factor //static Bool_t ClipPrev = 0; // if set, clipping is prevented if needed information is available //static int ReplayGainType = 0; // 0: no additional gain, 1: CD based gain correction, 2: title based gain correction //globales de decode.c : #define BITS (CHAR_BIT * sizeof(*InputBuff)) // Bits per InputBuff-Word Ibuf_t InputBuff [IBUFSIZE /* +128 */ ]; // enthält den Lese-Puffer static Uint32_t mask [32 + 1]; size_t InputCnt; // aktuelle Position im Lese-Puffer static Ibuf_t dword; // BITS Bit-Wort für Bitstrom-I/O static Uint pos; // Position im aktuell decodierten BITS-bit-Wort static size_t LastInputCnt = 0; static Uint Wraps = 0; //fonction d'ajout des infos char * get_extra_info ( FILE *f, int size) { int bitrate; char *descr = NULL, *tmp = NULL; char *temps = NULL, *streamversion = NULL, *profile = NULL; if ( (f != NULL) && (size > 0) ) { DecodeFile ( f, size, &bitrate, &temps, &streamversion, &profile); if ( streamversion && bitrate && temps && profile ) { if ( streamversion != NULL ) { descr = g_strdup_printf ( "MPC file (MPEG+%s)\n", streamversion); free ( streamversion); } else { descr = g_strdup ( "MPC file (MPEG+)\n"); } if ( bitrate != 0 ) { descr = g_strdup_printf ( "%sBitrate: %d\n", (tmp = descr), bitrate); g_free ( tmp); } if ( temps != NULL ) { descr = g_strconcat ( (tmp = descr), "Length: ", temps, "\n", NULL); g_free ( tmp); free ( temps); } if ( profile != NULL ) { descr = g_strconcat ( (tmp = descr), "Profile: ", profile, "\n", NULL); g_free ( tmp); free ( profile); } } } return descr; } void DecodeFile ( FILE_T InputFile, int FileSize, int *bitrate_ret,char **time_ret, char **streamversion_ret, char **profile_ret ) { Int MaxBandDesired = 0; Uint32_t TotalFrames = 0; // Double DecodedSamples = 0.; Uint Profile = (Uint)-1; Double AverageBitrate; // clock_t T; Int32_t ID3v2; Uint16_t PeakTitle = 0; Uint16_t PeakAlbum = 0; // Uint16_t Peak; Uint16_t tmp; Int16_t GainTitle = 0; Int16_t GainAlbum = 0; // Int16_t Gain; int Encoder; Bool_t SecurePeakTitle = 0; // Float ReplayGain; // 0...1...+oo // Float ClipCorr; // 0...1 size_t HeaderLen; // Fill the bitstream buffer for the first time resume: Bitstream_init (); InputBuffRead = Read_LittleEndians ( InputFile, InputBuff, IBUFSIZE ); // Test the first 4 bytes ("MP+": SV7+, "ID3": ID3V2, other: may be SV4...6) switch ( Bitstream_preview(32) ) { case (Uint32_t)0x01334449L: /* ID3 V2.1...2.4 */ case (Uint32_t)0x02334449L: case (Uint32_t)0x03334449L: case (Uint32_t)0x04334449L: #ifdef __DEBUG__ fprintf(stderr, "\n"PROG_NAME": Stream was corrupted by an ID3 Version 2 tagger\n\n" ); #endif ID3v2 = JumpID3v2 (); if ( SEEK ( InputFile, ID3v2, SEEK_SET ) < 0 ) { #ifdef __DEBUG__ fprintf(stderr, "\n\nSorry, recovering fails.\n\a" ); #endif return ; } // sleep (1); #ifdef __DEBUG__ fprintf(stderr,"\b\b\b\b, ignore %lu words and %u bits ...\n\a", (unsigned long)ID3v2 >> 2, (int)(ID3v2&3) << 3 ); #endif goto resume; case (Uint32_t)0x072B504DL: /* MP+ SV7 */ case (Uint32_t)0x172B504DL: /* MP+ SV7.1 */ case (Uint32_t)0xF72B504DL: /* MP+ SV7.F */ case (Uint32_t)0xFF2B504DL: /* MP+ SVF.F */ StreamVersion = (Int) Bitstream_read (8); (void) Bitstream_read (24); break; case (Uint32_t)0x2043414DL: /* MAC */ #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is a %s file\n", "Monkey's Audio" ); #endif return; case (Uint32_t)0x7961722E: /* Real Audio */ #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is a %s file\n", "Real Audio" ); #endif return; case (Uint32_t)0x46464952L: /* WAV */ #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is a %s file\n", "Microsoft WAVE" ); #endif return; case (Uint32_t)0x43614C66L: /* FLAC */ #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is a %s file\n", "FLAC" ); #endif return; case (Uint32_t)0x4341504CL: /* LPAC */ #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is a %s file\n", "LPAC" ); #endif return; case (Uint32_t)0x37414B52L: /* RKAU */ #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is a %s file\n", "RKAU" ); #endif return; case (Uint32_t)0x676B6A61L: /* Shorten */ #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is a %s file\n", "Shorten" ); #endif return; case (Uint32_t)0x040A5A53L: /* SZIP 1.12 */ #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is a %s file\n", "szip" ); #endif return; case (Uint32_t)0x5367674FL: /* OggS */ #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is a %s file\n", "Ogg Stream" ); #endif return; case (Uint32_t)0x46494441L: /* AAC-ADIF */ #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is a %s file\n", "AAC Audio Data Interchange Format" ); #endif return; case (Uint32_t)0x75B22630L: /* MS WMA */ #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is a %s file\n", "MS Windows Media Audio" ); #endif return; case (Uint32_t)0xBA010000L: /* MPEG system stream */ #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is a %s file\n", "MPEG system stream/VOB" ); #endif return; default: StreamVersion = (Uint32_t) Bitstream_preview (32); if ( ( StreamVersion & 0x00FFFFFF ) == (Uint32_t)0x002B504DL ) { StreamVersion >>= 24; #ifdef __DEBUG__ fprintf(stderr, "\n"PROG_NAME": Input File seems to be a MPC file StreamVersion %u.%u\nVisit http://www.uni-jena.de/~pfk/mpc/ and update your software.\n\n", StreamVersion & 15, StreamVersion >> 4 ); #endif return; } if ( ( (Bitstream_preview (32)) & 0x0000FFFF ) == (Uint32_t)0x0000770BL ) { #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is a %s file\n", "AC3/Dolby Digital" ); #endif return; } StreamVersion = (Int) (Bitstream_preview (21) & 0x3FF); if ( StreamVersion < 4 || StreamVersion > 6 ) { #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Input File is not a MPC file, neither SV 4...6 nor SV 7 (SV %u)\n", StreamVersion ); #endif return; } break; } // decode the header for SV4...6 or SV7 or SV8 switch ( StreamVersion ) { case 0x04: case 0x05: case 0x06: Bitrate = (Int) Bitstream_read (9); IS_used = (Int) Bitstream_read (1); MS_used = (Int) Bitstream_read (1); StreamVersion = (Int) Bitstream_read(10); MaxBandDesired = (Int) Bitstream_read (5); if ( Bitstream_read (6) != 1 ) { #ifdef __DEBUG__ fprintf ( stderr, "Blocksize of != 1 is not supported any longer\n" ); #endif return ; } TotalFrames = Bitstream_read ( StreamVersion < 5 ? 16 : 32 ); SampleFreq = 44100; Encoder = -1; Channels = 2; if ( StreamVersion >= 4 && StreamVersion <= 6 ) break; default: // it should be impossible to execute the following code #ifdef __DEBUG__ fprintf(stderr,"\n"PROG_NAME": Internal error\n" ); fprintf(stderr,"\n"PROG_NAME": Not a MPC file, neither SV 4...6 nor SV 7 (SV %u.%u)\n", StreamVersion & 15, StreamVersion >> 4 ); #endif return ; case 0x07: case 0x17: Bitrate = 0; Channels = 2; TotalFrames = Bitstream_read (32); IS_used = (Int) Bitstream_read (1); MS_used = (Int) Bitstream_read (1); MaxBandDesired = (Int) Bitstream_read (6); // reading the profile Profile = (Int) Bitstream_read (4); (void) Bitstream_read ( 2); SampleFreq = sftable [ Bitstream_read ( 2) ]; // reading peak and gain values from the file (or use useful values if they are absent) PeakTitle = (Uint16_t)(1.18 * (Uint32_t)Bitstream_read (16)); GainTitle = Bitstream_read (16); tmp = Bitstream_read (16); if ( (SecurePeakTitle = (tmp != 0)) ) PeakTitle = tmp; GainAlbum = Bitstream_read (16); PeakAlbum = Bitstream_read (16); if ( PeakAlbum == 0 ) PeakAlbum = PeakTitle; // reading true gapless TrueGaplessPresent = Bitstream_read ( 1); LastValidSamples = Bitstream_read (11); (void) Bitstream_read (20); // reserved bytes for future use Encoder = Bitstream_read ( 8); break; case 0xF7: case 0xFF: Bitrate = 0; TrueGaplessPresent = 1; HeaderLen = (Uint16_t) Bitstream_read (16); Profile = (Uint8_t) Bitstream_read ( 8); Encoder = (Uint8_t) Bitstream_read ( 8); TotalFrames = (Uint32_t) Bitstream_read (32); // reading peak and gain values from the file (or use useful values if they are absent) SecurePeakTitle = 1; PeakTitle = (Uint16_t) Bitstream_read (16); GainTitle = (Int16_t) Bitstream_read (16); PeakAlbum = (Uint16_t) Bitstream_read (16); GainAlbum = (Int16_t) Bitstream_read (16); if ( PeakAlbum == 0 ) PeakAlbum = PeakTitle; MaxBandDesired = (Uint) Bitstream_read ( 6); MS_used = (Bool_t) Bitstream_read ( 1); (void) Bitstream_read ( 9); LastValidSamples = (Uint) Bitstream_read (16); Channels = (Uint8_t) Bitstream_read ( 8); (void) Bitstream_read (24); SampleFreq = (Uint16_t) Bitstream_read (16); (void) Bitstream_read (16); for ( ; HeaderLen > 26; HeaderLen-- ) (void) Bitstream_read ( 8); break; } // calculate bitrate for informational purpose if ( Bitrate == 0 ) { AverageBitrate = ( SampleFreq / 1000. / BLK_SIZE * 8 ) * FileSize / TotalFrames ; } else { AverageBitrate = Bitrate; } #ifdef __DEBUG__ g_print ( "0\n"); fprintf(stderr,"\n"); if ( AverageBitrate > 0. ) fprintf(stderr,"%7.1f kbps,", AverageBitrate ); // Output total time, Streamversion, Profile fprintf(stderr,"%s, SV %u.%u, Profile %s%s", PrintTime (TotalFrames * (double)BLK_SIZE, ' ') + 1, StreamVersion & 15, StreamVersion >> 4, ProfileName(Profile), EncoderName(Encoder) ); g_print ( "1\n"); #endif //on règle les infos : *bitrate_ret=(int)AverageBitrate; *time_ret=(char*)malloc(strlen(PrintTime (TotalFrames * (double)BLK_SIZE, ' ') + 1)+1); if (!*time_ret) return; strcpy(*time_ret,PrintTime (TotalFrames * (double)BLK_SIZE, ' ') + 1); *streamversion_ret=(char*)malloc(10); if (!*streamversion_ret) return; snprintf(*streamversion_ret,9," SV %u.%u", StreamVersion & 15, StreamVersion >> 4); (*streamversion_ret)[9]=0; *profile_ret=(char*)malloc(100); if (!*profile_ret) return; snprintf(*profile_ret,99,"%s%s", ProfileName(Profile), EncoderName(Encoder) ); (*profile_ret)[99]=0; } static const char* EncoderName ( int encoderno ) { static char Name [32]; if ( encoderno <= 0 ) Name [0] = '\0'; else if ( encoderno % 10 == 0 ) sprintf ( Name, " (Release %u.%u)", encoderno/100, encoderno/10%10 ); else if ( (encoderno & 1) == 0 ) sprintf ( Name, " (Beta %u.%02u)", encoderno/100, encoderno%100 ); else sprintf ( Name, " (--Alpha-- %u.%02u)", encoderno/100, encoderno%100 ); return Name; } // 0: No ID3v2 tag // >0: ID2v2 tag with this length static Int32_t JumpID3v2 ( void ) { Int32_t ret = 10; if ( (Bitstream_read (32) & 0xFFFFFF) != 0x334449L ) return 0; if ( Bitstream_read (1) ) return 0; ret += Bitstream_read (7) << 14; if ( Bitstream_read (1) ) return 0; ret += Bitstream_read (7) << 21; Bitstream_read (1); if ( Bitstream_read (1) ) ret += 10; Bitstream_read (14); Bitstream_read (16); if ( Bitstream_read (1) ) return 0; ret += Bitstream_read (7) << 0; if ( Bitstream_read (1) ) return 0; ret += Bitstream_read (7) << 7; return ret; } /* * Print out the time to stderr with a precision of 10 ms always using 12 characters. * Time is represented by the sample count. An additional prefix character * (normally ' ' or '-') is prepended before the first digit. */ static const char* PrintTime ( Double samples, char sign ) { static char ret [16]; Ulong tmp = (Ulong)( samples * 100.f / SampleFreq + 0.5 ); // unit: 1/100th second Uint hour = (Uint) ( tmp / 360000 ); Uint min = (Uint) ( tmp / 6000 % 60 ); Uint sec = (Uint) ( tmp / 100 % 60 ); Uint csec = (Uint) ( tmp % 100 ); if ( hour > 9 ) sprintf ( ret, "%c%2u:%02u", sign, hour, min ); else if ( hour > 0 ) sprintf ( ret, " %c%1u:%02u", sign, hour, min ); else if ( min > 9 ) sprintf ( ret, " %c%2u", sign, min ); else sprintf ( ret, " %c%1u", sign, min ); sprintf ( ret + 6, ":%02u.%02u", sec, csec ); return ret; } static const char* ProfileName ( Uint profile ) // profile is 0...15, where 1, 5...15 is used { static const char na [] = "n.a."; static const char* Names [] = { na, "Unstable/Experimental", na, na, na, "below 'Telephone'", "below 'Telephone'", "'Telephone'", "'Thumb'", "'Radio'", "'Standard'", "'Xtreme'", "'Insane'", "'BrainDead'", "above 'BrainDead'", "above 'BrainDead'" }; return profile >= sizeof(Names)/sizeof(*Names) ? na : Names [profile]; } //fonction de decode.c void Bitstream_init ( void ) { Int i; Uint32_t val; InputCnt = (size_t)-1; pos = BITS; dword = 0; // Werte werden so initialisiert, daß beim nächsten Lesen von mindestens 1 bit das erste dword automatisch eingezogen wird LastInputCnt = 0; Wraps = 0; for ( val = 0, i = 0; i <= 32; i++, val += val+1 ) mask [i] = val; } Uint32_t Bitstream_read ( Int bits ) { Uint32_t ret; ret = dword; if ( (pos += bits) < BITS ) { ret >>= BITS - pos; } else { pos -= BITS; dword = InputBuff [InputCnt = (InputCnt+1) & IBUFMASK]; if ( pos > 0 ) { ret <<= pos; ret |= dword >> (BITS - pos); } } ret &= mask [bits]; return ret; } Uint32_t Bitstream_preview ( Int bits ) { Uint new_pos = pos + bits; Uint32_t ret = dword; if ( new_pos < BITS ) { ret >>= BITS - new_pos; } else if ( new_pos > BITS ) { ret <<= new_pos - BITS; ret |= InputBuff [(InputCnt+1) & IBUFMASK] >> (2*BITS - new_pos); } return ret /* & mask[bits] */; } //de tools.c size_t Read_LittleEndians ( FILE_T fp, Uint32_t* dst, size_t words32bit ) { size_t wordsread; wordsread = READ ( fp, dst, words32bit * sizeof(*dst) ) / sizeof(*dst); /*#if ENDIAN == HAVE_BIG_ENDIAN Change_Endian32 ( dst, wordsread ); #endif */ return wordsread; } gwhere-0.2.3/src/plugins/Makefile.am0000744000175000017500000000050210240504140015727 0ustar bartbartSUBDIRS = . descr catalog SOURCES = gwdescr.h gwcatalog.h INCLUDES = \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/src \ @GTK_CFLAGS@ \ -D${HOST_OS} noinst_LIBRARIES = libgwplugins.a libgwplugins_a_SOURCES = \ gwcatalog.h \ gwdescr.h \ gwplugininfo.c gwplugininfo.h EXTRA_DIST = $(SOURCES) libgwplugins_a_LIBADD = gwhere-0.2.3/src/plugins/gwdescr.h0000744000175000017500000000653710241213571015526 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * \file gwdescr.h * \brief This is the interface specification of description plugins.\n * A description plugin \e MUST implements the following functions in order to be * used by GWhere as plugin. * * \author Sébastien LECACHEUR * \version 1.0 * \date 2000-2005 */ #ifndef GW_PLUGINS_DESCR_H #define GW_PLUGINS_DESCR_H /*! * \brief The function get the author of the plugin. * \return The author name. * \warning This function is needed. */ typedef gchar* (*func_get_author_t)(void); /*! * \brief The function get some information about the plugin. * \return The information. * \warning This function is needed. */ typedef gchar* (*func_get_info_t)(void); /*! * \brief The function get some help about the plugin. * \return The help. * \warning This function is needed. */ typedef gchar* (*func_get_help_t)(void); /*! * \brief The function get a list for file extention supported by the plugin. * \return The file extensions list separated by "|". * \warning This function is optional, but it \e MUST implemented with func_get_file_descr_t. */ typedef gchar* (*func_get_allowed_ext_t)(void); /*! * \brief The function get a list for file name supported by the plugin. * \return The file name list separated by "|". * \warning This function is optional, but it \e MUST implemented with func_get_files_descr_t * or func_get_parent_descr_t. */ typedef gchar* (*func_get_allowed_name_t)(void); /*! * \brief The function get the file description. * \param file_path File path to make description. * \param mode Used mode to build description. * \return The file description. * \warning This function is optional, but it is used only if func_get_allowed_ext_t is * implemented. */ typedef gchar* (*func_get_file_descr_t)(const char* file_path, const char* mode); /*! * \brief The function get the files description. * \param file_path File path to make description. * \param mode Used mode to build description. * \return All the files description. * \warning This function is optional, but it is used only if func_get_allowed_name_t is * implemented. */ typedef gchar*** (*func_get_files_descr_t)(const char* file_path, const char* mode); /*! * \brief The function get the parent file description. * \param file_path File path to make description. * \param mode Used mode to build description. * \return The parent file description. * \warning This function is optional, but it is used only if func_get_allowed_name_t is * implemented. */ typedef gchar* (*func_get_parent_descr_t)(const char* file_path, const char* mode); #endif gwhere-0.2.3/src/plugins/gwcatalog.h0000744000175000017500000004325010244701653016037 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * \file gwcatalog.h * \brief This is the interface specification of catalog plugins.\n * A catalog plugin \e MUST implements the following functions in order to be * used by GWhere as plugin. * * \author Sébastien LECACHEUR * \version 1.0 * \date 2000-2005 */ #ifndef GW_PLUGINS_CATALOG_H #define GW_PLUGINS_CATALOG_H #include "db/gwdb.h" #include "gwplugininfo.h" /*! * \brief A type definition for the catalog plugin functions.\n * This type definition is used by all the following functions. */ typedef struct gw_catalog_plugin_s GWCatalogPlugin; /*! * \brief Returns all the catalog plugin information. * \return The new allocated GWPluginInfo object. It \e MUST be * free with the gw_plugin_info_free function. */ typedef GWPluginInfo* (*func_gw_plugin_get_info_t)(void); /*! * \brief Creates a new catalog and returns the associated context. * \param plugin The plugin to use in order to create the catalog. * \param path The catalog path where to create the catalog. * \param mode The used mode for creation. * \return The new allocated GWDBContext object. It \e MUST be free * with the _gw_db_context_free function after calling the * func_gw_db_catalog_close_t function. Returns NULL if an error * occured. */ typedef GWDBContext* (*func_gw_db_catalog_create_t)(GWCatalogPlugin* plugin, const gchar* path, const gchar* mode); /*! * \brief Opens an existing catalog and returns the associated context. * \param plugin The plugin to use in order to open the catalog. * \param path The catalog path to open. * \param mode The used mode for opening. * \return The new allocated GWDBContext object. It \e MUST be free * with the _gw_db_context_free function after calling the * func_gw_db_catalog_close_t function. Returns NULL if an error * occured. */ typedef GWDBContext* (*func_gw_db_catalog_open_t)(GWCatalogPlugin* plugin, const gchar* path, const gchar* mode); /*! * \brief Saves the corresponding catalog of the given context. * \param context The context of the catalog to save. * \return 0 if the catalog is saved or if no need to be saved, * otherwise returns -1. */ typedef gint (*func_gw_db_catalog_save_t)(GWDBContext* context); /*! * \brief Closes the given context.\n * It is used in order to free internal and private allocated objects * by the plugin. * \param context The context to close. * \return 0 if the context was correctly closed otherwise returns * -1. * \warning This function don't free the GWDBContext object. */ typedef gint (*func_gw_db_catalog_close_t)(GWDBContext* context); /*! * \brief Returns the catalog information. * \param context The context to get catalog information. * \return A new allocated GWDBCatalog object otherwise returns NULL. * \warning The returned GWDBCatalog \e MUST be freed with the * gw_db_catalog_free function. */ typedef GWDBCatalog* (*func_gw_db_catalog_get_db_catalog_t)(GWDBContext* context); /*! * \brief Returns the disk information. * \param context The context to get disk information. * \param ref The disk primary key to get information. * \return A new allocated GWDBDisk object otherwise returns NULL. * \warning The returned GWDBDisk \e MUST be freed with the * gw_db_disk_free function. */ typedef GWDBDisk* (*func_gw_db_catalog_get_db_disk_t)(GWDBContext* context, GWDBDiskPK ref); /*! * \brief Returns the file information. * \param context The context to get file information. * \param ref The file primary key to get information. * \return A new allocated GWDBFile object otherwise returns NULL. * \warning The returned GWDBFile \e MUST be freed with the * gw_db_file_free function. */ typedef GWDBFile* (*func_gw_db_catalog_get_db_file_t)(GWDBContext* context, GWDBFilePK ref); /*! * \brief Returns the category information. * \param context The context to get category information. * \param ref The category primary key to get information. * \return A new allocated GWDBCategory object otherwise returns NULL. * \warning The returned GWDBCategory \e MUST be free with the * gw_db_category_free function. */ typedef GWDBCategory* (*func_gw_db_catalog_get_db_category_t)(GWDBContext* context, GWDBCategoryPK ref); /*! * \brief Returns all the categories information. * \param context The context to get all categories information. * \return New allocated array of GWDBCategory objects otherwise returns NULL. * The array ends with NULL pointer. * \warning All the returned GWDBCategory objects \e MUST be freed with the * gw_db_category_free function and the returned array \e MUST be freed with * the g_free function. */ typedef GWDBCategory** (*func_gw_db_catalog_get_db_categories_t)(GWDBContext* context); /*! * \brief Returns all the disks information. * \param context The context to get all disks information. * \return New allocated array of GWDBDisk objects otherwise returns NULL. * The array ends with NULL pointer. * \warning All the returned GWDBDisk objects \e MUST be freed with the * gw_db_disk_free function and the returned array \e MUST be freed with * the g_free function. */ typedef GWDBDisk** (*func_gw_db_catalog_get_db_disks_t)(GWDBContext* context); /*! * \brief Returns all the root files information of the given disk. * \param context The context to get all root files information. * \param ref The disk primary key to get all root files information. * \return New allocated array of GWDBFile objects otherwise returns NULL. * The array ends with NULL pointer. * \warning All the returned GWDBFile objects \e MUST be freed with the * gw_db_file_free function and the returned array \e MUST be freed with * the g_free function. */ typedef GWDBFile** (*func_gw_db_disk_get_db_files_t)(GWDBContext* context, GWDBDiskPK ref); /*! * \brief Returns all the children files information of the given file. * \param context The context to get all children files information. * \param ref The file primary key to get all children files information. * \return New allocated array of GWDBFile objects otherwise returns NULL. * The array ends with NULL pointer. * \warning All the returned GWDBFile objects \e MUST be freed with the * gw_db_file_free function and the returned array \e MUST be freed with * the g_free function. */ typedef GWDBFile** (*func_gw_db_file_get_db_files_t)(GWDBContext* context, GWDBFilePK ref); /*! * \brief Returns the disk information of the given file. * \param context The context to get the disk information. * \param ref The file primary key to get the disk information. * \return A new allocated GWDBDisk object otherwise returns NULL. * \warning The returned GWDBDisk object \e MUST be freed with the * gw_db_disk_free function. */ typedef GWDBDisk* (*func_gw_db_file_get_db_disk_t)(GWDBContext* context, GWDBFilePK ref); /*! * \brief Returns the parent file information of the given file. * \param context The context to get the parent file information. * \param ref The file primary key to get the parent file information. * \return A new allocated GWDBFile object otherwise returns NULL. * \warning The returned GWDBFile object \e MUST be freed with the * gw_db_file_free function. */ typedef GWDBFile* (*func_gw_db_file_get_parent_db_file_t)(GWDBContext* context, GWDBFilePK ref); /*! * \brief Adds the given category to the catalog. * \param context The context to add category. * \param category The category object to add. * \return The category primary key otherwise returns NULL. * \warning The given GWDBCategory object \e MUST be freed with the * gw_db_category_free function. * \warning The new primary key of the given object is setted. */ typedef GWDBCategoryPK (*func_gw_db_catalog_add_db_category_t)(GWDBContext* context, GWDBCategory* category); /*! * \brief Adds the given disk to the catalog. * \param context The context to add disk. * \param disk The disk object to add. * \return The disk primary key otherwise returns NULL. * \warning The given GWDBDisk object \e MUST be freed with the * gw_db_disk_free function. * \warning The new primary key of the given object is setted. */ typedef GWDBDiskPK (*func_gw_db_catalog_add_db_disk_t)(GWDBContext* context, GWDBDisk* disk); /*! * \brief Adds the given file to the root of given disk. * \param context The context to add file. * \param ref The disk primary key where to add file. * \param file The file object to add. * \return The file primary key otherwise returns NULL. * \warning The given GWDBFile object \e MUST be freed with the * gw_db_file_free function. * \warning The new primary key of the given object is setted. */ typedef GWDBFilePK (*func_gw_db_disk_add_db_file_t)(GWDBContext* context, GWDBDiskPK ref, GWDBFile* file); /*! * \brief Adds the given file to the given parent file. * \param context The context to add file. * \param ref The parent file primary key where to add file. * \param file The file object to add. * \return The file primary key otherwise returns NULL. * \warning The given GWDBFile object \e MUST be freed with the * gw_db_file_free function. * \warning The new primary key of the given object is setted. */ typedef GWDBFilePK (*func_gw_db_file_add_db_file_t)(GWDBContext* context, GWDBFilePK ref, GWDBFile* file); /*! * \brief Removes the given category from the catalog. * \param context The context to remove category. * \param ref The category primary key to remove. * \return 0 if the category was removed otherwise returns -1. */ typedef gint (*func_gw_db_catalog_remove_db_category_t)(GWDBContext* context, GWDBCategoryPK ref); /*! * \brief Removes the given disk and all his files from the catalog. * \param context The context to remove disk. * \param ref The disk primary key to remove. * \return 0 if the disk and all his files were removed otherwise * returns -1. */ typedef gint (*func_gw_db_catalog_remove_db_disk_t)(GWDBContext* context, GWDBDiskPK ref); /*! * \brief Removes the given file and all his sub-files from the catalog. * \param context The context to remove file. * \param ref The file primary key to remove. * \return 0 if the file and all his sub-files were removed otherwise * returns -1. */ typedef gint (*func_gw_db_catalog_remove_db_file_t)(GWDBContext* context, GWDBFilePK ref); /*! * \brief Updates the given catalog. * \param context The context to update catalog. * \param catalog The catalog object to update. * \return O if the catalog was updated otherwise returns -1. * \warning The given GWDBCatalog \e MUST be freed with the * gw_db_catalog_free function. */ typedef gint (*func_gw_db_catalog_update_t)(GWDBContext* context, GWDBCatalog* catalog); /*! * \brief Updates the given category. * \param context The context to update category. * \param category The category object to update. * \return 0 if the category was updated otherwise returns -1. * \warning The given GWDBCategory \e MUST be freed with the * gw_db_category_free function. */ typedef gint (*func_gw_db_category_update_t)(GWDBContext* context, GWDBCategory* category); /*! * \brief Updates the given disk. * \param context The context to update disk. * \param disk The disk object to update. * \return 0 if the disk was updated otherwise returns -1. * \warning The given GWDBDisk \e MUST be freed with the * gw_db_disk_free function. */ typedef gint (*func_gw_db_disk_update_t)(GWDBContext* context, GWDBDisk* disk); /*! * \brief Updates the given file. * \param context The context to update file. * \param file The file object to update. * \return 0 if the file was updated otherwise returns -1. * \warning The given GWDBFile \e MUST be freed with the * gw_db_file_free funtion. */ typedef gint (*func_gw_db_file_update_t)(GWDBContext* context, GWDBFile* file); /* Can be optionals functions ? */ /*! * \brief Returns the number of files in the catalog. * \param context The context to get number of files. * \return The number of files otherwise returns 0. * \warning The number of files does not include folders but includes * all the "." and ".." files. */ typedef glong (*func_gw_db_catalog_get_nb_db_files_t)(GWDBContext* context); /*! * \brief Returns the number of folders and sub-folders in the catalog. * \param context The context to get number of folders. * \return The number of folders and sub-folders otherwise returns * 0. * \todo Rename this function. */ typedef glong (*func_gw_db_catalog_get_nb_db_folders_t)(GWDBContext* context); /*! * \brief Returns the number of disks in the catalog. * \param context The context to get number of disks. * \return The number of disks otherwise returns 0. */ typedef gint (*func_gw_db_catalog_get_nb_db_disks_t)(GWDBContext* context); /*! * \brief Returns the number of files in the given disk. * \param context The context to get number of files. * \param ref The disk primary key to get number of files. * \return The number of files otherwise returns * 0. * \warning The number of files does not include folders but includes * all the "." and ".." files. */ typedef glong (*func_gw_db_disk_get_nb_db_files_t)(GWDBContext* context, GWDBDiskPK ref); /*! * \brief Returns the number of folders and sub-folders in the given disk. * \param context The context to get number of folders. * \param ref The disk primary key to get number of folders. * \return The number of folders and sub-folders otherwise returns * 0. * \todo Rename this function. */ typedef glong (*func_gw_db_disk_get_nb_db_folders_t)(GWDBContext* context, GWDBDiskPK ref); /* Optionals functions */ typedef guint64 (*func_gw_db_catalog_get_capacity_t)(GWDBContext*);// sum on all the gw_db_disk_get_capacity() typedef guint64 (*func_gw_db_catalog_get_full_t)(GWDBContext*);// sum on all the gw_db_disk_get_full() typedef guint64 (*func_gw_db_catalog_get_free_t)(GWDBContext*);// sum on all the gw_db_disk_get_free() typedef GWDBCategory* (*func_gw_db_catalog_get_db_category_by_index_t)(GWDBContext*, gint);// gw_db_category_get_index(gw_db_catalog_get_db_categories()) typedef GWDBCategory* (*func_gw_db_catalog_get_db_category_by_name_t)(GWDBContext*, gchar*);// gw_db_category_get_name(gw_db_catalog_get_db_categories()) typedef GWDBDisk* (*func_gw_db_catalog_get_db_disk_by_name_t)(GWDBContext*, gchar*);// gw_db_disk_get_name(gw_db_catalog_get_db_disks()) typedef GWDBFile* (*func_gw_db_disk_get_db_file_by_name_t)(GWDBContext*, GWDBDiskPK, gchar*);// gw_db_file_get_name(gw_db_disk_get_db_files()) typedef GWDBFile* (*func_gw_db_file_get_db_file_by_name_t)(GWDBContext*, GWDBFilePK, gchar*);// gw_db_file_get_name(gw_db_file_get_db_files()) typedef gchar* (*func_gw_db_file_get_location_t)(GWDBContext*, GWDBFilePK);// while(gw_db_file_get_parent_db_file()) struct gw_catalog_plugin_s { func_gw_plugin_get_info_t gw_plugin_get_info; func_gw_db_catalog_create_t gw_db_catalog_create; func_gw_db_catalog_open_t gw_db_catalog_open; func_gw_db_catalog_save_t gw_db_catalog_save; func_gw_db_catalog_close_t gw_db_catalog_close; func_gw_db_catalog_get_db_catalog_t gw_db_catalog_get_db_catalog; func_gw_db_catalog_get_db_category_t gw_db_catalog_get_db_category; func_gw_db_catalog_get_db_disk_t gw_db_catalog_get_db_disk; func_gw_db_catalog_get_db_file_t gw_db_catalog_get_db_file; func_gw_db_catalog_get_db_categories_t gw_db_catalog_get_db_categories; func_gw_db_catalog_get_db_disks_t gw_db_catalog_get_db_disks; func_gw_db_disk_get_db_files_t gw_db_disk_get_db_files; func_gw_db_file_get_db_files_t gw_db_file_get_db_files; func_gw_db_file_get_db_disk_t gw_db_file_get_db_disk; func_gw_db_file_get_parent_db_file_t gw_db_file_get_parent_db_file; func_gw_db_catalog_add_db_category_t gw_db_catalog_add_db_category; func_gw_db_catalog_add_db_disk_t gw_db_catalog_add_db_disk; func_gw_db_disk_add_db_file_t gw_db_disk_add_db_file; func_gw_db_file_add_db_file_t gw_db_file_add_db_file; func_gw_db_catalog_remove_db_category_t gw_db_catalog_remove_db_category; func_gw_db_catalog_remove_db_disk_t gw_db_catalog_remove_db_disk; func_gw_db_catalog_remove_db_file_t gw_db_catalog_remove_db_file; func_gw_db_catalog_update_t gw_db_catalog_update; func_gw_db_category_update_t gw_db_category_update; func_gw_db_disk_update_t gw_db_disk_update; func_gw_db_file_update_t gw_db_file_update; func_gw_db_catalog_get_nb_db_files_t gw_db_catalog_get_nb_db_files; func_gw_db_catalog_get_nb_db_folders_t gw_db_catalog_get_nb_db_folders; func_gw_db_catalog_get_nb_db_disks_t gw_db_catalog_get_nb_db_disks; func_gw_db_disk_get_nb_db_files_t gw_db_disk_get_nb_db_files; func_gw_db_disk_get_nb_db_folders_t gw_db_disk_get_nb_db_folders; func_gw_db_catalog_get_capacity_t gw_db_catalog_get_capacity; func_gw_db_catalog_get_full_t gw_db_catalog_get_full; func_gw_db_catalog_get_free_t gw_db_catalog_get_free; func_gw_db_catalog_get_db_category_by_index_t gw_db_catalog_get_db_category_by_index; func_gw_db_catalog_get_db_category_by_name_t gw_db_catalog_get_db_category_by_name; func_gw_db_catalog_get_db_disk_by_name_t gw_db_catalog_get_db_disk_by_name; func_gw_db_disk_get_db_file_by_name_t gw_db_disk_get_db_file_by_name; func_gw_db_file_get_db_file_by_name_t gw_db_file_get_db_file_by_name; func_gw_db_file_get_location_t gw_db_file_get_location; }; #endif gwhere-0.2.3/src/plugins/catalog/0000755000175000017500000000000010506575517015334 5ustar bartbartgwhere-0.2.3/src/plugins/catalog/gwcatalog/0000755000175000017500000000000010506575520017276 5ustar bartbartgwhere-0.2.3/src/plugins/catalog/gwcatalog/Makefile.am0000744000175000017500000000102010247433514021322 0ustar bartbartlibdir = $(exec_prefix)/share/${PACKAGE}/plugins/catalog lib_LTLIBRARIES = libgwplugincataloggwcatalog.la libgwplugincataloggwcatalog_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugincataloggwcatalog_la_SOURCES = gwcatalog.c INCLUDES = \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/src \ @GTK_CFLAGS@ libgwplugincataloggwcatalog_la_LIBADD = \ @top_srcdir@/src/plugins/libgwplugins.a \ @top_srcdir@/src/db/libgwdb.a \ @top_srcdir@/src/tools/libgwtools.a \ @top_srcdir@/src/data/libgwdata.a gwhere-0.2.3/src/plugins/catalog/gwcatalog/Makefile.win0000744000175000017500000000270310240240151021515 0ustar bartbart# Project: pluginscataloggw # Makefile created for GWhere CC = gcc.exe WINDRES = windres.exe RES = OBJ = gwcatalog.o $(RES) BIN = ..\libgwcatalog.dll LIBS = $(GTKLIBS) -LC:/MINGW/lib -LC:/MINGW/mingw_extra/lib -LC:/GTK/lib $(GWLIBS) -mno-cygwin -fnative-struct -mno-cygwin -fnative-struct -lmingwex --export-all-symbols --add-stdcall-alias -lmingwex -lcrtdll -lzdll -lws2_32 -lregex -lintl GTKLIBS = -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv INCS = $(GWINCS) $(GTKINCS) -IC:/MINGW/include -IC:/MINGW/mingw_extra/include -IC:/GTK/include GTKINCS = -IC:/GTK/include/gtk-2.0 -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/atk-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include GWINCS = -I../../.. CFLAGS = $(INCS) -O2 -Wall -fnative-struct -DHAVE_CONFIG_H -DOS_WIN32 -DGTK_ENABLE_BROKEN -s -mwindows .PHONY: clean all: $(BIN) clean: rm -f $(OBJ) $(BIN) DLLWRAP=dllwrap.exe EXPFILE=liblibgwcatalog.exp DEFFILE=liblibgwcatalog.def STATICLIB=liblibgwcatalog.a $(BIN): $(OBJ) $(DLLWRAP) --driver-name $(CC) --output-exp $(EXPFILE) --output-def $(DEFFILE) --implib $(STATICLIB) -o $(BIN) $(OBJ) ..\..\..\tools\libgwtools.a ..\..\..\db\libgwdb.a ..\..\..\plugins\libgwplugins.a ..\..\..\data\gwstringbuffer.o ..\..\..\data\gwsettings.o $(LIBS) $(CFLAGS) gwcatalog.o: gwcatalog.c $(CC) -c gwcatalog.c -o gwcatalog.o $(CFLAGS) gwhere-0.2.3/src/plugins/catalog/gwcatalog/gwcatalog.c0000744000175000017500000015416610247421310021415 0ustar bartbart#include #include #include /* strtol strtoul strtoull */ #include /* strrchr */ #include /* stat */ #include "plugins/gwcatalog.h" #include "data/gwdata.h" #include "tools/gwtools.h" #include "gwsupport.h" #define PROJECT_NAME "GWhere" #if defined ( OS_WIN32) #define FORMAT1_DISK_SHORT "//\n%s:%d:%s:%s:%"##G_GUINT64_FORMAT##":%"##G_GUINT64_FORMAT##":%ld:%s:" #define FORMAT1_DISK_LONG "//\n%s:%d:%s:%s:%"##G_GUINT64_FORMAT##":%"##G_GUINT64_FORMAT##":%ld:%s:%s\n" #define FORMAT1_FILE_SHORT "%s:%s:%s:%s:%ld:%"##G_GUINT64_FORMAT##":%ld:%ld:%ld:" #define FORMAT1_FILE_LONG "%s:%s:%s:%s:%ld:%"##G_GUINT64_FORMAT##":%ld:%ld:%ld:%s\n" #define FORMAT2_DISK_SHORT "//\n%s:%d:%s:%s:%s:%s:%"##G_GUINT64_FORMAT##":%"##G_GUINT64_FORMAT##":%ld:%s:%d:" #define FORMAT2_DISK_LONG "//\n%s:%d:%s:%s:%s:%s:%"##G_GUINT64_FORMAT##":%"##G_GUINT64_FORMAT##":%ld:%s:%d:%s\n" #define FORMAT2_FILE_SHORT "%s:%s:%s:%s:%ld:%"##G_GUINT64_FORMAT##":%ld:%ld:%ld:%d:" #define FORMAT2_FILE_LONG "%s:%s:%s:%s:%ld:%"##G_GUINT64_FORMAT##":%ld:%ld:%ld:%d:%s\n" #else #ifdef __STDC__ #define CONCAT3(x,y,z) x/**/y/**/z/**/ #define CONCAT5(v,w,x,y,z) v/**/w/**/x/**/y/**/z/**/ #else #define CONCAT3(x,y,z) x/**/y/**/z/**/ #define CONCAT5(v,w,x,y,z) v/**/w/**/x/**/y/**/z/**/ #endif #define FORMAT1_DISK_SHORT CONCAT5("//\n%s:%d:%s:%s:%",G_GUINT64_FORMAT,":%",G_GUINT64_FORMAT,":%ld:%s:") #define FORMAT1_DISK_LONG CONCAT5("//\n%s:%d:%s:%s:%",G_GUINT64_FORMAT,":%",G_GUINT64_FORMAT,":%ld:%s:%s\n") #define FORMAT1_FILE_SHORT CONCAT3("%s:%s:%s:%s:%ld:%",G_GUINT64_FORMAT,":%ld:%ld:%ld:") #define FORMAT1_FILE_LONG CONCAT3("%s:%s:%s:%s:%ld:%",G_GUINT64_FORMAT,":%ld:%ld:%ld:%s\n") #define FORMAT2_DISK_SHORT CONCAT5("//\n%s:%d:%s:%s:%s:%s:%",G_GUINT64_FORMAT,":%",G_GUINT64_FORMAT,":%ld:%s:%d:") #define FORMAT2_DISK_LONG CONCAT5("//\n%s:%d:%s:%s:%s:%s:%",G_GUINT64_FORMAT,":%",G_GUINT64_FORMAT,":%ld:%s:%d:%s\n") #define FORMAT2_FILE_SHORT CONCAT3("%s:%s:%s:%s:%ld:%",G_GUINT64_FORMAT,":%ld:%ld:%ld:%d:") #define FORMAT2_FILE_LONG CONCAT3("%s:%s:%s:%s:%ld:%",G_GUINT64_FORMAT,":%ld:%ld:%ld:%d:%s\n") #endif typedef struct { GWDBCatalog *catalog; GList *categories; GNode *tree; gzFile zfile; GWStringBuffer *sb; gchar *mode; }_data; gint gw_db_data_category_free ( GWDBCategory *category, gpointer data) { if ( category != NULL ) { gw_db_category_free ( category); return 0; } return -1; } gboolean g_node_file_free ( GNode *file, gpointer data) { if ( file != NULL) { gw_db_category_remove_file ( gw_db_file_get_category ( file->data)); gw_db_file_free ( file->data); } return FALSE; } gboolean g_node_files_free ( GNode *file, gpointer data) { if ( file != NULL) { g_node_traverse ( file, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, (GNodeTraverseFunc)g_node_file_free, NULL); } return FALSE; } gboolean g_node_disk_free ( GNode *disk, gpointer data) { if ( disk != NULL) { g_node_children_foreach ( disk, G_TRAVERSE_ALL, (GNodeForeachFunc)g_node_files_free, NULL); g_node_unlink ( disk); gw_db_category_remove_disk ( gw_db_disk_get_category ( disk->data)); gw_db_disk_free ( disk->data); g_node_destroy ( disk); } return FALSE; } gboolean g_node_count_files ( GNode *file, gpointer data) { glong *pcount = data; if ( file != NULL) { if ( !gw_db_file_is_directory ( file->data)) { (*pcount)++; } } return FALSE; } gboolean g_node_count_folders ( GNode *file, gpointer data) { glong *pcount = data; if ( file != NULL) { if ( gw_db_file_is_real_directory ( file->data)) { (*pcount)++; } } return FALSE; } GWDBFile* gw_db_file_from_str ( gchar *str, gint file_version, GWDBContext *context) { GWDBFile *file = NULL; gint i = 0, j = 0, begin = 0; gchar *tmp = NULL; GWDBCategory *category = NULL; _data *data = gw_db_context_get_data ( context); if ( (file = gw_db_file_new ( )) != NULL ) { i = 0; begin = i; /* Read the file name. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { if ( str[j] == '\\') { if ( str[j+1] == '#') { str[i++] = ':'; j++; } else if ( str[j+1] == 'n') { str[i++] = '\n'; j++; } else { str[i++] = str[j]; } } else { str[i++] = str[j]; } } if ( begin < i) { if ( (tmp = (gchar*)g_malloc0(sizeof(gchar)*(i-begin+1))) != NULL ) { memcpy(tmp,&str[begin],i-begin); } else { tmp = NULL; } } else { tmp = NULL; } gw_db_file_set_name ( file, tmp); tmp = NULL; i = j + 1; begin = i; /* Read the file rights. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( begin < i) { if ( (tmp = (gchar*)g_malloc0(sizeof(gchar)*(i-begin+1))) != NULL ) { memcpy(tmp,&str[begin],i-begin); } else { tmp = NULL; } } else { tmp = NULL; } if ( tmp != NULL ) { gw_db_file_set_rights_from_gchar ( file, tmp); g_free ( tmp); tmp = NULL; } i = j + 1; begin = i; /* Read the file owner. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( begin < i) { if ( (tmp = (gchar*)g_malloc0(sizeof(gchar)*(i-begin+1))) != NULL ) { memcpy(tmp,&str[begin],i-begin); } else { tmp = NULL; } } else { tmp = NULL; } gw_db_file_set_owner ( file, tmp); i = j + 1; begin = i; /* Read the file group. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( begin < i) { if ( (tmp = (gchar*)g_malloc0(sizeof(gchar)*(i-begin+1))) != NULL ) { memcpy(tmp,&str[begin],i-begin); } else { tmp = NULL; } } else { tmp = NULL; } gw_db_file_set_group ( file, tmp); i = j + 1; begin = i; /* Read the file inode. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( str[j] == ':') { str[j] = '\0'; gw_db_file_set_inode ( file, strtol ( &str[begin], NULL, 10)); } else { tmp = NULL; } i = j + 1; begin = i; /* Read the file size. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( str[j] == ':') { str[j] = '\0'; gw_db_file_set_size ( file, strtoui64 ( &str[begin], NULL, 10)); } else { } i = j + 1; begin = i; /* Read the file cdate. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( str[j] == ':') { str[j] = '\0'; gw_db_file_set_cdate ( file, strtoul ( &str[begin], NULL, 10)); } else { } i = j + 1; begin = i; /* Read the file adate. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( str[j] == ':') { str[j] = '\0'; gw_db_file_set_adate ( file, strtoul ( &str[begin], NULL, 10)); } else { } i = j + 1; begin = i; /* Read the file mdate. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( str[j] == ':') { str[j] = '\0'; gw_db_file_set_mdate ( file, strtoul ( &str[begin], NULL, 10)); } else { if ( file_version == 1) { if ( str[j] == '\0') { gw_db_file_set_mdate ( file, strtoul ( &str[begin], NULL, 10)); } } } if ( file_version == 2) { i = j + 1; begin = i; /* Read the file category. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( str[j] == ':') { str[j] = '\0'; if ( context != NULL ) { category = g_list_nth ( data->categories, strtol ( &str[begin], NULL, 10))->data; gw_db_file_set_category ( file, gw_db_category_get_ref ( category)); gw_db_category_add_file ( category); } } else {} } else {} i = j + 1; begin = i; /* Read the file description. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { if ( str[j] == '\\') { if ( str[j+1] == '#') { str[i++] = ':'; j++; } else if ( str[j+1] == 'n') { str[i++] = '\n'; j++; } else { str[i++] = str[j]; } } else { str[i++] = str[j]; } } if ( begin < i) { if ( (tmp = (gchar*)g_malloc0(sizeof(gchar)*(i-begin+1))) != NULL ) { memcpy(tmp,&str[begin],i-begin); } else { tmp = NULL; } } else { tmp = NULL; } gw_db_file_set_description ( file, tmp); } return file; } GWDBDisk* gw_db_disk_from_str ( gchar *str, gint file_version, GWDBContext *context) { GWDBDisk *disk = NULL; gint i = 0, j = 0, begin = 0; gchar *tmp = NULL; GWDBCategory *category = NULL; _data *data = gw_db_context_get_data ( context); if ( (disk = gw_db_disk_new ( )) != NULL ) { i = 0; begin = i; /* Read the disk name. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { if ( str[j] == '\\') { if ( str[j+1] == '#') { str[i++] = ':'; j++; } else if ( str[j+1] == 'n') { str[i++] = '\n'; j++; } else { str[i++] = str[j]; } } else { str[i++] = str[j]; } } if ( begin < i) { if ( (tmp = (gchar*)g_malloc0(sizeof(gchar)*(i-begin+1))) != NULL ) { memcpy(tmp,&str[begin],i-begin); } else { tmp = NULL; } } else { tmp = NULL; } gw_db_disk_set_name ( disk, tmp); tmp = NULL; i = j + 1; begin = i; /* Read the disk archive number. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( str[j] == ':') { str[j] = '\0'; gw_db_disk_set_num ( disk, strtol ( &str[begin], NULL, 10)); } else { tmp = NULL; } if ( file_version == 1) { } else if ( file_version == 2 ) { i = j + 1; begin = i; /* Read the disk file system name. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { if ( str[j] == '\\') { if ( str[j+1] == '#') { str[i++] = ':'; j++; } else if ( str[j+1] == 'n') { str[i++] = '\n'; j++; } else { str[i++] = str[j]; } } else { str[i++] = str[j]; } } if ( begin < i) { if ( (tmp = (gchar*)g_malloc0(sizeof(gchar)*(i-begin+1))) != NULL ) { memcpy(tmp,&str[begin],i-begin); } else { tmp = NULL; } } else { tmp = NULL; } gw_db_disk_set_fsname ( disk, tmp); tmp = NULL; } if ( file_version == 1) { } else if ( file_version == 2 ) { i = j + 1; begin = i; /* Read the disk access directory. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { if ( str[j] == '\\') { if ( str[j+1] == '#') { str[i++] = ':'; j++; } else if ( str[j+1] == 'n') { str[i++] = '\n'; j++; } else { str[i++] = str[j]; } } else { str[i++] = str[j]; } } if ( begin < i) { if ( (tmp = (gchar*)g_malloc0(sizeof(gchar)*(i-begin+1))) != NULL ) { memcpy(tmp,&str[begin],i-begin); } else { tmp = NULL; } } else { tmp = NULL; } gw_db_disk_set_path ( disk, tmp); tmp = NULL; } i = j + 1; begin = i; /* Read the disk type. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { if ( str[j] == '\\') { if ( str[j+1] == '#') { str[i++] = ':'; j++; } else if ( str[j+1] == 'n') { str[i++] = '\n'; j++; } else { str[i++] = str[j]; } } else { str[i++] = str[j]; } } if ( begin < i) { if ( (file_version==1) && (i-begin>=6) && (memcmp(&str[begin],"CD-ROM",6)==0) ) { /* CD-ROM [ fstype ] */ tmp = g_strdup("iso9660"); } else if ( (tmp = (gchar*)g_malloc0(sizeof(gchar)*(i-begin+1))) != NULL ) { memcpy(tmp,&str[begin],i-begin); } else { tmp = NULL; } } else { tmp = NULL; } //TODO to check the following code.. if ( (i-begin>=6) && (memcmp ( &str[begin], "CD-ROM", 6) == 0) ) { /* CD-ROM [ fstype ] */ gw_db_disk_set_type ( disk, CDROM); } else if ( (i-begin==4) && (memcmp ( &str[begin], "cdfs", 4) == 0) ) { gw_db_disk_set_type ( disk, CDROM); } else if ( (i-begin>2) && (memcmp ( &str[begin], "HD", 2) == 0) ) { gw_db_disk_set_type ( disk, HD); } else if ( (i-begin==6) && (memcmp ( &str[begin], "Floppy", 6) == 0) ) { gw_db_disk_set_type ( disk, FLOPPY); } else if ( (i-begin==3) && (memcmp ( &str[begin], "Zip", 3) == 0) ) { gw_db_disk_set_type ( disk, ZIP_DRIVE); } else if ( (i-begin==3) && (memcmp ( &str[begin], "smb", 3) == 0) ) { gw_db_disk_set_type ( disk, NETWORK_DRIVE); } else if ( (i-begin==4) && (memcmp ( &str[begin], "ntfs", 4) == 0) ) { gw_db_disk_set_type ( disk, HD); } else { if ( (tmp = gw_db_disk_get_fsname ( disk)) != NULL) { if ( strncmp ( "/dev/hd", tmp, 7) == 0 ) { gw_db_disk_set_type ( disk, HD); } else if ( strncmp ("/dev/fd", tmp, 7) == 0 ) { gw_db_disk_set_type ( disk, FLOPPY); } else if ( strncmp ( "/dev/zip", tmp, 8) == 0 ) { gw_db_disk_set_type ( disk, ZIP_DRIVE); } else if ( strncmp ( "\\\\.\\A:\\", tmp, 7) == 0 ) { gw_db_disk_set_type ( disk, FLOPPY); } else if ( strncmp ( "\\\\.\\B:\\", tmp, 7) == 0 ) { gw_db_disk_set_type ( disk, FLOPPY); } else { gw_db_disk_set_type ( disk, NONE); } } else { gw_db_disk_set_type ( disk, NONE); } } if ( begin < i) { if ( (tmp = (gchar*)g_malloc0(sizeof(gchar)*(i-begin+1))) != NULL ) { memcpy(tmp,&str[begin],i-begin); } else { tmp = NULL; } } else { tmp = NULL; } gw_db_disk_set_fstype ( disk, tmp); tmp = NULL; if ( file_version == 1 ) { /* We can guess disk_fsname but not disk_path. */ if ( (i-begin<=6) && (memcmp ( &str[begin], "CD-ROM", 6) == 0) ) { gw_db_disk_set_fsname ( disk, g_strdup ( "/dev/cdrom")); } else if ( (i-begin>2) && (memcmp ( &str[begin], "HD", 2) == 0) ) { gw_db_disk_set_fsname ( disk, g_strdup ( "/dev/hd")); } else if ( (i-begin==6) && (memcmp ( &str[begin], "Floppy", 6) == 0) ) { gw_db_disk_set_fsname ( disk, g_strdup ( "/dev/fd")); } else if ( (i-begin==3) && (memcmp ( &str[begin], "Zip", 3) == 0) ) { gw_db_disk_set_fsname ( disk, g_strdup ( "/dev/zip")); } else { } } i = j + 1; begin = i; /* Read the disk volume name. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { if ( str[j] == '\\') { if ( str[j+1] == '#') { str[i++] = ':'; j++; } else if ( str[j+1] == 'n') { str[i++] = '\n'; j++; } else { str[i++] = str[j]; } } else { str[i++] = str[j]; } } if ( begin < i) { if ( memcmp ( &str[begin], "(null)", 6) != 0 ) { if ( (tmp = (gchar*)g_malloc0(sizeof(gchar)*(i-begin+1))) != NULL ) { memcpy(tmp,&str[begin],i-begin); } else { tmp = NULL; } } else { tmp = NULL; } } else { tmp = NULL; } gw_db_disk_set_volume ( disk, tmp); tmp = NULL; i = j + 1; begin = i; /* Read the disk used space. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( str[j] == ':') { str[j] = '\0'; gw_db_disk_set_full ( disk, strtoui64 ( &str[begin], NULL, 10)); } else {} i = j + 1; begin = i; /* Read the disk free space. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( str[j] == ':') { str[j] = '\0'; gw_db_disk_set_free ( disk, strtoui64 ( &str[begin], NULL, 10)); } else {} i = j + 1; begin = i; /* Read the disk adding date. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( str[j] == ':') { str[j] = '\0'; gw_db_disk_set_date ( disk, strtoul ( &str[begin], NULL, 10)); } else {} i = j + 1; begin = i; /* Read the disk serial number. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { if ( str[j] == '\\') { if ( str[j+1] == '#') { str[i++] = ':'; j++; } else if ( str[j+1] == 'n') { str[i++] = '\n'; j++; } else { str[i++] = str[j]; } } else { str[i++] = str[j]; } } if ( begin < i) { if ( memcmp ( &str[begin], "(null)", 6) != 0 ) { if ( (tmp = (gchar*)g_malloc0(sizeof(gchar)*(i-begin+1))) != NULL ) { memcpy(tmp,&str[begin],i-begin); } else { tmp = NULL; } } else { tmp = NULL; } } else { tmp = NULL; } gw_db_disk_set_serial ( disk, tmp); tmp = NULL; if ( file_version == 2) { i = j + 1; begin = i; /* Read the disk category. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { i++; } if ( str[j] == ':') { str[j] = '\0'; if ( context != NULL ) { category = g_list_nth ( data->categories, strtol ( &str[begin], NULL, 10))->data; gw_db_disk_set_category ( disk, gw_db_category_get_ref ( category)); gw_db_category_add_disk ( category); } } else {} } else {} i = j + 1; begin = i; /* Read the disk description. */ for ( j = i; ((str[j] != ':') && (str[j] != '\0')); j++ ) { if ( str[j] == '\\') { if ( str[j+1] == '#') { str[i++] = ':'; j++; } else if ( str[j+1] == 'n') { str[i++] = '\n'; j++; } else { str[i++] = str[j]; } } else { str[i++] = str[j]; } } if ( begin < i) { if ( (tmp = (gchar*)g_malloc0(sizeof(gchar)*(i-begin+1))) != NULL ) { memcpy(tmp,&str[begin],i-begin); } else { tmp = NULL; } } else { tmp = NULL; } gw_db_disk_set_description ( disk, tmp); tmp = NULL; } return disk; } gint catalog_load_dir ( GWDBContext *context, GNode *parent, gint version) { _data *data = gw_db_context_get_data ( context); gzFile fic = data->zfile; GWStringBuffer *sb = data->sb; guint ret, compt = 0; gchar *buf = NULL; GWDBFile *file = NULL; GNode *folder = NULL, *fileN = NULL; while ( strcmp ( (buf = gw_zfile_readline_sb ( fic, &sb)), "\\") != 0 ) { if ( strcmp ( buf, "/") == 0 ) { /* Case : is a folder */ compt++; buf = gw_zfile_readline_sb ( fic, &sb); /* Allocates datas structures */ file = gw_db_file_from_str ( buf, version, context); /* Create folder node */ folder = g_node_new ( file); gw_db_file_set_ref ( file, folder); g_node_append ( parent, folder); /* Loads folder with a recursive call */ if ( (ret = catalog_load_dir ( context, folder, version)) == 0) { /* Empty directory */ } } else { /* Case : is a file */ /* Allocates datas structure */ file = gw_db_file_from_str ( buf, version, context); /* Adds to files list the file informations */ fileN = g_node_new ( file); gw_db_file_set_ref ( file, fileN); g_node_append ( parent, fileN); } } return compt; } gint catalog_load_disk ( GWDBContext *context, GNode *parent, gint version) { _data *data = gw_db_context_get_data ( context); gzFile fic = data->zfile; GWStringBuffer *sb = data->sb; guint ret, compt = 0; gchar *buf = NULL; GWDBFile *file = NULL; GNode *folder = NULL, *fileN = NULL; while ( strcmp ( (buf = gw_zfile_readline_sb ( fic, &sb)), "\\") != 0 ) { if ( strcmp ( buf, "/") == 0 ) { /* Case : is a folder */ compt++; buf = gw_zfile_readline_sb ( fic, &sb); /* Allocates datas structure */ file = gw_db_file_from_str ( buf, version, context); /* Creates folder node */ folder = g_node_new ( file); gw_db_file_set_ref ( file, folder); g_node_append ( parent, folder); /* Loads folder */ if ( (ret = catalog_load_dir ( context, folder, version)) == 0) { /* Empty directory */ } } else { /* Case : is a file */ /* Allocates datas structure */ file = gw_db_file_from_str ( buf, version, context); /* Adds to files list the file informations */ fileN = g_node_new ( file); gw_db_file_set_ref ( file, fileN); g_node_append ( parent, fileN); } } return compt; } gint catalog_load ( GWDBContext *context, gint version) { _data *data = NULL; GNode *tree = NULL; GNode *parent = NULL; gchar *buf = NULL; GWStringBuffer *sb = NULL; gchar **tmp = NULL; GWDBDisk *disk = NULL; gzFile fic; gchar *tmp_buf = NULL; GWDBCatalog *catalog = NULL; GWDBCategory *category = NULL; GWCatalogPlugin *plugin = NULL; if ( context != NULL ) { data = gw_db_context_get_data ( context); plugin = gw_db_context_get_plugin ( context); catalog = data->catalog; /* Creates root node. */ tree = g_node_new ( NULL); data->tree = tree; sb = data->sb; fic = data->zfile; /* Loads catalog informations */ if ( version == 1 ) { } else if ( version == 2 ) { if ( (buf = gw_zfile_readline_sb ( fic, &sb)) != NULL ) { tmp = g_strsplit ( buf, ":", 0); if ( tmp != NULL ) { /* Reads catalog name */ if ( tmp[0] != NULL) { if ( strcmp ( tmp[0], "" ) != 0 ) { /* Case : the catalog gets a name */ tmp_buf = gw_file_to_str ( tmp[0]); gw_db_catalog_set_name ( catalog, tmp_buf); } else { /* Case : default catalog name is file name */ } } /* Reads catalog description */ if ( tmp[1] != NULL ) { if ( strcmp ( tmp[1], "" ) != 0 ) { tmp_buf = gw_file_to_str ( tmp[1]); gw_db_catalog_set_description ( catalog, tmp_buf); } } g_strfreev ( tmp); } } } while ( (buf = gw_zfile_readline_sb ( fic, &sb)) != NULL ) { if ( strcmp ( buf, "//") == 0 ) { gw_zfile_readline_sb ( fic, &sb); /* Creates a disk node */ disk = gw_db_disk_from_str ( buf, version, context); g_node_append ( tree, parent = g_node_new ( disk)); gw_db_disk_set_ref ( disk, parent); /* Loads disk */ if ( catalog_load_disk ( context, parent, version) == -1 ) { return -1; } } else { if ( version == 1) { /* Loads descriptions */ } else if ( version == 2 ) { /* Loads categories */ tmp = g_strsplit ( buf, ":", 2); if ( tmp[0] != NULL ) { category = gw_db_category_new ( ); tmp_buf = gw_file_to_str ( tmp[0]); gw_db_category_set_name ( category, tmp_buf); if ( tmp[1] != NULL ) { if ( strcmp ( tmp[1], "" ) != 0 ) { tmp_buf = gw_file_to_str ( tmp[1]); gw_db_category_set_description ( category, tmp_buf); } } plugin->gw_db_catalog_add_db_category ( context, category); gw_db_category_free ( category); } g_strfreev ( tmp); } } } } else {} return 0; } gint catalog_save_file_dir_2 ( GWDBContext *context, GNode *parent, gzFile fic, GWStringBuffer *buf[2]) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); GWDBFile *file = NULL; GNode *node = NULL; gchar *tmp[3]; gint i = 0, nb = 0; GWDBCategory *category = NULL; /* Gets folder files list */ nb = g_node_n_children ( parent); for ( i = 0; i < nb; i++) { node = g_node_nth_child ( parent, i); file = node->data; /* Writes file informations */ /* Checks if it's a folder different from "." and ".." */ if ( gw_db_file_is_real_directory ( file) == TRUE ) { if ( gzputs ( fic, "/\n") == -1 ) { return -1; } } /* Gets file informations */ tmp[0] = gw_str_to_file_strb ( gw_db_file_get_name ( file), buf[0]); tmp[1] = gw_str_to_file_strb ( gw_db_file_get_description ( file), buf[1]); tmp[2] = gw_db_file_get_rights_to_gchar ( file); category = plugin->gw_db_catalog_get_db_category ( context, gw_db_file_get_category ( file)); if ( gzprintf ( fic, FORMAT2_FILE_LONG, tmp[0], tmp[2], gw_db_file_get_owner ( file), gw_db_file_get_group ( file), gw_db_file_get_inode ( file), gw_db_file_get_size ( file), gw_db_file_get_cdate ( file), gw_db_file_get_adate ( file), gw_db_file_get_mdate ( file), (gw_db_category_get_index ( category)==-1?0:gw_db_category_get_index ( category)), tmp[1]) == 0 ) { gw_db_category_free ( category); return -1; } gw_db_category_free ( category); if ( gw_db_file_is_real_directory ( file) == TRUE ) { /* Saves all subfolders */ catalog_save_file_dir_2 ( context, node, fic, buf); if ( gzputs ( fic, "\\\n") == -1 ) { return -1; } } } return 0; } gint catalog_save_file_disk_2 ( GWDBContext *context, GWDBDisk *disk, gint fic, GWStringBuffer **buf) { return -1; } gint catalog_save_file_version_2 ( GWDBContext *context) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); gzFile fic; GWDBCatalog *catalog = NULL; GWDBDisk *disk = NULL; GList *categories; gint size = 0; gchar *tmp[7]; GWStringBuffer *strbuf[2]; _data *data = gw_db_context_get_data ( context); GNode *tree = NULL, *node = NULL; gint i = 0, nb = 0; gchar *fullfiletmpname = NULL; GWDBCategory *category = NULL; #if GW_DEBUG_TIME time_t begin; time ( &begin); #endif catalog = data->catalog; /* Makes a save in a tempory file to prevent database lost in case of crash. */ fullfiletmpname = g_strconcat ( gw_db_catalog_get_db_name ( catalog), ".tmp", NULL); /* Creates file */ if ( (fic = gzopen ( fullfiletmpname, data->mode)) == NULL ) { return -1; } /* Writes file version */ if ( gzprintf ( fic, "%s:%s:2\n", PROJECT_NAME, VERSION) == 0 ) { if ( gzclose ( fic) != Z_OK) { } return -1; } /* Writes catalog informations */ tmp[0] = gw_str_to_file ( gw_db_catalog_get_name ( catalog)); tmp[1] = gw_str_to_file ( gw_db_catalog_get_description ( catalog)); if ( gzprintf ( fic, "%s:%s\n", (tmp[0]==NULL)?(gw_db_catalog_get_name ( catalog)==NULL?"":gw_db_catalog_get_name ( catalog)):tmp[0], (tmp[1]==NULL)?(gw_db_catalog_get_description ( catalog)==NULL?"":gw_db_catalog_get_description ( catalog)):tmp[1]) == 0 ) { if ( gzclose ( fic) != Z_OK ) { } if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} return -1; } if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} /* Writes catelories list */ if ( (categories = data->categories) != NULL) { /* Had to save categories */ /* Puts one catagory by line */ categories = g_list_first ( categories); size = g_list_length ( categories); for ( i = 1; i < size; i++ ) { categories = g_list_next ( categories); tmp[0] = gw_str_to_file ( gw_db_category_get_name ( categories->data)); tmp[1] = gw_str_to_file ( gw_db_category_get_description ( categories->data)); if ( gzprintf ( fic, "%s:%s\n", (tmp[0]==NULL)?(gw_db_category_get_name ( categories->data)==NULL?"":gw_db_category_get_name ( categories->data)):tmp[0], (tmp[1]==NULL)?(gw_db_category_get_description ( categories->data)==NULL?"":gw_db_category_get_description ( categories->data)):tmp[1]) == 0 ) { if ( gzclose ( fic) != Z_OK ) { } if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} return -1; } if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} } } else { if ( gzputs ( fic, "\n") == -1 ) { if ( gzclose ( fic) != Z_OK ) { } return -1; } } strbuf[0] = gw_string_buffer_new ( ); strbuf[1] = gw_string_buffer_new ( ); /* Saves all disks */ tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb; i++) { node = g_node_nth_child ( tree, i); disk = (GWDBDisk*)node->data; tmp[0] = gw_str_to_file ( gw_db_disk_get_name ( disk)); tmp[1] = gw_str_to_file ( gw_db_disk_get_fsname ( disk)); tmp[2] = gw_str_to_file ( gw_db_disk_get_path ( disk)); tmp[3] = gw_str_to_file ( gw_db_disk_get_fstype ( disk)); tmp[4] = gw_str_to_file ( gw_db_disk_get_volume ( disk)); tmp[5] = gw_str_to_file ( gw_db_disk_get_serial ( disk)); tmp[6] = gw_str_to_file ( gw_db_disk_get_description ( disk)); category = plugin->gw_db_catalog_get_db_category ( context, gw_db_disk_get_category ( disk)); if ( gzprintf ( fic, FORMAT2_DISK_LONG, (tmp[0]==NULL)?gw_db_disk_get_name ( disk):tmp[0], gw_db_disk_get_num ( disk), (tmp[1]==NULL)?(gw_db_disk_get_fsname ( disk)==NULL?"":gw_db_disk_get_fsname ( disk)):tmp[1], (tmp[2]==NULL)?(gw_db_disk_get_path ( disk)==NULL?"":gw_db_disk_get_path ( disk)):tmp[2], (tmp[3]==NULL)?(gw_db_disk_get_fstype ( disk)==NULL?"":gw_db_disk_get_fstype ( disk)):tmp[3], (tmp[4]==NULL)?(gw_db_disk_get_volume ( disk)==NULL?"":gw_db_disk_get_volume ( disk)):tmp[4], gw_db_disk_get_full ( disk), gw_db_disk_get_free ( disk), gw_db_disk_get_date ( disk), (tmp[5]==NULL)?(gw_db_disk_get_serial ( disk)==NULL?"":gw_db_disk_get_serial ( disk)):tmp[5], (gw_db_category_get_index ( category)==-1)?0:gw_db_category_get_index ( category), (tmp[6]==NULL)?(gw_db_disk_get_description ( disk)==NULL?"":gw_db_disk_get_description ( disk)):tmp[6]) == 0 ) { if ( gzclose ( fic) != Z_OK ) { } gw_db_category_free ( category); if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} if ( tmp[2] != NULL ) {g_free ( tmp[2]);tmp[2] = NULL;} if ( tmp[3] != NULL ) {g_free ( tmp[3]);tmp[3] = NULL;} if ( tmp[4] != NULL ) {g_free ( tmp[4]);tmp[4] = NULL;} if ( tmp[5] != NULL ) {g_free ( tmp[5]);tmp[5] = NULL;} if ( tmp[6] != NULL ) {g_free ( tmp[6]);tmp[6] = NULL;} gw_string_buffer_free ( strbuf[0]); gw_string_buffer_free ( strbuf[1]); return -1; } gw_db_category_free ( category); if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} if ( tmp[2] != NULL ) {g_free ( tmp[2]);tmp[2] = NULL;} if ( tmp[3] != NULL ) {g_free ( tmp[3]);tmp[3] = NULL;} if ( tmp[4] != NULL ) {g_free ( tmp[4]);tmp[4] = NULL;} if ( tmp[5] != NULL ) {g_free ( tmp[5]);tmp[5] = NULL;} if ( tmp[6] != NULL ) {g_free ( tmp[6]);tmp[6] = NULL;} /* Recursive call to catalog_save_file_dir_2 */ catalog_save_file_dir_2 ( context, node, fic, strbuf); if ( gzputs ( fic, "\\\n") == -1 ) { if ( gzclose ( fic) != Z_OK ) { } gw_string_buffer_free ( strbuf[0]); gw_string_buffer_free ( strbuf[1]); return -1; } } gw_string_buffer_free ( strbuf[0]); gw_string_buffer_free ( strbuf[1]); /* Closes file */ if ( gzclose ( fic) == -1 ) { return -1; } /* Deteles the previous version of the catalog file before renames the temporary files with the catalog file name because rename() cannot eraze a file. */ unlink ( gw_db_catalog_get_db_name ( catalog)); rename ( fullfiletmpname, gw_db_catalog_get_db_name ( catalog)); /* Catalog informations were saved */ gw_db_catalog_set_ismodified ( catalog, FALSE); #if GW_DEBUG_TIME gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, _( "Elapsed time to save the catalog : %d secs"), time ( NULL) - begin); #endif return 0; } gint catalog_save ( GWDBContext *context, gint version) { if ( context != NULL ) { return catalog_save_file_version_2 ( context); } return -1; } GWDBContext * plugin_db_catalog_create ( GWCatalogPlugin *plugin, const gchar *name, const gchar *mode) { GWDBContext *context = NULL; GWDBCatalog *catalog = NULL; GWDBCategory *category = NULL; _data *data = NULL; GNode *tree = NULL; /* Creates a new catalog context. */ context = gw_db_context_new ( ); gw_db_context_set_plugin ( context, plugin); data = (_data*)g_malloc ( sizeof ( _data)); gw_db_context_set_data ( context, data); plugin = gw_db_context_get_plugin ( context); /* Creates a new catalog. */ data->catalog = catalog = gw_db_catalog_new ( ); data->categories = NULL; data->tree = NULL; data->zfile = NULL; data->sb = NULL; data->mode = g_strdup ( mode); category = gw_db_category_new ( ); gw_db_category_set_name ( category, g_strdup ( _( "none"))); plugin->gw_db_catalog_add_db_category ( context, category); gw_db_category_free ( category); gw_db_catalog_set_name ( catalog, g_strdup ( name)); gw_db_catalog_set_short_db_name ( catalog, g_strdup ( name)); /* Creates root node. */ tree = g_node_new ( NULL); data->tree = tree; return context; } GWDBContext * plugin_db_catalog_open ( GWCatalogPlugin *plugin, const gchar* file, const gchar* mode) { GWDBContext *context = NULL; GWDBCatalog *catalog = NULL; GWDBCategory *category = NULL; gzFile zfile; _data *data = NULL; GWStringBuffer *sb = NULL; gchar **tmp = NULL; gchar *buf = NULL; struct stat f_info; gchar *extension = NULL; /* Checks if the given path is valid */ if ( file==NULL || strlen ( file)==0) { return NULL; } /* Checks if the given file extension is really ".ctg" */ extension = strrchr ( file, '.'); if ( extension==NULL || strlen ( extension)!=4 || strcmp(".ctg",extension)!=0) { return NULL; } /* Reads the GWhere file and load all the catalog in memory. */ if ( (zfile = gzopen ( file, "rb")) != NULL ) { context = gw_db_context_new ( ); gw_db_context_set_plugin ( context, plugin); data = (_data*)g_malloc ( sizeof ( _data)); gw_db_context_set_data ( context, data); plugin = gw_db_context_get_plugin ( context); data->catalog = catalog = gw_db_catalog_new ( ); data->mode = g_strdup ( mode); if ( stat ( file, &f_info) != -1 ) { gw_db_catalog_set_size ( catalog, f_info.st_size); } data->categories = NULL; data->tree = NULL; data->zfile = zfile; data->sb = NULL; category = gw_db_category_new ( ); gw_db_category_set_name ( category, g_strdup ( _( "none"))); plugin->gw_db_catalog_add_db_category ( context, category); gw_db_category_free ( category); gw_db_catalog_set_db_name ( catalog, g_strdup ( file)); if ( strrchr ( file, G_DIR_SEPARATOR) != NULL) { gw_db_catalog_set_short_db_name ( catalog, g_strdup ( strrchr ( file, G_DIR_SEPARATOR) + 1)); } else { //TODO impossible?? gw_db_catalog_set_short_db_name ( catalog, g_strdup ( file)); } if ( (buf = gw_zfile_readline_sb ( zfile, &sb)) != NULL ) { data->sb = sb; /* Checks the file version */ tmp = g_strsplit ( buf, ":", 0); if ( strcmp ( tmp[0], PROJECT_NAME) == 0 ) { gw_db_catalog_set_version ( catalog, g_strdup ( tmp[2])); if ( tmp[3] != NULL) { gw_db_catalog_set_program_builder ( catalog, g_strdup ( tmp[3])); } else { gw_db_catalog_set_program_builder ( catalog, g_strconcat ( PROJECT_NAME, " ", tmp[1], NULL)); } switch ( strtol ( tmp[2], NULL, 10)) { case 1: /* Loads the 1st version of GWhere file. */ catalog_load ( context, 1); break; case 2: /* Loads the 2nd version of GWhere file. */ catalog_load ( context, 2); break; default:/* This version is unknown. */ break; } } else {} if ( tmp != NULL ) g_strfreev ( tmp); } else {} if ( sb != NULL) gw_string_buffer_free ( sb); if ( gzclose ( zfile) != Z_OK ) { } gw_db_catalog_set_ismodified ( data->catalog, FALSE); } else {} return context; } gint plugin_db_catalog_save ( GWDBContext *context) { _data *data = NULL; gint result = -1; if ( context != NULL) { data = gw_db_context_get_data ( context); if ( gw_db_catalog_is_modified ( data->catalog) ) { if ( catalog_save ( context, 2)!=-1 ) { result = 0; } else { /* Catalog is not saved. */ } } else { /* Not need to save the catalog. */ result = 0; } } else {} return result; } gint plugin_db_catalog_close ( GWDBContext *context) { _data *data = NULL; GNode *tree = NULL, *node = NULL; gint i = 0, nb = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb; i++ ) { node = g_node_first_child ( tree); if ( node != NULL ) { g_node_disk_free ( node, NULL); } else {} } gw_db_catalog_free ( data->catalog); if ( data->categories != NULL ) { g_list_foreach ( data->categories, (GFunc)gw_db_data_category_free, NULL); g_list_free ( data->categories); } if ( data->mode != NULL ) { g_free ( data->mode); } g_free ( data); return 0; } return 0; } /**/guint64 plugin_db_catalog_get_capacity ( GWDBContext *context) { GWDBDisk* disk = NULL; _data *data = NULL; GNode *tree = NULL; gint i = 0, nb = 0; guint64 capacity = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb; i++ ) { disk = g_node_nth_child ( tree, i)->data; capacity += gw_db_disk_get_capacity ( disk); } } return capacity; }/**/ /**/guint64 plugin_db_catalog_get_full ( GWDBContext *context) { GWDBDisk* disk = NULL; _data *data = NULL; GNode *tree = NULL; gint i = 0, nb = 0; guint64 full = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb; i++ ) { disk = g_node_nth_child ( tree, i)->data; full += gw_db_disk_get_full ( disk); } } return full; }/**/ /**/guint64 plugin_db_catalog_get_free ( GWDBContext *context) { GWDBDisk* disk = NULL; _data *data = NULL; GNode *tree = NULL; gint i = 0, nb = 0; guint64 free = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb; i++ ) { disk = g_node_nth_child ( tree, i)->data; free += gw_db_disk_get_free ( disk); } } return free; }/**/ glong plugin_db_catalog_get_nb_db_files ( GWDBContext *context) { _data *data = NULL; GNode *tree = NULL; glong count = 0; gint i = 0, j = 0, nb_disk = 0, nb = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb_disk = g_node_n_children ( tree); for ( i = 0; i < nb_disk; i++ ) { nb = g_node_n_children ( g_node_nth_child ( tree, i)); for ( j = 0; j < nb; j++ ) { g_node_traverse ( g_node_nth_child ( g_node_nth_child ( tree, i), j), G_LEVEL_ORDER, G_TRAVERSE_LEAFS, -1, (GNodeTraverseFunc)g_node_count_files, &count); } } } return count; } glong plugin_db_catalog_get_nb_db_folders ( GWDBContext *context) { _data *data = NULL; GNode *tree = NULL; glong count = 0; gint i = 0, j = 0, nb_disk = 0, nb = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb_disk = g_node_n_children ( tree); for ( i = 0; i < nb_disk; i++ ) { nb = g_node_n_children ( g_node_nth_child ( tree, i)); for ( j = 0; j < nb; j++ ) { g_node_traverse ( g_node_nth_child ( g_node_nth_child ( tree, i), j), G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, (GNodeTraverseFunc)g_node_count_folders, &count); } } } return count; } gint plugin_db_catalog_get_nb_db_disks ( GWDBContext *context) { _data *data = NULL; GNode *tree = NULL; gint nb = -1; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); } return nb; } GWDBDisk** plugin_db_catalog_get_db_disks ( GWDBContext *context) { GWDBDisk** disks = NULL; GWDBDisk* disk = NULL; _data *data = NULL; GNode *tree = NULL; gint i = 0, nb = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); disks = (GWDBDisk**)g_malloc(sizeof(GWDBDisk*)*(nb+1)); for ( i = 0; i <= nb; i++ ) disks[i] = NULL; for ( i = 0; i < nb; i++ ) { disk = g_node_nth_child ( tree, i)->data; disks[i] = gw_db_disk_dup ( disk, &disks[i]); } } return disks; } glong plugin_db_disk_get_nb_db_files ( GWDBContext *context, GWDBDiskPK ref) { GNode *disk = ref; glong count = 0; gint i = 0, nb = 0; if ( context != NULL ) { nb = g_node_n_children ( disk); for ( i = 0; i < nb; i++) { g_node_traverse ( g_node_nth_child ( disk, i), G_LEVEL_ORDER, G_TRAVERSE_LEAFS, -1, (GNodeTraverseFunc)g_node_count_files, &count); } } return count; } glong plugin_db_disk_get_nb_db_folders ( GWDBContext *context, GWDBDiskPK ref) { GNode *disk = ref; glong count = 0; gint i = 0, nb = 0; if ( context != NULL ) { nb = g_node_n_children ( disk); for ( i = 0; i < nb; i++) { g_node_traverse ( g_node_nth_child ( disk, i), G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, (GNodeTraverseFunc)g_node_count_folders, &count); } } return count; } GWDBFile** plugin_db_disk_get_db_files ( GWDBContext *context, GWDBDiskPK ref) { GWDBFile** files = NULL; GWDBFile* file = NULL; GNode *disk = ref; gint i = 0, nb = 0; if ( context != NULL ) { nb = g_node_n_children ( disk); files = (GWDBFile**)g_malloc(sizeof(GWDBFile*)*(nb+1)); for ( i = 0; i <= nb; i++ ) files[i] = NULL; for ( i = 0; i < nb; i++ ) { file = g_node_nth_child ( disk, i)->data; files[i] = gw_db_file_dup ( file, &files[i]); } } return files; } GWDBFile** plugin_db_file_get_db_files ( GWDBContext *context, GWDBFilePK ref) { GWDBFile** files = NULL; GWDBFile* file = NULL; GNode *folder = ref; gint i = 0, nb = 0; if ( context != NULL ) { nb = g_node_n_children ( folder); files = (GWDBFile**)g_malloc(sizeof(GWDBFile*)*(nb+1)); for ( i = 0; i <= nb; i++ ) files[i] = NULL; for ( i = 0; i < nb; i++ ) { file = g_node_nth_child ( folder, i)->data; files[i] = gw_db_file_dup ( file, &files[i]); } } return files; } /**/GWDBFile* plugin_db_disk_get_db_file_by_name ( GWDBContext *context, GWDBDiskPK ref, gchar *name) { GWDBFile* file = NULL, *file_match = NULL; GNode *disk = ref; gint i = 0, nb = 0; if ( context != NULL ) { nb = g_node_n_children ( disk); for ( i = 0; i < nb && file_match == NULL; i++ ) { file = g_node_nth_child ( disk, i)->data; if ( strcmp ( gw_db_file_get_name ( file), name) == 0) { file_match = gw_db_file_dup ( file, &file_match); } } } return file_match; }/**/ /**/GWDBFile* plugin_db_file_get_db_file_by_name ( GWDBContext *context, GWDBFilePK ref, gchar *name) { GWDBFile* file = NULL, *file_match = NULL; GNode *folder = ref; gint i = 0, nb = 0; if ( context != NULL ) { nb = g_node_n_children ( folder); for ( i = 0; i < nb && file_match == NULL; i++ ) { file = g_node_nth_child ( folder, i)->data; if ( strcmp ( gw_db_file_get_name ( file), name) == 0) { file_match = gw_db_file_dup ( file, &file_match); } } } return file_match; }/**/ GWDBDisk* plugin_db_file_get_db_disk ( GWDBContext *context, GWDBFilePK ref) { _data *data = NULL; GNode *tree = NULL; GWDBDisk *disk = NULL; gint i = 0, nb = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb; i++ ) { if ( g_node_is_ancestor ( g_node_nth_child ( tree, i), ref) == TRUE) { disk = gw_db_disk_dup ( g_node_nth_child ( tree, i)->data, &disk); break; } else { disk = NULL; } } } return disk; } GWDBFile * plugin_db_file_get_parent_db_file ( GWDBContext *context, GWDBFilePK ref) { GNode *node = ref; GWDBFile *parent = NULL; if ( context != NULL) { if ( g_node_depth ( node) > 3 ) { parent = gw_db_file_dup ( node->parent->data, &parent); } else{} } return parent; } /**/gchar* plugin_db_file_get_location ( GWDBContext *context, GWDBFilePK ref) { _data *data = NULL; GNode *tree = NULL, *current = ref; gchar *location = NULL,*tmp = NULL; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; location = g_strdup ( "/"); current = current->parent; while ( g_node_depth ( current) > 2) { tmp = g_strconcat ( "/", gw_db_file_get_name ( current->data), location, NULL); g_free ( location); location = tmp; current = current->parent; } } return location; }/**/ GWDBDiskPK plugin_db_catalog_add_db_disk ( GWDBContext *context, GWDBDisk *disk) { _data *data = NULL; GNode *tree = NULL; GWDBDiskPK pk = NULL; GWDBDisk *disk_dup = NULL; if ( context != NULL) { data = gw_db_context_get_data ( context); tree = data->tree; /* It is the minimal test to process!! */ if ( gw_db_disk_get_name ( disk) != NULL ) { disk_dup = gw_db_disk_dup ( disk, &disk_dup); pk = g_node_new ( disk_dup); gw_db_disk_set_ref ( disk_dup, pk); gw_db_disk_set_ref ( disk, pk); g_node_append ( tree, pk); gw_db_catalog_set_ismodified ( data->catalog, TRUE); gw_db_category_add_disk ( gw_db_disk_get_category ( disk_dup)); } } return pk; } GWDBFilePK plugin_db_disk_add_db_file ( GWDBContext *context, GWDBDiskPK ref, GWDBFile *file) { GNode *node = ref; GWDBFilePK pk = NULL; GWDBFile *file_dup = NULL; if ( context != NULL && ref != NULL) { /* It is the minimal test to process!! */ if ( gw_db_file_get_name ( file) != NULL ) { if ( g_node_depth ( node) == 2 ) { file_dup = gw_db_file_dup ( file, &file_dup); pk = g_node_new ( file_dup); gw_db_file_set_ref ( file_dup, pk); gw_db_file_set_ref ( file, pk); g_node_append ( node, pk); gw_db_category_add_file ( gw_db_file_get_category ( file_dup)); } } } return pk; } GWDBFilePK plugin_db_file_add_db_file ( GWDBContext *context, GWDBFilePK ref, GWDBFile *file) { GNode *node = ref; GWDBFilePK pk = NULL; GWDBFile *file_dup = NULL; if ( context != NULL && ref != NULL) { /* It is the minimal test to process!! */ if ( gw_db_file_get_name ( file) != NULL ) { if ( g_node_depth ( node) > 2 ) { file_dup = gw_db_file_dup ( file, &file_dup); pk = g_node_new ( file_dup); gw_db_file_set_ref ( file_dup, pk); gw_db_file_set_ref ( file, pk); g_node_append ( node, pk); gw_db_category_add_file ( gw_db_file_get_category ( file_dup)); } else if ( g_node_depth ( node) == 2 ) { file_dup = gw_db_file_dup ( file, &file_dup); pk = g_node_new ( file_dup); gw_db_file_set_ref ( file_dup, pk); gw_db_file_set_ref ( file, pk); g_node_append ( node, pk); gw_db_category_add_file ( gw_db_file_get_category ( file_dup)); } } } return pk; } gint plugin_db_catalog_remove_db_disk ( GWDBContext *context, GWDBDiskPK ref) { GNode *node = ref; _data *data = NULL; if ( context != NULL && ref != NULL) { /* It is the minimal test to process!! */ if ( g_node_depth ( node) == 2 ) { gw_db_category_remove_disk ( gw_db_disk_get_category ( node->data)); g_node_disk_free ( node, NULL); data = gw_db_context_get_data ( context); gw_db_catalog_set_ismodified ( data->catalog, TRUE); return 0; } } return -1; } gint plugin_db_catalog_remove_db_file ( GWDBContext *context, GWDBFilePK ref) { GNode *node = ref; _data *data = NULL; if ( context != NULL && ref != NULL) { /* It is the minimal test to process!! */ if ( g_node_depth ( node) > 2 ) { g_node_unlink ( node); g_node_files_free ( node, NULL); g_node_destroy ( node); data = gw_db_context_get_data ( context); gw_db_catalog_set_ismodified ( data->catalog, TRUE); return 0; } } return -1; } gint plugin_db_disk_update ( GWDBContext *context, GWDBDisk *disk) { GNode *node = NULL; GWDBDisk *disk_dup = NULL; _data *data = NULL; if ( context != NULL && disk != NULL ) { /* It is the minimal test to process!! */ //TODO it should be better to test if disk name already exists if ( gw_db_disk_get_name ( disk) != NULL ) { node = gw_db_disk_get_ref ( disk); if ( g_node_depth ( node) == 2 ) { disk_dup = node->data; if ( !gw_db_disk_equals ( disk_dup, disk) ) { if ( gw_db_disk_get_category ( disk) != gw_db_disk_get_category ( disk_dup)) { gw_db_category_add_disk ( gw_db_disk_get_category ( disk)); gw_db_category_remove_disk ( gw_db_disk_get_category ( disk_dup)); } gw_db_disk_dup ( disk, &disk_dup); data = gw_db_context_get_data ( context); gw_db_catalog_set_ismodified ( data->catalog, TRUE); return 0; } } } } return -1; } gint plugin_db_file_update ( GWDBContext *context, GWDBFile *file) { GNode *node = NULL; GWDBFile *file_dup = NULL; _data *data = NULL; if ( context != NULL && file != NULL ) { /* It is the minimal test to process!! */ //TODO it should be better to test if disk name already exists if ( gw_db_file_get_name ( file) != NULL ) { node = gw_db_file_get_ref ( file); if ( g_node_depth ( node) > 2 ) { file_dup = node->data; if ( !gw_db_file_equals ( file_dup, file) ) { if ( gw_db_file_get_category ( file) != gw_db_file_get_category ( file_dup)) { gw_db_category_add_file ( gw_db_file_get_category ( file)); gw_db_category_remove_file ( gw_db_file_get_category ( file_dup)); } gw_db_file_dup ( file, &file_dup); data = gw_db_context_get_data ( context); gw_db_catalog_set_ismodified ( data->catalog, TRUE); return 0; } } } } return -1; } /**/GWDBCategory* plugin_db_catalog_get_db_category_by_index ( GWDBContext *context, gint index) { GWDBCategory *category = NULL; GList *categories = NULL; _data *data = NULL; gint i = 0, nb = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); categories = data->categories; nb = g_list_length ( categories); for ( i = 0; i < nb && category == NULL; i++) { if ( gw_db_category_get_index ( g_list_nth ( categories, i)->data) == index) { category = gw_db_category_dup ( g_list_nth ( categories, i)->data, &category); } } } return category; }/**/ GWDBCatalog* plugin_db_catalog_get_db_catalog ( GWDBContext *context) { GWDBCatalog *catalog = NULL; _data *data = NULL; if ( context != NULL) { data = gw_db_context_get_data ( context); catalog = gw_db_catalog_dup ( data->catalog, &catalog); } return catalog; } GWDBDisk* plugin_db_catalog_get_db_disk ( GWDBContext *context, GWDBDiskPK ref) { GWDBDisk *disk = NULL; GNode *node = ref; if ( context != NULL && ref != NULL) { disk = gw_db_disk_dup ( node->data, &disk); } return disk; } GWDBFile* plugin_db_catalog_get_db_file ( GWDBContext *context, GWDBFilePK ref) { GWDBFile *file = NULL; GNode *node = ref; _data *data = NULL; if ( context != NULL && ref != NULL) { data = gw_db_context_get_data ( context); if ( g_node_is_ancestor ( data->tree, node) && g_node_depth ( node) > 2) { file = gw_db_file_dup ( node->data, &file); } } return file; } GWDBCategory* plugin_db_catalog_get_db_category ( GWDBContext *context, GWDBCategoryPK ref) { GWDBCategory *category = NULL; if ( context != NULL && ref != NULL) { category = gw_db_category_dup ( ref, &category); } return category; } GWDBCategory** plugin_db_catalog_get_db_categories ( GWDBContext *context) { GWDBCategory **categories = NULL; _data *data = NULL; gint nb = 0, i = 0; if ( context != NULL) { data = gw_db_context_get_data ( context); nb = g_list_length ( g_list_first ( data->categories)); categories = (GWDBCategory**)g_malloc(sizeof(GWDBCategory*)*(nb+1)); for ( i = 0; i <= nb; i++ ) categories[i] = NULL; for ( i = 0; i < nb; i++ ) { categories[i] = gw_db_category_dup ( g_list_nth ( data->categories, i)->data, &categories[i]); } } return categories; } GWDBCategoryPK plugin_db_catalog_add_db_category ( GWDBContext *context, GWDBCategory *category) { _data *data = NULL; GWDBCategoryPK pk = NULL; gint index = 0; GWDBCategory *category_dup = NULL; if ( context != NULL && category != NULL ) { data = gw_db_context_get_data ( context); category_dup = gw_db_category_dup ( category, &category_dup); data->categories = g_list_append ( data->categories, category_dup); index = g_list_length ( g_list_first ( data->categories)) - 1; if ( index == -1) index = 0; gw_db_category_set_index ( category_dup, index); gw_db_category_set_index ( category, index); gw_db_category_set_ref ( category_dup, category_dup); gw_db_category_set_ref ( category, category_dup); gw_db_catalog_set_ismodified ( data->catalog, TRUE); pk = category_dup; } return pk; } gint plugin_db_catalog_remove_db_category ( GWDBContext *context, GWDBCategoryPK ref) { _data *data = NULL; GWDBCategory *category = ref; GList *categories = NULL; gint size = 0, i = 0, index = 0; if ( context != NULL && category != NULL) { data = gw_db_context_get_data ( context); categories = data->categories; size = g_list_length ( g_list_first ( categories)) - 1; index = gw_db_category_get_index ( category); categories = g_list_remove ( categories, gw_db_category_get_ref(category)); categories = g_list_first ( categories); categories = g_list_first ( categories); categories = g_list_nth ( categories, index); for ( i = index; i < size; i++) { gw_db_category_set_index ( categories->data, gw_db_category_get_index ( categories->data) - 1); categories = g_list_next ( categories); } gw_db_catalog_set_ismodified ( data->catalog, TRUE); return 0; } return -1; } gint plugin_db_catalog_update ( GWDBContext *context, GWDBCatalog *catalog) { GWDBCatalog *catalog_dup = NULL; _data *data = NULL; if ( context != NULL && catalog != NULL ) { data = gw_db_context_get_data ( context); //TODO it should be better to test if catalog is correct catalog_dup = data->catalog; if ( !gw_db_catalog_equals ( catalog_dup, catalog) ) { gw_db_catalog_dup ( catalog, &catalog_dup); gw_db_catalog_set_ismodified ( catalog_dup, TRUE); return 0; } else {} } return -1; } gint plugin_db_category_update ( GWDBContext *context, GWDBCategory *category) { GWDBCategory *category_dup = NULL; _data *data = NULL; gint i = 0; if ( context != NULL && category != NULL ) { data = gw_db_context_get_data ( context); for ( i = 0; i < g_list_length ( data->categories); i++) { category_dup = g_list_nth ( data->categories, i)->data; if ( gw_db_category_get_index ( category) == gw_db_category_get_index ( category_dup)) { break; } else { category_dup = NULL; } } if ( category_dup != NULL ) { category_dup = gw_db_category_dup ( category, &category_dup); data = gw_db_context_get_data ( context); gw_db_catalog_set_ismodified ( data->catalog, TRUE); return 0; } } return -1; } /**/GWDBCategory* plugin_db_catalog_get_db_category_by_name ( GWDBContext *context, gchar *name) { GWDBCategory *category = NULL; GList *categories = NULL; _data *data = NULL; gint i = 0, nb = 0; if ( context != NULL && name != NULL ) { data = gw_db_context_get_data ( context); categories = data->categories; nb = g_list_length ( categories); for ( i = 0; i < nb && category == NULL; i++) { if ( strcmp ( name, gw_db_category_get_name ( g_list_nth ( categories, i)->data)) == 0) { category = gw_db_category_dup ( g_list_nth ( categories, i)->data, &category); } } } return category; }/**/ /**/GWDBDisk* plugin_db_catalog_get_db_disk_by_name ( GWDBContext *context, gchar *name) { GWDBDisk* disk = NULL; GWDBDisk* disk_dup = NULL; _data *data = NULL; GNode *tree = NULL; gint i = 0, nb = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb && disk == NULL; i++ ) { disk = g_node_nth_child ( tree, i)->data; if ( strcmp ( name, gw_db_disk_get_name ( disk)) != 0) { disk = NULL; } else { disk_dup = gw_db_disk_dup ( disk, &disk_dup); } } } return disk_dup; }/**/ GWPluginInfo * plugin_get_info ( ) { GWPluginInfo *plugin_info = gw_plugin_info_new ( ); gw_plugin_info_set_name ( plugin_info, g_strdup ( "GWhere catalog")); gw_plugin_info_set_version ( plugin_info, g_strdup ( "1.0.0")); gw_plugin_info_set_author ( plugin_info, g_strdup ( "Sébastien LECACHEUR")); gw_plugin_info_set_description ( plugin_info, g_strdup ( "Store any catalog in a simple file with the native GWhere file format.")); gw_plugin_info_set_help ( plugin_info, g_strdup ( "There is no help at time")); return plugin_info; } gwhere-0.2.3/src/plugins/catalog/gwcatalog/Makefile.in0000744000175000017500000002572110506327664021357 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ libdir = $(exec_prefix)/share/${PACKAGE}/plugins/catalog lib_LTLIBRARIES = libgwplugincataloggwcatalog.la libgwplugincataloggwcatalog_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugincataloggwcatalog_la_SOURCES = gwcatalog.c INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir)/src @GTK_CFLAGS@ libgwplugincataloggwcatalog_la_LIBADD = @top_srcdir@/src/plugins/libgwplugins.a @top_srcdir@/src/db/libgwdb.a @top_srcdir@/src/tools/libgwtools.a @top_srcdir@/src/data/libgwdata.a mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../../../config.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../../../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libgwplugincataloggwcatalog_la_DEPENDENCIES = \ @top_srcdir@/src/plugins/libgwplugins.a @top_srcdir@/src/db/libgwdb.a \ @top_srcdir@/src/tools/libgwtools.a @top_srcdir@/src/data/libgwdata.a libgwplugincataloggwcatalog_la_OBJECTS = gwcatalog.lo CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best DEP_FILES = .deps/gwcatalog.P SOURCES = $(libgwplugincataloggwcatalog_la_SOURCES) OBJECTS = $(libgwplugincataloggwcatalog_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu src/plugins/catalog/gwcatalog/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libgwplugincataloggwcatalog.la: $(libgwplugincataloggwcatalog_la_OBJECTS) $(libgwplugincataloggwcatalog_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libgwplugincataloggwcatalog_la_LDFLAGS) $(libgwplugincataloggwcatalog_la_OBJECTS) $(libgwplugincataloggwcatalog_la_LIBADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = src/plugins/catalog/gwcatalog distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/plugins/catalog/gwcatalog/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-libLTLIBRARIES install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-libLTLIBRARIES uninstall: uninstall-am all-am: Makefile $(LTLIBRARIES) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(libdir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir mostlyclean-depend \ distclean-depend clean-depend maintainer-clean-depend info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/src/plugins/catalog/Makefile.am0000744000175000017500000000003010216115544017346 0ustar bartbartSUBDIRS = gwcatalog csv gwhere-0.2.3/src/plugins/catalog/csv/0000755000175000017500000000000010506575517016127 5ustar bartbartgwhere-0.2.3/src/plugins/catalog/csv/Makefile.am0000644000175000017500000000076210247433444020162 0ustar bartbartlibdir = $(exec_prefix)/share/${PACKAGE}/plugins/catalog lib_LTLIBRARIES = libgwplugincatalogcsv.la libgwplugincatalogcsv_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugincatalogcsv_la_SOURCES = csv.c INCLUDES = \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/src \ @GTK_CFLAGS@ libgwplugincatalogcsv_la_LIBADD = \ @top_srcdir@/src/plugins/libgwplugins.a \ @top_srcdir@/src/db/libgwdb.a \ @top_srcdir@/src/tools/libgwtools.a \ @top_srcdir@/src/data/libgwdata.a gwhere-0.2.3/src/plugins/catalog/csv/Makefile.in0000644000175000017500000002553110506327671020176 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ libdir = $(exec_prefix)/share/${PACKAGE}/plugins/catalog lib_LTLIBRARIES = libgwplugincatalogcsv.la libgwplugincatalogcsv_la_LDFLAGS = 'glib-config --cflags gmodule' -fPIC -version-info 1:0:0 libgwplugincatalogcsv_la_SOURCES = csv.c INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir)/src @GTK_CFLAGS@ libgwplugincatalogcsv_la_LIBADD = @top_srcdir@/src/plugins/libgwplugins.a @top_srcdir@/src/db/libgwdb.a @top_srcdir@/src/tools/libgwtools.a @top_srcdir@/src/data/libgwdata.a mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../../../config.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(lib_LTLIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../../../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libgwplugincatalogcsv_la_DEPENDENCIES = \ @top_srcdir@/src/plugins/libgwplugins.a @top_srcdir@/src/db/libgwdb.a \ @top_srcdir@/src/tools/libgwtools.a @top_srcdir@/src/data/libgwdata.a libgwplugincatalogcsv_la_OBJECTS = csv.lo CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best DEP_FILES = .deps/csv.P SOURCES = $(libgwplugincatalogcsv_la_SOURCES) OBJECTS = $(libgwplugincatalogcsv_la_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu src/plugins/catalog/csv/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-libLTLIBRARIES: clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) distclean-libLTLIBRARIES: maintainer-clean-libLTLIBRARIES: install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libdir) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) list='$(lib_LTLIBRARIES)'; for p in $$list; do \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \ done # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libgwplugincatalogcsv.la: $(libgwplugincatalogcsv_la_OBJECTS) $(libgwplugincatalogcsv_la_DEPENDENCIES) $(LINK) -rpath $(libdir) $(libgwplugincatalogcsv_la_LDFLAGS) $(libgwplugincatalogcsv_la_OBJECTS) $(libgwplugincatalogcsv_la_LIBADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = src/plugins/catalog/csv distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/plugins/catalog/csv/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-libLTLIBRARIES install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-libLTLIBRARIES uninstall: uninstall-am all-am: Makefile $(LTLIBRARIES) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(libdir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-libLTLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-libLTLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-libLTLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-libLTLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \ clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \ uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \ distclean-compile clean-compile maintainer-clean-compile \ mostlyclean-libtool distclean-libtool clean-libtool \ maintainer-clean-libtool tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir mostlyclean-depend \ distclean-depend clean-depend maintainer-clean-depend info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/src/plugins/catalog/csv/Makefile.win0000644000175000017500000000261610240240151020342 0ustar bartbart# Project: pluginscatalogcvs # Makefile created for GWhere CC = gcc.exe WINDRES = windres.exe RES = OBJ = csv.o $(RES) BIN = ..\libcsv.dll LIBS = $(GTKLIBS) -LC:/MINGW/lib -LC:/MINGW/mingw_extra/lib -LC:/GTK/lib $(GWLIBS) -mno-cygwin -fnative-struct -mno-cygwin -fnative-struct -lmingwex --export-all-symbols --add-stdcall-alias -lmingwex -lcrtdll -lzdll -lws2_32 -lregex -lintl GTKLIBS = -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv INCS = $(GWINCS) $(GTKINCS) -IC:/MINGW/include -IC:/MINGW/mingw_extra/include -IC:/GTK/include GTKINCS = -IC:/GTK/include/gtk-2.0 -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/atk-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include GWINCS = -I../../.. CFLAGS = $(INCS) -O2 -Wall -fnative-struct -DHAVE_CONFIG_H -DOS_WIN32 -DGTK_ENABLE_BROKEN -s -mwindows .PHONY: clean all: $(BIN) clean: rm -f $(OBJ) $(BIN) DLLWRAP=dllwrap.exe EXPFILE=liblibcsv.exp DEFFILE=liblibcsv.def STATICLIB=liblibcsv.a $(BIN): $(OBJ) $(DLLWRAP) --driver-name $(CC) --output-exp $(EXPFILE) --output-def $(DEFFILE) --implib $(STATICLIB) -o $(BIN) $(OBJ) ..\..\..\tools\libgwtools.a ..\..\..\db\libgwdb.a ..\..\..\plugins\libgwplugins.a ..\..\..\data\gwstringbuffer.o ..\..\..\data\gwsettings.o $(LIBS) $(CFLAGS) csv.o: csv.c $(CC) -c csv.c -o csv.o $(CFLAGS) gwhere-0.2.3/src/plugins/catalog/csv/csv.c0000744000175000017500000014511310247421310017053 0ustar bartbart#include #include /* strtol strtoul strtoull */ #include /* strrchr */ #include /* stat */ #include /* localtime strptime */ #include /* isdigit */ #include "plugins/gwcatalog.h" #include "data/gwdata.h" #include "tools/gwtools.h" #include "gwsupport.h" #define CSV_SEPARATOR ';' #define CSV_SEPARATOR_S ";" #define CSV_DATE_FORMAT "%Y-%m-%d %H:%M:%S" #if defined ( OS_WIN32) #define CSV_LINE_DISK "%s;%d;%s;%s;%s;%s;%"##G_GUINT64_FORMAT##";%"##G_GUINT64_FORMAT##";%s;%s;%s;%s\n" #define CSV_LINE_FILE "%s;%s;%s;%s;%s;%s;%ld;%"##G_GUINT64_FORMAT##";%s;%s;%s;%s;%s\n" #else #ifdef __STDC__ #define CONCAT3(x,y,z) x/**/y/**/z/**/ #define CONCAT5(v,w,x,y,z) v/**/w/**/x/**/y/**/z/**/ #else #define CONCAT3(x,y,z) x/**/y/**/z/**/ #define CONCAT5(v,w,x,y,z) v/**/w/**/x/**/y/**/z/**/ #endif #define CSV_LINE_DISK CONCAT5("%s;%d;%s;%s;%s;%s;%",G_GUINT64_FORMAT,";%",G_GUINT64_FORMAT,";%s;%s;%s;%s\n") #define CSV_LINE_FILE CONCAT3("%s;%s;%s;%s;%s;%s;%ld;%",G_GUINT64_FORMAT,";%s;%s;%s;%s;%s\n") #endif typedef struct { GWDBCatalog *catalog; GList *categories; GNode *tree; GWStringBuffer *sb; FILE *file; gchar *current_disk_name; }_data; // __USE_XOPEN or _XOPEN_SOURCE must be defined with GlibC2 #if !defined(HAVE_STRPTIME) || !defined(__USE_XOPEN) /* get a positive number between n_min and n_max, for a maximum length of len_max. Return -1 if error. */ static int date_get_num ( const char **pp, int n_min, int n_max, int len_max) { int i, val, c; const char *p; p = *pp; val = 0; for ( i = 0; i < len_max; i++) { c = *p; if (!isdigit(c)) { break; } val = (val * 10) + c - '0'; p++; } /* no number read ? */ if (p == *pp) { return -1; } if (val < n_min || val > n_max) { return -1; } *pp = p; return val; } /* small strptime for minimum use. */ const char *strptime ( const char *p, const char *fmt, struct tm *dt) { int c, val; for(;;) { c = *fmt++; if (c == '\0') { return p; } else if (c == '%') { c = *fmt++; switch(c) { case 'H': val = date_get_num(&p, 0, 23, 2); if (val == -1) return NULL; dt->tm_hour = val; /* Disables dayligth saving */ dt->tm_isdst = -1; break; case 'M': val = date_get_num(&p, 0, 59, 2); if (val == -1) return NULL; dt->tm_min = val; break; case 'S': val = date_get_num(&p, 0, 59, 2); if (val == -1) return NULL; dt->tm_sec = val; break; case 'Y': val = date_get_num(&p, 0, 9999, 4); if (val == -1) return NULL; dt->tm_year = val - 1900; break; case 'y': val = date_get_num(&p, 0, 9999, 2); if (val == -1) return NULL; dt->tm_year = val - 1900; break; case 'm': val = date_get_num(&p, 1, 12, 2); if (val == -1) return NULL; dt->tm_mon = val - 1; break; case 'd': val = date_get_num(&p, 1, 31, 2); if (val == -1) return NULL; dt->tm_mday = val; break; case '%': goto match; default: return NULL; } } else { match: if (c != *p) { return NULL; } p++; } } return p; } #endif gchar * csv_str_to_file ( gchar *str) { gchar *txt = NULL, *tmp = NULL; if ( str != NULL ) { if ( strchr ( str, '\"') != NULL ) { tmp = gw_str_replace_str ( str, "\"", "\"\""); txt = g_strconcat ( "\"", tmp, "\"", NULL); g_free ( tmp); } else if ( strchr ( str, CSV_SEPARATOR) != NULL || strchr ( str, '\n') != NULL ) { txt = g_strconcat ( "\"", str, "\"", NULL); } else { txt = g_strdup ( str); } } else { txt = g_strdup ( ""); } return txt; } gchar * csv_format_date ( gulong t) { struct tm *time = NULL; gchar *date = NULL; if ( t != 0 ) { if ( (time = localtime ( &t)) != NULL ) { /* Disables dayligth saving */ time->tm_isdst = -1; if ( (date = (gchar*)g_malloc ( sizeof ( gchar) * 20)) != NULL ) { strftime ( date, 20, CSV_DATE_FORMAT, time); return date; } else {} } else {} } else {} return NULL; } gulong csv_read_date ( gchar *date) { struct tm time; gulong t = 0; if ( date != 0 ) { memset ( &time, '\0', sizeof ( struct tm)); strptime ( date, CSV_DATE_FORMAT, &time); t = mktime ( &time); } else {} return t; } GWDBContext * csv_context_new ( GWCatalogPlugin *plugin) { GWDBContext *context = NULL; GWDBCatalog *catalog = NULL; GWDBCategory *category = NULL; _data *data = NULL; /* Create the new catalog context */ context = gw_db_context_new ( ); gw_db_context_set_plugin ( context, plugin); data = (_data*)g_malloc ( sizeof ( _data)); gw_db_context_set_data ( context, data); data->catalog = catalog = gw_db_catalog_new ( ); data->categories = NULL; data->tree = g_node_new ( NULL); data->sb = NULL; data->file = NULL; data->current_disk_name = NULL; /* Creates the default category */ category = gw_db_category_new ( ); gw_db_category_set_name ( category, g_strdup ( _( "none"))); data->categories = g_list_append ( data->categories, category); gw_db_category_set_index ( category, 0); return context; } gint gw_db_data_category_free ( GWDBCategory *category, gpointer data) { if ( category != NULL ) { gw_db_category_free ( category); return 0; } return -1; } gboolean g_node_file_free ( GNode *file, gpointer data) { if ( file != NULL) { gw_db_category_remove_file ( gw_db_file_get_category ( file->data)); gw_db_file_free ( file->data); } return FALSE; } gboolean g_node_files_free ( GNode *file, gpointer data) { if ( file != NULL) { g_node_traverse ( file, G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, (GNodeTraverseFunc)g_node_file_free, NULL); } return FALSE; } gboolean g_node_disk_free ( GNode *disk, gpointer data) { if ( disk != NULL) { g_node_children_foreach ( disk, G_TRAVERSE_ALL, (GNodeForeachFunc)g_node_files_free, NULL); g_node_unlink ( disk); gw_db_category_remove_disk ( gw_db_disk_get_category ( disk->data)); gw_db_disk_free ( disk->data); g_node_destroy ( disk); } return FALSE; } gboolean g_node_count_files ( GNode *file, gpointer data) { glong *pcount = data; if ( file != NULL) { if ( !gw_db_file_is_directory ( file->data)) { (*pcount)++; } } return FALSE; } gboolean g_node_count_folders ( GNode *file, gpointer data) { glong *pcount = data; if ( file != NULL) { if ( gw_db_file_is_real_directory ( file->data)) { (*pcount)++; } } return FALSE; } gchar * cvs_file_read_record ( FILE *f, GWStringBuffer **sb, GWStringBuffer *tmp) { gchar *buf = NULL, *tmp_buf = NULL; gint i = 0, count = 0; if ( f!=NULL && tmp!=NULL) { if ( (buf = gw_file_readline_sb ( f, sb)) != NULL ) { do { for ( i = 0, count = 0; buf[i] != '\0'; i++) if ( buf[i] == '"' ) count++; if ( count%2==1) { gw_string_buffer_set_str ( tmp, buf, strlen ( buf)); gw_string_buffer_append_str ( tmp, "\n", strlen ( "\n")); buf = gw_file_readline_sb ( f, sb); tmp_buf = gw_string_buffer_get_str ( tmp); gw_string_buffer_insert_str ( *sb, tmp_buf, 0, strlen ( tmp_buf)); buf = gw_string_buffer_get_str ( *sb); } } while ( count%2==1); } } return buf; } gchar * cvs_file_read_field_str ( gchar *str, gint *pos) { //WARN The given str parameter is altered //FIXME When go back with "last_real_separator" the readed field may be altered :-/ gchar used_separator = CSV_SEPARATOR; gint i = 0, j = 0, begin = 0, end = 0, count = 0; gchar *field = NULL; gint last_real_separator = -1; if ( str!=NULL && *pos>=0) { begin = i = *pos; if ( str[i]=='"') { used_separator = '"'; count = 1; begin = ++i; } else { used_separator = CSV_SEPARATOR; count = 0; } for ( j = i; ((str[j] != used_separator || count%2==1) && (str[j] != '\0')); j++ ) { if ( str[j] == '"') { if ( str[j+1] == CSV_SEPARATOR ) { last_real_separator = j + 1; } if ( str[j+1] == '"') { count++; } if ( str[j+1]!=CSV_SEPARATOR && str[j+1]!='"' && str[j+1]!='\n' && str[j+1]!='\0') { /* Impossible */ break; } count++; str[i++] = str[j++]; } else { str[i++] = str[j]; } } if ( last_real_separator != -1 ) { str[i] = str[j]; i = last_real_separator; j = i - 1; } if ( used_separator == '"') { end = i - 1; } else { end = i; } if ( begin < end) { if ( (field = (gchar*)g_malloc0 ( sizeof ( gchar)*(end-begin+1))) != NULL ) { memcpy ( field, &str[begin], end-begin); field[end-begin] = '\0'; } else { field = NULL; } } else { field = NULL; } *pos = j + 1; } return field; } glong cvs_file_read_field_l ( gchar *str, gint *pos) { gint i = 0, begin = 0; glong field = 0; if ( str!=NULL && pos>=0) { begin = *pos; for ( i = begin; ((str[i] != CSV_SEPARATOR) && (str[i] != '\0')); i++ ) {} if ( str[i] == CSV_SEPARATOR) { str[i] = '\0'; field = strtol ( &str[begin], NULL, 10); } *pos = i + 1; } return field; } gulong cvs_file_read_field_date ( gchar *str, gint *pos) { gint i = 0, begin = 0; gulong field = 0; if ( str!=NULL && pos>=0) { begin = *pos; for ( i = begin; ((str[i] != CSV_SEPARATOR) && (str[i] != '\0')); i++ ) {} if ( str[i] == CSV_SEPARATOR) { str[i] = '\0'; field = csv_read_date ( &str[begin]); } *pos = i + 1; } return field; } guint64 cvs_file_read_field_ui64 ( gchar *str, gint *pos) { gint i = 0, begin = 0; guint64 field = 0; if ( str!=NULL && pos>=0) { begin = *pos; for ( i = begin; ((str[i] != CSV_SEPARATOR) && (str[i] != '\0')); i++ ) {} if ( str[i] == CSV_SEPARATOR) { str[i] = '\0'; field = strtoui64 ( &str[begin], NULL, 10); } *pos = i + 1; } return field; } GWDBFile * csv_file_from_str ( gchar *str, GWDBContext *context, gchar **disk_name, gchar **location) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); GWDBFile *file = NULL; gint index = 0; gchar *tmp = NULL; GWDBCategory *category = NULL; if ( (file = gw_db_file_new ( )) != NULL ) { /* Read the file name. */ gw_db_file_set_name ( file, cvs_file_read_field_str ( str, &index)); tmp = cvs_file_read_field_str ( str, &index); if ( tmp != NULL ) { *disk_name = tmp; tmp = NULL; } tmp = cvs_file_read_field_str ( str, &index); if ( tmp != NULL ) { *location = tmp; tmp = NULL; } /* Read the file rights. */ tmp = cvs_file_read_field_str ( str, &index); if ( tmp != NULL ) { gw_db_file_set_rights_from_gchar ( file, tmp); g_free ( tmp); tmp = NULL; } /* Read the file owner. */ gw_db_file_set_owner ( file, cvs_file_read_field_str ( str, &index)); /* Read the file group. */ gw_db_file_set_group ( file, cvs_file_read_field_str ( str, &index)); /* Read the file inode. */ gw_db_file_set_inode ( file, cvs_file_read_field_l ( str, &index)); /* Read the file size. */ gw_db_file_set_size ( file, cvs_file_read_field_ui64 ( str, &index)); /* Read the file cdate. */ gw_db_file_set_cdate ( file, cvs_file_read_field_date ( str, &index)); /* Read the file adate. */ gw_db_file_set_adate ( file, cvs_file_read_field_date ( str, &index)); /* Read the file mdate. */ gw_db_file_set_mdate ( file, cvs_file_read_field_date ( str, &index)); /* Read the file category. */ tmp = cvs_file_read_field_str ( str, &index); if ( context!=NULL && tmp!=NULL) { gw_db_file_set_category ( file, gw_db_category_get_ref ( category = plugin->gw_db_catalog_get_db_category_by_name ( context, tmp))); gw_db_category_add_file ( gw_db_category_get_ref ( category)); gw_db_category_free ( category); } if ( tmp != NULL ) { g_free ( tmp); tmp = NULL; } /* Read the file description. */ gw_db_file_set_description ( file, cvs_file_read_field_str ( str, &index)); } return file; } GWDBCategory * csv_category_from_str ( gchar *str, GWDBContext *context) { GWDBCategory *category = NULL; gint index = 0; if ( (category = gw_db_category_new ( )) != NULL ) { gw_db_category_set_name ( category, cvs_file_read_field_str ( str, &index)); gw_db_category_set_description ( category, cvs_file_read_field_str ( str, &index)); } return category; } GWDBDisk * csv_disk_from_str ( gchar *str, GWDBContext *context) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); GWDBDisk *disk = NULL; gint index = 0; gchar *tmp = NULL; GWDBCategory *category = NULL; if ( (disk = gw_db_disk_new ( )) != NULL ) { /* Read the disk name. */ gw_db_disk_set_name ( disk, cvs_file_read_field_str ( str, &index)); /* Read the disk archive number. */ gw_db_disk_set_num ( disk, cvs_file_read_field_l ( str, &index)); /* Read the disk file system name. */ gw_db_disk_set_fsname ( disk, cvs_file_read_field_str ( str, &index)); /* Read the disk access directory. */ gw_db_disk_set_path ( disk, cvs_file_read_field_str ( str, &index)); /* Read the disk type. */ tmp = cvs_file_read_field_str ( str, &index); if ( tmp!=NULL && strlen ( tmp)>=6 && memcmp(tmp,"CD-ROM",6)==0 ) { g_free ( tmp); tmp = g_strdup ( "iso9660"); } //TODO to check the following code.. if ( tmp!=NULL ) { if ( strlen(tmp)>=6 && memcmp(tmp,"CD-ROM",6)==0 ) { gw_db_disk_set_type ( disk, CDROM); } else if ( strlen(tmp)==4 && memcmp(tmp,"cdfs",4)==0 ) { gw_db_disk_set_type ( disk, CDROM); } else if ( strlen(tmp)>2 && memcmp(tmp,"HD",2)==0 ) { gw_db_disk_set_type ( disk, HD); } else if ( strlen(tmp)==6 && memcmp(tmp,"Floppy",6)==0 ) { gw_db_disk_set_type ( disk, FLOPPY); } else if ( strlen(tmp)==3 && memcmp(tmp,"Zip",3)==0 ) { gw_db_disk_set_type ( disk, ZIP_DRIVE); } else if ( strlen(tmp)==3 && memcmp(tmp,"smb",3)==0 ) { gw_db_disk_set_type ( disk, NETWORK_DRIVE); } else if ( strlen(tmp)==4 && memcmp(tmp,"ntfs",4)==0 ) { gw_db_disk_set_type ( disk, HD); } else { if ( (tmp = gw_db_disk_get_fsname ( disk)) != NULL) { if ( strncmp ( "/dev/hd", tmp, 7) == 0 ) { gw_db_disk_set_type ( disk, HD); } else if ( strncmp ("/dev/fd", tmp, 7) == 0 ) { gw_db_disk_set_type ( disk, FLOPPY); } else if ( strncmp ( "/dev/zip", tmp, 8) == 0 ) { gw_db_disk_set_type ( disk, ZIP_DRIVE); } else if ( strncmp ( "\\\\.\\A:\\", tmp, 7) == 0 ) { gw_db_disk_set_type ( disk, FLOPPY); } else if ( strncmp ( "\\\\.\\B:\\", tmp, 7) == 0 ) { gw_db_disk_set_type ( disk, FLOPPY); } else { gw_db_disk_set_type ( disk, NONE); } } else { gw_db_disk_set_type ( disk, NONE); } } } gw_db_disk_set_fstype ( disk, tmp); /* Read the disk volume name. */ gw_db_disk_set_volume ( disk, cvs_file_read_field_str ( str, &index)); /* Read the disk used space. */ gw_db_disk_set_full ( disk, cvs_file_read_field_ui64 ( str, &index)); /* Read the disk free space. */ gw_db_disk_set_free ( disk, cvs_file_read_field_ui64 ( str, &index)); /* Read the disk adding date. */ gw_db_disk_set_date ( disk, cvs_file_read_field_date ( str, &index)); /* Read the disk serial number. */ gw_db_disk_set_serial ( disk, cvs_file_read_field_str ( str, &index)); /* Read the disk category. */ tmp = cvs_file_read_field_str ( str, &index); if ( context!=NULL && tmp!=NULL) { gw_db_disk_set_category ( disk, gw_db_category_get_ref ( category = plugin->gw_db_catalog_get_db_category_by_name ( context, tmp))); gw_db_category_add_disk ( gw_db_category_get_ref ( category)); gw_db_category_free ( category); } if ( tmp != NULL ) { g_free ( tmp); tmp = NULL; } /* Read the disk description. */ gw_db_disk_set_description ( disk, cvs_file_read_field_str ( str, &index)); } return disk; } gint csv_file_save_folder ( GWDBContext *context, GNode *parent, GWStringBuffer *buf[2]) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); _data *data = gw_db_context_get_data ( context); FILE *f = data->file; GWDBFile *file = NULL; GNode *node = NULL; gchar *tmp[10]; gint i = 0, nb = 0; gchar *_tmp = NULL; GWDBCategory *category = NULL; /* Gets folder files list */ nb = g_node_n_children ( parent); for ( i = 0; i < nb; i++) { node = g_node_nth_child ( parent, i); file = node->data; /* Gets file informations */ tmp[0] = csv_str_to_file ( gw_db_file_get_name ( file)); tmp[1] = csv_str_to_file ( gw_db_file_get_description ( file)); tmp[2] = gw_db_file_get_rights_to_gchar ( file); tmp[3] = csv_str_to_file ( _tmp = plugin->gw_db_file_get_location ( context, gw_db_file_get_ref ( file))); g_free ( _tmp); tmp[4] = csv_format_date ( gw_db_file_get_cdate ( file)); tmp[5] = csv_format_date ( gw_db_file_get_adate ( file)); tmp[6] = csv_format_date ( gw_db_file_get_mdate ( file)); tmp[7] = csv_str_to_file ( gw_db_file_get_owner ( file)); tmp[8] = csv_str_to_file ( gw_db_file_get_group ( file)); category = plugin->gw_db_catalog_get_db_category ( context, gw_db_file_get_category ( file)); if ( gw_db_category_get_index ( category) != 0) { tmp[9] = csv_str_to_file ( _tmp = gw_db_category_get_name ( category)); } else { tmp[9] = g_strdup ( ""); } gw_db_category_free ( category); _tmp = g_strdup_printf ( CSV_LINE_FILE, tmp[0], data->current_disk_name, tmp[3], tmp[2], tmp[7], tmp[8], gw_db_file_get_inode ( file), gw_db_file_get_size ( file), tmp[4], tmp[5], tmp[6], tmp[9], tmp[1]); if ( fprintf ( f, _tmp) == 0 ) { fclose ( f); g_free ( _tmp); if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} if ( tmp[2] != NULL ) {g_free ( tmp[2]);tmp[2] = NULL;} if ( tmp[3] != NULL ) {g_free ( tmp[3]);tmp[3] = NULL;} if ( tmp[4] != NULL ) {g_free ( tmp[4]);tmp[4] = NULL;} if ( tmp[5] != NULL ) {g_free ( tmp[5]);tmp[5] = NULL;} if ( tmp[6] != NULL ) {g_free ( tmp[6]);tmp[6] = NULL;} if ( tmp[7] != NULL ) {g_free ( tmp[7]);tmp[7] = NULL;} if ( tmp[8] != NULL ) {g_free ( tmp[8]);tmp[8] = NULL;} if ( tmp[9] != NULL ) {g_free ( tmp[9]);tmp[9] = NULL;} return -1; } g_free ( _tmp); if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} if ( tmp[2] != NULL ) {g_free ( tmp[2]);tmp[2] = NULL;} if ( tmp[3] != NULL ) {g_free ( tmp[3]);tmp[3] = NULL;} if ( tmp[4] != NULL ) {g_free ( tmp[4]);tmp[4] = NULL;} if ( tmp[5] != NULL ) {g_free ( tmp[5]);tmp[5] = NULL;} if ( tmp[6] != NULL ) {g_free ( tmp[6]);tmp[6] = NULL;} if ( tmp[7] != NULL ) {g_free ( tmp[7]);tmp[7] = NULL;} if ( tmp[8] != NULL ) {g_free ( tmp[8]);tmp[8] = NULL;} if ( tmp[9] != NULL ) {g_free ( tmp[9]);tmp[9] = NULL;} if ( gw_db_file_is_real_directory ( file) == TRUE ) { /* Saves all subfolders */ csv_file_save_folder ( context, node, buf); } } return 0; } gint csv_file_save ( GWDBContext *context) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); FILE *f = NULL; GWDBCatalog *catalog = NULL; GWDBDisk *disk = NULL; GList *categories; gint size = 0; gchar *mode = "wb+"; gchar *tmp[9]; GWStringBuffer *strbuf[2]; _data *data = gw_db_context_get_data ( context); GNode *tree = NULL, *node = NULL; gint i = 0, nb = 0; gchar *fullfiletmpname = NULL; gchar *_tmp = NULL; GWDBCategory *category = NULL; #if GW_DEBUG_TIME time_t begin; time ( &begin); #endif catalog = data->catalog; /* Makes a save in a tempory file to prevent database lost in case of crash. */ fullfiletmpname = g_strconcat ( gw_db_catalog_get_db_name ( catalog), ".tmp", NULL); /* Creates file */ if ( (data->file = f = fopen ( fullfiletmpname, mode)) == NULL ) { return -1; } /* Writes catalog informations */ if ( fprintf ( f, "CATALOG_NAME;CATALOG_DESCRIPTION;CATALOG_PROGRAM_BUILDER\n")==0 ) { fclose ( f); return -1; } tmp[0] = csv_str_to_file ( gw_db_catalog_get_name ( catalog)); tmp[1] = csv_str_to_file ( gw_db_catalog_get_description ( catalog)); tmp[2] = csv_str_to_file ( gw_db_catalog_get_program_builder ( catalog)); if ( fprintf ( f, "%s;%s;%s\n", tmp[0], tmp[1], tmp[2]) == 0 ) { fclose ( f); if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} if ( tmp[2] != NULL ) {g_free ( tmp[2]);tmp[2] = NULL;} return -1; } if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} if ( tmp[2] != NULL ) {g_free ( tmp[2]);tmp[2] = NULL;} if ( fprintf ( f, "\n") == -1 ) { fclose ( f); return -1; } /* Writes catelories list */ if ( fprintf ( f, "CATEGORY_NAME;CATEGORY_DESCRIPTION\n")==0 ) { fclose ( f); return -1; } if ( (categories = data->categories) != NULL) { categories = g_list_first ( categories); size = g_list_length ( categories); for ( i = 1; i < size; i++ ) { categories = g_list_next ( categories); if ( gw_db_category_get_index ( categories->data) != 0) { tmp[0] = csv_str_to_file ( gw_db_category_get_name ( categories->data)); tmp[1] = csv_str_to_file ( gw_db_category_get_description ( categories->data)); if ( fprintf ( f, "%s;%s\n", tmp[0], tmp[1]) == 0 ) { fclose ( f); if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} return -1; } if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} } } } if ( fprintf ( f, "\n") == -1 ) { fclose ( f); return -1; } strbuf[0] = gw_string_buffer_new ( ); strbuf[1] = gw_string_buffer_new ( ); /* Saves all disks */ if ( fprintf ( f, "DISK_NAME;DISK_NUM;DISK_FSNAME;DISK_PATH;DISK_FSTYPE;DISK_VOLUME;DISK_FULL;DISK_FREE;DISK_DATE;DISK_SERIAL;DISK_CATEGORY;DISK_DESCRIPTION\n")==0 ) { fclose ( f); return -1; } tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb; i++) { node = g_node_nth_child ( tree, i); disk = (GWDBDisk*)node->data; tmp[0] = csv_str_to_file ( gw_db_disk_get_name ( disk)); tmp[1] = csv_str_to_file ( gw_db_disk_get_fsname ( disk)); tmp[2] = csv_str_to_file ( gw_db_disk_get_path ( disk)); tmp[3] = csv_str_to_file ( gw_db_disk_get_fstype ( disk)); tmp[4] = csv_str_to_file ( gw_db_disk_get_volume ( disk)); tmp[5] = csv_str_to_file ( gw_db_disk_get_serial ( disk)); tmp[6] = csv_str_to_file ( gw_db_disk_get_description ( disk)); category = plugin->gw_db_catalog_get_db_category ( context, gw_db_disk_get_category ( disk)); if ( gw_db_category_get_index ( category) != 0 ) { tmp[7] = csv_str_to_file ( gw_db_category_get_name ( category)); } else { tmp[7] = g_strdup ( ""); } gw_db_category_free ( category); tmp[8] = csv_format_date ( gw_db_disk_get_date ( disk)); _tmp = g_strdup_printf (CSV_LINE_DISK, tmp[0], gw_db_disk_get_num ( disk), tmp[1], tmp[2], tmp[3], tmp[4], gw_db_disk_get_full ( disk), gw_db_disk_get_free ( disk), tmp[8], tmp[5], tmp[7], tmp[6]); if ( fprintf ( f, _tmp) == 0 ) { fclose ( f); g_free ( _tmp); if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} if ( tmp[2] != NULL ) {g_free ( tmp[2]);tmp[2] = NULL;} if ( tmp[3] != NULL ) {g_free ( tmp[3]);tmp[3] = NULL;} if ( tmp[4] != NULL ) {g_free ( tmp[4]);tmp[4] = NULL;} if ( tmp[5] != NULL ) {g_free ( tmp[5]);tmp[5] = NULL;} if ( tmp[6] != NULL ) {g_free ( tmp[6]);tmp[6] = NULL;} if ( tmp[7] != NULL ) {g_free ( tmp[7]);tmp[7] = NULL;} if ( tmp[8] != NULL ) {g_free ( tmp[8]);tmp[8] = NULL;} gw_string_buffer_free ( strbuf[0]); gw_string_buffer_free ( strbuf[1]); return -1; } g_free ( _tmp); if ( tmp[0] != NULL ) {g_free ( tmp[0]);tmp[0] = NULL;} if ( tmp[1] != NULL ) {g_free ( tmp[1]);tmp[1] = NULL;} if ( tmp[2] != NULL ) {g_free ( tmp[2]);tmp[2] = NULL;} if ( tmp[3] != NULL ) {g_free ( tmp[3]);tmp[3] = NULL;} if ( tmp[4] != NULL ) {g_free ( tmp[4]);tmp[4] = NULL;} if ( tmp[5] != NULL ) {g_free ( tmp[5]);tmp[5] = NULL;} if ( tmp[6] != NULL ) {g_free ( tmp[6]);tmp[6] = NULL;} if ( tmp[7] != NULL ) {g_free ( tmp[7]);tmp[7] = NULL;} if ( tmp[8] != NULL ) {g_free ( tmp[8]);tmp[8] = NULL;} } if ( fprintf ( f, "\n") == -1 ) { fclose ( f); return -1; } /* Saves all files */ if ( fprintf ( f, "FILE_NAME;FILE_DISK;FILE_LOCATION;FILE_RIGTHS;FILE_OWNER;FILE_GROUP;FILE_INODE;FILE_SIZE;FILE_CREATION_DATE;FILE_ACCESS_DATE;FILE_MODIFICATION_DATE;FILE_CATEGORY;FILE_DESCRIPTION\n")==0 ) { fclose ( f); return -1; } for ( i = 0; i < nb; i++) { node = g_node_nth_child ( tree, i); disk = (GWDBDisk*)node->data; data->current_disk_name = gw_db_disk_get_name ( disk); csv_file_save_folder ( context, node, strbuf); data->current_disk_name = NULL; } gw_string_buffer_free ( strbuf[0]); gw_string_buffer_free ( strbuf[1]); /* Closes file */ if ( fclose ( f) == -1 ) { return -1; } /* Deteles the previous version of the catalog file before renames the temporary files with the catalog file name because rename() cannot eraze a file. */ unlink ( gw_db_catalog_get_db_name ( catalog)); rename ( fullfiletmpname, gw_db_catalog_get_db_name ( catalog)); /* Catalog informations were saved */ gw_db_catalog_set_ismodified ( catalog, FALSE); #if GW_DEBUG_TIME gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, _( "Elapsed time to save the catalog : %d secs"), time ( NULL) - begin); #endif return 0; } GWDBContext * plugin_db_catalog_create ( GWCatalogPlugin *plugin, const gchar* name) { GWDBContext *context = csv_context_new ( plugin); _data *data = gw_db_context_get_data ( context); GWDBCatalog *catalog = data->catalog; /* Initializes the catalog information */ gw_db_catalog_set_name ( catalog, g_strdup ( name)); gw_db_catalog_set_short_db_name ( catalog, g_strdup ( name)); return context; } GWDBContext * plugin_db_catalog_open ( GWCatalogPlugin *plugin, const gchar* path) { GWDBContext *context = NULL; GWDBCatalog *catalog = NULL; GWDBCategory *category = NULL; GWDBDisk *disk = NULL; FILE *f = NULL; _data *data = NULL; GWStringBuffer *sb = NULL, *tmp_sb = NULL; gchar **tmp = NULL; gchar *buf = NULL; struct stat f_info; GNode *parent = NULL; gchar *disk_name = NULL, *location = NULL; GWDBFile *file = NULL; GWDBFile *folder = NULL, *current = NULL; gint i = 0; gint index = 0; gchar *extension = NULL; /* Checks if the given path is valid */ if ( path==NULL || strlen ( path)==0) { return NULL; } /* Checks if the given file extension is really ".csv" */ extension = strrchr ( path, '.'); if ( extension==NULL || strlen ( extension)!=4 || strcmp(".csv",extension)!=0) { return NULL; } /* Reads the CSV file and load all the catalog in memory. */ if ( (f = fopen ( path, "r")) != NULL ) { context = csv_context_new ( plugin); data = gw_db_context_get_data ( context); catalog = data->catalog; if ( stat ( path, &f_info) != -1 ) { gw_db_catalog_set_size ( catalog, f_info.st_size); } gw_db_catalog_set_db_name ( catalog, g_strdup ( path)); if ( strrchr ( path, G_DIR_SEPARATOR) != NULL) { gw_db_catalog_set_short_db_name ( catalog, g_strdup ( strrchr ( path, G_DIR_SEPARATOR) + 1)); } else { //TODO impossible?? gw_db_catalog_set_short_db_name ( catalog, g_strdup ( path)); } tmp_sb = gw_string_buffer_new ( ); while ( (buf = cvs_file_read_record ( f, &sb, tmp_sb)) != NULL ) { data->sb = sb; if ( strcmp ( buf, "CATALOG_NAME;CATALOG_DESCRIPTION;CATALOG_PROGRAM_BUILDER") == 0 ) { if ( (buf = cvs_file_read_record ( f, &sb, tmp_sb)) != NULL ) { if ( strlen ( buf) == 0 ) {break;} gw_db_catalog_set_name ( catalog, cvs_file_read_field_str ( buf, &index)); gw_db_catalog_set_description ( catalog, cvs_file_read_field_str ( buf, &index)); gw_db_catalog_set_program_builder ( catalog, cvs_file_read_field_str ( buf, &index)); } } else if ( strcmp ( buf, "CATEGORY_NAME;CATEGORY_DESCRIPTION") == 0 ) { while ( (buf = cvs_file_read_record ( f, &sb, tmp_sb)) != NULL ) { if ( strlen ( buf) == 0 ) {break;} category = csv_category_from_str ( buf, context); data->categories = g_list_append ( data->categories, category); gw_db_category_set_index ( category, g_list_length ( g_list_first ( data->categories)) - 1); } } else if ( strcmp ( buf, "DISK_NAME;DISK_NUM;DISK_FSNAME;DISK_PATH;DISK_FSTYPE;DISK_VOLUME;DISK_FULL;DISK_FREE;DISK_DATE;DISK_SERIAL;DISK_CATEGORY;DISK_DESCRIPTION") == 0 ) { while ( (buf = cvs_file_read_record ( f, &sb, tmp_sb)) != NULL ) { if ( strlen ( buf) == 0 ) {break;} disk = csv_disk_from_str ( buf, context); g_node_append ( data->tree, parent = g_node_new ( disk)); gw_db_disk_set_ref ( disk, parent); } } else if ( strcmp ( buf, "FILE_NAME;FILE_DISK;FILE_LOCATION;FILE_RIGTHS;FILE_OWNER;FILE_GROUP;FILE_INODE;FILE_SIZE;FILE_CREATION_DATE;FILE_ACCESS_DATE;FILE_MODIFICATION_DATE;FILE_CATEGORY;FILE_DESCRIPTION") == 0 ) { while ( (buf = cvs_file_read_record ( f, &sb, tmp_sb)) != NULL ) { if ( strlen ( buf) == 0 ) {break;} file = csv_file_from_str ( buf, context, &disk_name, &location); disk = plugin->gw_db_catalog_get_db_disk_by_name ( context, disk_name); tmp = g_strsplit ( location, "/", 0); for ( i = 1; (tmp[i] != NULL) && (strlen(tmp[i]) > 0); i++) { if ( i == 1 ) { folder = plugin->gw_db_disk_get_db_file_by_name ( context, gw_db_disk_get_ref ( disk), tmp[i]); } else { folder = plugin->gw_db_file_get_db_file_by_name ( context, gw_db_file_get_ref ( current), tmp[i]); } gw_db_file_free ( current); current = folder; } if ( strcmp ( location, "/") == 0 ) { g_node_append ( gw_db_disk_get_ref ( disk), parent = g_node_new ( file)); gw_db_file_set_ref ( file, parent); } else { g_node_append ( gw_db_file_get_ref ( current), parent = g_node_new ( file)); gw_db_file_set_ref ( file, parent); } g_free ( disk_name); g_free ( location); g_strfreev ( tmp); location = NULL; } } else {} } gw_string_buffer_free ( tmp_sb); fclose ( f); gw_db_catalog_set_ismodified ( data->catalog, FALSE); } else {} return context; } gint plugin_db_catalog_save ( GWDBContext *context) { _data *data = NULL; gint result = -1; if ( context != NULL) { data = gw_db_context_get_data ( context); if ( gw_db_catalog_is_modified ( data->catalog) ) { result = csv_file_save ( context); } else {} } else {} return result; } gint plugin_db_catalog_close ( GWDBContext *context) { _data *data = NULL; GNode *tree = NULL, *node = NULL; gint i = 0, nb = 0; gint result = -1; if ( context != NULL ) { data = gw_db_context_get_data ( context); /* Destroys the catalog tree */ tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb; i++ ) { node = g_node_first_child ( tree); if ( node != NULL ) { g_node_disk_free ( node, NULL); } else {} } /* Frees the catalog information */ gw_db_catalog_free ( data->catalog); /* Frees all the categories */ if ( data->categories != NULL ) { g_list_foreach ( data->categories, (GFunc)gw_db_data_category_free, NULL); g_list_free ( data->categories); } /* Destroys all the data context */ gw_string_buffer_free ( data->sb); g_free ( data); result = 0; } return result; } /**/guint64 plugin_db_catalog_get_capacity ( GWDBContext *context) { GWDBDisk* disk = NULL; _data *data = NULL; GNode *tree = NULL; gint i = 0, nb = 0; guint64 capacity = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb; i++ ) { disk = g_node_nth_child ( tree, i)->data; capacity += gw_db_disk_get_capacity ( disk); } } return capacity; }/**/ /**/guint64 plugin_db_catalog_get_full ( GWDBContext *context) { GWDBDisk* disk = NULL; _data *data = NULL; GNode *tree = NULL; gint i = 0, nb = 0; guint64 full = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb; i++ ) { disk = g_node_nth_child ( tree, i)->data; full += gw_db_disk_get_full ( disk); } } return full; }/**/ /**/guint64 plugin_db_catalog_get_free ( GWDBContext *context) { GWDBDisk* disk = NULL; _data *data = NULL; GNode *tree = NULL; gint i = 0, nb = 0; guint64 free = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb; i++ ) { disk = g_node_nth_child ( tree, i)->data; free += gw_db_disk_get_free ( disk); } } return free; }/**/ glong plugin_db_catalog_get_nb_db_files ( GWDBContext *context) { _data *data = NULL; GNode *tree = NULL; glong count = 0; gint i = 0, j = 0, nb_disk = 0, nb = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb_disk = g_node_n_children ( tree); for ( i = 0; i < nb_disk; i++ ) { nb = g_node_n_children ( g_node_nth_child ( tree, i)); for ( j = 0; j < nb; j++ ) { g_node_traverse ( g_node_nth_child ( g_node_nth_child ( tree, i), j), G_LEVEL_ORDER, G_TRAVERSE_LEAFS, -1, (GNodeTraverseFunc)g_node_count_files, &count); } } } return count; } glong plugin_db_catalog_get_nb_db_folders ( GWDBContext *context) { _data *data = NULL; GNode *tree = NULL; glong count = 0; gint i = 0, j = 0, nb_disk = 0, nb = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb_disk = g_node_n_children ( tree); for ( i = 0; i < nb_disk; i++ ) { nb = g_node_n_children ( g_node_nth_child ( tree, i)); for ( j = 0; j < nb; j++ ) { g_node_traverse ( g_node_nth_child ( g_node_nth_child ( tree, i), j), G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, (GNodeTraverseFunc)g_node_count_folders, &count); } } } return count; } gint plugin_db_catalog_get_nb_db_disks ( GWDBContext *context) { _data *data = NULL; GNode *tree = NULL; gint nb = -1; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); } return nb; } GWDBDisk** plugin_db_catalog_get_db_disks ( GWDBContext *context) { GWDBDisk** disks = NULL; GWDBDisk* disk = NULL; _data *data = NULL; GNode *tree = NULL; gint i = 0, nb = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); disks = (GWDBDisk**)g_malloc(sizeof(GWDBDisk*)*(nb+1)); for ( i = 0; i <= nb; i++ ) disks[i] = NULL; for ( i = 0; i < nb; i++ ) { disk = g_node_nth_child ( tree, i)->data; disks[i] = gw_db_disk_dup ( disk, &disks[i]); } } return disks; } glong plugin_db_disk_get_nb_db_files ( GWDBContext *context, GWDBDiskPK ref) { GNode *disk = ref; glong count = 0; gint i = 0, nb = 0; if ( context != NULL ) { nb = g_node_n_children ( disk); for ( i = 0; i < nb; i++) { g_node_traverse ( g_node_nth_child ( disk, i), G_LEVEL_ORDER, G_TRAVERSE_LEAFS, -1, (GNodeTraverseFunc)g_node_count_files, &count); } } return count; } glong plugin_db_disk_get_nb_db_folders ( GWDBContext *context, GWDBDiskPK ref) { GNode *disk = ref; glong count = 0; gint i = 0, nb = 0; if ( context != NULL ) { nb = g_node_n_children ( disk); for ( i = 0; i < nb; i++) { g_node_traverse ( g_node_nth_child ( disk, i), G_LEVEL_ORDER, G_TRAVERSE_ALL, -1, (GNodeTraverseFunc)g_node_count_folders, &count); } } return count; } GWDBFile** plugin_db_disk_get_db_files ( GWDBContext *context, GWDBDiskPK ref) { GWDBFile** files = NULL; GWDBFile* file = NULL; GNode *disk = ref; gint i = 0, nb = 0; if ( context != NULL ) { nb = g_node_n_children ( disk); files = (GWDBFile**)g_malloc(sizeof(GWDBFile*)*(nb+1)); for ( i = 0; i <= nb; i++ ) files[i] = NULL; for ( i = 0; i < nb; i++ ) { file = g_node_nth_child ( disk, i)->data; files[i] = gw_db_file_dup ( file, &files[i]); } } return files; } GWDBFile** plugin_db_file_get_db_files ( GWDBContext *context, GWDBFilePK ref) { GWDBFile** files = NULL; GWDBFile* file = NULL; GNode *folder = ref; gint i = 0, nb = 0; if ( context != NULL ) { nb = g_node_n_children ( folder); files = (GWDBFile**)g_malloc(sizeof(GWDBFile*)*(nb+1)); for ( i = 0; i <= nb; i++ ) files[i] = NULL; for ( i = 0; i < nb; i++ ) { file = g_node_nth_child ( folder, i)->data; files[i] = gw_db_file_dup ( file, &files[i]); } } return files; } /**/GWDBFile* plugin_db_disk_get_db_file_by_name ( GWDBContext *context, GWDBDiskPK ref, gchar *name) { GWDBFile* file = NULL, *file_match = NULL; GNode *disk = ref; gint i = 0, nb = 0; if ( context != NULL ) { nb = g_node_n_children ( disk); for ( i = 0; i < nb && file_match == NULL; i++ ) { file = g_node_nth_child ( disk, i)->data; if ( strcmp ( gw_db_file_get_name ( file), name) == 0) { file_match = gw_db_file_dup ( file, &file_match); } } } return file_match; }/**/ /**/GWDBFile* plugin_db_file_get_db_file_by_name ( GWDBContext *context, GWDBFilePK ref, gchar *name) { GWDBFile* file = NULL, *file_match = NULL; GNode *folder = ref; gint i = 0, nb = 0; if ( context != NULL ) { nb = g_node_n_children ( folder); for ( i = 0; i < nb && file_match == NULL; i++ ) { file = g_node_nth_child ( folder, i)->data; if ( strcmp ( gw_db_file_get_name ( file), name) == 0) { file_match = gw_db_file_dup ( file, &file_match); } } } return file_match; }/**/ GWDBDisk* plugin_db_file_get_db_disk ( GWDBContext *context, GWDBFilePK ref) { _data *data = NULL; GNode *tree = NULL; GWDBDisk *disk = NULL; gint i = 0, nb = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb; i++ ) { if ( g_node_is_ancestor ( g_node_nth_child ( tree, i), ref) == TRUE) { disk = gw_db_disk_dup ( g_node_nth_child ( tree, i)->data, &disk); break; } else { disk = NULL; } } } return disk; } GWDBFile * plugin_db_file_get_parent_db_file ( GWDBContext *context, GWDBFilePK ref) { GNode *node = ref; GWDBFile *parent = NULL; if ( context != NULL) { if ( g_node_depth ( node) > 3 ) { parent = gw_db_file_dup ( node->parent->data, &parent); } else{} } return parent; } /**/gchar* plugin_db_file_get_location ( GWDBContext *context, GWDBFilePK ref) { _data *data = NULL; GNode *tree = NULL, *current = ref; gchar *location = NULL,*tmp = NULL; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; location = g_strdup ( "/"); current = current->parent; while ( g_node_depth ( current) > 2) { tmp = g_strconcat ( "/", gw_db_file_get_name ( current->data), location, NULL); g_free ( location); location = tmp; current = current->parent; } } return location; }/**/ GWDBDiskPK plugin_db_catalog_add_db_disk ( GWDBContext *context, GWDBDisk *disk) { _data *data = NULL; GNode *tree = NULL; GWDBDiskPK pk = NULL; GWDBDisk *disk_dup = NULL; if ( context != NULL) { data = gw_db_context_get_data ( context); tree = data->tree; /* It is the minimal test to process!! */ if ( gw_db_disk_get_name ( disk) != NULL ) { disk_dup = gw_db_disk_dup ( disk, &disk_dup); pk = g_node_new ( disk_dup); gw_db_disk_set_ref ( disk_dup, pk); gw_db_disk_set_ref ( disk, pk); g_node_append ( tree, pk); gw_db_catalog_set_ismodified ( data->catalog, TRUE); gw_db_category_add_disk ( gw_db_disk_get_category ( disk_dup)); } } return pk; } GWDBFilePK plugin_db_disk_add_db_file ( GWDBContext *context, GWDBDiskPK ref, GWDBFile *file) { GNode *node = ref; GWDBFilePK pk = NULL; GWDBFile *file_dup = NULL; if ( context != NULL && ref != NULL) { /* It is the minimal test to process!! */ if ( gw_db_file_get_name ( file) != NULL ) { if ( g_node_depth ( node) == 2 ) { file_dup = gw_db_file_dup ( file, &file_dup); pk = g_node_new ( file_dup); gw_db_file_set_ref ( file_dup, pk); gw_db_file_set_ref ( file, pk); g_node_append ( node, pk); gw_db_category_add_file ( gw_db_file_get_category ( file_dup)); } } } return pk; } GWDBFilePK plugin_db_file_add_db_file ( GWDBContext *context, GWDBFilePK ref, GWDBFile *file) { GNode *node = ref; GWDBFilePK pk = NULL; GWDBFile *file_dup = NULL; if ( context != NULL && ref != NULL) { /* It is the minimal test to process!! */ if ( gw_db_file_get_name ( file) != NULL ) { if ( g_node_depth ( node) > 2 ) { file_dup = gw_db_file_dup ( file, &file_dup); pk = g_node_new ( file_dup); gw_db_file_set_ref ( file_dup, pk); gw_db_file_set_ref ( file, pk); g_node_append ( node, pk); gw_db_category_add_file ( gw_db_file_get_category ( file_dup)); } else if ( g_node_depth ( node) == 2 ) { file_dup = gw_db_file_dup ( file, &file_dup); pk = g_node_new ( file_dup); gw_db_file_set_ref ( file_dup, pk); gw_db_file_set_ref ( file, pk); g_node_append ( node, pk); gw_db_category_add_file ( gw_db_file_get_category ( file_dup)); } } } return pk; } gint plugin_db_catalog_remove_db_disk ( GWDBContext *context, GWDBDiskPK ref) { GNode *node = ref; _data *data = NULL; if ( context != NULL && ref != NULL) { /* It is the minimal test to process!! */ if ( g_node_depth ( node) == 2 ) { gw_db_category_remove_disk ( gw_db_disk_get_category ( node->data)); g_node_disk_free ( node, NULL); data = gw_db_context_get_data ( context); gw_db_catalog_set_ismodified ( data->catalog, TRUE); return 0; } } return -1; } gint plugin_db_catalog_remove_db_file ( GWDBContext *context, GWDBFilePK ref) { GNode *node = ref; _data *data = NULL; if ( context != NULL && ref != NULL) { /* It is the minimal test to process!! */ if ( g_node_depth ( node) > 2 ) { g_node_unlink ( node); g_node_files_free ( node, NULL); g_node_destroy ( node); data = gw_db_context_get_data ( context); gw_db_catalog_set_ismodified ( data->catalog, TRUE); return 0; } } return -1; } gint plugin_db_disk_update ( GWDBContext *context, GWDBDisk *disk) { GNode *node = NULL; GWDBDisk *disk_dup = NULL; _data *data = NULL; if ( context != NULL && disk != NULL ) { /* It is the minimal test to process!! */ //TODO it should be better to test if disk name already exists if ( gw_db_disk_get_name ( disk) != NULL ) { node = gw_db_disk_get_ref ( disk); if ( g_node_depth ( node) == 2 ) { disk_dup = node->data; if ( !gw_db_disk_equals ( disk_dup, disk) ) { if ( gw_db_disk_get_category ( disk) != gw_db_disk_get_category ( disk_dup)) { gw_db_category_add_disk ( gw_db_disk_get_category ( disk)); gw_db_category_remove_disk ( gw_db_disk_get_category ( disk_dup)); } gw_db_disk_dup ( disk, &disk_dup); data = gw_db_context_get_data ( context); gw_db_catalog_set_ismodified ( data->catalog, TRUE); return 0; } } } } return -1; } gint plugin_db_file_update ( GWDBContext *context, GWDBFile *file) { GNode *node = NULL; GWDBFile *file_dup = NULL; _data *data = NULL; if ( context != NULL && file != NULL ) { /* It is the minimal test to process!! */ //TODO it should be better to test if disk name already exists if ( gw_db_file_get_name ( file) != NULL ) { node = gw_db_file_get_ref ( file); if ( g_node_depth ( node) > 2 ) { file_dup = node->data; if ( !gw_db_file_equals ( file_dup, file) ) { if ( gw_db_file_get_category ( file) != gw_db_file_get_category ( file_dup)) { gw_db_category_add_file ( gw_db_file_get_category ( file)); gw_db_category_remove_file ( gw_db_file_get_category ( file_dup)); } gw_db_file_dup ( file, &file_dup); data = gw_db_context_get_data ( context); gw_db_catalog_set_ismodified ( data->catalog, TRUE); return 0; } } } } return -1; } /**/GWDBCategory* plugin_db_catalog_get_db_category_by_index ( GWDBContext *context, gint index) { GWDBCategory *category = NULL; GList *categories = NULL; _data *data = NULL; gint i = 0, nb = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); categories = data->categories; nb = g_list_length ( categories); for ( i = 0; i < nb && category == NULL; i++) { if ( gw_db_category_get_index ( g_list_nth ( categories, i)->data) == index) { category = gw_db_category_dup ( g_list_nth ( categories, i)->data, &category); } } } return category; }/**/ GWDBCatalog* plugin_db_catalog_get_db_catalog ( GWDBContext *context) { GWDBCatalog *catalog = NULL; _data *data = NULL; if ( context != NULL) { data = gw_db_context_get_data ( context); catalog = gw_db_catalog_dup ( data->catalog, &catalog); } return catalog; } GWDBDisk* plugin_db_catalog_get_db_disk ( GWDBContext *context, GWDBDiskPK ref) { GWDBDisk *disk = NULL; GNode *node = ref; if ( context != NULL && ref != NULL) { disk = gw_db_disk_dup ( node->data, &disk); } return disk; } GWDBFile* plugin_db_catalog_get_db_file ( GWDBContext *context, GWDBFilePK ref) { GWDBFile *file = NULL; GNode *node = ref; _data *data = NULL; if ( context != NULL && ref != NULL) { data = gw_db_context_get_data ( context); if ( g_node_is_ancestor ( data->tree, node) && g_node_depth ( node) > 2) { file = gw_db_file_dup ( node->data, &file); } } return file; } GWDBCategory* plugin_db_catalog_get_db_category ( GWDBContext *context, GWDBCategoryPK ref) { GWDBCategory *category = NULL; if ( context != NULL && ref != NULL) { category = gw_db_category_dup ( ref, &category); } return category; } GWDBCategory** plugin_db_catalog_get_db_categories ( GWDBContext *context) { GWDBCategory **categories = NULL; _data *data = NULL; gint nb = 0, i = 0; if ( context != NULL) { data = gw_db_context_get_data ( context); nb = g_list_length ( g_list_first ( data->categories)); categories = (GWDBCategory**)g_malloc(sizeof(GWDBCategory*)*(nb+1)); for ( i = 0; i <= nb; i++ ) categories[i] = NULL; for ( i = 0; i < nb; i++ ) { categories[i] = gw_db_category_dup ( g_list_nth ( data->categories, i)->data, &categories[i]); } } return categories; } GWDBCategoryPK plugin_db_catalog_add_db_category ( GWDBContext *context, GWDBCategory *category) { _data *data = NULL; GWDBCategoryPK pk = NULL; gint index = 0; GWDBCategory *category_dup = NULL; if ( context != NULL && category != NULL ) { data = gw_db_context_get_data ( context); category_dup = gw_db_category_dup ( category, &category_dup); data->categories = g_list_append ( data->categories, category_dup); index = g_list_length ( g_list_first ( data->categories)) - 1; if ( index == -1) index = 0; gw_db_category_set_index ( category_dup, index); gw_db_category_set_index ( category, index); gw_db_category_set_ref ( category_dup, category_dup); gw_db_category_set_ref ( category, category_dup); gw_db_catalog_set_ismodified ( data->catalog, TRUE); pk = category_dup; } return pk; } gint plugin_db_catalog_remove_db_category ( GWDBContext *context, GWDBCategoryPK ref) { _data *data = NULL; GWDBCategory *category = ref; GList *categories = NULL; gint size = 0, i = 0, index = 0; if ( context != NULL && category != NULL) { data = gw_db_context_get_data ( context); categories = data->categories; size = g_list_length ( g_list_first ( categories)) - 1; index = gw_db_category_get_index ( category); categories = g_list_remove ( categories, gw_db_category_get_ref ( category)); categories = g_list_first ( categories); categories = g_list_first ( categories); categories = g_list_nth ( categories, index); for ( i = index; i < size; i++) { gw_db_category_set_index ( categories->data, gw_db_category_get_index ( categories->data) - 1); categories = g_list_next ( categories); } gw_db_catalog_set_ismodified ( data->catalog, TRUE); return 0; } return -1; } gint plugin_db_catalog_update ( GWDBContext *context, GWDBCatalog *catalog) { GWDBCatalog *catalog_dup = NULL; _data *data = NULL; gchar *short_db_name = NULL, *db_name = NULL; if ( context != NULL && catalog != NULL ) { data = gw_db_context_get_data ( context); //TODO it should be better to test if catalog is correct catalog_dup = data->catalog; if ( !gw_db_catalog_equals ( catalog_dup, catalog) ) { gw_db_catalog_dup ( catalog, &catalog_dup); db_name = gw_db_catalog_get_db_name ( catalog_dup); if ( strlen ( db_name) < 4 || strcmp ( ".csv", &db_name[strlen ( db_name)-4]) != 0 ) { gw_db_catalog_set_db_name ( catalog_dup, g_strconcat ( db_name, ".csv", NULL)); } short_db_name = gw_db_catalog_get_short_db_name ( catalog_dup); if ( strlen ( short_db_name) < 4 || strcmp ( ".csv", &short_db_name[strlen ( short_db_name)-4]) != 0 ) { gw_db_catalog_set_short_db_name ( catalog_dup, g_strconcat ( short_db_name, ".csv", NULL)); } gw_db_catalog_set_ismodified ( catalog_dup, TRUE); return 0; } } return -1; } gint plugin_db_category_update ( GWDBContext *context, GWDBCategory *category) { GWDBCategory *category_dup = NULL; _data *data = NULL; gint i = 0; if ( context != NULL && category != NULL ) { data = gw_db_context_get_data ( context); for ( i = 0; i < g_list_length ( data->categories); i++) { category_dup = g_list_nth ( data->categories, i)->data; if ( gw_db_category_get_index ( category) == gw_db_category_get_index ( category_dup)) { break; } else { category_dup = NULL; } } if ( category_dup != NULL ) { category_dup = gw_db_category_dup ( category, &category_dup); data = gw_db_context_get_data ( context); gw_db_catalog_set_ismodified ( data->catalog, TRUE); return 0; } } return -1; } /**/GWDBCategory* plugin_db_catalog_get_db_category_by_name ( GWDBContext *context, gchar *name) { GWDBCategory *category = NULL; GList *categories = NULL; _data *data = NULL; gint i = 0, nb = 0; if ( context != NULL && name != NULL ) { data = gw_db_context_get_data ( context); categories = data->categories; nb = g_list_length ( categories); for ( i = 0; i < nb && category == NULL; i++) { if ( strcmp ( name, gw_db_category_get_name ( g_list_nth ( categories, i)->data)) == 0) { category = gw_db_category_dup ( g_list_nth ( categories, i)->data, &category); } } } return category; }/**/ /**/GWDBDisk* plugin_db_catalog_get_db_disk_by_name ( GWDBContext *context, gchar *name) { GWDBDisk* disk = NULL; GWDBDisk* disk_dup = NULL; _data *data = NULL; GNode *tree = NULL; gint i = 0, nb = 0; if ( context != NULL ) { data = gw_db_context_get_data ( context); tree = data->tree; nb = g_node_n_children ( tree); for ( i = 0; i < nb && disk == NULL; i++ ) { disk = g_node_nth_child ( tree, i)->data; if ( strcmp ( name, gw_db_disk_get_name ( disk)) != 0) { disk = NULL; } else { disk_dup = gw_db_disk_dup ( disk, &disk_dup); } } } return disk_dup; }/**/ GWPluginInfo * plugin_get_info ( ) { GWPluginInfo *plugin_info = gw_plugin_info_new ( ); gw_plugin_info_set_name ( plugin_info, g_strdup ( "CSV catalog")); gw_plugin_info_set_version ( plugin_info, g_strdup ( "1.0.0")); gw_plugin_info_set_author ( plugin_info, g_strdup ( "Sébastien LECACHEUR")); gw_plugin_info_set_description ( plugin_info, g_strdup ( "Store any catalog in a simple CSV file.")); gw_plugin_info_set_help ( plugin_info, g_strdup ( "There is no help at time")); return plugin_info; } gwhere-0.2.3/src/plugins/catalog/Makefile.in0000744000175000017500000002310510506327657017403 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ SUBDIRS = gwcatalog csv mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../../config.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu src/plugins/catalog/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # 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. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = src/plugins/catalog distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/plugins/catalog/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/src/plugins/Makefile.win0000644000175000017500000000116710240240150016134 0ustar bartbart# Project: libgwplugins # Makefile created for GWhere CC = gcc.exe WINDRES = windres.exe RES = OBJ = gwplugininfo.o $(RES) INCS = $(GWINCS) $(GTKINCS) -IC:/MINGW/include -IC:/MINGW/mingw_extra/include -IC:/GTK/include GTKINCS = -IC:/GTK/include/gtk-2.0 -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/atk-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include GWINCS = -I.. BIN = libgwplugins.a CFLAGS = $(INCS) -O2 -Wall -fnative-struct -DHAVE_CONFIG_H -DOS_WIN32 -DGTK_ENABLE_BROKEN .PHONY: clean all: $(BIN) clean: rm -f $(OBJ) $(BIN) $(BIN): $(OBJ) ar r $(BIN) $(OBJ) ranlib $(BIN) gwhere-0.2.3/src/plugins/gwplugininfo.c0000644000175000017500000000717510240240151016562 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gwsupport.h" #include "gwplugininfo.h" struct gw_plugin_info_s { gchar *name; gchar *version; gchar *author; gchar *description; gchar *help; }_GWPluginInfo; GWPluginInfo * gw_plugin_info_new ( void) { GWPluginInfo *plugin_info = NULL; if ( (plugin_info = (GWPluginInfo*)g_malloc0 ( sizeof ( GWPluginInfo))) != NULL ) { plugin_info->name = NULL; plugin_info->version = NULL; plugin_info->author = NULL; plugin_info->description = NULL; plugin_info->help = NULL; } return plugin_info; } gint gw_plugin_info_set_name ( GWPluginInfo *plugin_info, gchar *name) { if ( plugin_info != NULL ) { if ( plugin_info->name != NULL ) { g_free ( plugin_info->name); } plugin_info->name = name; return 0; } return -1; } gint gw_plugin_info_set_version ( GWPluginInfo *plugin_info, gchar *version) { if ( plugin_info != NULL ) { if ( plugin_info->version != NULL ) { g_free ( plugin_info->version); } plugin_info->version = version; return 0; } return -1; } gint gw_plugin_info_set_author ( GWPluginInfo *plugin_info, gchar *author) { if ( plugin_info != NULL ) { if ( plugin_info->author != NULL ) { g_free ( plugin_info->author); } plugin_info->author = author; return 0; } return -1; } gint gw_plugin_info_set_description ( GWPluginInfo *plugin_info, gchar *description) { if ( plugin_info != NULL ) { if ( plugin_info->description != NULL ) { g_free ( plugin_info->description); } plugin_info->description = description; return 0; } return -1; } gint gw_plugin_info_set_help ( GWPluginInfo *plugin_info, gchar *help) { if ( plugin_info != NULL ) { if ( plugin_info->help != NULL ) { g_free ( plugin_info->help); } plugin_info->help = help; return 0; } return -1; } gchar * gw_plugin_info_get_name ( GWPluginInfo *plugin_info) { if ( plugin_info != NULL ) { return plugin_info->name; } return NULL; } gchar * gw_plugin_info_get_version ( GWPluginInfo *plugin_info) { if ( plugin_info != NULL ) { return plugin_info->version; } return NULL; } gchar * gw_plugin_info_get_author ( GWPluginInfo *plugin_info) { if ( plugin_info != NULL ) { return plugin_info->author; } return NULL; } gchar * gw_plugin_info_get_description ( GWPluginInfo *plugin_info) { if ( plugin_info != NULL ) { return plugin_info->description; } return NULL; } gchar * gw_plugin_info_get_help ( GWPluginInfo *plugin_info) { if ( plugin_info != NULL ) { return plugin_info->help; } return NULL; } gint gw_plugin_info_free ( GWPluginInfo *plugin_info) { if ( plugin_info != NULL ) { gw_plugin_info_set_name ( plugin_info, NULL); gw_plugin_info_set_version ( plugin_info, NULL); gw_plugin_info_set_author ( plugin_info, NULL); gw_plugin_info_set_description ( plugin_info, NULL); gw_plugin_info_set_help ( plugin_info, NULL); g_free ( plugin_info); return 0; } return -1; } gwhere-0.2.3/src/plugins/gwplugininfo.h0000644000175000017500000001105210241213571016563 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * \file gwplugininfo.h * \brief An object for commons plugin information.\n * All the plugins \e SHOULD use this object in order to give their own information. * * \author Sébastien LECACHEUR * \version 1.0 * \date 2000-2005 */ #ifndef GW_PLUGIN_INFO_H #define GW_PLUGIN_INFO_H /*! * \brief A type definition for the plugin information.\n * This type definition is used by all the following functions. */ typedef struct gw_plugin_info_s GWPluginInfo; /*! * \brief Allocates a new GWPluginInfo object.\n * All the fields are NULL initialized. * \return The new allocated GWPluginInfo or NULL if no more memory available. */ GWPluginInfo * gw_plugin_info_new ( void); /*! * \brief Sets the name of the plugin. * \param plugin_info The plugin to set name. * \param name The name to set. * \return 0 if the name is correctly setted otherwise -1. * \warning The previous setted name is freed even if the given \a name is NULL. */ gint gw_plugin_info_set_name ( GWPluginInfo *plugin_info, gchar *name); /*! * \brief Sets the version of the plugin. * \param plugin_info The plugin to set version. * \param version The version to set. * \return 0 if the version is correctly setted otherwise -1. * \warning The previous setted version is freed even if the given \a version is NULL. */ gint gw_plugin_info_set_version ( GWPluginInfo *plugin_info, gchar *version); /*! * \brief Sets the author of the plugin. * \param plugin_info The plugin to set author. * \param author The author to set. * \return 0 if the author is correctly setted otherwise -1. * \warning The previous setted author is freed even if the given \a author is NULL. */ gint gw_plugin_info_set_author ( GWPluginInfo *plugin_info, gchar *author); /*! * \brief Sets the description of the plugin. * \param plugin_info The plugin to set description. * \param description The description to set. * \return 0 if the description is correctly setted otherwise -1. * \warning The previous setted description is freed even if the given \a description is NULL. */ gint gw_plugin_info_set_description ( GWPluginInfo *plugin_info, gchar *description); /*! * \brief Sets the help of the plugin. * \param plugin_info The plugin to set help. * \param help The help to set. * \return 0 if the help is correctly setted otherwise -1. * \warning The previous help name is freed even if the given \a help is NULL. */ gint gw_plugin_info_set_help ( GWPluginInfo *plugin_info, gchar *help); /*! * \brief Returns the name of the plugin. * \param plugin_info The plugin to get name. * \return The plugin name if it was setted otherwise NULL. */ gchar * gw_plugin_info_get_name ( GWPluginInfo *plugin_info); /*! * \brief Returns the version of the plugin. * \param plugin_info The plugin to get version. * \return The plugin version if it was setted otherwise NULL. */ gchar * gw_plugin_info_get_version ( GWPluginInfo *plugin_info); /*! * \brief Returns the author of the plugin. * \param plugin_info The plugin to get author. * \return The plugin author if it was setted otherwise NULL. */ gchar * gw_plugin_info_get_author ( GWPluginInfo *plugin_info); /*! * \brief Returns the description of the plugin. * \param plugin_info The plugin to get description. * \return The plugin description if it was setted otherwise NULL. */ gchar * gw_plugin_info_get_description ( GWPluginInfo *plugin_info); /*! * \brief Returns the help of the plugin. * \param plugin_info The plugin to get help. * \return The plugin help if it was setted otherwise NULL. */ gchar * gw_plugin_info_get_help ( GWPluginInfo *plugin_info); /*! * \brief Frees the given GWPluginInfo object. * \param plugin_info The object to free * \warning All the fields are freed to. */ gint gw_plugin_info_free ( GWPluginInfo *plugin_info); #endif gwhere-0.2.3/src/plugins/Makefile.in0000644000175000017500000003150610506327646015772 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ SUBDIRS = . descr catalog SOURCES = gwdescr.h gwcatalog.h INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir)/src @GTK_CFLAGS@ -D${HOST_OS} noinst_LIBRARIES = libgwplugins.a libgwplugins_a_SOURCES = gwcatalog.h gwdescr.h gwplugininfo.c gwplugininfo.h EXTRA_DIST = $(SOURCES) libgwplugins_a_LIBADD = mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libgwplugins_a_DEPENDENCIES = libgwplugins_a_OBJECTS = gwplugininfo.$(OBJEXT) CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best DEP_FILES = .deps/gwplugininfo.P SOURCES = $(libgwplugins_a_SOURCES) OBJECTS = $(libgwplugins_a_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu src/plugins/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-noinstLIBRARIES: clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) distclean-noinstLIBRARIES: maintainer-clean-noinstLIBRARIES: # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libgwplugins.a: $(libgwplugins_a_OBJECTS) $(libgwplugins_a_DEPENDENCIES) -rm -f libgwplugins.a $(AR) cru libgwplugins.a $(libgwplugins_a_OBJECTS) $(libgwplugins_a_LIBADD) $(RANLIB) libgwplugins.a # 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. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && 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; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = src/plugins distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/plugins/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile $(LIBRARIES) all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-noinstLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-noinstLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-recursive maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool install-data-recursive \ uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs-am installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/src/res/0000755000175000017500000000000010506575523013027 5ustar bartbartgwhere-0.2.3/src/res/gwicons.c0000744000175000017500000004174010023202520014625 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gwicons.h" /* XPM : New catalog */ static char *New_xpm[]={ "24 24 89 1", " c None", ". c #000000", "+ c #ADAD9C", "@ c #959585", "# c #DCDCC5", "$ c #DFDFC8", "% c #242424", "& c #A7A796", "* c #D7D7C1", "= c #D9D9C3", "- c #DCDCC4", "; c #DDDDC7", "> c #E1E1CA", ", c #A6A694", "' c #D6D6BF", ") c #D8D8C2", "! c #DBDBC4", "~ c #DFDFC7", "{ c #E3E3CB", "] c #B2B29F", "^ c #7C7C7C", "/ c #646464", "( c #D5D5BD", "_ c #D5D5BF", ": c #D7D7C0", "< c #DADAC3", "[ c #DEDEC6", "} c #E1E1C9", "| c #E5E5CD", "1 c #E9E9D1", "2 c #343434", "3 c #E7E7E7", "4 c #373736", "5 c #B8B8A6", "6 c #D3D3BC", "7 c #D9D9C2", "8 c #DDDDC5", "9 c #E0E0C8", "0 c #E8E8D0", "a c #ECECD4", "b c #EEEED5", "c c #ECECEC", "d c #EDEDED", "e c #3D3D37", "f c #CECEB7", "g c #E6E6CE", "h c #EAEAD2", "i c #F1F1D8", "j c #A5A594", "k c #EEEEE5", "l c #3C3C3C", "m c #8F8F80", "n c #D0D0B9", "o c #E4E4CB", "p c #EAEAD1", "q c #ECECD3", "r c #EFEFD6", "s c #F2F2D9", "t c #F3F3DA", "u c #EEEEE6", "v c #505050", "w c #929282", "x c #D1D1B9", "y c #E7E7CF", "z c #EBEBD2", "A c #F4F4DB", "B c #F5F5DC", "C c #969686", "D c #D2D2BC", "E c #E0E0C9", "F c #E9E9D0", "G c #EDEDD4", "H c #F0F0D7", "I c #BEBEAB", "J c #797973", "K c #D8D8C1", "L c #DDDDC6", "M c #98988F", "N c #E4E4CC", "O c #818174", "P c #E2E2CA", "Q c #BEBEAE", "R c #4E4E4E", "S c #828274", "T c #EBEBD3", "U c #BBBBA8", "V c #CDCDB8", "W c #4D4D45", "X c #A6A696", " ", " ", " . ", " ..+. ", " ..@#$% ", " ..&*=-;>. ", " ..,'**)!~{]. ", " .^/'(_:<[}|12 ", " .3456*789|0ab. ", " .cdef_!9g0hbij. ", " .kklmn9opqrist. ", " .uvwx-}yzbittAB. ", " ..CD!E{FGHtAABBI. ", " .JK7L>ypbitBBBBB). ", " .M!#$NyzbitBBBBBO. ", " .~9P|1qrsABBBB.. ", " .Q||0hGHtABB<. ", " R01hGrstAsS. ", " .TaGriss<. ", " .rHis1j. ", " .UstVW. ", " .tX. ", " .. ", " "}; /* XPM : Open file */ static char *Open_xpm[]={ "24 24 5 1", " c None", ". c #000000", "+ c #99907B", "@ c #FFFEF7", "# c #FFFFFF", " ", " ", " ", " ", " ", " .. ", " ...++. ", " .. ...++++@@#... ", " .++..++++@@@@..++. ", " .+++++@@@@@..++++. ", " .++@@@@@..++++++. ", " .++@@@..++++++++. ", " .+@@.++++++++++. ", " .++@.++++++++++. ", " .+@.++++++++++. ", " .++.++++++++.. ", " .+.++++++.. ", " .+.+++++. ", " ..+++.. ", " ..+.. ", " .. ", " ", " ", " "}; /* XPM : Save file */ static char *Save_xpm[]={ "24 24 64 1", " c None", ". c #000000", "+ c #779FA8", "@ c #495A5E", "# c #BFD1D5", "$ c #A8C1C5", "% c #E4ECED", "& c #FFFFFF", "* c #EEF3F4", "= c #E0E9EB", "- c #87AAB2", "; c #AEC4C9", "> c #F5F8F9", ", c #8BADB5", "' c #3E4D50", ") c #94B2B9", "! c #CFDCDF", "~ c #E4ECEE", "{ c #788A8D", "] c #EBF1F2", "^ c #E8EFF0", "/ c #F2F6F7", "( c #607A7F", "_ c #F0F4F5", ": c #536E75", "< c #A0BCC1", "[ c #465E63", "} c #4B575A", "| c #557278", "1 c #A4ABAD", "2 c #EAEAEA", "3 c #E4E4E4", "4 c #606364", "5 c #C6CACC", "6 c #F3F3F3", "7 c #F1F1F1", "8 c #E7E7E7", "9 c #E1E1E1", "0 c #A9B2B4", "a c #486166", "b c #34464A", "c c #729096", "d c #BCC2C3", "e c #F6F6F6", "f c #57696D", "g c #CFD8DA", "h c #DEDEDE", "i c #D8D8D8", "j c #8C9394", "k c #F2F2F2", "l c #3A474A", "m c #7EA4AC", "n c #D5DADA", "o c #E0E0E0", "p c #B4B4B4", "q c #657376", "r c #D0D5D6", "s c #E9E9E9", "t c #A7B0B2", "u c #D2D4D5", "v c #899293", "w c #484848", "x c #DDDDDD", "y c #8F9A9B", " ", " ", " ", " .. ", " ..+@. ", " ..#$%+. ", " ..#$#&*+@. ", " ..#$#&&&&=+. ", " ..-;#&&&&&&>,'. ", " .);!&&&&&&&&&~+. ", " .{)]&&&&&&&&&^+@. ", " .$=&&&&&&&/=+++. ", " .(-]&&&&_=++::+@. ", " .<=&&_=++[}|+:+. ", " .(-^=++[1234+:+@. ", " .)++:567890a+[b. ", " .c-+defg3hij+'.. ", " .)+:klmnopq.. ", " .|++rstuvw. ", " .a+:xy.. ", " ..... ", " ", " ", " "}; /* XPM : Close file */ static char *Close_xpm[]={ "24 24 4 1", "a c #7f7f7f", "b c #000000", " c None", "# c #ff0000", " ", " ", " ", " ", " ", " ", " # ", " ##a ### ", " ##a ##### ", " #######bb ", " #####b ", " ####b ", " ###### ", " ##b ### ", " ##b ### ", " #b ##a ", " #b #b ", " b b ", " ", " ", " ", " ", " ", " "}; /* XPM : Send mail */ static char * Send_mail_xpm[] = { "24 24 116 2", " c None", ". c #000000", "+ c #7B7B78", "@ c #C7C7C3", "# c #F1F0EB", "$ c #BFBFBC", "% c #5F5E5E", "& c #E3E3DF", "* c #F3F3EF", "= c #F2F2EE", "- c #F1F1EC", "; c #F0EFEB", "> c #D2D2CD", ", c #969592", "' c #616060", ") c #B5B5B4", "! c #F8F8F6", "~ c #F7F7F5", "{ c #F6F6F3", "] c #F5F5F2", "^ c #F4F4F0", "/ c #F2F1ED", "( c #F1F0EC", "_ c #F0EFEA", ": c #EFEEE9", "< c #4F4F4D", "[ c #BDBCB8", "} c #A7A6A3", "| c #C6C6C4", "1 c #7C7C7B", "2 c #525251", "3 c #DBDBD9", "4 c #F5F4F1", "5 c #F4F3F0", "6 c #F3F2EE", "7 c #999894", "8 c #62625F", "9 c #BCBCB6", "0 c #EBE9E3", "a c #838381", "b c #D7D6D4", "c c #A8A8A6", "d c #515150", "e c #7E7D7C", "f c #DAD9D5", "g c #EFEEE8", "h c #EEEDE7", "i c #4F4E4C", "j c #BCBBB6", "k c #EBE9E2", "l c #EAE8E1", "m c #F6F5F2", "n c #F4F3EF", "o c #B5B4B1", "p c #9B9A97", "q c #646361", "r c #92918E", "s c #EEEDE8", "t c #EDECE6", "u c #4E4E4C", "v c #797976", "w c #797874", "x c #E9E8E1", "y c #E8E7DF", "z c #B4B3AF", "A c #D0D0CD", "B c #F2F2ED", "C c #BFBEBA", "D c #BEBDB9", "E c #7A7A77", "F c #979691", "G c #EAE9E2", "H c #959590", "I c #787773", "J c #B8B7B0", "K c #E6E4DC", "L c #A9A9A6", "M c #626260", "N c #ECEBE4", "O c #EBEAE3", "P c #E9E7E0", "Q c #E8E6DF", "R c #E7E5DD", "S c #777671", "T c #93918C", "U c #BEBDB8", "V c #989793", "W c #ECEAE4", "X c #E8E6DE", "Y c #E6E4DB", "Z c #E4E3DA", "` c #75746F", " . c #91908A", ".. c #EEECE7", "+. c #62615F", "@. c #EBEAE4", "#. c #E7E6DE", "$. c #E6E5DC", "%. c #E5E4DB", "&. c #E4E2DA", "*. c #CCCBC4", "=. c #A3A29D", "-. c #B6B5B2", ";. c #BCBCB7", ">. c #CDCCC6", ",. c #959490", "'. c #ECEBE5", "). c #61615E", "!. c #E9E8E0", "~. c #CECDC7", "{. c #797875", "]. c #969590", "^. c #CFCEC8", "/. c #AEADA8", "(. c #585754", "_. c #7B7A76", " ", " ", " ", " . . . . ", " . . . . . + @ # $ . ", " . . . . . % $ & * = - ; > , . ", " . ' ) ! ~ { ] ^ * / ( _ : < [ } . ", " . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ", " . a b c d e f / # _ g h i j k l . ", " . m 4 n o p q r s t u v w x y z . ", " . A * B ( ; C D E u F G H I J K . ", " . L / ( _ : M t N O l P Q R S T . ", " . # _ g U V W 0 l P X R Y Z ` .. ", " . ; g ..+.@.G x y #.$.%.&.*.=.. . ", " . -.t ;.F G x y #.K >.,.. . . ", " . '.).G !.Q ~.H . . . ", " . {.].^./.. . . ", " . (._.. . ", " . . ", " ", " ", " ", " ", " "}; /* XPM : Catalog icon */ static char * catalog_xpm [] = { "16 16 16 1", ". c #808080", "# c #a0a0a0", "a c #c3c3c3", "b c #c0c000", "c c #00ff00", "d c #00ffff", "e c #000000", "f c #c0ffc0", "g c #ffff00", "h c #303030", "i c #ffffc0", " c None", "k c #c0ffff", "l c #585858", "m c #dcdcdc", "n c #ffffff", " hh ", " heehnn...nne ", " hhhhndgaaane ", " hhhhbbbaabbe ", " hhhhmmkbnmme ", " hhhhmmn.kmme ", " hhhh#nmmik.e ", " hhhhmmmmfime ", " heehmm##..gaae ", " he.e .dgaane", " aae acdanaa", " a . aac aaa", " . aaangaa", " .aaagde", " .aace ", " "}; /* XPM : file icon */ static char * file_xpm [] = { "16 16 7 1", "# c #000000", "b c #ffffff", "e c #000000", "d c #404000", "c c #c0c000", "a c #ffffc0", " c None", " ", " # ", " # #a## ", " #b#bbba## ", " #b#bbbabbb# ", " #b#bba##bb# ", " #b#abb#bb## ", " #a#aab#bbbab## ", "#a#aaa#bcbbbbbb#", "#ccdc#bcbbcbbb# ", " ##c#bcbbcabb# ", " #acbacbbbe ", " #aaaacaba# ", " ##aaaaa# ", " ##aa# ", " ## "}; /* XPM : Floppy icon */ static char * floppy_disk_xpm[]={ "16 16 7 1", "c c #808080", "d c #000000", ". c None", "a c #bdbebd", "b c #ffffff", "e c #ff0000", "# c #7b797b", "................", ".........#######", "........#abbbbb#", "........#abbbbb#", "........#abbbbb#", "........#abbbba#", "........#aa###a#", ".#cccccc#aad#db#", "#bbbbbbb###ddd##", "#aaaaaaaaaaea##.", "#aaaa####aaaa##.", "#abbbddddbbba##.", "#aaaaaaaaaaaa#d.", ".ddddddddddddd..", "................", "................"}; /* XPM : Hard disk icon */ static char * harddrive_disk_xpm[]={ "16 16 6 1", "a c #c6c6c6", "b c #000000", "# c #848484", ". c None", "d c #008400", "c c #ffffff", "................", "................", "................", "................", "..#############.", ".#aaaaaaaaaaaa#b", "#cccccccccccc##b", "#aaaaaaaaaada##b", "#aaaaaaaaaaaa##b", "#a##########a##b", "#acccccccccca##b", "##############b.", ".bbbbbbbbbbbbb..", "................", "................", "................"}; /* XPM : Disk icon */ static char * cdrom_disk_xpm[] = { "17 17 30 1", " c None", ". c #737173", "+ c #96CB96", "@ c #CDCA62", "# c #BDBABD", "$ c #299194", "% c #62CA94", "& c #ACB2AC", "* c #293029", "= c #CDCA94", "- c #DEDADE", "; c #838183", "> c #2991CD", ", c #6291CD", "' c #62CACD", ") c #D5D2D5", "! c #949194", "~ c #9C99A4", "{ c #629194", "] c #000000", "^ c #CDCACD", "/ c #EEEAEE", "( c #DEE2DE", "_ c #E6EAE6", ": c #FFFAFF", "< c #E6E6E6", "[ c #CDFAFF", "} c #0091CD", "| c #00FA00", "1 c #007900", " ", " ... ", " ..+@#.. ", " .$%+@&##* ", " .%%$%=#&-&* ", " ;>,%';&)#&* ", " .!~{';];~&^^*", " .&&^;]/];^^^*", " .(/(&;];&_/^*", " ;;;;~&~~;$-(:* ", " ;<<<.~~&)=%>[&* ", " ;<###.~&^=+}}] ", " ;<****;;^=+**] ", " ;<|1<<##***#.] ", " .;;;;;;;;;;;;] ", " ]]]]]]]]]]]] ", " "}; /* XPM : ZIP icon */ static char *zip_disk_xpm[] = { "16 16 24 1", " c none", "# c #040404", "a c #a0a0a4", "b c #868686", "c c #ffffff", "d c #b2b2b2", "e c #d7d7d7", "f c #666666", "g c #333333", "h c #1c1c1c", "i c #4d4d4d", "j c #0000cc", "k c #3333cc", "l c #0099cc", "m c #0066ff", "n c #3333ff", "o c #0000ff", "p c #ccffff", "q c #99ffff", "r c #00ff00", "s c #ff9900", "t c #3366cc", "u c #0099ff", "v c #0066cc", " ########## ", " ##bagceddg##", " dgaaeggggggf", " dibbbbbbbbif", " di########if", " diccccccccif", " diccccccccif", " diccccccccif", " diccccccccif", " diccccccccif", " llmmnnnnoooojf", " lmnnnnoooooojj#", "kmmmmmmmmmnnnjjh", "kmoooooooommmjjh", "kmmmuuuvmmmfmji ", " ############i " }; /* XPM : Folder icon */ static char * folder_xpm[] = { "16 16 8 1", " c None", ". c #909000", "+ c #000000", "@ c #EFE8EF", "# c #FFF8CF", "$ c #FFF890", "% c #CFC860", "& c #FFC890", " ", " .....+ ", " .@##$$.+ ", ".%%%%%%%...... ", ".###########$%+ ", ".#$$$$$$$$$$&%+ ", ".#$$$$$$$&$&$%+ ", ".#$$$$$$$$&$&%+ ", ".#$$$$$&$&$&$%+ ", ".#$$$$$$&$&$&%+ ", ".#$$$&$&$&$&&%+ ", ".#&$&$&$&$&&&%+ ", ".%%%%%%%%%%%%%+ ", " ++++++++++++++ ", " ", " "}; /* XPM : Parent folder icon */ static char * parent_folder_xpm[] = { "16 16 8 1", " c None", ". c #909000", "+ c #000000", "@ c #EFE8EF", "# c #FFF8CF", "$ c #FFF890", "% c #CFC860", "& c #FFC890", " ", " .....+ ", " .@##$$.+ ", ".%%%%%%%...... ", ".###########$%+ ", ".#$$$$$$$$$$&%+ ", ".#$$$+$$$&$&$%+ ", ".#$$+++$$$&$&%+ ", ".#$$$+$.$&$&$%+ ", ".#$$$+$$&$&$&%+ ", ".#$$$++++++&&%+ ", ".#&$&$&$&$&&&%+ ", ".%%%%%%%%%%%%%+ ", " ++++++++++++++ ", " ", " "}; /* XPM : Open folder icon */ static char * open_folder_xpm[] = { "16 16 12 1", " c None", ". c #808080", "+ c #E0E0D0", "@ c #4F484F", "# c #909000", "$ c #FFF8EF", "% c #CFC860", "& c #003090", "* c #7F7800", "= c #FFC890", "- c #FFF890", "; c #2F3000", " . ", " .+@ ", " ###.$$+@ ", " #%%.$$$$+@ ", " #%.$$$&$$+@** ", " #.+++&+&+++@* ", "############++@ ", "#$$$$$$$$$=%#++@", "#$-------=-=#+; ", " #---=--=-==%#; ", " #-----=-=-==#; ", " #-=--=-=-=-=#; ", " #=-=-=-=-==#; ", " ############; ", " ;;;;;;;;;;; ", " "}; /* XPM : Locked folder icon */ static char * locked_folder_xpm[]={ "16 16 20 1", "q c #808080", "o c #c3c3c3", "j c #d6d384", "m c #a5a263", "a c #cecbb5", "n c #efeb42", "c c #c05800", "g c #efefd6", "f c #efefe7", "p c #000000", "# c #400000", "h c #303030", "r c #efef29", "b c #a5a694", "e c #ffffc0", "i c #efeb4a", ". c None", "l c #dedb73", "k c #dedf42", "d c #ffffff", "................", "......###.......", "aaaaaa###aaaaa..", "bbbbbbcccbbbbba.", "bdefefcccggggbh.", "bdijklccclklkmh.", "bdjnjopppqlklbh.", "bdnjnooooqklkmh.", "bdarjoqpqqlklbh.", "bdrjroqoqqklkmh.", "bdarjqpopplklbh.", "bfraracc#jkjkmh.", "mmmmmmcccmmmmmh.", ".pppppcccpppppp.", "......###.......", "................"}; gint icons_load_catalog ( GtkWindow *w) { GdkColor transparent = { 0 }; if ( w != NULL ) { PixCDRomDisk = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskCDRomDisk, &transparent, cdrom_disk_xpm); PixFloppyDisk = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskFloppyDisk, &transparent, floppy_disk_xpm); PixHardDriveDisk = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskHardDriveDisk, &transparent, harddrive_disk_xpm); PixZipDisk = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskZipDisk, &transparent, zip_disk_xpm); PixFolder = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskFolder, &transparent, folder_xpm); PixParentFolder = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskParentFolder, &transparent, parent_folder_xpm); PixLockedFolder = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskLockedFolder, &transparent, locked_folder_xpm); PixOpenFolder = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskOpenFolder, &transparent, open_folder_xpm); PixFile = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskFile, &transparent, file_xpm); PixCatalog = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskCatalog, &transparent, catalog_xpm); return 0; } return -1; } gint icons_load_toolbar ( GtkWindow *w) { GdkColor transparent = { 0 }; if ( w != NULL ) { PixNew = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskNew, &transparent, New_xpm); PixOpen = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskOpen, &transparent, Open_xpm); PixSave = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskSave, &transparent, Save_xpm); PixSendMail = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskSendMail, &transparent, Send_mail_xpm); PixClose = gdk_pixmap_create_from_xpm_d ( GTK_WIDGET ( w)->window, &MskClose, &transparent, Close_xpm); return 0; } return -1; } gwhere-0.2.3/src/res/gwicons.h0000744000175000017500000001571510023202520014635 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header Icons.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* Contains all ressources icons and pictures. Can load theses image icons for the GUI. * @abstract This is a ressource component. * @author Sébastien LECACHEUR * @version 1.0 2001/08/21 * @see gtk/gtk.h * @link GWhere Web Site * @link GTK+ Web Site * @ref Icons.c * @author Author */ #ifndef GW_RES_ICONS_H #define GW_RES_ICONS_H #include /*! * @var PixCatalog * @abstract Catalog icon. * @discussion The catalog icon pixmap for catalog representation.
*/ GdkPixmap *PixCatalog; /*! * @var MskCatalog * @abstract Catalog icon. * @discussion The catalog icon bitmap for catalog representation.
*/ GdkBitmap *MskCatalog; /*! * @var PixCDRomDisk * @abstract CD-Rom disk icon. * @discussion The CD-Rom disk icon pixmap for catalog representation.
*/ GdkPixmap *PixCDRomDisk; /*! * @var MskCDRomDisk * @abstract CD-Rom disk icon. * @discussion The CD-Rom disk icon bitmap for catalog representation.
*/ GdkBitmap *MskCDRomDisk; /*! * @var PixFloppyDisk * @abstract Floppy disk icon. * @discussion The floppy disk icon pixmap for catalog representation.
*/ GdkPixmap *PixFloppyDisk; /*! * @var MskFloppyDisk * @abstract Floppy disk icon. * @discussion The floppy disk icon bitmap for catalog representation.
*/ GdkBitmap *MskFloppyDisk; /*! * @var PixHardDriveDisk * @abstract Hard Drive disk icon. * @discussion The hard drive disk icon pixmap for catalog representation.
*/ GdkPixmap *PixHardDriveDisk; /*! * @var MskHardDriveDisk * @abstract Hard drive disk icon. * @discussion The hard drive disk icon bitmap for catalog representation.
*/ GdkBitmap *MskHardDriveDisk; /*! * @var PixZipDisk * @abstract Zip disk icon. * @discussion The zip disk icon pixmap for catalog representation.
*/ GdkPixmap *PixZipDisk; /*! * @var MskZipDisk * @abstract Zip drive disk icon. * @discussion The zip disk icon bitmap for catalog representation.
*/ GdkBitmap *MskZipDisk; /*! * @var PixFolder * @abstract Folder icon. * @discussion The folder icon pixmap for catalog representation.
*/ GdkPixmap *PixFolder; /*! * @var MskFolder * @abstract Folder icon. * @discussion The folder icon bitmap for catalog representation.
*/ GdkBitmap *MskFolder; /*! * @var PixOpenFolder * @abstract Open folder icon. * @discussion The open folder icon pixmap for catalog representation.
*/ GdkPixmap *PixOpenFolder; /*! * @var MskOpenFolder * @abstract Open folder icon. * @discussion The open folder icon bitmap for catalog representation.
*/ GdkBitmap *MskOpenFolder; /*! * @var PixParentFolder * @abstract Parent folder icon. * @discussion The parent folder icon pixmap for catalog representation.
*/ GdkPixmap *PixParentFolder; /*! * @var MskParentFolder * @abstract Parent folder icon. * @discussion The parent folder icon bitmap for catalog representation.
*/ GdkBitmap *MskParentFolder; /*! * @var PixLockedFolder * @abstract Locked folder icon. * @discussion The locked folder icon pixmap for catalog representation.
*/ GdkPixmap *PixLockedFolder; /*! * @var MskLockedFolder * @abstract Locked folder icon. * @discussion The locked folder icon bitmap for catalog representation.
*/ GdkBitmap *MskLockedFolder; /*! * @var PixFile * @abstract File icon. * @discussion The file icon pixmap for catalog representation.
*/ GdkPixmap *PixFile; /*! * @var MskFile * @abstract File icon. * @discussion The file icon bitmap for catalog representation.
*/ GdkBitmap *MskFile; /*! * @var PixNew * @abstract New file icon. * @discussion The new file icon pixmap for toolbar.
*/ GdkPixmap *PixNew; /*! * @var MskNew * @abstract New file icon. * @discussion The new file icon bitmap for toolbar.
*/ GdkBitmap *MskNew; /*! * @var PixOpen * @abstract Open file icon. * @discussion The open file icon pixmap for toolbar.
*/ GdkPixmap *PixOpen; /*! * @var MskOpen * @abstract Open file icon. * @discussion The open file icon bitmap for toolbar.
*/ GdkBitmap *MskOpen; /*! * @var PixSave * @abstract Save file icon. * @discussion The save file icon pixmap for toolbar.
*/ GdkPixmap *PixSave; /*! * @var MskSave * @abstract Save file icon. * @discussion The save file icon bitmap for toolbar.
*/ GdkBitmap *MskSave; /*! * @var PixSendMail * @abstract Send ail icon. * @discussion The close file icon pixmap for toolbar.
*/ GdkPixmap *PixSendMail; /*! * @var MskSendMail * @abstract Send mail icon. * @discussion The close file icon bitmap for toolbar.
*/ GdkBitmap *MskSendMail; /*! * @var PixClose * @abstract Close file icon. * @discussion The close file icon pixmap for toolbar.
*/ GdkPixmap *PixClose; /*! * @var MskClose * @abstract Close file icon. * @discussion The close file icon bitmap for toolbar.
*/ GdkBitmap *MskClose; /*! * @function icons_load_catalog * @abstract Loads icons for catalog. * @discussion This function loads icons for catalog representation (catalog/disk/folder/file icons...).
* @param w the main application window to load icons * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint icons_load_catalog ( GtkWindow *w); /*! * @function icons_load_toolbar * @abstract Loads icons for catalog. * @discussion This function loads icons for toolbar (catalog/disk/folder/file icons...).
* @param w the main application window to load icons * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint icons_load_toolbar ( GtkWindow *w); #endif gwhere-0.2.3/src/res/gwres.h0000744000175000017500000000254210023202520014305 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwres.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a tool component for files. * @author Sébastien LECACHEUR * @version 1.0 2002/05/19 * @see gwsupport.h * @link GWhere Web Site * @author Author */ #ifndef GW_RES_H #define GW_RES_H #include "gwicons.h" #endif gwhere-0.2.3/src/res/Makefile.am0000744000175000017500000000040510023202520015035 0ustar bartbart## Process this file with automake to produce Makefile.in INCLUDES = \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/src \ @GTK_CFLAGS@ \ -D${HOST_OS} noinst_LIBRARIES = libgwres.a libgwres_a_SOURCES = \ gwres.h \ gwicons.c gwicons.h EXTRA_DIST = $(SOURCES) gwhere-0.2.3/src/res/Makefile.in0000744000175000017500000002315410506327632015076 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir)/src @GTK_CFLAGS@ -D${HOST_OS} noinst_LIBRARIES = libgwres.a libgwres_a_SOURCES = gwres.h gwicons.c gwicons.h EXTRA_DIST = $(SOURCES) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libgwres_a_LIBADD = libgwres_a_OBJECTS = gwicons.$(OBJEXT) CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best DEP_FILES = .deps/gwicons.P SOURCES = $(libgwres_a_SOURCES) OBJECTS = $(libgwres_a_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu src/res/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-noinstLIBRARIES: clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) distclean-noinstLIBRARIES: maintainer-clean-noinstLIBRARIES: # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libgwres.a: $(libgwres_a_OBJECTS) $(libgwres_a_DEPENDENCIES) -rm -f libgwres.a $(AR) cru libgwres.a $(libgwres_a_OBJECTS) $(libgwres_a_LIBADD) $(RANLIB) libgwres.a tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = src/res distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/res/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile $(LIBRARIES) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-noinstLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/src/res/Makefile.win0000744000175000017500000000115210233762435015260 0ustar bartbart# Project: libgwres # Makefile created for GWhere CC = gcc.exe WINDRES = windres.exe RES = OBJ = gwicons.o $(RES) BIN = libgwres.a INCS = $(GWINCS) $(GTKINCS) -IC:/MINGW/include -IC:/MINGW/mingw_extra/include -IC:/GTK/include GTKINCS = -IC:/GTK/include/gtk-2.0 -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/atk-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include GWINCS = -I.. CFLAGS = $(INCS) -O2 -Wall -fnative-struct -DHAVE_CONFIG_H -DOS_WIN32 -DGTK_ENABLE_BROKEN .PHONY: clean all: $(BIN) clean: rm -f $(OBJ) $(BIN) $(BIN): $(OBJ) ar r $(BIN) $(OBJ) ranlib $(BIN) gwhere-0.2.3/src/tools/0000755000175000017500000000000010506575525013400 5ustar bartbartgwhere-0.2.3/src/tools/gwencode.c0000744000175000017500000000651410023202520015316 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwencode.h" #include /* fopen fread fprintf fclose */ #define ENCODE_BASE_64(a) (((a)>=0 && (a)<=25)?((a)+'A'):(((a)>=26 && (a)<=51)?((a)-26+'a'):(((a)>=52 && (a)<=61)?((a)-52+'0'):(((a)==62)?('+'):(((a)==63)?('/'):('=')))))) #define DECODE_BASE_64(a) ((a>='A'&& a<='Z')?(a-65):((a>='a' && a<='z')?(a-71):((a>='0' && a<='9')?(a+4):((a=='+')?(62):((a=='/')?(63):(0)))))) #define DECODE_BASE_64_ISEND(a) if ( a == '=' ) break; gint gw_encode_file_base64 ( gchar *src, gchar *dst) { FILE *f, *g; unsigned char buff[3]; int i = 0; gint result = -1; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( src != NULL && dst != NULL ) { if ( !(f = fopen ( src, "r"))) { // May be used for default source //f = stdin ; if ( !(g = fopen ( dst, "w"))) { // May be used for default destination //g = stdout; buff[0] = buff[1] = buff[2] = 0; while ( (i = fread ( buff, 1, 3, f)) > 0 ) { fprintf ( g, "%c", ENCODE_BASE_64 ( buff[0] >> 2)); fprintf ( g, "%c", ENCODE_BASE_64 ( ((buff[0] & 0x3) << 4) | buff[1] >> 4 ) ); if ( i > 1 ) { fprintf ( g, "%c",ENCODE_BASE_64 ( ((buff[1] & 0xF) << 2) | buff[2] >> 6 ) ); if ( i > 2 ) { fprintf ( g, "%c", ENCODE_BASE_64 ( buff[2] & 0x3F ) ); } else { fprintf ( g, "="); } } else { fprintf ( g, "=="); } buff[0] = buff[1] = buff[2] = 0; } result = 0; fclose ( g); } fclose ( f); } } return result; } gint gw_decode_file_base64 ( gchar *src, gchar *dst) { FILE *f, *g; unsigned char buff[4]; gint result = -1; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( src != NULL && dst != NULL ) { if ( !(f = fopen ( src, "r"))) { // May be used for default source //f = stdin; if ( !(g = fopen ( dst, "w"))) { // May be used for default destination //g = stdout; while ( fread ( buff, 1, 4, f) == 4 ) { fprintf ( g, "%c", (DECODE_BASE_64 ( buff[0]) << 2) | (DECODE_BASE_64 ( buff[1]) >> 4 & 0x3)); DECODE_BASE_64_ISEND ( buff[2]) fprintf ( g, "%c", (DECODE_BASE_64 ( buff[1]) << 4) | (DECODE_BASE_64 ( buff[2]) >> 2 & 0xF)); DECODE_BASE_64_ISEND ( buff[3]) fprintf ( g, "%c", (DECODE_BASE_64 ( buff[2]) << 6) | (DECODE_BASE_64 ( buff[3]) & 0x3F)); } result = 0; fclose ( g); } fclose ( f); } } return result; } gwhere-0.2.3/src/tools/gwencode.h0000744000175000017500000000434610023202520015324 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwencode.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a tool component to encode/decode files or strings. * @author Sébastien LECACHEUR * @author Grégory BLOQUEL * @version 1.0 2001/08/21 * @see gwsupport.h * @see glib.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwencode.c * @author Author */ #ifndef GW_TOOLS_ENCODE_H #define GW_TOOLS_ENCODE_H #include /*! * @function gw_encode_file_base64 * @abstract Encodes a file to base 64 * @discussion This function encodes a file to base 64. * @param file1 source file to encode * @param file2 destination file * @result Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_encode_file_base64 ( gchar *src, gchar *dst); /*! * @function gw_decode_file_base64 * @abstract Decodes a file to base 64 * @discussion This function decodes a file to base 64. * @param file1 source file to decode * @param file2 destination file * @result Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_decode_file_base64 ( gchar *src, gchar *dst); #endif gwhere-0.2.3/src/tools/gwfile.c0000744000175000017500000003502210217545055015016 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwfile.h" #include /* perror */ #include /* mkdir */ #if defined ( OS_WIN32) #include /* open */ #endif #include /* open mkdir */ #include /* strcmp strcpy malloc strchr strrchr */ #include /* stat */ #include /* close read write stat mkdir */ #include /* malloc on Cygwin */ #include /* errno */ int gw_file_copy ( const gchar *source, const gchar *dest) { int src,dst,n; gchar buffer[512]; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( ( src = open ( source, O_RDONLY) ) == -1 ) { perror ( "source"); return -1; } if ( ( dst = open ( dest, O_WRONLY|O_TRUNC|O_CREAT, 0666) ) == -1 ) { perror ( "destination"); close ( src); return -1; } while ( ( n = read ( src, buffer, 512) ) > 0 ) { if ( n != write ( dst, buffer, n) ) { return -1; } } if ( n < 0 ) { return -1; } close ( src); close ( dst); return 0; } gchar * gw_file_read_until_c ( int fic, gchar c, int len) { gchar temp[2], tmp[(len==-1?MAX_LINE:len)]; gchar *buf; int i = 0, n; gchar *tmp_tmp=NULL,*tmp2 = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( len == -1 ) { tmp2 = (gchar*)g_malloc0 ( MAX_LINE); i = 0; while ( (n = read ( fic, temp, 1)) > 0 ) { if ( (i+1)%MAX_LINE == 0 ) { tmp_tmp = (gchar*)g_realloc ( tmp2, i + MAX_LINE); tmp2 = tmp_tmp; } if ( temp[0] == c) { return tmp2; } tmp2[i++] = temp[0]; } if ( tmp2 != NULL ) { g_free ( tmp2); tmp2 = NULL; } } else { temp[1] = '\0'; while ( ( n = read ( fic, temp, 1) ) > 0 ) { if ( temp[0] == c ) { if ( ( buf = (gchar*)g_malloc0 ( 2)) == NULL ) { perror ( "g_malloc0"); return NULL; } strcpy ( buf, ""); return buf; } tmp[i++] = temp[0]; while ( temp[0] != c ) { if ( ( n = read ( fic, temp, 1) ) == 0) { return NULL; } tmp[i++] = temp[0]; } tmp[--i] = '\0'; if ( ( buf = (gchar*)g_malloc0 ( i + 1) ) == NULL ) { perror ( "g_malloc0"); return NULL; } strcpy ( buf, tmp); return buf; } } return NULL; } gchar * gw_zfile_read_until_c ( gzFile fic, gchar c, int len) { char temp[2], tmp[len]; char *buf; int i = 0, n; #ifdef GW_DEBUG_TOOLS_COMPONENT unsigned int zlen = len; #endif #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : reads %d characters\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, zlen); #endif temp[1] = '\0'; /* while ( ( temp[0] = gzgetc ( fic) ) != -1 )*/ while ( (( n = gzread ( fic, &temp[0], 1) ) != -1) && ( n == 1 )) { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : %c\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, temp[0]); #endif if ( temp[0] == c ) { if ( ( buf = (gchar*)g_malloc0 ( 2)) == NULL ) { perror ( "g_malloc0"); return NULL; } strcpy ( buf, ""); return buf; } tmp[i++] = temp[0]; while ( temp[0] != c ) { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : %c\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, temp[0]); #endif /* if ( ( temp[0] = gzgetc ( fic) ) == -1)*/ if ( (( n = gzread ( fic, &temp[0], sizeof ( temp[0])) ) == -1) && ( n == 0 )) { return NULL; } tmp[i++] = temp[0]; } tmp[--i] = '\0'; /* tmp[i] = '\0';*/ if ( ( buf = (gchar*)g_malloc0 ( i + 1) ) == NULL ) { perror ( "g_malloc0"); return NULL; } strcpy ( buf, tmp); return buf; } #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : reading is done (n=%d)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, n); #endif return NULL; } gchar * gw_file_readline_sb ( FILE *fic, GWStringBuffer **sb) { gchar buf[MAX_LINE+1]; gchar *line = NULL; gchar *ret = NULL; gulong sb_size = 0; gulong sb_len = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif memset(buf,'\0',MAX_LINE+1); if ( *sb == NULL ) { *sb = gw_string_buffer_new ( ); gw_string_buffer_resize ( *sb, MAX_LINE); } line = gw_string_buffer_get_str(*sb); gw_string_buffer_delete_all ( *sb); sb_size = gw_string_buffer_get_size ( *sb); line = gw_string_buffer_get_str(*sb); do { memset(buf,'\0',MAX_LINE+1); ret = fgets ( buf, MAX_LINE, fic); gw_string_buffer_append_str ( *sb, buf, strlen(buf)); line = gw_string_buffer_get_str ( *sb); sb_len = strlen ( line); } while ( (ret != NULL) && (sb_len != 0) && ((line)[sb_len - 1] != '\n')); if ( sb_len > 0 ) { /* In order to eraze the final '\n' character. */ line[sb_len - 1] = '\0'; memset(&line[sb_len-1],'\0',(gw_string_buffer_get_size ( *sb)-sb_len+1)); } #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : current_line=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, line); #endif if ( ret==NULL) { line = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : END_OF_FILE\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } return line; } gchar * gw_file_readline ( int fic, gchar *buf, int len) { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif buf = gw_file_read_until_c ( fic, '\n', len); return buf; } gchar * gw_zfile_readline_sb ( gzFile fic, GWStringBuffer **sb) { gchar buf[MAX_LINE+1]; gchar *line = NULL; int ret = 0; gulong sb_size = 0; gulong sb_len = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif memset(buf,'\0',MAX_LINE+1); if ( *sb == NULL ) { *sb = gw_string_buffer_new ( ); gw_string_buffer_resize ( *sb, MAX_LINE); } line = gw_string_buffer_get_str(*sb); gw_string_buffer_delete_all ( *sb); sb_size = gw_string_buffer_get_size ( *sb); line = gw_string_buffer_get_str(*sb); do { memset(buf,'\0',MAX_LINE+1); ret = (int)gzgets ( fic, buf, MAX_LINE); gw_string_buffer_append_str ( *sb, buf, strlen(buf)); line = gw_string_buffer_get_str ( *sb); sb_len = strlen ( line); } while ( (ret != Z_NULL) && (sb_len != 0) && ((line)[sb_len - 1] != '\n')); if ( sb_len > 0 ) { /* In order to eraze the final '\n' character. */ line[sb_len - 1] = '\0'; memset(&line[sb_len-1],'\0',(gw_string_buffer_get_size ( *sb)-sb_len+1)); } #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : current_line=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, line); #endif if ( ret==Z_NULL) { line = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : END_OF_FILE\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } return line; } gchar * gw_zfile_readline ( gzFile fic, gchar **buf, int len) { int slen; int size = sizeof ( gchar) * (MAX_LINE + 1); gchar *tmp_buf = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT int zerr; #endif if ( len == -1) { *buf = (gchar*)g_malloc ( size); } else { memset ( *buf, '\0', len); } #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : len=%d (%d)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, len, (len==-1?MAX_LINE:len)); #endif if ( gzgets ( fic, *buf, (len==-1?MAX_LINE:len)) == Z_NULL ) { slen = strlen ( *buf); #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : error during gzgets (error=%s), current zbuffer=%s \tlength=%d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, gzerror(fic,&zerr), *buf, slen); g_print ( "*** GW - %s (%d) :: %s() : error_code=%d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, zerr); #endif if ( len == -1 ) { g_free ( *buf); *buf = NULL; } return NULL; } slen = strlen ( *buf); #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : current zbuffer=%s \tlength=%d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, *buf, slen); #endif if ( len == -1 ) { while ( (slen != 0) && ((*buf)[slen - 1] != '\n') ) { size += sizeof ( gchar) * MAX_LINE; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : new size is %d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, size); #endif tmp_buf = (gchar*)g_realloc ( *buf, size); *buf = tmp_buf; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : reallocated\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( gzgets ( fic, &((*buf)[slen]), MAX_LINE) == Z_NULL ) { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : error during gzgets (error=%s), current zbuffer=%s \tlength=%d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, gzerror(fic,&zerr), *buf, slen); g_print ( "*** GW - %s (%d) :: %s() : error_code=%d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, zerr); #endif g_free ( *buf); *buf = NULL; return NULL; } slen = strlen ( *buf); #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : current zbuffer=%s \tlength=%d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, *buf, slen); #endif } } #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : final zbuffer=%s \tlength=%d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, *buf, slen); #endif if ( (slen == 0) && ((*buf)[slen - 1] != '\n') ) { if ( len == -1 ) { g_free ( *buf); *buf = NULL; } return NULL; } (*buf)[slen - 1] = '\0'; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : new zbuffer=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, *buf); #endif return *buf; } long gw_file_get_size ( FILE * file) { long pos; long len = -1; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( file != NULL ) { pos = ftell ( file); fseek ( file, 0L, SEEK_END); len = ftell ( file); fseek ( file, pos, SEEK_SET); } return len; } int gw_file_exists ( const gchar *pathname) { int result = -1; struct stat fd; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : testing if %s exists\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, pathname); #endif if ( pathname != NULL ) { if ( stat ( pathname, &fd) == 0 ) { result = 0; } } return result; } gchar * gw_file_get_name ( const gchar *pathname) { gchar * result = NULL; gchar * last = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : the file name of %s without path\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, pathname); #endif if ( pathname != NULL ) { last = strrchr ( pathname, G_DIR_SEPARATOR); if ( last != NULL ) { result = g_strdup ( last++); } } return result; } int gw_file_mkdir ( const gchar *pathname) { int result = -1; struct stat fd; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : creating %s if not exists\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, pathname); #endif if ( pathname != NULL ) { if ( stat ( pathname, &fd) == 0 ) { /* The folder already exists. */ result = 0; } else { #if defined (OS_WIN32) if ( mkdir ( pathname) == 0 ) #else if ( mkdir ( pathname, S_IRUSR|S_IWUSR|S_IXUSR) == 0 ) #endif { result = 0; } else { switch ( errno ) { case EEXIST : result = 0; break; default : break; } } } } return result; } int gw_file_mkdirs ( const gchar *pathname) { int result = -1; struct stat fd; gchar *last = NULL; gchar *parent_pathname = NULL; int length = 0; int i = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : creating %s if not exists\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, pathname); #endif if ( pathname != NULL ) { if ( stat ( pathname, &fd) == 0 ) { /* The folder already exists. */ result = 0; } else { #if defined (OS_WIN32) if ( mkdir ( pathname) == 0 ) #else if ( mkdir ( pathname, S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP) == 0 ) #endif { result = 0; } else { switch ( errno ) { case EEXIST : result = 0; break; case ENOENT: /* Must create all folders in the path. */ last = strrchr ( pathname, G_DIR_SEPARATOR); /* Bug to fix : pathname is a const char *, cannot be modified. */ if ( last[1] == '\0' ) { i = last - pathname; while ( (i >= 0) && ( pathname[i] != G_DIR_SEPARATOR) ) { i--; } if ( i > 0 ) { last = (gchar*)&pathname[i]; } else { last = NULL; } } if ( last != NULL ) { length = last - pathname; parent_pathname = (gchar *)g_malloc0 ( sizeof ( char) * length + 1); parent_pathname = strncpy ( parent_pathname, pathname, length); parent_pathname[length] = '\0'; if ( gw_file_mkdirs ( parent_pathname) == 0 ) { if ( gw_file_mkdirs ( pathname) == 0 ) { result = 0; } } g_free ( parent_pathname); } default : break; } } } } return result; } int gw_zfile_uncompress ( const gchar *in_filepath, const gchar *out_filepath) { gchar buf[MAX_LINE]; int len; gzFile in = NULL; FILE *out = NULL; int result = -1; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( (in = gzopen ( in_filepath, "rb")) != NULL ) { if ( (out = fopen ( out_filepath, "w+")) != NULL ) { for (;;) { len = gzread ( in, buf, sizeof ( buf)); if ( len < 0 ) { /*error (gzerror(in, &err))*/; } if ( len == 0 ) { break; } if ( (int)fwrite ( buf, 1, (unsigned)len, out) != len) { /*error("failed fwrite")*/; } } if ( fclose ( out) ) { /*error("failed fclose")*/; } result = 0; } if ( gzclose ( in) != Z_OK ) { /*error("failed gzclose")*/; } } return result; } gwhere-0.2.3/src/tools/gwfile.h0000744000175000017500000001720410217545055015025 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwfile.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a tool component for files. * @author Sébastien LECACHEUR * @version 1.0 2002/05/19 * @see gwsupport.h * @see zlib.h * @link GWhere Web Site * @link Zlib Web Site * @ref gwfile.c * @author Author * @author Luis PARRAVICINI */ #ifndef GW_TOOLS_FILE_H #define GW_TOOLS_FILE_H #include #include #include "data/gwdata.h" /*! @define MAX_LINE The max line size (to read lines in files) */ #define MAX_LINE 666 /*! * @function gw_file_copy * @abstract Copies file * @discussion This function copies a file to another file.
* @param source source file to copy * @param dest destination file for copy * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ int gw_file_copy ( const gchar *source, const gchar *dest); /*! * @function gw_file_read_until_c * @abstract Reads caracters in a file * @discussion This function reads caracters in a file until a specified caractere.
* @param fic the file where extract caracters * @param c the delimitor caracter * @param len the line max size * @result the string when it's done.
* Returns NULL when an error occured or when the caracter aren't in the file. */ gchar * gw_file_read_until_c ( int fic, gchar c, int len); /*! * @function gw_zfile_read_until_c * @abstract Reads caracters in a file * @discussion This function reads caracters in a file until a specified caractere.
* If len is -1 readed line has no limits and the * string will be allocated. * @param fic the compressed file where extract caracters * @param c the delimitor caracter * @param len th eline max size * @result the string when it's done.
* Returns NULL when an error occured or when the caracter aren't in the file. */ gchar * gw_zfile_read_until_c ( gzFile fic, gchar c, int len); gchar * gw_file_readline_sb ( FILE *fic, GWStringBuffer **sb); /*! * @function gw_file_readline * @abstract Reads line in a file * @discussion This function reads a line in a file.
* If len is -1 readed line has no limits and the * string will be allocated. * @author Sébastien LECACHEUR * @param fic the file where extract line * @param buf the string to store readed line * @param len the line max size * @result the string when it's done.
* Returns NULL when an error occured. */ gchar * gw_file_readline ( int fic, gchar *buf, int len); /*! * @function gw_zfile_readline_sb * @abstract Reads line in a compressed file * @discussion This function reads a line in a compressed file.
* @param fic the compressed file where extract line * @param sb the string buffer to store readed line * @result the string when it's done.
* Returns NULL when an error occured. */ gchar * gw_zfile_readline_sb ( gzFile fic, GWStringBuffer **sb); /*! * @function gw_zfile_readline * @abstract Reads line in a compressed file * @discussion This function reads a line in a compressed file.
* If len is -1 readed line has no limits and the * string will be allocated. Otherwise the buffer must be * allocated before call gw_zfile_readline(). * @author Luis PARRAVICINI * @param fic the compressed file where extract line * @param buf the string to store readed line * @param len the line max size * @result the string when it's done.
* Returns NULL when an error occured. */ gchar * gw_zfile_readline ( gzFile fic, gchar **buf, int len); /*! * @function gw_file_get_size * @abstract Gets the size of a file * @discussion This function gets the size of a file.
* @author Grégory BLOQUEL * @param file the file to get size * @result the file size.
* Returns -1 when an error occured. */ long gw_file_get_size ( FILE * file); /*! * @function gw_file_exists * @abstract Tests whether the file denoted by this abstract pathname exists. * @discussion This function tests whether the file denoted by this abstract pathname exists.
* @param pathname file name * @result an error code.
* Returns 0 if and only if the file denoted by this abstract pathname exists.
* Returns -1 otherwise or when an error occured. */ int gw_file_exists ( const gchar *pathname); /*! * @function gw_file_get_name * @abstract Tests whether the file denoted by this abstract pathname exists. * @discussion This function returns the name of the file or directory denoted * by this abstract pathname. This is just the last name in the * pathname's name sequence. If the pathname's name sequence is empty, * then the NULL pointer is returned.
* Note that the returned string should be freed by g_free().
* @param pathname file name * @result file name.
* Returns NULL otherwise or when an error occured. */ gchar * gw_file_get_name ( const gchar *pathname); /*! * @function gw_file_mkdir * @abstract Creates the directory named by this abstract pathname. * @discussion This function creates the directory named by this abstract pathname.
* @param pathname directory pathname * @result an error code.
* Returns 0 if the directory was created or if the directory already exists.
* Returns -1 otherwise or when an error occured. */ int gw_file_mkdir ( const gchar *pathname); /*! * @function gw_file_mkdirs * @abstract Creates the directory named by this abstract pathname * @discussion This function creates the directory named by this abstract pathname, * including any necessary but nonexistent parent directories. Note that * if this operation fails it may have succeeded in creating some of the * necessary parent directories.
* Note that the abstract pathname should not end with "/" character.
* @param pathname directory pathname * @result an error code.
* Returns 0 if the directory was created, along with all necessary * parent directories or if the directory already exists.
* Returns -1 otherwise or when an error occured. */ int gw_file_mkdirs ( const gchar *pathname); /*! * @function gw_zfile_uncompress * @abstract Uncompresses source file to destination file. * @discussion This function uncompresses source file to destination file.
* @param in_pathname source file pathname * @param out_pathname destination file pathname * @result an error code.
* Returns 0 cannot uncompress the source file.
* Returns -1 otherwise or when an error occured. */ int gw_zfile_uncompress ( const gchar *in_filepath, const gchar *out_filepath); #endif gwhere-0.2.3/src/tools/gwfilesystem.c0000744000175000017500000003501710023202520016245 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwfilesystem.h" #include /* lseek read open */ #include /* open */ #include /* lseek read close */ #include /* strncmp */ #include /* open */ gint gw_fs_get_type ( const gchar *fs, gchar **fs_type) { gint result = -1; #if defined ( OS_WIN32) || defined ( OS_CYGWIN) guint errmode; char type_buf[1024]; DWORD max_file_len; DWORD system_flags; #ifdef GW_DEBUG_MODE LPVOID msg = NULL; #endif const gchar *fs_port = NULL; #endif #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL) { #if defined ( OS_WIN32) || defined ( OS_CYGWIN) if ( (GetVersion ( ) >= 0x80000000) && (strncmp ( fs, "\\\\.\\", 4) == 0) ) { fs_port = &fs[4]; } else { fs_port = fs; } errmode = SetErrorMode ( SEM_FAILCRITICALERRORS); if ( GetVolumeInformation ( fs_port, NULL, 0, NULL, &max_file_len, &system_flags, type_buf, sizeof ( type_buf)) ) { *fs_type = g_strdup ( type_buf); g_strdown ( *fs_type); result = 0; } else { #ifdef GW_DEBUG_TOOLS_COMPONENT FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError ( ), 0, (LPTSTR) &msg, 0, NULL ); g_print ( "*** GW - %s (%d) :: %s() : an win32 error occured, %s (%d)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, msg, GetLastError ( )); LocalFree( msg ); #endif } SetErrorMode ( errmode); #else if ( gw_fs_is_iso9660 ( fs) ) { *fs_type = g_strdup ( "iso9660"); } else { if ( gw_fs_is_fat12 ( fs) ) { *fs_type = g_strdup ( "fat12"); } else { if ( gw_fs_is_fat16 ( fs) ) { *fs_type = g_strdup ( "fat16"); } else { if ( gw_fs_is_fat32 ( fs) ) { *fs_type = g_strdup ( "fat32"); }}}} #endif } return result; } gint gw_fs_get_volume_name ( const gchar *fs, gchar **fs_volume_name) { gint result = -1; #if defined ( OS_WIN32) || defined ( OS_CYGWIN) guint errmode; char vol_buf[1024]; DWORD max_file_len; DWORD system_flags; #ifdef GW_DEBUG_MODE LPVOID msg = NULL; #endif const gchar *fs_port = NULL; #endif #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL) { #if defined ( OS_WIN32) || defined ( OS_CYGWIN) if ( (GetVersion ( ) >= 0x80000000) && (strncmp ( fs, "\\\\.\\", 4) == 0) ) { fs_port = &fs[4]; } else { fs_port = fs; } errmode = SetErrorMode ( SEM_FAILCRITICALERRORS); if ( GetVolumeInformation ( fs_port, vol_buf, sizeof ( vol_buf), NULL, &max_file_len, &system_flags, NULL, 0) ) { *fs_volume_name = g_strdup ( vol_buf); result = 0; } else { #ifdef GW_DEBUG_TOOLS_COMPONENT FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError ( ), 0, (LPTSTR) &msg, 0, NULL ); g_print ( "*** GW - %s (%d) :: %s() : an win32 error occured, %s (%d)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, msg, GetLastError ( )); LocalFree( msg ); #endif } SetErrorMode ( errmode); #else if ( gw_fs_is_iso9660 ( fs) ) { *fs_volume_name = gw_fs_iso9660_get_volume_name ( fs); } else { if ( gw_fs_is_fat12 ( fs) ) { *fs_volume_name = gw_fs_fat12_get_volume_name ( fs); } else { if ( gw_fs_is_fat16 ( fs) ) { *fs_volume_name = gw_fs_fat16_get_volume_name ( fs); } else { if ( gw_fs_is_fat32 ( fs) ) { *fs_volume_name = gw_fs_fat32_get_volume_name ( fs); }}}} result = 0; #endif } return result; } gint gw_fs_get_serial_number ( const gchar *fs, gchar **fs_serial_number) { gint result = -1; #if defined ( OS_WIN32) || defined ( OS_CYGWIN) guint errmode; char vol_buf[1024]; DWORD serial_number; DWORD max_file_len; DWORD system_flags; #ifdef GW_DEBUG_MODE LPVOID msg = NULL; #endif const gchar *fs_port = NULL; #endif #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL) { #if defined ( OS_WIN32) || defined ( OS_CYGWIN) if ( (GetVersion ( ) >= 0x80000000) && (strncmp ( fs, "\\\\.\\", 4) == 0) ) { fs_port = &fs[4]; } else { fs_port = fs; } errmode = SetErrorMode ( SEM_FAILCRITICALERRORS); if ( GetVolumeInformation ( fs_port, vol_buf, sizeof ( vol_buf), &serial_number, &max_file_len, &system_flags, NULL, 0) ) { *fs_serial_number = g_strdup_printf ( "%u", (unsigned int)serial_number); result = 0; } else { #ifdef GW_DEBUG_TOOLS_COMPONENT FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError ( ), 0, (LPTSTR) &msg, 0, NULL ); g_print ( "*** GW - %s (%d) :: %s() : an win32 error occured, %s (%d)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, msg, GetLastError ( )); LocalFree( msg ); #endif } SetErrorMode ( errmode); #else if ( gw_fs_is_iso9660 ( fs) ) { *fs_serial_number = gw_fs_iso9660_get_serial_number ( fs); } else { if ( gw_fs_is_fat12 ( fs) ) { *fs_serial_number = gw_fs_fat12_get_serial_number ( fs); } else { if ( gw_fs_is_fat16 ( fs) ) { *fs_serial_number = gw_fs_fat16_get_serial_number ( fs); } else { if ( gw_fs_is_fat32 ( fs) ) { *fs_serial_number = gw_fs_fat32_get_serial_number ( fs); }}}} result = 0; #endif } return result; } gint gw_fs_read_data ( const gchar *fs, gint seek, gint len, gchar *data) { guint fic; gint result = -1; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { if ( ( fic = open ( fs, O_RDONLY ) ) != -1 ) { if ( lseek ( fic, seek, SEEK_SET) != -1 ) { if ( read ( fic, data, len) != -1 ) { data[len] = '\0'; result = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : data=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, data); #endif } } close ( fic); } } return result; } gint gw_fs_contain_data ( const gchar *fs, gint seek, gint len, const gchar *data) { gchar buf[len + 1]; gint result = -1; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { if ( gw_fs_read_data ( fs, seek, len, buf) != -1 ) { if ( strncmp ( buf, data, len) == 0) { result = 0; } } } return result; } gboolean gw_fs_is_fat12 ( const gchar *fs) { gboolean result = FALSE; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { /* Note that file system identifer size is 8 bytes but "FAT12" size is 5. */ if ( gw_fs_contain_data ( fs, 54, 5, "FAT12") == 0) { result = TRUE; } } return result; } gboolean gw_fs_is_fat16 ( const gchar *fs) { gboolean result = FALSE; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { /* Note that file system identifer size is 8 bytes but "FAT16" size is 5. */ if ( gw_fs_contain_data ( fs, 54, 5, "FAT16") == 0) { result = TRUE; } } return result; } gboolean gw_fs_is_fat32 ( const gchar *fs) { gboolean result = FALSE; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { /* Note that file system identifer size is 8 bytes but "FAT32" size is 5. */ if ( gw_fs_contain_data ( fs, 82, 5, "FAT32") == 0) { result = TRUE; } } return result; } gboolean gw_fs_is_iso9660 ( const gchar *fs) { gboolean result = FALSE; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { /* TO VALIDATE : some CD-ROM haven't "ISO 9660" tag. */ /*if ( gw_fs_contain_data ( fs, 33350, 8, "ISO 9660") == 0)*/ if ( gw_fs_contain_data ( fs, 32769, 5, "CD001") == 0) { result = TRUE; } } return result; } gchar * gw_fs_fat12_get_volume_name ( const gchar *fs) { gint seek = 43; gint len = 11; gchar *buf = NULL; gchar *volume_name = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { buf = (gchar *)g_malloc ( len + 1); if ( gw_fs_read_data ( fs, seek, len, buf) != -1 ) { /* Checks if there is a label name */ if ( (strncmp ( buf, "NO NAME", 7) == 0) || (strncmp ( buf, " ",1) == 0)) { g_free ( buf); } else { /* Removes all spaces (at the begin and the end of the label */ volume_name = g_strstrip ( buf); } } } return volume_name; } gchar * gw_fs_fat16_get_volume_name ( const gchar *fs) { gint seek = 43; gint len = 11; gchar *buf = NULL; gchar *volume_name = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { buf = (gchar *)g_malloc ( len + 1); if ( gw_fs_read_data ( fs, seek, len, buf) != -1 ) { /* Checks if there is a label name */ if ( (strncmp ( buf, "NO NAME", 7) == 0) || (strncmp ( buf, " ",1) == 0)) { g_free ( buf); } else { /* Removes all spaces (at the begin and the end of the label */ volume_name = g_strstrip ( buf); } } } return volume_name; } gchar * gw_fs_fat32_get_volume_name ( const gchar *fs) { gint seek = 71; gint len = 11; gchar *buf = NULL; gchar *volume_name = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { buf = (gchar *)g_malloc ( len + 1); if ( gw_fs_read_data ( fs, seek, len, buf) != -1 ) { /* Checks if there is a label name */ if ( (strncmp ( buf, "NO NAME", 7) == 0) || (strncmp ( buf, " ",1) == 0)) { g_free ( buf); } else { /* Removes all spaces (at the begin and the end of the label */ volume_name = g_strstrip ( buf); } } } return volume_name; } gchar * gw_fs_iso9660_get_volume_name ( const gchar *fs) { gint seek = 32808; gint len = 32; gchar *buf = NULL; gchar *volume_name = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { buf = (gchar *)g_malloc ( len + 1); if ( gw_fs_read_data ( fs, seek, len, buf) != -1 ) { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : data=%s length=%d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, buf, strlen ( buf)); #endif /* Checks if there is a label name */ if ( (strncmp ( buf, "NO NAME", 7) == 0) || (strncmp ( buf, " ",1) == 0)) { g_free ( buf); } else { /* Removes all spaces (at the begin and the end of the label */ volume_name = g_strstrip ( buf); #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : data=%s length=%d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, volume_name, strlen ( volume_name)); #endif } } } return volume_name; } gchar * gw_fs_fat12_get_serial_number ( const gchar *fs) { gint seek = 39; gint len = 4; gchar *buf = NULL; gchar *serial_number = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { buf = (gchar *)g_malloc ( len + 1); if ( gw_fs_read_data ( fs, seek, len, buf) != -1 ) { /* Checks if there is a serial number */ if ( (strncmp ( buf, " ",1) == 0) || (strlen ( buf) != len) ) { g_free ( buf); } else { /* Removes all spaces (at the begin and the end of the serial number) */ serial_number = g_strstrip ( buf); } } } return serial_number; } gchar * gw_fs_fat16_get_serial_number ( const gchar *fs) { gint seek = 39; gint len = 4; gchar *buf = NULL; gchar *serial_number = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { buf = (gchar *)g_malloc ( len + 1); if ( gw_fs_read_data ( fs, seek, len, buf) != -1 ) { /* Checks if there is a serial number */ if ( (strncmp ( buf, " ",1) == 0) || (strlen ( buf) != len) ) { g_free ( buf); } else { /* Removes all spaces (at the begin and the end of the serial number) */ serial_number = g_strstrip ( buf); } } } return serial_number; } gchar * gw_fs_fat32_get_serial_number ( const gchar *fs) { gint seek = 67; gint len = 4; gchar *buf = NULL; gchar *serial_number = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { buf = (gchar *)g_malloc ( len + 1); if ( gw_fs_read_data ( fs, seek, len, buf) != -1 ) { /* Checks if there is a serial number */ if ( (strncmp ( buf, " ",1) == 0) || (strlen ( buf) != len) ) { g_free ( buf); } else { /* Removes all spaces (at the begin and the end of the serial number) */ serial_number = g_strstrip ( buf); } } } return serial_number; } gchar * gw_fs_iso9660_get_serial_number ( const gchar *fs) { /* FIX BUG : Where is the serial number on ISO 9660? */ gint seek = 0; gint len = 0; gchar *buf = NULL; gchar *serial_number = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( fs != NULL ) { buf = (gchar *)g_malloc ( len + 1); if ( gw_fs_read_data ( fs, seek, len, buf) != -1 ) { /* Checks if there is a serial number */ if ( (strncmp ( buf, " ",1) == 0) || (strlen ( buf) != len) ) { g_free ( buf); } else { /* Removes all spaces (at the begin and the end of the serial number) */ serial_number = g_strstrip ( buf); } } } return serial_number; } gwhere-0.2.3/src/tools/gwfilesystem.h0000744000175000017500000002374110023202520016253 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwfilesystem.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a tool component for file system. * @discussion All functions run on GNU/Linux well and should be done with Cygwin.

* Warning : Functions may failed if the user haven't got good right to open device files.

* * This is an uncomplete list of device file name :

* * On GNU/Linux :
* Floppy drive : /dev/fd[0-9]
* Hard disk : /dev/hd[a-z][0-9]
* CD drive : /dev/cdrom[0-9]
* Zip drive : /dev/zip[0-9]
* SCSI drive : /dev/scd[0-9]
* Tape drive : /dev/tape[0-9]

* * On Cygwin for Windows NT/W2K/XP :
* Floppy drive : /dev/fd[0-9]
* Hard disk : /dev/sd[a-z][0-9] or /dev/sd[0-99]
* CD drive : /dev/scd[0-9]
* Zip drive : ??
* SCSI drive : ??
* Tape drive : /dev/[n]st[0-9]

* * @author Sébastien LECACHEUR * @version 1.0 2002/05/19 * @see gwsupport.h * @link GWhere Web Site * @link Zlib Web Site * @ref gwfilesystem.c * @author Author * @author Luis PARRAVICINI */ #ifndef GW_TOOLS_FILE_SYSTEM_H #define GW_TOOLS_FILE_SYSTEM_H /*! * @function gw_fs_get_type * @abstract Gets the type of the file system. * @discussion This function gets the type of the file system.
* Under MS Windows with NT kernel device name is \\.\[A-Z]:\. Under * MS Windows with Win9x,ME kernel the device name is \\.\[A-Z]:\ or * [A-Z]:\. * @param fs device name of the file system * @param fs_type a pointer to the store the fs type (Note that must be free with g_free()) * @result Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_fs_get_type ( const gchar *fs, gchar **fs_type); /*! * @function gw_fs_get_volume_name * @abstract Gets the volume name of the file system. * @discussion This function gets the volume name of the file system.
* Under MS Windows with NT kernel device name is \\.\[A-Z]:\. Under * MS Windows with Win9x,ME kernel the device name is \\.\[A-Z]:\ or * [A-Z]:\. * @param fs device name of the file system * @param fs_type a pointer to the store the fs volume name (Note that must be free with g_free()) * @result Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_fs_get_volume_name ( const gchar *fs, gchar **fs_volume_name); /*! * @function gw_fs_get_serial_number * @abstract Gets the serial number of the file system. * @discussion This function gets the serial number of the file system.
* Under MS Windows with NT kernel device name is \\.\[A-Z]:\. Under * MS Windows with Win9x,ME kernel the device name is \\.\[A-Z]:\ or * [A-Z]:\. * @param fs device name of the file system * @param fs_type a pointer to the store the fs serial number (Note that must be free with g_free) * @result Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_fs_get_serial_number ( const gchar *fs, gchar **fs_volume_name); /*! * @function gw_fs_read_data * @abstract Reads data in the file system. * @discussion This function reads data in the file system.
* @param fs device name of the file system * @param seek position in file system of data * @param len length of data * @param data data (note that data must point to a buffer of sufficient size, size must bigger than len) * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_fs_read_data ( const gchar *fs, gint seek, gint len, gchar *data); /*! * @function gw_fs_contain_data * @abstract Checks if the file system contains the data. * @discussion This function checks if the file system contains the data..
* @param fs device name of the file system * @param seek position in file system of data to compare * @param len length of data the compare * @param data data (note that data must point to a buffer of sufficient size, size must bigger than len) * @result Returns 0 if the file system contains the data.
* Returns -1 if doesn't contain the data or when an error occured.
*/ gint gw_fs_contain_data ( const gchar *fs, gint seek, gint len, const gchar *data); /*! * @function gw_fs_is_fat12 * @abstract Checks if the file system is a FAT12 file system. * @discussion This function checks if the file system is a FAT12 file system.
* @param fs device name of the file system * @result Returns TRUE if it's a FAT 12 file sytem.
* Returns FALSE if it's not a FAT 12 file system or when an error occured.
*/ gboolean gw_fs_is_fat12 ( const gchar *fs); /*! * @function gw_fs_is_fat16 * @abstract Checks if the file system is a FAT12 file system. * @discussion This function checks if the file system is a FAT12 file system.
* @param fs device name of the file system * @result Returns TRUE if it's a FAT 12 file sytem.
* Returns FALSE if it's not a FAT 12 file system or when an error occured.
*/ gboolean gw_fs_is_fat16 ( const gchar *fs); /*! * @function gw_fs_is_fat32 * @abstract Checks if the file system is a FAT12 file system. * @discussion This function checks if the file system is a FAT12 file system.
* @param fs device name of the file system * @result Returns TRUE if it's a FAT 12 file sytem.
* Returns FALSE if it's not a FAT 12 file system or when an error occured.
*/ gboolean gw_fs_is_fat32 ( const gchar *fs); /*! * @function gw_fs_is_iso9660 * @abstract Checks if the file system is a ISO 9660 file system. * @discussion This function checks if the file system is a ISO 9660 file system.
* @param fs device name of the file system * @result Returns TRUE if it's a ISO 9660 file sytem.
* Returns FALSE if it's not a ISO 9660 file system or when an error occured.
*/ gboolean gw_fs_is_iso9660 ( const gchar *fs); /*! * @function gw_fs_fat12_get_volume_name * @abstract Gets the volume name of a FAT12 file system. * @discussion This function gets the volume name of a FAT12 file system..
* @param fs device name of the file system * @result The volume name.
* Returns NULL when an error occured.
*/ gchar * gw_fs_fat12_get_volume_name ( const gchar *fs); /*! * @function gw_fs_fat16_get_volume_name * @abstract Gets the volume name of a FAT16 file system. * @discussion This function gets the volume name of a FAT16 file system..
* @param fs device name of the file system * @result The volume name.
* Returns NULL when an error occured.
*/ gchar * gw_fs_fat16_get_volume_name ( const gchar *fs); /*! * @function gw_fs_fat32_get_volume_name * @abstract Gets the volume name of a FAT32 file system. * @discussion This function gets the volume name of a FAT32 file system..
* @param fs device name of the file system * @result The volume name.
* Returns NULL when an error occured.
*/ gchar * gw_fs_fat32_get_volume_name ( const gchar *fs); /*! * @function gw_fs_iso9660_get_volume_name * @abstract Gets the volume name of a ISO9660 file system. * @discussion This function gets the volume name of a ISO 9660 file system..
* @param fs device name of the file system * @result The volume name.
* Returns NULL when an error occured.
*/ gchar * gw_fs_iso9660_get_volume_name ( const gchar *fs); /*! * @function gw_fs_fat12_get_serial_number * @abstract Gets the serial number of a FAT12 file system. * @discussion This function gets the serial number of a FAT12 file system..
* @param fs device name of the file system * @result The serial number.
* Returns NULL when an error occured.
*/ gchar * gw_fs_fat12_get_serial_number ( const gchar *fs); /*! * @function gw_fs_fat16_get_serial_number * @abstract Gets the serial number of a FAT16 file system. * @discussion This function gets the serial number of a FAT16 file system..
* @param fs device name of the file system * @result The serial number.
* Returns NULL when an error occured.
*/ gchar * gw_fs_fat16_get_serial_number ( const gchar *fs); /*! * @function gw_fs_fat32_get_serial_number * @abstract Gets the serial number of a FAT32 file system. * @discussion This function gets the serial number of a FAT32 file system..
* @param fs device name of the file system * @result The serial number.
* Returns NULL when an error occured.
*/ gchar * gw_fs_fat32_get_serial_number ( const gchar *fs); /*! * @function gw_fs_iso9660_get_serial_number * @abstract Gets the serial number of a ISO9660 file system. * @discussion This function gets the serial number of a ISO 9660 file system.
* @param fs device name of the file system * @result The serial number.
* Returns NULL when an error occured.
*/ gchar * gw_fs_iso9660_get_serial_number ( const gchar *fs); #endif gwhere-0.2.3/src/tools/gwmail.c0000744000175000017500000003217610223033710015013 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwmail.h" #include "gwfile.h" #include #if defined ( OS_WIN32) /*#include */ /* gethostbyname */ #include /* gethostbyname */ #else #include #include #include #include #endif #include #include #include /* strcat strncmp */ #define MAX_MSG 5000 #define BOUNDARY "=-=Pipocrouch=-=" #define DEBUG 0 /* Table for base 64 encoding */ char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" "0123456789+/"; char rcv_msg[MAX_MSG]; /* Reception buffer */ int gw_mail_check_msg ( char * msg, char * code) { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : server message=%s, error code=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, msg, code); #endif return strncmp ( msg, code, 3)==0?1:0; } int gw_mail_read_msg ( int sd) { int result = -1; int n; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif memset ( rcv_msg, 0x0, MAX_MSG); n = recv ( sd, rcv_msg, MAX_MSG, 0); if ( n < 0 ) { perror ( _( "Cannot receive data")); result = -1; } else if ( n == 0 ) { perror ( _( "Connexion closed by client\n")); close ( sd); result = -1; } else { result = 0; } return result; } int gw_mail_send_msg ( int sd, char * msg) { int result = -1; int rc; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif strcat ( msg, "\r\n"); rc = send ( sd, msg, strlen ( msg), 0); if ( rc < 0 ) { perror ( _( "Cannot send data")); close ( sd); result = -1; } else { result = 0; } return result; } int gw_mail_attachment_encode_base64_and_send ( int sd, char * file ) { int result = -1; char buf[80]; unsigned long value; int shift = 0; int save_shift = 0; int accum = 0; int index = 0; int quit=0; FILE * fin; unsigned char blivit; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif /* Opens file. */ if ( (fin = fopen ( file, "rb")) != NULL ) { /* Beginning of reading. */ while ( ( !feof ( fin) ) || ( shift != 0 ) ) { if ( ( !feof ( fin) ) && ( quit == 0 ) ) { blivit = fgetc ( fin); if ( feof ( fin) ) { quit = 1; save_shift = shift; blivit = 0; } } else { quit = 1; save_shift = shift; blivit = 0; } if ( ( quit == 0 ) || ( shift != 0 ) ) { value = (unsigned long)blivit; accum <<= 8; shift += 8; accum |= value; } while ( shift >= 6 ) { shift -= 6; value = (accum >> shift) & 0x3Fl; blivit = alphabet[value]; buf[index++] = blivit; if ( index >= 60 ) { buf[index] = '\0'; send ( sd, buf, strlen ( buf), 0); send ( sd, "\n", 1, 0); index = 0; } if ( quit != 0 ) { shift = 0; } } } if ( save_shift == 2 ) { buf[index++] = '='; if ( index >= 60 ) { buf[index] = '\0'; send ( sd, buf, strlen ( buf), 0); send ( sd, "\n", 1, 0); index = 0; } buf[index++] = '='; if ( index >= 60 ) { buf[index] = '\0'; send ( sd, buf, strlen ( buf), 0); send ( sd, "\n", 1, 0); index = 0; } } else if ( save_shift == 4 ) { buf[index++] = '='; if ( index >= 60 ) { buf[index] = '\0'; send ( sd, buf, strlen ( buf), 0); send ( sd, "\n", 1, 0); index = 0; } } if ( index != 0) { buf[index] = '\0'; send ( sd, buf, strlen ( buf), 0); send ( sd, "\n", 1, 0); } /* Closes file. */ fclose ( fin); result = 0; } return result; } int gw_mail_send_mail ( char * hostname, int server_port, char * from, char * to, char * cc, char * bcc, char * object, char * msg, char * file) { int rc; struct sockaddr_in localAddr, servAddr; struct hostent *h = NULL; char commande[MAX_MSG]; int sd; char * filename = NULL; #if defined ( OS_WIN32) WSADATA wsd; #endif #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); g_print ( "*** GW - %s (%d) :: %s() : hostname=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, hostname); g_print ( "*** GW - %s (%d) :: %s() : server_port=%d\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, server_port); g_print ( "*** GW - %s (%d) :: %s() : from=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, from); g_print ( "*** GW - %s (%d) :: %s() : to=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, to); g_print ( "*** GW - %s (%d) :: %s() : cc=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, cc); g_print ( "*** GW - %s (%d) :: %s() : bcc=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, bcc); g_print ( "*** GW - %s (%d) :: %s() : object=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, object); g_print ( "*** GW - %s (%d) :: %s() : message=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, msg); g_print ( "*** GW - %s (%d) :: %s() : file=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, file); #endif #if defined ( OS_WIN32) if ( WSAStartup ( MAKEWORD ( 2, 2), &wsd) != 0) { perror ( "Couldn't start winsock"); return -1; } #endif if ( (h = gethostbyname ( hostname)) != NULL ) { servAddr.sin_family = h->h_addrtype; memcpy ( (char *)&servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length); servAddr.sin_port = htons ( server_port); /* Creates socket. */ sd = socket ( AF_INET, SOCK_STREAM, 0); if ( sd >= 0 ) { /* Bind the port. */ localAddr.sin_family = AF_INET; localAddr.sin_addr.s_addr = htonl ( INADDR_ANY); localAddr.sin_port = htons ( 0); rc = bind ( sd, (struct sockaddr *) &localAddr, sizeof ( localAddr)); if ( rc >= 0 ) { /* Connects to the server. */ rc = connect ( sd, (struct sockaddr *) &servAddr, sizeof ( servAddr)); if ( rc >= 0 ) { /* Reads data in socket. */ gw_mail_read_msg ( sd); if ( !gw_mail_check_msg ( rcv_msg, "220") ) { perror ( "Invalid server"); } strcpy ( commande, "HELO "); strcat ( commande, hostname); gw_mail_send_msg ( sd, commande); gw_mail_read_msg ( sd); if ( !gw_mail_check_msg ( rcv_msg, "250") ) { perror ( "Invalid server"); } strcpy ( commande, "MAIL FROM: "); strcat ( commande, from); gw_mail_send_msg ( sd, commande); gw_mail_read_msg ( sd); if ( !gw_mail_check_msg ( rcv_msg, "250") ) { perror ( "Invalid shipper"); } strcpy ( commande, "RCPT TO: "); strcat ( commande, to); gw_mail_send_msg ( sd, commande); gw_mail_read_msg ( sd); if ( !gw_mail_check_msg ( rcv_msg, "250") ) { perror ( "Invalid recipient"); } if ( cc != NULL ) { if ( strlen ( cc) > 1 ) { strcpy ( commande, "RCPT TO: "); strcat ( commande, cc); gw_mail_send_msg ( sd, commande); gw_mail_read_msg ( sd); if ( !gw_mail_check_msg ( rcv_msg, "250") ) { perror ( "Invalid recipient"); } } } if ( bcc != NULL ) { if ( strlen ( bcc) > 1 ) { strcpy ( commande, "RCPT TO: "); strcat ( commande, bcc); gw_mail_send_msg ( sd, commande); gw_mail_read_msg ( sd); if ( !gw_mail_check_msg ( rcv_msg, "250") ) { perror ( "Invalid recipient"); } } } strcpy ( commande, "DATA"); gw_mail_send_msg ( sd, commande); gw_mail_read_msg ( sd); if ( !gw_mail_check_msg ( rcv_msg, "354") ) { perror ( "Unknown error"); } strcpy ( commande, "Subject: "); strcat ( commande, object); strcat ( commande, "\r\n"); strcat ( commande, "From: "); strcat ( commande, from); strcat ( commande, "\r\n"); strcat ( commande, "To: "); strcat ( commande, to); strcat ( commande, "\r\n"); if ( cc != NULL ) { if ( strlen ( cc) > 1 ) { strcat ( commande, "Cc: "); strcat ( commande, cc); strcat ( commande, "\r\n"); } } if ( bcc != NULL) { if ( strlen ( cc) > 1 ) { strcat ( commande, "Bcc: "); strcat ( commande, bcc); strcat ( commande, "\r\n"); } } strcat ( commande, "MIME-Version: 1.0\r\n"); strcat ( commande, "Content-Type: multipart/mixed; boundary=\""); strcat ( commande, BOUNDARY); strcat ( commande, "\"; charset=us-ascii\r\n"); /* Writes message. */ strcat ( commande, "\r\n--"); strcat ( commande, BOUNDARY); strcat ( commande, "\r\nContent-Type: text/plain; charset=us-ascii\r\n"); strcat ( commande, "Content-Transfer-Encoding: 7bit\r\n\r\n"); strcat ( commande, msg); strcat ( commande, "\r\n--"); strcat ( commande, BOUNDARY ); if ( (file != NULL) && (gw_file_exists ( file) == 0) ) { filename = gw_file_get_name ( file); /* Sends the attached file. */ strcat ( commande, "\r\nContent-Type: application/octet-stream; name="); strcat ( commande, filename); strcat ( commande, "\r\nContent-Disposition: attachment;filename=\""); strcat ( commande, filename); strcat ( commande, "\"\r\n"); strcat ( commande, "Content-Transfer-Encoding: base64\r\n"); gw_mail_send_msg ( sd, commande); if ( filename != NULL ) { g_free ( filename); } /* Inserts the file body. */ gw_mail_attachment_encode_base64_and_send ( sd, file); strcpy ( commande, "\r\n--"); strcat ( commande, BOUNDARY); } strcat ( commande, "\r\n\r\n"); strcat ( commande, "."); gw_mail_send_msg ( sd, commande); gw_mail_read_msg ( sd); if ( !gw_mail_check_msg ( rcv_msg, "250") ) { perror ( "Sending failed"); } strcpy ( commande, "QUIT"); gw_mail_send_msg ( sd, commande); } else { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : cannot connect to %s on TCP port %u\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, hostname, server_port); #endif } } else { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : %s cannot bind the TCP port %u\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, hostname, server_port); #endif } /* Closes the socket. */ close ( sd); } else { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : cannot open socket\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif } } else { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : %s -> unknown host\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, hostname); #endif switch ( h_errno) { case HOST_NOT_FOUND: g_print ( "*** GW - %s (%d) :: %s() : unknown host name\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); break; case NO_ADDRESS: g_print ( "*** GW - %s (%d) :: %s() : host name valid, but no IP\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); break; // case NO_DATA: g_print ( "*** GW - %s (%d) :: %s() : host name valid, but no IP\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); // break; case NO_RECOVERY: g_print ( "*** GW - %s (%d) :: %s() : fatal error on DSN\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); break; case TRY_AGAIN: g_print ( "*** GW - %s (%d) :: %s() : temporary error on DSN, try later\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); break; default: g_print ( "*** GW - %s (%d) :: %s() : unknown error\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); break; } } #if defined ( OS_WIN32) WSACleanup ( ); #endif return 0; } gboolean gw_mail_check_email_list ( const char * email_list) { gboolean result = FALSE; gboolean good = TRUE; gchar **list = NULL; gchar *first = NULL; gint i = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( email_list != NULL ) { list = g_strsplit ( email_list, ";", 0); while ( (list[i++] != NULL) && good ) { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : checking email (%s)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, list[i-1]); #endif first = strchr ( list[i - 1], '@'); if ( first != NULL ) { if ( strchr ( first + 1, '@') != NULL ) { good = FALSE; } } else { good = FALSE; } } g_strfreev ( list); result = good; } return result; } gwhere-0.2.3/src/tools/gwmail.h0000744000175000017500000001023110023202520014777 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwmail.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a tool component to send mails. * @author Sébastien LECACHEUR * @version 1.0 2002/09/03 * @see gwsupport.h * @link GWhere Web Site * @ref gwmail.c * @author Author * @author Grégory BLOQUEL * @author Sébastien LECACHEUR */ #ifndef GW_TOOLS_MAIL_H #define GW_TOOLS_MAIL_H /*! * @function gw_mail_check_msg * @abstract Checks if the server doesn't return an error. * @discussion This function checks if the server doesn't return an error.
* @param msg server response * @param code error code to check * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ int gw_mail_check_msg ( char * msg, char * code); /*! * @function gw_mail_read_msg * @abstract Reads messages on a socket. * @discussion This function reads messages on a socket.
* @param sd socket descriptor * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ int gw_mail_read_msg ( int sd); /*! * @function gw_mail_send_msg * @abstract Sends messages on a socket. * @discussion This function sends messages on a socket.
* @param sd socket descriptor * @param msg message to send * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ int gw_mail_send_msg ( int sd, char * msg); /*! * @function gw_mail_attachment_encode_base64_and_send * @abstract Encodes in base 64 and sends a file on a socket. * @discussion This function encodes in base 64 and sends a file on a socket.
* @param sd socket descriptor * @param file file name to encode and send * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ int gw_mail_attachment_encode_base64_and_send ( int sd, char * file ); /*! * @function gw_mail_send_mail * @abstract Sends a mail. * @discussion This function sends a mail.
* @param hostname server host name * @param server_port server port * @param from mail "from" field * @param to mail "to" field * @param cc mail "cc" field * @param bcc mail "bcc" field * @param object mail "object" field * @param msg mail message * @param file file name to attach * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ int gw_mail_send_mail ( char * hostname, int server_port, char * from, char * to, char * cc, char * bcc, char * object, char * msg, char * file); /*! * @function gw_mail_check_email_list * @abstract Checks an email list format * @discussion This function checks an email list format.
* An email list have good format if each email address are seperated by ";" character and if * each email address have an "@" character. * @param email_list email list to check * @result returns TRUE if the email list have the good format.
* Returns FALSE when an error occured.
*/ gboolean gw_mail_check_email_list ( const char * email_list); #endif gwhere-0.2.3/src/tools/gwpropertiesfile.c0000744000175000017500000001417710023202520017121 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwpropertiesfile.h" #include /* open */ #include /* open */ #include /* open */ #include /* strncmp strlen */ #include "gwstring.h" /* gw_str_delete_char */ #include "gwfile.h" /* gw_file_read_line */ gint gw_properties_file_read_variable_value ( const gchar *name, const gchar *var, gchar **value) { gint pf; gint result = -1; gchar *line = NULL; gchar **parsed_line = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT gint i; #endif #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( ( pf = open ( name, O_RDONLY) ) != -1 ) { while ( ((line = gw_file_readline ( pf, line, -1)) != NULL) && (result != 0)) { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : read line=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, line); #endif parsed_line = g_strsplit ( line, "=", 1); #ifdef GW_DEBUG_TOOLS_COMPONENT i = 0; while ( parsed_line[i] != NULL ) { g_print ( "*** GW - %s (%d) :: %s() : splitted line[%d]=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i, parsed_line[i]); i++; } #endif /* Removes all beginning and ending white spaces. */ g_strstrip ( parsed_line[0]); /* Checks if it's the exact variable name (with size and characters. */ if ( (strlen ( parsed_line[0]) == strlen ( var)) && strncmp ( var, parsed_line[0], strlen ( var)) == 0 ) { if ( parsed_line[1] != NULL ) { /* Removes all beginning and ending white spaces. */ g_strstrip ( parsed_line[1]); *value = g_strdup ( parsed_line[1]); /* Frees the value if contains no characters and values to NULL. */ if ( strlen ( *value) == 0 ) { g_free ( *value); *value = NULL; } } else { *value = NULL; } result = 0; } if ( parsed_line != NULL ) { g_strfreev ( parsed_line); parsed_line = NULL; } if ( line != NULL ) { g_free ( line); line = NULL; } } if ( line != NULL ) { g_free ( line); line = NULL; } close ( pf); } return result; } gint gw_properties_file_load_all_settings ( const gchar *name, GWSettings **settings) { gint pf; gint result = -1; gchar *line = NULL; gchar **parsed_line = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT gint i; #endif #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( ( pf = open ( name, O_RDONLY) ) != -1 ) { while ( ((line = gw_file_readline ( pf, line, -1)) != NULL)) { if ( *settings == NULL ) { /* Allocates a new GWSettings. */ *settings = gw_settings_new ( ); } #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : read line=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, line); #endif parsed_line = g_strsplit ( line, "=", 2); #ifdef GW_DEBUG_TOOLS_COMPONENT i = 0; while ( parsed_line[i] != NULL ) { g_print ( "*** GW - %s (%d) :: %s() : splitted line[%d]=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, i, parsed_line[i]); i++; } #endif if ( parsed_line[0] != NULL ) { /* Removes all beginning and ending white spaces. */ g_strstrip ( parsed_line[0]); /* Removes all '\r' in the string, due to a bug with empty line on Cygwin OS. */ gw_str_delete_char ( parsed_line[0], '\r'); if ( strlen ( parsed_line[0]) != 0 ) { if ( parsed_line[1] != NULL ) { g_strstrip ( parsed_line[1]); if ( strlen ( parsed_line[1]) == 0 ) { g_free ( parsed_line[1]); parsed_line[1] = NULL; } } gw_settings_add_pair ( *settings, g_strdup ( parsed_line[0]), g_strdup ( parsed_line[1])); result = 0; } } if ( parsed_line != NULL ) { g_strfreev ( parsed_line); parsed_line = NULL; } if ( line != NULL ) { g_free ( line); line = NULL; } } if ( line != NULL ) { g_free ( line); line = NULL; } close ( pf); } return result; } gint gw_properties_file_save_all_settings ( const gchar *name, GWSettings **settings, const gchar *mode) { gint pf; gint result = -1; gchar *file = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( *settings != NULL ) { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : openning file... (%s)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, name); #endif if ( ( pf = open ( name, O_CREAT | O_RDWR | O_TRUNC, S_IRUSR | S_IWUSR) ) != -1 ) { #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : file opened (%s)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, name); #endif file = g_strdup ( ""); gw_settings_to_file ( *settings, &file); #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : writing file...\n%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, file); #endif if ( strlen ( file) == write ( pf, file, strlen ( file))) { /* Not frees GWSettings at time : may be with mode parameter. */ /* gw_settings_free ( *settings); */ #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : file written (%s)\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, name); #endif result = 0; } if ( file != NULL ) { g_free ( file); file = NULL; } close ( pf); } } return result; } gwhere-0.2.3/src/tools/gwpropertiesfile.h0000744000175000017500000000726210023202520017123 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwpropertiesfile.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* * This Distributed under the terms of the GNU General Public Licence

* * This component was developed for the GWhere project.

* * The properties file contains a list of key/value pair.
* Each line must contains only one pair. The key and the value are separated by the * equal character : "=". Note that all beginning and ending whites spaces are always removed. * If the value is replaced by NULL when it equals the empty string : "".
* @abstract This is a tool component for properties files. * @author Sébastien LECACHEUR * @version 1.0 2002/05/19 * @see gwsupport.h * @link GWhere Web Site * @ref gwpropertiesfile.c * @author Author * @author Luis PARRAVICINI */ #ifndef GW_TOOLS_PROPERTIES_FILE_H #define GW_TOOLS_PROPERTIES_FILE_H #include "data/gwdata.h" /*! * @function gw_properties_file_read_variable_value * @abstract Reads the variable value in the properties file. * @discussion This function reads the variable value in the properties file.
* @param name file name * @param var variable name * @param value value (note that value must be freed with g_free) * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_properties_file_read_variable_value ( const gchar *name, const gchar *var, gchar **value); /*! * @function gw_properties_file_load_all_settings * @abstract Reads the variable value in the properties file and allocates a new GWSettings. * @discussion This function reads the variable value in the properties file and allocates a new GWSettings.
* @param name file name * @param settings a pointere (note that settings must be freed with gw_settings_free) * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_properties_file_load_all_settings ( const gchar *name, GWSettings **settings); /*! * @function gw_properties_file_save_all_settings * @abstract Saves all variable of the GWSettings in the properties file and frees it. * @discussion This function saves all variable of the GWSettings in the properties file and frees it. * Warning : the mode parameter is not yet implemented. This function erase all * existing parameters (and comments).
* Not free the GWSettings at time.
* @param name file name * @param settings a pointer (note will be freed) * @param mode save mode "u" : update, "e" : ecrase * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_properties_file_save_all_settings ( const gchar *name, GWSettings **settings, const gchar *mode); #endif gwhere-0.2.3/src/tools/gwstring.c0000744000175000017500000005736110506323451015412 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "../gwsupport.h" #include "gwstring.h" #include /* asctime */ #include /* strcmp strlen memmove strstr strncmp strerror memcpy */ #include /* isspace*/ #include /* regcomp regexec */ #include /* abs */ #ifndef strsep char *strsep ( char **stringp, const char *delim) { char *res = NULL; if ( !stringp || !*stringp || !**stringp ) { return (char*)0; } res = *stringp; while ( **stringp && !strchr ( delim, **stringp) ) { (*stringp)++; } if(**stringp) { **stringp = '\0'; (*stringp)++; } return res; } #endif /* strsep */ unsigned long int gw_ntohl ( unsigned long int in) { unsigned char a[4], t; memcpy ( a, &in, 4); t = a[3]; a[3] = a[0]; a[0] = t; t = a[2]; a[2] = a[1]; a[1] = t; memcpy ( &in, a, 4); return in; } gchar * gw_l_byte_to_str_format ( long size ) { long double n = size * 1.0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return gw_ld_byte_to_str_format ( n); } gchar * gw_ul_byte_to_str_format ( unsigned long size ) { long double n = size * 1.0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return gw_ld_byte_to_str_format ( n); } gchar * gw_ui64_byte_to_str_format ( guint64 size ) { long double n = size * 1.0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return gw_ld_byte_to_str_format ( n); } gchar * gw_d_byte_to_str_format ( gdouble size ) { long double n = size * 1.0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif return gw_ld_byte_to_str_format ( n); } gchar * gw_ld_byte_to_str_format ( long double n) { long double m = n * 1.0; gint i = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif while ( (m = (m / 1024.0)) >= 1 ) { i++; } switch ( i) { case 0 : return g_strdup_printf ( _( "%.0f bytes"), (double)n); break; case 1 : return g_strdup_printf ( _( "%.2f Kb"), (double)(n / 1024)); break; case 2 : return g_strdup_printf ( _( "%.2f Mb"), (double)(n / 1048576)); break; case 3 : return g_strdup_printf ( _( "%.2f Gb"), (double)(n / 1073741824)); break; case 4 : m = n / 1073741824; return g_strdup_printf ( _( "%.2f Tb"), (double)( m / 1024)); break; case 5 : m = n / 1073741824; return g_strdup_printf ( _( "%.2f Pb"), (double)( m / 1048576)); break; case 6 : m = n / 1073741824; return g_strdup_printf ( _( "%.2f Hb"), (double)( m / 1073741824)); break; case 7 : m = n / 1073741824; m = m / 1073741824; return g_strdup_printf ( _( "%.2f Ib"), (double)( m / 1024)); break; default : m = n / 1073741824; m = m / 1073741824; return g_strdup_printf ( _( "%.2f Ib"), (double)( m / 1024)); break; } } long double gw_str_format_to_ld ( gchar * nb) { long double n; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( nb[strlen ( nb) -2] == ' ') { /* Size in byte */ return g_strtod ( nb, NULL); } else { if ( nb[strlen ( nb) -2] == 'K') { /* Size in kilo byte */ n = 1024 * g_strtod ( nb, NULL); return n; } else { if ( nb[strlen ( nb) -2] == 'M') { /* Size in mega byte */ n = 1048576 * g_strtod ( nb, NULL); return n; } else { if ( nb[strlen ( nb) -2] == 'G') { /* Size in giga byte */ n = 1073741824 * g_strtod ( nb, NULL); return n; } else { if ( nb[strlen ( nb) -2] == 'T') { /* Size in tera byte */ n = 1024; n = n * 1073741824; n = n * g_strtod ( nb, NULL); return n; } else { if ( nb[strlen ( nb) -2] == 'P') { /* Size in penta byte */ n = 1048576; n = n * 1073741824; n = n * g_strtod ( nb, NULL); return n; } else { if ( nb[strlen ( nb) -2] == 'H') { /* Size in hexa byte */ n = 1024 * g_strtod ( nb, NULL); return n; } else { if ( nb[strlen ( nb) -2] == 'I') { /* Size in iota byte */ n = 1073741824; n = n * 1073741824; n = n * g_strtod ( nb, NULL); return n; }}}}}}}} return 0; } gchar * gw_tm_to_str_format ( struct tm* p) { gchar * date = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( p != NULL ) { #ifdef __DEPRECATED__ /* The code has changed to fix untranslated date under win32. */ date = asctime ( p); if ( date != NULL ) { /* Add this code for unhoped end character on win32. */ if ( isprint ( date[strlen ( date)-1]) == 0) { date[strlen ( date)-1]='\0'; } } #else if ( (date = (gchar*)g_malloc ( sizeof ( gchar) * 20)) != NULL ) { strftime ( date, 20, "%d/%m/%Y %H:%M:%S", p); } #endif } return date; } gchar * gw_str_to_file ( gchar *str) { gchar *txt = NULL; gchar *cti[3] = {"\n", ":", NULL}; gchar *cto[3] = {"\\n", "\\#", NULL}; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : string=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, str); #endif if ( str != NULL ) { txt = gw_str_replace_strv ( str, cti, cto); } #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : encoded string=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, txt); #endif return txt; } gchar * gw_str_to_file_strb ( const gchar *pattern, GWStringBuffer *buf) { gchar *q = NULL; gchar *result = NULL; gint nb = 0; gchar *chr1 = NULL, *chr2 = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : string to encode=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, pattern); #endif if ( (pattern != NULL) && (strlen(pattern) > 0) ) { q = (gchar*)pattern; while ( q[0] != '\0' ) { if ( (q[0] == '\n') || (q[0] == ':') ) { nb++; } q++; } /* q = (gchar*)pattern; while ( (q = strchr ( q, '\n')) != NULL ){nb++;q++;} q = (gchar*)pattern; while ( (q = strchr ( q, ':')) != NULL ){nb++;q++;} */ gw_string_buffer_resize ( buf, strlen ( pattern) + nb); gw_string_buffer_set_str ( buf, (gchar*)pattern, strlen ( pattern)); if ( nb > 0 ) { /* Warning this algorythm is optimized but it is very dangerous!! */ result = gw_string_buffer_get_str ( buf); q = result; chr1 = strchr ( q, '\n'); chr2 = strchr ( q, ':'); while ( chr1 != NULL || chr2 != NULL ) { if ( (chr1 != NULL ) && ((chr2 == NULL ) || (chr1 < chr2)) ) { q = chr1; gw_string_buffer_replace_chr ( buf, 'n', q - result); gw_string_buffer_insert_str ( buf, "\\", q - result, 1); q++; chr1 = strchr ( q, '\n'); if ( chr2 != NULL) { chr2++; } } else { q = chr2; gw_string_buffer_replace_chr ( buf, '#', q - result); gw_string_buffer_insert_str ( buf, "\\", q - result, 1); q++; chr2 = strchr ( q, ':'); if ( chr1 != NULL) { chr1++; } } } } } else { gw_string_buffer_set_str ( buf, (gchar*)pattern, 0); } result = gw_string_buffer_get_str ( buf); #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : encoded string=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, result); #endif return result; } gchar * gw_file_to_str ( gchar *desc) { gchar **buf = NULL; gchar *txt = NULL; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : decode string=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, desc); #endif if ( desc != NULL ) { txt = g_strdup ( desc); buf = g_strsplit ( txt, "\\n", 0); if ( buf != NULL ) { g_free ( txt); txt = g_strjoinv ( "\n", buf); g_strfreev ( buf); buf = NULL; buf = g_strsplit ( txt, "\\#", 0); if ( buf != NULL ) { g_free ( txt); txt = g_strjoinv ( ":", buf); g_strfreev ( buf); buf = NULL; } } } #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : decoded string=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, txt); #endif return txt; } gchar * gw_str_replace_str ( gchar *pattern, gchar *src, gchar *dst) { gint srclen = 0, dstlen = 0; gchar *p, *q, *qq, *pp; gchar *result = NULL; gint nb = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pattern != NULL ) { /* Counts the number of string token to replace. */ q = pattern; while ( (q = strstr ( q, src)) != NULL ) { nb++; q++; } /* If there is string token to replace only duplicates the string. */ if ( nb != 0 ) { /* Allocates the needed memory by the new string. */ srclen = strlen ( src); dstlen = strlen ( dst); if ( (result = (gchar *)g_malloc ( strlen ( pattern) + (nb * (dstlen - srclen)) + 1)) != NULL ) { qq = result; q = pattern; /* Copies the string and replaces all src string tokens by dst string tokens. */ while ( (p = strstr ( q, src)) != NULL ) { pp = qq + (p - q); memcpy ( qq, q, p - q); memcpy ( pp, dst, dstlen); q = p + srclen; qq = pp + dstlen; } memcpy ( qq, q, strlen ( pattern) - (q - pattern)); *((qq + strlen ( pattern)) - (q - pattern)) = '\0'; } } } return result; } gchar * gw_str_replace_strv ( gchar *pattern, gchar **src, gchar **dst) { gchar *tmp = NULL, *result = NULL; gboolean modified = FALSE; gint i = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( pattern != NULL ) { tmp = pattern; /* Tries to replace all string token couples. */ while ( ( src[i] != NULL ) || ( dst[i] != NULL ) ) { if ( (result = gw_str_replace_str ( tmp, src[i], dst[i])) != NULL ) { /* If it is not modified, it is the original string pattern. */ if ( modified == TRUE ) { g_free ( tmp); } tmp = result; /* Indicates that the string was modified. */ modified = TRUE; } i++; } if ( modified == TRUE ) { /* If it is was modified gets the new pattern. */ result = tmp; } } #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() before=%s after=%s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, pattern, result); #endif return result; } gchar * gw_str_blob_to_regex ( gchar *blob) { /* Warning : the order of convert_table_in/out is important!! */ gchar *regex = NULL; gchar *convert_table_in[17] = {"\\", ".", "*", "?", "^", "$", "|", "(", ")", "[", "]", "{", "{", "+", "?", ",", NULL}; gchar *convert_table_out[17] = {"\\\\","\\.",".*",".","\\^","\\$","\\|","\\(","\\)","\\[","\\[","\\}","\\}","\\+","\\?","\\,", NULL}; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( blob != NULL ) { if ( ( regex = gw_str_replace_strv ( blob, convert_table_in, convert_table_out)) == NULL ) { regex = g_strdup ( blob); } } return regex; } gchar ** gw_str_key_words_to_regex ( gchar *key_words) { gchar **words = NULL; gchar *regex_build = NULL; int i = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( key_words != NULL ) { gw_strdel_chrsry ( key_words, ' '); gw_str_trim ( key_words); words = g_strsplit ( key_words, " ", 0); if ( words != NULL ) { for ( i = 0; words[i] != NULL; i++) { regex_build = g_strconcat ( ".*", words[i], ".*", NULL); g_free ( words[i]); words[i] = regex_build; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : an new pattern search is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, words[i]); #endif } } } return words; } gint gw_strcmp_strblob ( gchar *str, gchar *blob, gboolean case_sensitive) { gchar *tmp_str = NULL; gchar *tmp_blob = NULL; gchar *keep_str = NULL; gchar **words = NULL; gchar *tmp = NULL; gint i; gint result = -1; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( ( str != NULL ) || ( blob != NULL ) ) { tmp_str = keep_str = g_strdup ( str); tmp_blob = g_strdup ( blob); if ( case_sensitive ) { g_strdown ( tmp_str); g_strdown ( tmp_blob); } words = g_strsplit ( tmp_blob, "*", 0); for ( i = 0; words[i] != NULL; i++) { if ( (tmp = strstr ( tmp_str, words[i])) != NULL ) { tmp_str = tmp; if ( words[i + 1] == NULL ) { if ( tmp_blob[strlen ( tmp_blob) - 1] != '*' ) { if ( strlen ( words[i]) != strlen ( tmp_str)) { tmp_str = NULL; break; } } } } else { tmp_str = NULL; break; } } if ( tmp_str != NULL ) { if ( strcmp ( words[0], "" ) != 0) { if ( strncmp ( keep_str, words[0], strlen ( words[0])) == 0 ) { result = 0; } } else { if ( strcmp ( words[0], "" ) == 0) { result = 0; }} } if ( keep_str != NULL ) { g_free ( keep_str); } if ( tmp_blob != NULL ) { g_free ( tmp_blob); } if ( words != NULL ) { g_strfreev ( words); } } #ifdef GW_DEBUG_TOOLS_COMPONENT if ( result == 0 ) { g_print ( "*** GW - %s (%d) :: %s() : %s == %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, str, blob); } else { g_print ( "*** GW - %s (%d) :: %s() : %s <> %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, str, blob); } #endif return result; } gint gw_strcmp_strregex ( gchar *str, gchar *regex, gboolean case_sensitive) { regex_t *r=NULL; regex_t real; gint cflags; gint result = -1; r = ℜ #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( case_sensitive == FALSE ) { cflags = REG_ICASE|REG_NOSUB; } else { cflags = 0|REG_NOSUB; } if ( regcomp ( r, regex, cflags) == 0 ) { if ( regexec ( r, str, 0, NULL, 0) == 0 ) { result = 0; } } regfree ( r); #ifdef GW_DEBUG_TOOLS_COMPONENT if ( result == 0 ) { g_print ( "*** GW - %s (%d) :: %s() : %s == %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, str, regex); } else { g_print ( "*** GW - %s (%d) :: %s() : %s <> %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, str, regex); } #endif return result; } gint gw_strdel_chrsry ( gchar *str, const gchar chr) { /* The index i is the cursor for read and the index j is the cursor for write. This function scan the complet string and read/write each character except if it is equal to the specified character and the following characters is equal this one. The result is the number of deleted characters. */ gint i = 0; gint j = 0; gint result = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : the initial string is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, str); #endif if ( str != NULL ) { /* Scan the complet string in order to find all specified doubled characters Reads all characters until the NULL character. */ while ( str[i] != '\0' ) { /* Check if the current character is equal to the specified character. */ if ( str[i] == chr ) { /* In the case where the current character is equal to the specified character, check if the following character is equal to the specified character too (in this case the caracter is doubled). */ if ( str[i] == str[i+1] ) { /* Do not write the character because it is doubled with the following. Only increment the number of deleted characters. */ result++; } else { /* The following character is different from the current character. Must write the character to the new index and after increment the index of the character to write. */ str[j++] = str[i]; } } else { /* The current character is different from the specified character. Must write the character to the new index and after increment the index of the character to write. */ str[j++] = str[i]; } /* Increment the index of the current character to read. */ i++; } /* Copy the NULL character at the end of the new string (the index of the character to write). */ str[j] = '\0'; } #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s() : the new string is %s\n", __FILE__, __LINE__, __PRETTY_FUNCTION__,str); #endif return result; } gint gw_str_trim_doubled_char ( gchar *str) { char *ptrcar, *ptrsearch, *ptrsrc, *ptrdest; gint result = -1; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( str != NULL ) { ptrcar = str; while ( *ptrcar) { ptrsearch = ptrcar + 1; while ( *ptrsearch) { if ( *ptrsearch == *ptrcar ) { ptrsrc = ptrdest = ptrsearch; ptrsrc++; while ( *ptrsrc) { if ( *ptrsrc != *ptrcar ) { *(ptrdest++) = *(ptrsrc++); } else { ptrsrc++; } } *ptrdest = '\0'; } ptrsearch++; } ptrcar++; } result = 0; } return result; } gint gw_str_trim ( gchar* str) { unsigned long nb_space, size; gint result = -1; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( str != NULL ) { /* Gets the string size */ size = strlen ( str); /* Counts the number of begining white spaces */ nb_space = 0; while ( isspace ( str[nb_space]) && (str[nb_space])) { nb_space++; } if ( !str[nb_space]) { /* The string is only white spaces. Returns empty string */ str[0] = '\0'; } else { /* Removes all begining white spaces */ if ( nb_space) { memmove ( str, str + nb_space, size - nb_space); size -= nb_space; } /* Removes all ending white spaces */ while ( size && ( isspace ( str[size-1]))) { size--; } str[size] = '\0'; } result = 0; } return result; } gint gw_str_trim2 ( gchar *str) { gint result = -1; gint i = 0, j = 0, end = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( str != NULL ) { /* Counts all spaces. */ while ( str[i] == ' ') { i++; } /* If there are spaces move all characters. */ if ( i != 0 ) { while ( (str[i] != '\0')) { str[j] = str[i]; i++; j++; if ( str[i] != ' ') { end = i; } } } else { while ( (str[i] != '\0')) { if ( str[i] != ' ') { end = i; } i++; } } if ( end < i ) { for ( j = (end+1); str[j] != '\0'; j++ ) { str[j] = '\0'; } } else if ( i != 0 ) { str[j] = '\0'; } result = 0; } return result; } gint gw_str_trim_left ( gchar *str) { gint result = -1; gint i = 0, j = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( str != NULL ) { /* Counts all spaces. */ while ( str[i] == ' ') { i++; } /* If there are spaces move all characters. */ while ( (str[i] != '\0') && (i != 0)) { str[j] = str[i]; i++; j++; } if ( i != 0 ) { str[j] = '\0'; } result = 0; } return result; } gint gw_str_trim_right ( gchar *str) { gint result = -1; gint i = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( str != NULL ) { i = strlen ( str); /* Counts all spaces. */ while ( (str[i - 1] == ' ') && ( i != 0)) { str[i - 1] = '\0'; i--; } result = 0; } return result; } gint gw_str_delete_char ( gchar *str, gchar c) { gint i = 0, j; gint result = -1; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( str != NULL ) { while ( i < strlen ( str)) { if ( str[i] == c ) { j = i; while ( j < ( strlen ( str))) { str[j] = str[j + 1]; j = j + 1; } } else { i = i + 1; } } result = 0; } return result; } gint gw_str_replace_char ( gchar *string, gchar before, gchar after) { gchar *p = NULL; gint result = -1; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( string != NULL ) { for ( p = string; *p; p++) { if ( *p == before ) { *p = after; } } result = 0; } return result; } gint gw_str_substr ( const gchar *str, gint begin, gint end, gchar *dest) { gint len = 0; gint result = -1; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( str != NULL ) { len = end + 1 - begin; dest[len] = '\0'; memcpy ( dest, (gchar *)str + begin, len); result = len; } return result; } gint gw_str_dupsubstr ( const gchar *str, gint begin, gint end, gchar **dest) { gint len = 0; gint result = -1; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( str != NULL ) { len = end + 1 - begin; *dest = (gchar*)g_malloc ( sizeof ( gchar) * (len + 1)); dest[len] = '\0'; memcpy ( *dest, (gchar *)str + begin, len); result = len; } return result; } gint gw_str_to_lower ( gchar *str) { gint result = -1; gint i = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( str != NULL ) { while ( str[i] != '\0' ) { str[i] = tolower ( str[i]); i++; } result = 0; } return result; } gint gw_str_to_upper ( gchar *str) { gint result = -1; gint i = 0; #ifdef GW_DEBUG_TOOLS_COMPONENT g_print ( "*** GW - %s (%d) :: %s()\n", __FILE__, __LINE__, __PRETTY_FUNCTION__); #endif if ( str != NULL ) { while ( str[i] != '\0' ) { str[i] = toupper ( str[i]); i++; } result = 0; } return result; } gint gw_str_to_ascii ( gchar *str, gint len) { gint result = -1; gint i = 0; if ( str != NULL) { while ( ((len >=0) && (i < len)) || ((len == -1) && (str[i] != '\0'))) { if ( isascii ( str[i]) == 0) { str[i] = ' '; } i++; } result = 0; } return result; } gint gintlen ( const gint n) { gint len = 1; gdouble quo = 1; gdouble result = 1.0; if ( n > 9 ) { result = abs ( n / quo); while ( result > 1) { len ++; quo = quo * 10; result = abs ( n / quo); } len--; } return len; } gchar * gw_time_to_str ( gulong t, const gchar *format) { struct tm *time = NULL; gchar *date = NULL; if ( t != 0 ) { if ( (time = localtime ( &t)) != NULL ) { if ( (date = (gchar*)g_malloc ( sizeof ( gchar) * 20)) != NULL ) { strftime ( date, 20, format, time); return date; } else {} } else {} } else {} return NULL; } gchar * gw_time_to_str_df ( gulong t) { return gw_time_to_str ( t, DATE_FORMAT); } gwhere-0.2.3/src/tools/gwstring.h0000744000175000017500000003775010241213571015414 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwstring.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a tool component. * @author Sébastien LECACHEUR * @author Grégory BLOQUEL * @version 1.0 2001/08/21 * @see gwsupport.h * @see glib.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwstring.c * @author Author */ #ifndef GW_TOOLS_GWSTRING_H #define GW_TOOLS_GWSTRING_H #include #include "data/gwdata.h" #define DATE_FORMAT "%d/%m/%Y %H:%M:%S" #ifndef strsep /*! * @function strsep * @abstract Parses a string with delimiters. * @discussion This function returns the next token from the * string stringp which is delimited by delim. The token is * terminated with a `\0' character and stringp is updated to * point past the token.
* @param stringp the string to parse * @param delim the delimiter * @result returns a pointer to the token, or NULL if delim is not found in stringp. */ char * strsep ( char **stringp, const char *delim); #endif /* strsep */ #if defined ( OS_WIN32) #include #else #ifndef ntohl /*! @define ntohl The ntohl() port. */ #define ntohl gw_ntohl #endif /* ntohl */ #endif /*! * @function gw_ntohl * @abstract Formats a long number to a string * @discussion This function converts the long integer netlong * from network byte order to host byte order.
* @param in integer netlong to convert * @result returns the integer long. */ unsigned long int gw_ntohl ( unsigned long int in); /*! * @function gw_l_byte_to_str_format * @abstract Formats a long number to a string * @discussion This function creates a string from a long number.
* Example :
* 4096 => "4Kb"
* @param n octet number to format * @result the formated string. Must be freed with g_free(). */ gchar * gw_l_byte_to_str_format ( long size ); /*! * @function gw_ul_byte_to_str_format * @abstract Formats an unsigned long number to a string * @discussion This function creates a string from an unsigned long number.
* Example :
* 4096 => "4Kb"
* @param n octet number to format * @result the formated string. Must be freed with g_free(). */ gchar * gw_ul_byte_to_str_format ( unsigned long size ); /*! * @function gw_ui64_byte_to_str_format * @abstract Formats an unsigned int 64 bytes number to a string * @discussion This function creates a string from an unsigned int 64 number.
* Example :
* 4096 => "4Kb"
* @param n octet number to format * @result the formated string. Must be freed with g_free(). */ gchar * gw_ui64_byte_to_str_format ( guint64 size ); /*! * @function gw_d_byte_to_str_format * @abstract Formats a double number to a string * @discussion This function creates a string from a double number.
* Example :
* 4096 => "4Kb"
* @param n octet number to format * @result the formated string. Must be freed with g_free(). */ gchar * gw_d_byte_to_str_format ( gdouble size ); /*! * @function gw_ld_byte_to_str_format * @abstract Formats a long double number to a string * @discussion This function creates a string from a long double number.
* Example :
* 4096 => "4Kb"
* @param n octet number to format * @result the formated string. Must be freed with g_free(). */ gchar * gw_ld_byte_to_str_format ( long double size ); /*! * @function gw_str_format_to_ld * @abstract Calculs logn double number from a string * @discussion This function calculs the long double number of bytes from a string. The string is a formated string.
* Example :
* "4Kb" => 4096
* @param desc the formated string * @result the octet number */ long double gw_str_format_to_ld ( gchar * nb); /*! * @function gw_tm_to_str_format * @abstract Formats a date from a time number * @discussion This function creates a string from a time number.
* @param p the time number * @result the formated string. Must be freed with g_free(). */ gchar * gw_tm_to_str_format ( struct tm* p); /*! * @function gw_file_to_str * @abstract Formats a string from a specified file format to displayed format * @discussion This function replaces all "\\n" to "\n" and all "\\#" to ":". * @param str the string to format * @result the formated string. Must be freed with g_free(). */ gchar * gw_file_to_str ( gchar *str); /*! * @function gw_str_to_file * @abstract Formats a string to a specified file format * @discussion This function replaces all ":" to "\\#" and all "\n" to "\\n". * @param str the string to format * @result the formated string. Must be freed with g_free(). * Returns NULL if there is no "\n" or ":". */ gchar * gw_str_to_file ( gchar *str); /*! * @function gw_str_to_file_strb * @abstract Formats a string to a specified file format * @discussion This function replaces all ":" to "\\#" and all "\n" to "\\n". * @param str the string to format * @param buf the string buffer to store the new string * @result the formated string. Must be freed with g_free(). * Returns NULL if there is no "\n" or ":". */ gchar * gw_str_to_file_strb ( const gchar *str, GWStringBuffer *buf); /*! * @function gw_str_replace_str * @abstract Replaces all sub string of one string by another sub string * @discussion This function replaces all sub string of one string by another sub string * @param pattern the string to replace sub string * @param src the sub string to replace * @param dst the sub string to put * @result A new allocated string.
* Returns NULL if there no sub string to replace or when an error occured.
*/ gchar * gw_str_replace_str ( gchar *pattern, gchar *src, gchar *dst); /*! * @function gw_str_replace_strv * @abstract Replaces all sub string of one string by another sub string * @discussion This function replaces all listed sub string of one string by others listed sub string. The arrays must end with NULL. * @param pattern the string to replace sub string * @param src the array of sub string to replace * @param dst the array sub string to put * @result A new allocated string.
* Returns NULL if there no sub string to replace or when an error occured.
*/ gchar * gw_str_replace_strv ( gchar *pattern, gchar **src, gchar **dst); /*! * @function gw_str_blob_to_regex * @abstract Transforms a blob string to regular expression * @discussion This function transforms a blob string to regular expression * @param blob the blob string to transform * @result the regural expression.
* Returns NULL when an error occured.
*/ gchar * gw_str_blob_to_regex ( gchar *blob); /*! * @function gw_str_key_words_to_regex * @abstract Transforms a key words string to regular expression table * @discussion This function transforms a key words string to regular expression table * @param jey_words the key_words string to transform * @result the regural expression table.
* Returns NULL when an error occured.
*/ gchar ** gw_str_key_words_to_regex ( gchar *key_words); /*! * @function gw_strcmp_strblob * @abstract Compares a string with a blob string * @discussion This function compares a string with a blob string * @param str the string to compare * @param blob the blob string to transform * @param case_sensitive if comparaison is case sensitive * @result Returns 0 when the two string are equals.
* Returns -1 when an error occured.
*/ gint gw_strcmp_strblob ( gchar *str, gchar *blob, gboolean case_sensitive); /*! * @function gw_strcmp_strregex * @abstract Compares a string with a regular expression string * @discussion This function compares a string with a regular expression string * @param str the string to compare * @param regex the regex string to transform * @param case_sensitive if comparaison is case sensitive * @result Returns 0 when the two string are equals.
* Returns -1 when an error occured.
*/ gint gw_strcmp_strregex ( gchar *str, gchar *regex, gboolean case_sensitive); /*! * @function gw_strdel_chrsry * @abstract Removes all the consecutive series of the * specified character in the given string. * @discussion This function removes all the consecutive series * of the specified character. In fact it removes the * consecutive series of these character by only one * of this character. The given string will modify.
* For the string "Hello world!!" with the given * character ' ', this function will modify the given * string to "Hello world!!". * @param str the string to removed all the consecutive series * @result Returns number of deleted characters.
*/ gint gw_strdel_chrsry ( gchar *str, const gchar chr); /*! * @function gw_str_trim_doubled_char * @abstract Trims all doubled characters in the string. * @discussion This function trims all doubled characters in the string. * @param str the string to trim * @result Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_str_trim_doubled_char ( gchar *str); /*! * @function gw_str_trim * @abstract Removes white space from both begin and ends of this string. * @discussion This function removes white space from both begins and ends of this string. * If the string is only white spaces, this functions returns the empty * string. * @param str the string to removes white space * @result Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_str_trim ( gchar *str); /*! * @function gw_str_trim2 * @abstract Removes white space from both begins and ends of this string. * @discussion This function removes white space from both begins ends of this string. * If the string is only white spaces, this functions returns the empty * string. * @param str the string to removes white space * @result Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_str_trim2 ( gchar *str); /*! * @function gw_str_trim_left * @abstract Removes white space from begins of this string. * @discussion This function removes white space from begins of this string. * If the string is only white spaces, this functions returns the empty * string. * @param str the string to removes white space * @result Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_str_trim_left ( gchar *str); /*! * @function gw_str_trim_right * @abstract Removes white space from ends of this string. * @discussion This function removes white space from ends of this string. * If the string is only white spaces, this functions returns the empty * string. * @param str the string to removes white space * @result Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_str_trim_right ( gchar *str); /*! * @function gw_str_delete_char * @abstract Deletes all specified characters in the string. * @discussion This function deletes all specified character in the string. * @param str the string to delete character * @param c character to delete * @result Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_str_delete_char ( gchar *str, gchar c); /*! * @function gw_str_replace_char * @abstract Replace all specified characters by another in the string. * @discussion This function replace all specified character by another in the string. * @param str the string to replace one character by another * @param before character to replace * @param after new character * @result Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_str_replace_char ( gchar *string, gchar before, gchar after); /*! * @function gw_str_substr * @abstract Gets the substring of a string. * @discussion This function gets the substring of a string. The substring begins * at the specified index begin and extends to the character at index end. * Thus the length of the substring is end+1-begin * @param str the string to gets substring * @param begin begin index * @param end end index * @param dest destination of the substring (Note that dest must point to a buffer of sufficient size, size must bigger than end+1-begin) * @result Returns the lenght of the substring.
* Returns -1 when an error occured.
*/ gint gw_str_substr ( const gchar *str, gint begin, gint end, gchar *dest); /*! * @function gw_str_dupsubstr * @abstract Gets and allocates the substring of a string. * @discussion This function gets and allocates the substring of a string. The substring begins * at the specified index begin and extends to the character at index end. * Thus the length of the substring is end+1-begin * @param str the string to gets substring * @param begin begin index * @param end end index * @param dest destination of the substring (Note that dest must be freed with g_free) * @result Returns the lenght of the substring.
* Returns -1 when an error occured.
*/ gint gw_str_dupsubstr ( const gchar *str, gint begin, gint end, gchar **dest); /*! * @function gw_str_to_lower * @abstract Converts an upper-case string to lower-case. * @discussion This function converts an upper-case string to the corresponding * lower-case string. * @param str the string to convert * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_str_to_lower ( gchar *str); /*! * @function gw_str_to_upper * @abstract Converts an lower-case string to upper-case. * @discussion This function converts an lower-case string to the corresponding * upper-case string. * @param str the string to convert * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_str_to_upper ( gchar *str); /*! * @function gw_str_to_ascii * @abstract Converts an string to ascii * @discussion This function converts a string to the corresponding. * ascii string. Replace all non-ascii caracters by spaces * caracters. * @param str the string to convert * @param len length of caracters to check. If len equals -1 * parse all string. * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_str_to_ascii ( gchar *str, gint len); /*! * @function gintlen * @abstract Gets the length of an integer. * @discussion This function gets the length of an integer.
* For example :
* gintlen ( 100) returns 3.
* gintlen ( 99) returns 2.
* gintlen ( 1254) returns 4.
* @param in the integer to get lenght * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gintlen ( const gint n); gchar * gw_time_to_str ( gulong t, const gchar *format) ; gchar * gw_time_to_str_df ( gulong t); #endif gwhere-0.2.3/src/tools/gwtools.h0000744000175000017500000000273710023202520015231 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwtools.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a tool component for files. * @author Sébastien LECACHEUR * @version 1.0 2002/05/19 * @see gwsupport.h * @link GWhere Web Site * @author Author */ #ifndef GW_TOOLS_H #define GW_TOOLS_H #include "gwencode.h" #include "gwfile.h" #include "gwfilesystem.h" #include "gwmail.h" #include "gwpropertiesfile.h" #include "gwstring.h" #endif gwhere-0.2.3/src/tools/Makefile.am0000744000175000017500000000063210023202520015406 0ustar bartbart## Process this file with automake to produce Makefile.in INCLUDES = \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/src \ @GTK_CFLAGS@ \ -D${HOST_OS} noinst_LIBRARIES = libgwtools.a libgwtools_a_SOURCES = \ gwtools.h \ gwstring.c gwstring.h \ gwencode.c gwencode.h \ gwfile.c gwfile.h \ gwpropertiesfile.c gwpropertiesfile.h \ gwfilesystem.c gwfilesystem.h \ gwmail.c gwmail.h EXTRA_DIST = $(SOURCES) gwhere-0.2.3/src/tools/Makefile.in0000744000175000017500000002374110506327614015447 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir)/src @GTK_CFLAGS@ -D${HOST_OS} noinst_LIBRARIES = libgwtools.a libgwtools_a_SOURCES = gwtools.h gwstring.c gwstring.h gwencode.c gwencode.h gwfile.c gwfile.h gwpropertiesfile.c gwpropertiesfile.h gwfilesystem.c gwfilesystem.h gwmail.c gwmail.h EXTRA_DIST = $(SOURCES) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libgwtools_a_LIBADD = libgwtools_a_OBJECTS = gwstring.$(OBJEXT) gwencode.$(OBJEXT) \ gwfile.$(OBJEXT) gwpropertiesfile.$(OBJEXT) gwfilesystem.$(OBJEXT) \ gwmail.$(OBJEXT) CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best DEP_FILES = .deps/gwencode.P .deps/gwfile.P .deps/gwfilesystem.P \ .deps/gwmail.P .deps/gwpropertiesfile.P .deps/gwstring.P SOURCES = $(libgwtools_a_SOURCES) OBJECTS = $(libgwtools_a_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tools/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-noinstLIBRARIES: clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) distclean-noinstLIBRARIES: maintainer-clean-noinstLIBRARIES: # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libgwtools.a: $(libgwtools_a_OBJECTS) $(libgwtools_a_DEPENDENCIES) -rm -f libgwtools.a $(AR) cru libgwtools.a $(libgwtools_a_OBJECTS) $(libgwtools_a_LIBADD) $(RANLIB) libgwtools.a tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = src/tools distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/tools/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile $(LIBRARIES) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-noinstLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/src/tools/Makefile.win0000744000175000017500000000125210233762454015631 0ustar bartbart# Project: libgwtools # Makefile created for GWhere CC = gcc.exe WINDRES = windres.exe RES = OBJ = gwfile.o gwfilesystem.o gwstring.o gwmail.o gwpropertiesfile.o gwencode.o $(RES) INCS = $(GWINCS) $(GTKINCS) -IC:/MINGW/include -IC:/MINGW/mingw_extra/include -IC:/GTK/include GTKINCS = -IC:/GTK/include/gtk-2.0 -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/atk-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include GWINCS = -I.. BIN = libgwtools.a CFLAGS = $(INCS) -O2 -Wall -fnative-struct -DHAVE_CONFIG_H -DOS_WIN32 -DGTK_ENABLE_BROKEN .PHONY: clean all: $(BIN) clean: rm -f $(OBJ) $(BIN) $(BIN): $(OBJ) ar r $(BIN) $(OBJ) ranlib $(BIN) gwhere-0.2.3/src/gwhere.res0000644000175000017500000004410610214105106014215 0ustar bartbartL0H.rsrc¸G<ôG@Àóº.B €Ѐóº.BX€p€ˆ€ €¸€óº.Bóº.Bóº.B$óº.B4óº.BDóº.B€è€óº.BTAdh̨ t¨ ¨ Ä*¨lGL( ÿÿÿÿÿÿÿÿÿÿÿÿëëá³³••bŠŠPŠŠOX££uØØÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ££xyy6ºº™ÛÛÊóóíûûúççÜÊʱŒŒTBóóîÿÿÿýýýÿÿÿÿÿÿ††KŸŸmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊʲoo)ããÕÿÿÿÿÿÿ””_µµ‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõðww3ÿÿÿããÖ––bÿÿÿÿÿÿÿÿÿððçììâííäííäííäííäííäííäøøôÆÆ©­­ƒ««ëëãÿÿÿýýýÿÿÿ°¡e‹€6…=„<‹‚=œ‰<’…=‘…<˜‡=F›ŽJ––aÿÿÿÿÿÿÿÿÿÿÿÿ*°ÿ‘ÜÿÚÿtÐÿ¶êÿ¤ÿWÄÿƒÖÿ2µÿA¼ÿPÀÿ¬¬ƒÿÿÿÿÿÿýýýÿÿÿ›ý ¦ÿkÃý4­ÿ4­ý!¦ÿÏëý†ÿV»ýGµÿ°ßþ©©ÿÿÿÿÿÿÿÿÿÿÿÿ:¯ÿÿzÉÿbÀÿ‰Ïÿ"¥ÿøüÿlÄÿ}Ëÿ2­ÿçõÿ’’\ÿÿÿÿÿÿÿÿýÞñÿ©Ýý^¾ÿ†ÍýÑÿ»äý;°ÿ)¨ý+©ÿ0«ýiÃÿ!©ÿ¬¬ƒëëáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöäÅå娔”aÿÿÿýýþÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÔÔ¿ŸŸrÿÿÿ””`´´Žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòòëss-ÿÿÿÿÿÿÿÿÿ††K¢¢uÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏϹrr*ãã×ÿÿÿÿÿÿÿÿÿÿÿÿ¦¦yww4¹¹•ÚÚÇòòíûûùää×ÈȬ‹‹QBííåÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿîîæ³³Ž˜˜eˆˆOŠŠP[¤¤wÙÙÅÿÿÿÿÿÿÿÿÿýýý( @ ÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýþÿÿÿÿÿÿùù÷ÇǬ¯¯†©©~——b——e™™f™™f––b¬¬ƒ¸¸”ÐиÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÖÖÞžlˆˆOY““]‘‘ZYUŒŒRW‘‘ZX’’\XŠŠN©©€ääØÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ££w‹‹P““]TUœœkµµ‘ÍͳÚÚÉööñÒÒ»ÇǬ··“––bŠŠNX‘‘\‡‡K¹¹–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýýýýýýýýýýþþþÿÿÿççÛ‰‰Q‘‘[ŒŒTššiààÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍͳŒŒTYXššiÿÿÿÿÿÿýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÖÖÄ„„H””^‰‰PØØÆÿÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿ¹¹•‡‡M””^ˆˆNííæÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ××Ã……I‘‘Y——dÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääÖˆˆM‘‘\‡‡Lÿÿÿÿÿÿýýýÿÿÿÿÿÿññ놆JUªªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ˜˜f‘‘Z‘‘Zÿÿÿÿÿÿþþþÿÿÿ““_‹‹R²²ÿÿÿþþÿþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýÿÿÿÿÿÿY‹‹T¼¼šÿÿÿÿÿÿÑÑ»ŠŠO››jÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿU„„Iøøôÿÿÿ””`††JüüûÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿææÜÆÆ©ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÓÓ½¬¬„‘‘Z¶¶“ôôð……Hªª‚ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÌ̲††JYX‘YŽŽX‘YXYXY‘X‘‘YX‘YXYXY—–a™™e•”_Ë˲„„GééßÿÿÿýýýýýýýýýþþþýýýÿÿÿÓͯŸE•S “S¦—SŒS¢•S”SŒ‹S£•S£–Sª˜S«—S¤–S§—SSŸ“S¥—S’S©˜S«—S¥–R¦¦y’’^ÿÿÿþþþÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿçùÿ€ÿÿÿÿcÇÿ¡ÿÿÿÿ˜ÿÒóÿÿÿÿšÿ~ÓÿŒÿ‹ÿ ­ÿ”ÿÿÿÿÚÿÿÞøÿ‰ÿ‹ÿ¥ÿY»»™ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿŽÑÿƒþÄçÿ.«ÿƒÿÿÿþ—ÿÏëÿÿÿÿžþÿ_¿ÿ²àÿØïþÿüüÿÿ›×þ(©ÿL¶ÿ³áÿ»ãþXÏϸÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ]½ÿ†ý¤Úÿ˜ÿˆÿÿÿýšÿÜðÿÿÿÿ ý‰ÿøûÿÿÿÿÿÿý’ÿ ŸÿŸÿÿÿý žÿàòÿÿÿÿÿÿýUÞÞÏÿÿÿþþþýýýýýýýýýþþþýýýÿÿý¢ý$¦þC²ý’ý›ý×îþ&¨ý‚ý€ý”þ•ýšý–ýF´þŸý‰ý‰ýŸþE´ý–ý—ý0¬þW××ÄÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿŠÿ—Öý‹ÿŸÿeÁÿ—Õý¢ÿ‘Òÿ×îÿ ý‘ÿSºÿfÁÿžØý‘ÿµáÿÐëÿ‹ý£ÿJ¶ÿgÁÿ‚ÍýYÌ̲ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ{ÿÿÿý‡ÿD³ÿ˜ÖÿY»ý¡ÿ×îÿÿÿÿŸýˆÿöúÿÿÿÿÿÿý…ÿÿÿÿÿÿÿý›ÿâóÿÿÿÿÿÿý‘‘Yµµ’ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÁæÿ„ÿÿÿý|ÿ\¾ÿÀåÿ›ý ÿÈçÿÿÿÿ•ý›ÿÿ’ÿ œý˜ÿ’ÿ“ÿˆýP¸ÿ‹ÿ“ÿ’ý§§}‰‰OÿÿÿþþÿýýýýýýýýýþþþÿÿýÌêý„ÍýÿÿþˆÎýÙïýøüýsÆþ‹ÐýåôýÿÿýxÈþëöýmÄýtÆýÌþ‰ÏýtÆýnÃý¸ãþÿÿýjÂýuÆýuÇþÍͳ……HèèÜÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿõõñ……H©©}ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ­­ƒ°°‰ÿÿÿ––c††IùùöÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿË˱……I²²ŒÿÿÿÓÓ¾ˆˆN™™fÿÿÿþþÿýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýÿÿÿÿÿþ††L……Hÿÿÿÿÿÿÿÿÿ——b‹‹T±±‰ÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿXT¿¿ ÿÿÿÿÿÿÿÿÿôôð„„FŽŽV§§{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ——c‘‘YZÿÿÿþþÿÿÿÿÿÿÿÿÿÿ××Å……I‘‘ZššfÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïçT‘‘\ˆˆOÿÿÿÿÿÿýýýýýýýýýýýýÿÿÿÖÖÂ……H‘‘\VØØÅÿÿÿÿÿÿÿÿÿýýýýýýýýýþþþýýýýýýýýýþþþýýþÿÿÿÿÿÿÿÿÿ¾¾ž‡‡M““^„„GòòëÿÿÿýýýþþþÿÿÿÿÿÿÿÿÿýýýÿÿÿêêኊPZŒŒS——dÜÜÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÇÇ¬ŠŠQ‘‘ZX‘‘[ûûøÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ¨¨}ŠŠO’’\ŽŽUŒŒTl®®†ÎζÕÕÁõõïÑѺÃÃ¥±±Š’’\‰‰PY‘‘\‡‡L··”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÛÛÉ¢¢t‰‰NY’’\‘‘ZYVŒŒSX‘‘[Y““]W‹‹Q¯¯†èèÝÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýýýýýýýýýýþþþýýýýýýýýýþþþÿÿÿÿÿÿøøõË˲±±‹­­„••a˜˜e——e——e––b±±‰µµ‘ÕÕ¿ÿÿÿÿÿÿÿÿÿþþþýýýþþþýýýýýýýýýþþþ( @ ÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýþÿÿÿÿÿÿùù÷ÇǬ¯¯†©©~——b——e™™f™™f––b¬¬ƒ¸¸”ÐиÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÖÖÞžlˆˆOY““]‘‘ZYUŒŒRW‘‘ZX’’\XŠŠN©©€ääØÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ££w‹‹P““]TUœœkµµ‘ÍͳÚÚÉööñÒÒ»ÇǬ··“––bŠŠNX‘‘\‡‡K¹¹–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýýýýýýýýýýþþþÿÿÿççÛ‰‰Q‘‘[ŒŒTššiààÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍͳŒŒTYXššiÿÿÿÿÿÿýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÖÖÄ„„H””^‰‰PØØÆÿÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿ¹¹•‡‡M””^ˆˆNííæÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ××Ã……I‘‘Y——dÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääÖˆˆM‘‘\‡‡Lÿÿÿÿÿÿýýýÿÿÿÿÿÿññ놆JUªªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ˜˜f‘‘Z‘‘Zÿÿÿÿÿÿþþþÿÿÿ““_‹‹R²²ÿÿÿþþÿþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýÿÿÿÿÿÿY‹‹T¼¼šÿÿÿÿÿÿÑÑ»ŠŠO››jÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿU„„Iøøôÿÿÿ””`††JüüûÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿææÜÆÆ©ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÓÓ½¬¬„‘‘Z¶¶“ôôð……Hªª‚ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÌ̲††JYX‘YŽŽX‘YXYXY‘X‘‘YX‘YXYXY—–a™™e•”_Ë˲„„GééßÿÿÿýýýýýýýýýþþþýýýÿÿÿÓͯŸE•S “S¦—SŒS¢•S”SŒ‹S£•S£–Sª˜S«—S¤–S§—SSŸ“S¥—S’S©˜S«—S¥–R¦¦y’’^ÿÿÿþþþÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿçùÿ€ÿÿÿÿcÇÿ¡ÿÿÿÿ˜ÿÒóÿÿÿÿšÿ~ÓÿŒÿ‹ÿ ­ÿ”ÿÿÿÿÚÿÿÞøÿ‰ÿ‹ÿ¥ÿY»»™ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿŽÑÿƒþÄçÿ.«ÿƒÿÿÿþ—ÿÏëÿÿÿÿžþÿ_¿ÿ²àÿØïþÿüüÿÿ›×þ(©ÿL¶ÿ³áÿ»ãþXÏϸÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ]½ÿ†ý¤Úÿ˜ÿˆÿÿÿýšÿÜðÿÿÿÿ ý‰ÿøûÿÿÿÿÿÿý’ÿ ŸÿŸÿÿÿý žÿàòÿÿÿÿÿÿýUÞÞÏÿÿÿþþþýýýýýýýýýþþþýýýÿÿý¢ý$¦þC²ý’ý›ý×îþ&¨ý‚ý€ý”þ•ýšý–ýF´þŸý‰ý‰ýŸþE´ý–ý—ý0¬þW××ÄÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿŠÿ—Öý‹ÿŸÿeÁÿ—Õý¢ÿ‘Òÿ×îÿ ý‘ÿSºÿfÁÿžØý‘ÿµáÿÐëÿ‹ý£ÿJ¶ÿgÁÿ‚ÍýYÌ̲ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ{ÿÿÿý‡ÿD³ÿ˜ÖÿY»ý¡ÿ×îÿÿÿÿŸýˆÿöúÿÿÿÿÿÿý…ÿÿÿÿÿÿÿý›ÿâóÿÿÿÿÿÿý‘‘Yµµ’ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÁæÿ„ÿÿÿý|ÿ\¾ÿÀåÿ›ý ÿÈçÿÿÿÿ•ý›ÿÿ’ÿ œý˜ÿ’ÿ“ÿˆýP¸ÿ‹ÿ“ÿ’ý§§}‰‰OÿÿÿþþÿýýýýýýýýýþþþÿÿýÌêý„ÍýÿÿþˆÎýÙïýøüýsÆþ‹ÐýåôýÿÿýxÈþëöýmÄýtÆýÌþ‰ÏýtÆýnÃý¸ãþÿÿýjÂýuÆýuÇþÍͳ……HèèÜÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿõõñ……H©©}ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ­­ƒ°°‰ÿÿÿ––c††IùùöÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿË˱……I²²ŒÿÿÿÓÓ¾ˆˆN™™fÿÿÿþþÿýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýÿÿÿÿÿþ††L……Hÿÿÿÿÿÿÿÿÿ——b‹‹T±±‰ÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿXT¿¿ ÿÿÿÿÿÿÿÿÿôôð„„FŽŽV§§{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ——c‘‘YZÿÿÿþþÿÿÿÿÿÿÿÿÿÿ××Å……I‘‘ZššfÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïçT‘‘\ˆˆOÿÿÿÿÿÿýýýýýýýýýýýýÿÿÿÖÖÂ……H‘‘\VØØÅÿÿÿÿÿÿÿÿÿýýýýýýýýýþþþýýýýýýýýýþþþýýþÿÿÿÿÿÿÿÿÿ¾¾ž‡‡M““^„„GòòëÿÿÿýýýþþþÿÿÿÿÿÿÿÿÿýýýÿÿÿêêኊPZŒŒS——dÜÜÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÇÇ¬ŠŠQ‘‘ZX‘‘[ûûøÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ¨¨}ŠŠO’’\ŽŽUŒŒTl®®†ÎζÕÕÁõõïÑѺÃÃ¥±±Š’’\‰‰PY‘‘\‡‡L··”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÛÛÉ¢¢t‰‰NY’’\‘‘ZYVŒŒSX‘‘[Y““]W‹‹Q¯¯†èèÝÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýýýýýýýýýýþþþýýýýýýýýýþþþÿÿÿÿÿÿøøõË˲±±‹­­„••a˜˜e——e——e––b±±‰µµ‘ÕÕ¿ÿÿÿÿÿÿÿÿÿþþþýýýþþþýýýýýýýýýþþþ( @ ÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýþÿÿÿÿÿÿùù÷ÇǬ¯¯†©©~——b——e™™f™™f––b¬¬ƒ¸¸”ÐиÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÖÖÞžlˆˆOY““]‘‘ZYUŒŒRW‘‘ZX’’\XŠŠN©©€ääØÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ££w‹‹P““]TUœœkµµ‘ÍͳÚÚÉööñÒÒ»ÇǬ··“––bŠŠNX‘‘\‡‡K¹¹–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýýýýýýýýýýþþþÿÿÿççÛ‰‰Q‘‘[ŒŒTššiààÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍͳŒŒTYXššiÿÿÿÿÿÿýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÖÖÄ„„H””^‰‰PØØÆÿÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿ¹¹•‡‡M””^ˆˆNííæÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ××Ã……I‘‘Y——dÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääÖˆˆM‘‘\‡‡Lÿÿÿÿÿÿýýýÿÿÿÿÿÿññ놆JUªªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ˜˜f‘‘Z‘‘Zÿÿÿÿÿÿþþþÿÿÿ““_‹‹R²²ÿÿÿþþÿþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýÿÿÿÿÿÿY‹‹T¼¼šÿÿÿÿÿÿÑÑ»ŠŠO››jÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿU„„Iøøôÿÿÿ””`††JüüûÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿææÜÆÆ©ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÓÓ½¬¬„‘‘Z¶¶“ôôð……Hªª‚ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÌ̲††JYX‘YŽŽX‘YXYXY‘X‘‘YX‘YXYXY—–a™™e•”_Ë˲„„GééßÿÿÿýýýýýýýýýþþþýýýÿÿÿÓͯŸE•S “S¦—SŒS¢•S”SŒ‹S£•S£–Sª˜S«—S¤–S§—SSŸ“S¥—S’S©˜S«—S¥–R¦¦y’’^ÿÿÿþþþÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿçùÿ€ÿÿÿÿcÇÿ¡ÿÿÿÿ˜ÿÒóÿÿÿÿšÿ~ÓÿŒÿ‹ÿ ­ÿ”ÿÿÿÿÚÿÿÞøÿ‰ÿ‹ÿ¥ÿY»»™ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿŽÑÿƒþÄçÿ.«ÿƒÿÿÿþ—ÿÏëÿÿÿÿžþÿ_¿ÿ²àÿØïþÿüüÿÿ›×þ(©ÿL¶ÿ³áÿ»ãþXÏϸÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ]½ÿ†ý¤Úÿ˜ÿˆÿÿÿýšÿÜðÿÿÿÿ ý‰ÿøûÿÿÿÿÿÿý’ÿ ŸÿŸÿÿÿý žÿàòÿÿÿÿÿÿýUÞÞÏÿÿÿþþþýýýýýýýýýþþþýýýÿÿý¢ý$¦þC²ý’ý›ý×îþ&¨ý‚ý€ý”þ•ýšý–ýF´þŸý‰ý‰ýŸþE´ý–ý—ý0¬þW××ÄÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿŠÿ—Öý‹ÿŸÿeÁÿ—Õý¢ÿ‘Òÿ×îÿ ý‘ÿSºÿfÁÿžØý‘ÿµáÿÐëÿ‹ý£ÿJ¶ÿgÁÿ‚ÍýYÌ̲ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ{ÿÿÿý‡ÿD³ÿ˜ÖÿY»ý¡ÿ×îÿÿÿÿŸýˆÿöúÿÿÿÿÿÿý…ÿÿÿÿÿÿÿý›ÿâóÿÿÿÿÿÿý‘‘Yµµ’ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÁæÿ„ÿÿÿý|ÿ\¾ÿÀåÿ›ý ÿÈçÿÿÿÿ•ý›ÿÿ’ÿ œý˜ÿ’ÿ“ÿˆýP¸ÿ‹ÿ“ÿ’ý§§}‰‰OÿÿÿþþÿýýýýýýýýýþþþÿÿýÌêý„ÍýÿÿþˆÎýÙïýøüýsÆþ‹ÐýåôýÿÿýxÈþëöýmÄýtÆýÌþ‰ÏýtÆýnÃý¸ãþÿÿýjÂýuÆýuÇþÍͳ……HèèÜÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿõõñ……H©©}ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ­­ƒ°°‰ÿÿÿ––c††IùùöÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿË˱……I²²ŒÿÿÿÓÓ¾ˆˆN™™fÿÿÿþþÿýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýÿÿÿÿÿþ††L……Hÿÿÿÿÿÿÿÿÿ——b‹‹T±±‰ÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿXT¿¿ ÿÿÿÿÿÿÿÿÿôôð„„FŽŽV§§{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ——c‘‘YZÿÿÿþþÿÿÿÿÿÿÿÿÿÿ××Å……I‘‘ZššfÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïçT‘‘\ˆˆOÿÿÿÿÿÿýýýýýýýýýýýýÿÿÿÖÖÂ……H‘‘\VØØÅÿÿÿÿÿÿÿÿÿýýýýýýýýýþþþýýýýýýýýýþþþýýþÿÿÿÿÿÿÿÿÿ¾¾ž‡‡M““^„„GòòëÿÿÿýýýþþþÿÿÿÿÿÿÿÿÿýýýÿÿÿêêኊPZŒŒS——dÜÜÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÇÇ¬ŠŠQ‘‘ZX‘‘[ûûøÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ¨¨}ŠŠO’’\ŽŽUŒŒTl®®†ÎζÕÕÁõõïÑѺÃÃ¥±±Š’’\‰‰PY‘‘\‡‡L··”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÛÛÉ¢¢t‰‰NY’’\‘‘ZYVŒŒSX‘‘[Y““]W‹‹Q¯¯†èèÝÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýýýýýýýýýýþþþýýýýýýýýýþþþÿÿÿÿÿÿøøõË˲±±‹­­„••a˜˜e——e——e––b±±‰µµ‘ÕÕ¿ÿÿÿÿÿÿÿÿÿþþþýýýþþþýýýýýýýýýþþþ(0`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùù÷ÞÞξ¾ž¶¶‘¯¯‰––a™™f™™f™™f™™f™™f——c¥¥y··”¼¼›ÞÞÏ÷÷ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿþþþÿÿÿÿÿÿççÛ±±Œ‰‰NV““]““_––a——e™™f——e™™f——e™™f——e——c““_““^VˆˆM®®ˆää×ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÄ¥••`‹‹Q““^˜˜e™™f™™f˜˜e˜˜d••`““]‘‘ZT‘‘Z““]””^˜˜d˜˜e™™f™™f˜˜e””^ŒŒS‹‹Pµµ’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿùùö¡¡tT••b™™f——d••`ŽŽXTX‹‹R¨¨}µµÅÅ©ééàÇǬ³³³³Ž‰‰PŽŽYŒŒSŽŽW••`——d™™f––d‘‘ZZòòìÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÖ‡‡J””_™™f˜˜e’’\ŠŠO§§|ÑÑ»ÝÝÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿããÕÒÒ¼ªª~‰‰O’’[˜˜e™™f——b††JÑѺÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿ±±Š‰‰P˜˜e——e””_ˆˆM¹¹–üüýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿ¼¼š‡‡N””_——e˜˜eŠŠQ¬¬„ÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™hX™™f˜˜eŒŒR¢¢tûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþ¥¥y‹‹Q˜˜e™™f‘‘Z””^õõòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿœœl[™™f••b‡‡LÏϸÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÒÒ¾ˆˆM””a™™f““_ŒŒTÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ››i’’[™™f““]ŽŽVððêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôî‘‘Z’’[™™f””_——cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ¯¯‡ŽŽX™™fŽŽYŸŸpÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿ©©U™™fYªªÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿààшˆM™™fX®®…ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼¼›T™™fŠŠOÚÚÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒŒU——d[¡¡rÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿ¥¥zZ˜˜dŠŠRÿÿÿÿÿÿÿÿÿÿÿÿÁÁ¢Y––b––aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜˜f••a““]««ÿÿÿÿÿÿÿÿÿŒŒR––c‡‡MññéÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV——d††KüüýÿÿÿÓÓ¾ŽŽV’’\»»˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõïn¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨~¯¯‡™™g˜˜e””^··“ÿÿÿ¡¡t••`ˆˆOùùöÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿóóK““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_˜˜e——e™™f””_ÿÿÿŠŠO””^ªªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóï‹‹Pš™e˜˜e˜˜e™˜eš™e˜˜e˜˜e™˜eš™e˜˜e˜˜e˜˜eš™e™˜e™™eš™eš™eš™e™™eš™e™™e˜˜e˜˜eš™eš™e˜˜e™˜eš™eš™eš™e™˜eÛÛÊVSÜÜËÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿòòë—ŠB¥˜V—’UŽV¦˜U¦—V—’UŽVŸ•U¢–VUŽŽV”‘U¥–V›“U©˜V§™U¨—V§™U •V£–Už•VŽU•‘V¥—U¤—V“U§˜V§˜U¨—V§™U –Vµµ‘““]’’\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-¯ÿˆÿíþÿÿÿÿ¥ÿ‘ÿñÿÿÿÿÿ.°ÿ–ÿÿÿÿÿÿÿÙõÿƒÿÍðÿ§ÿ–ÿ˜ÿ“ÿZÁÿ¢ÿ5³ÿÿÿÿÿÿÿÿÿÿÿÿ¦ÿ–ÿ˜ÿ”ÿ@¸ÿŸŸpYÁÁ¢ÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿýŠÿŽþ‡ÏÿÿÿþŠÿŒþ“Óÿÿÿþ3®ÿ”þÿÿÿÿÿþ×ïÿ‡þ0¬ÿ‘þÿŒþ‡ÿM¶þ¡ÿ<±þÿÿÿ,ªþÿQ¸þ¦ÛÿŠþŽÿŒþ‡ÿ2­þ——dWÖÖÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåôÿ‹ÿ“ÿW»ÿÿÿÿŠÿ’ÿfÁÿÿÿÿ4­ÿ”ÿÿÿÿÿÿÿÖîÿŒÿ•ÿÿøûÿÿÿÿÿÿÿÿÿÿ–ÿP¸ÿÌêÿˆÿ‰ÿÿÿÿP¸ÿ‡ÿèõÿÿÿÿÿÿÿÿÿÿ™™fŠŠQööñÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿ¥ÚýŽÿ‘ýIµÿÅçýŽÿ’ý1¬ÿÿÿý4®ÿ•ýÿÿÿÿÿýéöÿŠý—ÿ—ýÿÿÿÿÿýÿÿÿÿÿý—ÿB³ý–ÿý³àÿÿÿýP¸ÿ‹ýÿÿÿÿÿýÿÿÿÿÿý™™fŠŠPóóíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrÆÿÿšÿšÿ×ÿÿ“ÿÿÿÿÿ8¯ÿ’ÿ{ÊÿoÆÿZ½ÿ“ÿ—ÿ–ÿûýÿÜñÿÚðÿÿÿÿ ÿ“ÿ—ÿ•ÿyÊÿíøÿ]½ÿÿøúÿÜòÿÛðÿèôÿ˜˜eXÿÿÿþþþÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿ@²ý‘ÿiÂý“ÿS¹ý“ÿ[¼ý‰ÿÿÿý;±ÿý‰ÿ‡ýÿ—ý™ÿ–ý‰ÿ‡ý„ÿGµý!¦ÿ’ýÿŽýŒÿ”ýqÇÿý‰ÿ‡ý…ÿ,ªý˜˜eŒŒSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ›ÿŸ×ÿÿ“ÿšÿ«Üÿ‚ÿÿÿÿ>²ÿ“ÿ”Óÿ†ÎÿmÄÿ’ÿ˜ÿ–ÿ¡ÿŸÿšÿqÅÿ¡ÿ£ÿÑÿÑÿ0¬ÿÿ>±ÿ“ÿ¡ÿŸÿ›ÿSºÿ™™f‰‰Pööñÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿþýÿÿÿ…ýL¶ÿÆçýŽÿ’ý>±ÿÒíýƒÿÈèýC´ÿ•ýÿÿÿÿÿýæõÿŠý—ÿ—ýÿÿÿÿÿýÿÿÿÿÿý•ÿC³ýÿÿÿÿÿý®Þÿ‹ýA²ÿŽýÿÿÿÿÿýÿÿÿÿÿý™™fTççÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì÷ÿƒÿzÊÿÿÿÿŠÿ‘ÿ~Êÿÿÿÿ‚ÿšÖÿI¶ÿ”ÿÿÿÿÿÿÿÖîÿŒÿ–ÿ”ÿÿÿÿÿÿÿÿÿÿÿÿÿ•ÿF´ÿÿÿÿÿÿÿ§ÛÿŒÿ<°ÿŒÿÿÿÿÿÿÿÿÿÿÿÿÿ——dŽŽWÕÕÀÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿý½äÿý§Ûÿÿÿýÿý‡Îÿÿÿý‡ÿlÃýO¹ÿ”ýÿÿÿÿÿý×ïÿˆý¡ÿ’ý¤ÿ ¥ý¤ÿ?±ý¥ÿ—ý%¨ÿ%§ý™ÿý]¾ÿý£ÿ!¦ý¥ÿ¥ý  q““]««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\¼ÿxÿÙïÿÿÿÿ•ÿ~ÿÍëÿÿÿÿ†ÿ˜ÿB³ÿ‰ÿÿÿÿÿÿÿÏëÿxÿž×ÿ‹ÿˆÿ‰ÿ‡ÿ”ÿŸÿ‰ÿ‰ÿ‰ÿ†ÿ)¨ÿÿÿÿ†ÿˆÿ‰ÿ‰ÿ‰ÿ¶¶’’’]ŒŒRÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿýåôÿ¿äýÿÿÿÿÿýðøÿÎêýÿÿÿÿÿýÜïÿÒìýàñÿÉéýÿÿÿÿþýøüÿ¾äýÿÿÿóúýÊèÿÎêýÍêÿÓíý×îÿÍêýÎêÿÎêýÆçÿÿÿýÿÿÿöúýÉèÿÎêýÎêÿÎêýÞÞÎVŽŽUÜÜËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰‰Q””_¥¥{ÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤¤w••_‰‰Oööñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùö„„GUŠŠOÿÿÿÖÖÁŽŽU‘‘[¶¶”ÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿ½½Y’’\¸¸–ÿÿÿÿÿÿS˜˜dˆˆLííãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿññ뇇L˜˜e‹‹RÿÿÿÿÿÿÿÿÿÄÄ§ŽŽW——b‘‘]ÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿþþÿÿÿÿ••b––bZ±±ŠÿÿÿÿÿÿÿÿÿÿÿÿW——c““]  qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥¥w’’[——dSÿÿÿÿÿÿÿÿÿýýýÿÿÿååÙˆˆM——eY¦¦{ÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿµµ‘ŽŽV——e‰‰OßßÏÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿ¯¯ˆX™™f‘‘Z››iÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶’ŒŒS™™f‘‘Z©©~ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿþþÿÿÿÿžžo’’\——e””_ŠŠPýýüÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿmW——e””^ššiÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ••a’’\™™f––bŠŠQããÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿççÜ‹‹R””_™™f––aUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿŸŸpV——e˜˜d‰‰O¨¨~ööðÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿ÷÷õ««‚ˆˆN˜˜d——e””^ŠŠPûûûÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ··•ŠŠN˜˜d™™f””_ˆˆK³³ùùõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúú÷¶¶‘‡‡L””^™™f˜˜eŽŽVmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿþþÿÿÿÿÜܡ‡K’’]™™f——e““]ˆˆM££tÉɱÛÛÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÜËÌ̳¤¤w‡‡N““]——e™™f””aˆˆM¼¼›ÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþý§§|ŒŒR––b˜˜e™™f••`‘‘ZŽŽUŒŒSˆˆL¬¬‚®®†ÀÀ ããÕÍ͵­­„®®†ˆˆLŒŒSUY••`™™f˜˜e˜˜dX••`ììãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÊʰ˜˜gŒŒQ’’]™™e——e™™f——d™™e““_””^ZŽŽVŽŽX””^““^™™e——d™™f——e™™e’’]TV»»šÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíí䯯ˆˆˆMŽŽU’’\””^••`™™f™™f™™f™™f™™f™™f™™f––b””^””^ŽŽV‰‰N¬¬„êêàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿþþþÿÿÿÿÿÿþþþââÕÂÂ¥ºº™³³Ž””`™™f——e™™f——e™™f••b§§|½½¶¶”ââÖýýûÿÿÿÿÿÿþþþÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýh ¨  ¨  ¨ 00¨$4DT.rsrcgwhere-0.2.3/src/db/0000755000175000017500000000000010506575524012624 5ustar bartbartgwhere-0.2.3/src/db/gwdbcatalog.c0000744000175000017500000001701510506321616015242 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include /* strcmp */ #include "gwsupport.h" #include "gwdbcatalog.h" typedef struct gw_db_catalog_s { gchar* name; gchar* short_db_name; gchar* db_name; gchar* version; gchar* program_builder; gchar* description; gboolean is_modified; gulong size; }_GWDBCatalog; GWDBCatalog * gw_db_catalog_new ( void) { GWDBCatalog *catalog = NULL; if ( (catalog = (GWDBCatalog*)g_malloc0 ( sizeof ( GWDBCatalog))) != NULL ) { catalog->name = NULL; catalog->short_db_name = NULL; catalog->db_name = NULL; catalog->version = NULL; catalog->program_builder = NULL; catalog->description = NULL; catalog->is_modified = FALSE; catalog->size = 0; } return catalog; } gint gw_db_catalog_set_name ( GWDBCatalog *catalog, gchar *name) { if ( catalog != NULL ) { if ( catalog->name != NULL ) { g_free ( catalog->name); } catalog->name = name; return 0; } return -1; } gint gw_db_catalog_set_short_db_name ( GWDBCatalog *catalog, gchar *short_db_name) { if ( catalog != NULL ) { if ( catalog->short_db_name != NULL ) { g_free ( catalog->short_db_name); } catalog->short_db_name = short_db_name; return 0; } return -1; } gint gw_db_catalog_set_db_name ( GWDBCatalog *catalog, gchar *db_name) { if ( catalog != NULL ) { if ( catalog->db_name != NULL ) { g_free ( catalog->db_name); } catalog->db_name = db_name; return 0; } return -1; } gint gw_db_catalog_set_version ( GWDBCatalog *catalog, gchar *version) { if ( catalog != NULL ) { if ( catalog->version != NULL ) { g_free ( catalog->version); } catalog->version = version; return 0; } return -1; } gint gw_db_catalog_set_program_builder ( GWDBCatalog *catalog, gchar *program_builder) { if ( catalog != NULL ) { if ( catalog->program_builder != NULL ) { g_free ( catalog->program_builder); } catalog->program_builder = program_builder; return 0; } return -1; } gint gw_db_catalog_set_description ( GWDBCatalog *catalog, gchar *description) { if ( catalog != NULL ) { if ( catalog->description != NULL ) { g_free ( catalog->description); } catalog->description = description; return 0; } return -1; } gint gw_db_catalog_set_size ( GWDBCatalog *catalog, gulong size) { if ( catalog != NULL ) { catalog->size = size; return 0; } return -1; } gint gw_db_catalog_set_ismodified ( GWDBCatalog *catalog, gboolean modified) { if ( catalog != NULL ) { catalog->is_modified = modified; return 0; } return -1; } gchar * gw_db_catalog_get_name ( GWDBCatalog *catalog) { if ( catalog != NULL ) { return catalog->name; } return NULL; } gchar * gw_db_catalog_get_short_db_name ( GWDBCatalog *catalog) { if ( catalog != NULL ) { return catalog->short_db_name; } return NULL; } gchar * gw_db_catalog_get_db_name ( GWDBCatalog *catalog) { if ( catalog != NULL ) { return catalog->db_name; } return NULL; } gchar * gw_db_catalog_get_version ( GWDBCatalog *catalog) { if ( catalog != NULL ) { return catalog->version; } return NULL; } gchar * gw_db_catalog_get_program_builder ( GWDBCatalog *catalog) { if ( catalog != NULL ) { return catalog->program_builder; } return NULL; } gchar * gw_db_catalog_get_description ( GWDBCatalog *catalog) { if ( catalog != NULL ) { return catalog->description; } return NULL; } gulong gw_db_catalog_get_size ( GWDBCatalog *catalog) { if ( catalog != NULL ) { return catalog->size; } return 0; } gboolean gw_db_catalog_is_modified ( GWDBCatalog *catalog) { if ( catalog != NULL ) { return catalog->is_modified; } /* If catalog doesn't exist, it may not be modified. */ return FALSE; } GWDBCatalog * gw_db_catalog_dup ( GWDBCatalog *catalog, GWDBCatalog **dup) { GWDBCatalog *dup_catalog = NULL; if ( catalog != NULL ) { dup_catalog = *dup; if ( dup_catalog == NULL ) { /* Don't check if gw_db_catalog_new return NULL because all following functions check it too. */ (*dup) = dup_catalog = gw_db_catalog_new ( ); } if ( gw_db_catalog_get_name ( catalog) != NULL ) { gw_db_catalog_set_name ( dup_catalog, g_strdup ( gw_db_catalog_get_name ( catalog))); } else { gw_db_catalog_set_name ( dup_catalog, NULL); } if ( gw_db_catalog_get_short_db_name ( catalog) != NULL ) { gw_db_catalog_set_short_db_name ( dup_catalog, g_strdup ( gw_db_catalog_get_short_db_name ( catalog))); } else { gw_db_catalog_set_short_db_name ( dup_catalog, NULL); } if ( gw_db_catalog_get_db_name ( catalog) != NULL ) { gw_db_catalog_set_db_name ( dup_catalog, g_strdup ( gw_db_catalog_get_db_name ( catalog))); } else { gw_db_catalog_set_db_name ( dup_catalog, NULL); } if ( gw_db_catalog_get_version ( catalog) != NULL ) { gw_db_catalog_set_version ( dup_catalog, g_strdup ( gw_db_catalog_get_version ( catalog))); } else { gw_db_catalog_set_version ( dup_catalog, NULL); } if ( gw_db_catalog_get_program_builder ( catalog) != NULL ) { gw_db_catalog_set_program_builder ( dup_catalog, g_strdup ( gw_db_catalog_get_program_builder ( catalog))); } else { gw_db_catalog_set_program_builder ( dup_catalog, NULL); } if ( gw_db_catalog_get_description ( catalog) != NULL ) { gw_db_catalog_set_description ( dup_catalog, g_strdup ( gw_db_catalog_get_description ( catalog))); } else { gw_db_catalog_set_description ( dup_catalog, NULL); } gw_db_catalog_set_size ( dup_catalog, gw_db_catalog_get_size ( catalog)); gw_db_catalog_set_ismodified ( dup_catalog, gw_db_catalog_is_modified ( catalog)); } return dup_catalog; } gint gw_db_catalog_free ( GWDBCatalog *catalog) { if ( catalog != NULL ) { gw_db_catalog_set_name ( catalog, NULL); gw_db_catalog_set_short_db_name ( catalog, NULL); gw_db_catalog_set_db_name ( catalog, NULL); gw_db_catalog_set_version ( catalog, NULL); gw_db_catalog_set_program_builder ( catalog, NULL); gw_db_catalog_set_description ( catalog, NULL); g_free ( catalog); return 0; } return -1; } gboolean gw_db_catalog_equals ( GWDBCatalog *catalog, GWDBCatalog *to) { gboolean equals = FALSE; if ( catalog != NULL && to != NULL) { if ( str_equals ( gw_db_catalog_get_name ( catalog), gw_db_catalog_get_name ( to)) && str_equals ( gw_db_catalog_get_short_db_name ( catalog), gw_db_catalog_get_short_db_name ( to)) && str_equals ( gw_db_catalog_get_db_name ( catalog), gw_db_catalog_get_db_name ( to)) && str_equals ( gw_db_catalog_get_version ( catalog), gw_db_catalog_get_version ( to)) && str_equals ( gw_db_catalog_get_program_builder ( catalog), gw_db_catalog_get_program_builder ( to)) && str_equals ( gw_db_catalog_get_description ( catalog), gw_db_catalog_get_description ( to)) && gw_db_catalog_is_modified ( catalog) == gw_db_catalog_is_modified ( to) && gw_db_catalog_get_size ( catalog) == gw_db_catalog_get_size ( to) ) { equals = TRUE; } } return equals; } gwhere-0.2.3/src/db/gwdbcatalog.h0000744000175000017500000000555510222307465015256 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwdbcatalog.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.
* It's an object for catalog database... * @abstract This is the catalog database structure. * @author Sébastien LECACHEUR * @version 1.0 2004/06/07 * @see gwdbcategory.h * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwdbcatalog.c * @author Author */ #ifndef GW_DATA_DB_CATALOG_H #define GW_DATA_DB_CATALOG_H typedef struct gw_db_catalog_s GWDBCatalog; GWDBCatalog * gw_db_catalog_new ( void); gint gw_db_catalog_set_name ( GWDBCatalog *catalog, gchar *name); gint gw_db_catalog_set_short_db_name ( GWDBCatalog *catalog, gchar *db_name); gint gw_db_catalog_set_db_name ( GWDBCatalog *catalog, gchar *db_name); gint gw_db_catalog_set_version ( GWDBCatalog *catalog, gchar *version); gint gw_db_catalog_set_program_builder ( GWDBCatalog *catalog, gchar *program_builder); gint gw_db_catalog_set_description ( GWDBCatalog *catalog, gchar *_description); gint gw_db_catalog_set_size ( GWDBCatalog *catalog, gulong size); gint gw_db_catalog_set_ismodified ( GWDBCatalog *catalog, gboolean modified); gchar * gw_db_catalog_get_name ( GWDBCatalog *catalog); gchar * gw_db_catalog_get_db_name ( GWDBCatalog *catalog); gchar * gw_db_catalog_get_short_db_name ( GWDBCatalog *catalog); gchar * gw_db_catalog_get_version ( GWDBCatalog *catalog); gchar * gw_db_catalog_get_program_builder ( GWDBCatalog *catalog); gchar * gw_db_catalog_get_description ( GWDBCatalog *catalog); gulong gw_db_catalog_get_size ( GWDBCatalog *catalog); gboolean gw_db_catalog_is_modified ( GWDBCatalog *catalog); GWDBCatalog * gw_db_catalog_dup ( GWDBCatalog *catalog, GWDBCatalog **dup); gint gw_db_catalog_free ( GWDBCatalog *catalog); gboolean gw_db_catalog_equals ( GWDBCatalog *catalog, GWDBCatalog *to); #endif gwhere-0.2.3/src/db/gwdbcontext.c0000644000175000017500000000363010214105106015277 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gwsupport.h" #include "gwdbcontext.h" typedef struct gw_db_context_s { gpointer plugin; gpointer data; }_GWDBContext; GWDBContext * gw_db_context_new ( void) { GWDBContext *context = NULL; if ( (context = (GWDBContext*)g_malloc0 ( sizeof ( GWDBContext))) != NULL ) { context->plugin = NULL; context->data = NULL; } return context; } gint gw_db_context_set_plugin ( GWDBContext *context, gpointer plugin) { if ( context != NULL ) { context->plugin = plugin; return 0; } return -1; } gint gw_db_context_set_data ( GWDBContext *context, gpointer data) { if ( context != NULL ) { context->data = data; return 0; } return -1; } gpointer gw_db_context_get_plugin ( GWDBContext *context) { if ( context != NULL ) { return context->plugin; } return NULL; } gpointer gw_db_context_get_data ( GWDBContext *context) { if ( context != NULL ) { return context->data; } return NULL; } gint gw_db_context_free ( GWDBContext *context) { if ( context != NULL ) { gw_db_context_set_plugin ( context, NULL); gw_db_context_set_data ( context, NULL); g_free ( context); return 0; } return -1; } gwhere-0.2.3/src/db/gwdbcategory.c0000744000175000017500000001472010506321601015437 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include /* strcmp */ #include "gwsupport.h" #include "gwdbcategory.h" typedef struct gw_db_category_s { gpointer ref; /* plugin internal reference */ gint index; /* TODO should it be replaced by ref?? */ gchar *name; /* Category's name */ gchar *description; /* Category's description */ gulong nb_disks; /* Number of disks which are in this category */ gulong nb_files; /* Number of files which are in this category */ }_GWDBCategory; GWDBCategory * gw_db_category_new ( void) { GWDBCategory *category = NULL; if ( (category = (GWDBCategory*)g_malloc0 ( sizeof ( GWDBCategory))) != NULL ) { category->ref = NULL; category->name = NULL; category->description = NULL; category->nb_disks = 0; category->nb_files = 0; } return category; } gint gw_db_category_set_ref ( GWDBCategory *category, gpointer ref) { if ( category != NULL ) { category->ref = ref; return 0; } return -1; } gint gw_db_category_set_index ( GWDBCategory *category, gint index) { if ( category != NULL ) { category->index = index; return 0; } return -1; } gint gw_db_category_set_name ( GWDBCategory *category, gchar *name) { if ( category != NULL ) { if ( category->name != NULL ) { g_free ( category->name); } category->name = name; return 0; } return -1; } gint gw_db_category_set_description ( GWDBCategory *category, gchar *description) { if ( category != NULL ) { if ( category->name != NULL ) { g_free ( category->description); } category->description = description; return 0; } return -1; } gint gw_db_category_set_nb_disks ( GWDBCategory *category, gulong nb) { if ( category != NULL ) { category->nb_disks = nb; return 0; } return -1; } gint gw_db_category_set_nb_files ( GWDBCategory *category, gulong nb) { if ( category != NULL ) { category->nb_files = nb; return 0; } return -1; } gpointer gw_db_category_get_ref ( GWDBCategory *category) { if ( category != NULL ) { return category->ref; } return NULL; } gint gw_db_category_get_index ( GWDBCategory *category) { if ( category != NULL ) { return category->index; } return -1; } gchar * gw_db_category_get_name ( GWDBCategory *category) { if ( category != NULL ) { return category->name; } return NULL; } gchar * gw_db_category_get_description ( GWDBCategory *category) { if ( category != NULL ) { return category->description; } return NULL; } gulong gw_db_category_get_nb_disks ( GWDBCategory *category) { if ( category != NULL ) { return category->nb_disks; } return 0; } gulong gw_db_category_get_nb_files ( GWDBCategory *category) { if ( category != NULL ) { return category->nb_files; } return 0; } gulong gw_db_category_add_disk ( GWDBCategory *category) { if ( category != NULL ) { category->nb_disks++; return category->nb_disks; } return 0; } gulong gw_db_category_add_file ( GWDBCategory *category) { if ( category != NULL ) { category->nb_files++; return category->nb_files; } return 0; } gulong gw_db_category_remove_disk ( GWDBCategory *category) { if ( category != NULL ) { if ( category->nb_disks > 0 ) { category->nb_disks--; } return category->nb_disks; } return 0; } gulong gw_db_category_remove_file ( GWDBCategory *category) { if ( category != NULL ) { if ( category->nb_files > 0 ) { category->nb_files--; } return category->nb_files; } return 0; } gboolean gw_db_category_can_removed ( GWDBCategory *category) { if ( category != NULL ) { if ( (gw_db_category_get_nb_disks ( category) == 0) && (gw_db_category_get_nb_files ( category) == 0) ) { return TRUE; } } return FALSE; } GWDBCategory * gw_db_category_dup ( GWDBCategory *category, GWDBCategory **dup) { GWDBCategory *dup_category = NULL; if ( category != NULL ) { dup_category = *dup; if ( dup_category == NULL ) { /* Don't check if gw_db_category_new return NULL because all following functions check it too. */ (*dup) = dup_category = gw_db_category_new ( ); } gw_db_category_set_ref ( dup_category, gw_db_category_get_ref ( category)); gw_db_category_set_index ( dup_category, gw_db_category_get_index ( category)); if ( gw_db_category_get_name ( category) != NULL ) { gw_db_category_set_name ( dup_category, g_strdup ( gw_db_category_get_name ( category))); } else { gw_db_category_set_name ( dup_category, NULL); } if ( gw_db_category_get_description ( category) != NULL ) { gw_db_category_set_description ( dup_category, g_strdup ( gw_db_category_get_description ( category))); } else { gw_db_category_set_description ( dup_category, NULL); } gw_db_category_set_nb_disks ( dup_category, gw_db_category_get_nb_disks ( category)); gw_db_category_set_nb_files ( dup_category, gw_db_category_get_nb_files ( category)); } return dup_category; } gint gw_db_category_free ( GWDBCategory *category) { if ( category != NULL ) { gw_db_category_set_name ( category, NULL); gw_db_category_set_description ( category, NULL); g_free ( category); return 0; } return -1; } gboolean gw_db_category_equals ( GWDBCategory *category, GWDBCategory *to) { gboolean equals = FALSE; if ( category != NULL && to != NULL) { if ( gw_db_category_get_ref ( category) == gw_db_category_get_ref ( to) && gw_db_category_get_index ( category) == gw_db_category_get_index ( to) && str_equals ( gw_db_category_get_name ( category), gw_db_category_get_name ( to)) && str_equals ( gw_db_category_get_description ( category), gw_db_category_get_description ( to)) && gw_db_category_get_nb_disks ( category) == gw_db_category_get_nb_disks ( to) && gw_db_category_get_nb_files ( category) == gw_db_category_get_nb_files ( to) ) { equals = TRUE; } } return equals; } gwhere-0.2.3/src/db/gwdbcategory.h0000744000175000017500000002471410240507364015457 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwdbcategory.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.
* It's an object for category representation. His structure gets many informations as file name, description, ...

* @abstract This is the category data structure. * @author Sébastien LECACHEUR * @version 1.0 2004/06/07 * @see gwsupport.h * @see glib.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwdbcategory.c * @author Author */ #ifndef GW_DATA_DB_CATEGORY_H #define GW_DATA_DB_CATEGORY_H #include typedef gpointer GWDBCategoryPK; /*! * @typedef GWDBCategory * @abstract The used category structure * @discussion GWDBCategory data is an opaque data structure containing information about a category. * @struct gw_db_category_s */ typedef struct gw_db_category_s GWDBCategory; /*! * @function gw_db_category_new * @abstract Creates a new category. * @discussion This function creates a new category. It's an allocation function. * @result a pointer to the category structure.
* Returns NULL when an error occured.
*/ GWDBCategory * gw_db_category_new ( void); /*! * @function gw_db_category_dup * @abstract Duplicates a category. * @discussion This function duplicated an existing category. It's an allocation function. * @param category the category to duplicate * @param dup the pointer reference to duplicate the category. If it is * NULL allocates a new category data structure. * @result a pointer to duplicated category structure.
* Returns NULL when an error occured.
*/ GWDBCategory * gw_db_category_dup ( GWDBCategory *category, GWDBCategory **dup); /*! * @function gw_db_category_set_ref * @abstract Sets the internal category's reference. * @discussion This function sets the internal category's reference. This reference must be unique * and must not be modified by client application. * @param category the category to set the reference * @param ref the reference pointer * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_db_category_set_ref ( GWDBCategory *category, GWDBCategoryPK ref); /*! * @function gw_db_category_set_index * @abstract Sets the category's index. * @discussion This function sets the category's index. This reference must be unique. * @param category the category to set the reference * @param index the index number * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_db_category_set_index ( GWDBCategory *category, gint index); /*! * @function gw_db_category_set_name * @abstract Sets the category's name. * @discussion This function sets the category's name.
* Warning :The name may be NULL. It's dangerous!! * @param category the category to set the name * @param name the name * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_db_category_set_name ( GWDBCategory *category, gchar *name); /*! * @function gw_db_category_set_description * @abstract Sets the category's description. * @discussion This function sets the category's description.
* @param category the category to set the description * @param description the description * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_db_category_set_description ( GWDBCategory *category, gchar *description); /*! * @function gw_db_category_set_nb_disks * @abstract Sets the category's number of disk. * @discussion This function sets the number of disk which use this category. * @param category the category to set the number of disk * @param nb the number of disks * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_db_category_set_nb_disks ( GWDBCategory *category, gulong nb); /*! * @function gw_db_category_set_nb_files * @abstract Sets the category's number of files. * @discussion This function sets the number of files which use this category. * @param category the category to set the number of files * @param nb the number of files * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_db_category_set_nb_files ( GWDBCategory *category, gulong nb); /*! * @function gw_db_category_get_ref * @abstract Gets the category's internal reference. * @discussion This function gets the category's internal reference. * @param category the category to get internal reference * @result the category internal reference.
* Returns NULL when an error occured.
*/ GWDBCategoryPK gw_db_category_get_ref ( GWDBCategory *category); /*! * @function gw_db_category_get_index * @abstract Gets the category's index. * @discussion This function gets the category's index. * @param category the category to get index * @result the category index.
* Returns -1 when an error occured.
*/ gint gw_db_category_get_index ( GWDBCategory *p); /*! * @function gw_db_category_get_name * @abstract Gets the category's name. * @discussion This function gets the category's name. * @param category the category to get name * @result the name.
* Returns NULL when an error occured.
*/ gchar * gw_db_category_get_name ( GWDBCategory *category); /*! * @function gw_db_category_get_description * @abstract Gets the category's description. * @discussion This function gets the category's description. * @param category the category to get description * @result the description.
* Returns NULL when an error occured.
*/ gchar * gw_db_category_get_description ( GWDBCategory *category); /*! * @function gw_db_category_get_nb_disks * @abstract Gets the category's number of disks. * @discussion This function gets the number of disks which use this category. * @param category the category to get number of disks * @result the number of disks.
* Returns 0 when an error occured.
*/ gulong gw_db_category_get_nb_disks ( GWDBCategory *category); /*! * @function gw_db_category_get_nb_files * @abstract Gets the category's number of files. * @discussion This function gets the number of files which use this category. * @param category the category to get number of files * @result the number of files.
* Returns 0 when an error occured.
*/ gulong gw_db_category_get_nb_files ( GWDBCategory *category); /*! * @function gw_db_category_add_disk * @abstract Adds a disk to the category * @discussion This function adds a disk that use this category. This function * increments the category's number of disks. * @param category the category to add a disk * @result the number of disks.
* Returns 0 when an error occured.
*/ gulong gw_db_category_add_disk ( GWDBCategory *category); /*! * @function gw_db_category_add_file * @abstract Adds a file to the category * @discussion This function adds a file that use this category. This function * increments the category's number of files. * @param category the category to add a file * @result the number of files.
* Returns 0 when an error occured.
*/ gulong gw_db_category_add_file ( GWDBCategory *category); /*! * @function gw_db_category_remove_disk * @abstract Removes a disk to the category * @discussion This function removes a disk that use this category. This function * decriment the category's number of disks. * @param category the category to remove a disk * @result the number of disks.
* Returns 0 when an error occured.
*/ gulong gw_db_category_remove_disk ( GWDBCategory *category); /*! * @function gw_db_category_remove_file * @abstract Removes a file to the category * @discussion This function removes a file that use this category. This function * decriment the category's number of files. * @param category the category to remove a file * @result the number of files.
* Returns 0 when an error occured.
*/ gulong gw_db_category_remove_file ( GWDBCategory *category); /*! * @function gw_db_category_can_removed * @abstract Gets if the category can be removed. * @discussion This function gets if the category can be removed. The category * can be removed if nothing use this category. * @param category the category to know if it can be removed * @result returns TRUE if it can be removed otherwize returns FALSE.
* Returns FALSE when an error occured.
*/ gboolean gw_db_category_can_removed ( GWDBCategory *category); GWDBCategory * gw_db_category_dup ( GWDBCategory *category, GWDBCategory **dup); /*! * @function gw_db_category_free * @abstract Frees datas structure. * @discussion This function frees the category's datas. * @param category the category to free * @result an error code.
* Returns 0 when it's done.
* Returns -1 when an error occured.
*/ gint gw_db_category_free ( GWDBCategory *category); gboolean gw_db_category_equals ( GWDBCategory *category, GWDBCategory *to); #endif gwhere-0.2.3/src/db/gwdbcontext.h0000644000175000017500000000364310214105106015310 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwdbcontext.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.
* It's an object for context database... * @abstract This is the context database structure. * @author Sébastien LECACHEUR * @version 1.0 2004/06/07 * @see gwpluginsmanageryy.h * @see gwsupport.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwdbcontext.c * @author Author */ #ifndef GW_DATABASE_CONTEXT_H #define GW_DATADASE_CONTEXT_H typedef struct gw_db_context_s GWDBContext; GWDBContext * gw_db_context_new ( void); gint gw_db_context_set_plugin ( GWDBContext *context, gpointer plugin); gint gw_db_context_set_data ( GWDBContext *context, gpointer data); gpointer gw_db_context_get_plugin ( GWDBContext *context); gpointer gw_db_context_get_data ( GWDBContext *context); gint gw_db_context_free ( GWDBContext *context); #endif gwhere-0.2.3/src/db/gwdbdisk.c0000744000175000017500000002333110506321563014561 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include /* strcmp */ #include "gwsupport.h" /* str_equals */ #include "gwdbdisk.h" typedef struct gw_db_disk_s { gpointer ref; /* Disk reference */ gchar *name; /* Disk name */ gchar *fsname; /* Device file system name */ gchar *fstype; /* Device file system type */ gchar *path; /* Disk access path */ gint num; /* Number archive in catalog */ GWDBDiskType type; /* Device type */ gchar *volume; /* Disk label */ guint64 full; /* Disk full capacity */ guint64 free; /* Disk free space */ gulong date; /* Disk adding date */ gchar *serial; /* Disk serial number */ GWDBCategoryPK category; /* Disk category pk */ gchar *description; /* Disk description */ }_GWDBDisk; GWDBDisk * gw_db_disk_new ( void) { GWDBDisk *disk = NULL; if ( (disk = (GWDBDisk*)g_malloc0 ( sizeof ( GWDBDisk))) != NULL) { disk->ref = NULL; disk->name = NULL; disk->fsname = NULL; disk->fstype = NULL; disk->path = NULL; disk->num = 0; disk->type = NONE; disk->volume = NULL; disk->full = 0; disk->free = 0; disk->date = 0; disk->serial = NULL; disk->category = NULL; disk->description = NULL; } return disk; } gint gw_db_disk_set_ref ( GWDBDisk *disk, gpointer ref) { if ( disk != NULL ) { disk->ref = ref; return 0; } return -1; } gint gw_db_disk_set_name ( GWDBDisk *disk, gchar *name) { if ( disk != NULL ) { if ( disk->name != NULL ) { g_free ( disk->name); } disk->name = name; return 0; } return -1; } gint gw_db_disk_set_fsname ( GWDBDisk *disk, gchar *fsname) { if ( disk != NULL ) { if ( disk->fsname != NULL ) { g_free ( disk->fsname); } disk->fsname = fsname; return 0; } return -1; } gint gw_db_disk_set_fstype ( GWDBDisk *disk, gchar *fstype) { if ( disk != NULL ) { if ( disk->fstype != NULL ) { g_free ( disk->fstype); } disk->fstype = fstype; return 0; } return -1; } gint gw_db_disk_set_path ( GWDBDisk *disk, gchar *path) { if ( disk != NULL ) { if ( disk->path != NULL ) { g_free ( disk->path); } disk->path = path; return 0; } return -1; } gint gw_db_disk_set_num ( GWDBDisk *disk, gint num) { if ( disk != NULL ) { disk->num = num; return 0; } return -1; } gint gw_db_disk_set_type ( GWDBDisk *disk, GWDBDiskType type) { if ( disk != NULL ) { disk->type = type; return 0; } return -1; } gint gw_db_disk_set_volume ( GWDBDisk *disk, gchar *volume) { if ( disk != NULL ) { if ( disk->volume != NULL ) { g_free ( disk->volume); } disk->volume = volume; return 0; } return -1; } gint gw_db_disk_set_full ( GWDBDisk *disk, guint64 full) { if ( disk != NULL ) { disk->full = full; return 0; } return -1; } gint gw_db_disk_set_free ( GWDBDisk *disk, guint64 free) { if ( disk != NULL ) { disk->free = free; return 0; } return -1; } gint gw_db_disk_set_date ( GWDBDisk *disk, gulong date) { if ( disk != NULL ) { disk->date = date; return 0; } return -1; } gint gw_db_disk_set_serial ( GWDBDisk *disk, gchar *serial) { if ( disk != NULL ) { if ( disk->serial != NULL ) { g_free ( disk->serial); } disk->serial = serial; return 0; } return -1; } gint gw_db_disk_set_category ( GWDBDisk *disk, GWDBCategoryPK category) { if ( disk != NULL ) { disk->category = category; return 0; } return -1; } gint gw_db_disk_set_description ( GWDBDisk *disk, gchar *description) { if ( disk != NULL ) { if ( disk->description != NULL ) { g_free ( disk->description); } disk->description = description; return 0; } return -1; } gpointer gw_db_disk_get_ref ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->ref; } return NULL; } gchar * gw_db_disk_get_name ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->name; } return NULL; } gchar * gw_db_disk_get_fsname ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->fsname; } return NULL; } gchar * gw_db_disk_get_fstype ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->fstype; } return NULL; } gchar * gw_db_disk_get_path ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->path; } return NULL; } gint gw_db_disk_get_num ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->num; } return -1; } GWDBDiskType gw_db_disk_get_type ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->type; } return NONE; } gchar * gw_db_disk_get_volume ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->volume; } return NULL; } guint64 gw_db_disk_get_full ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->full; } return 0; } guint64 gw_db_disk_get_free ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->free; } return 0; } guint64 gw_db_disk_get_capacity ( GWDBDisk *disk) { guint64 size = G_GINT64_CONSTANT ( 0); if ( disk != NULL ) { size = gw_db_disk_get_full ( disk) + gw_db_disk_get_free ( disk); } return size; } gulong gw_db_disk_get_date ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->date; } return 0; } gchar * gw_db_disk_get_serial ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->serial; } return NULL; } GWDBCategoryPK gw_db_disk_get_category ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->category; } return NULL; } gchar * gw_db_disk_get_description ( GWDBDisk *disk) { if ( disk != NULL ) { return disk->description; } return NULL; } GWDBDisk * gw_db_disk_dup ( GWDBDisk *disk, GWDBDisk **dup) { GWDBDisk *dup_disk = NULL; if ( disk != NULL ) { dup_disk = *dup; if ( dup_disk == NULL ) { /* Don't check if gw_db_disk_new return NULL because all following functions check it too. */ (*dup) = dup_disk = gw_db_disk_new ( ); } gw_db_disk_set_ref ( dup_disk, gw_db_disk_get_ref ( disk)); if ( gw_db_disk_get_name ( disk) != NULL ) { gw_db_disk_set_name ( dup_disk, g_strdup ( gw_db_disk_get_name ( disk))); } else { gw_db_disk_set_name ( dup_disk, NULL); } if ( gw_db_disk_get_fsname ( disk) != NULL ) { gw_db_disk_set_fsname ( dup_disk, g_strdup ( gw_db_disk_get_fsname ( disk))); } else { gw_db_disk_set_fsname ( dup_disk, NULL); } if ( gw_db_disk_get_fstype ( disk) != NULL ) { gw_db_disk_set_fstype ( dup_disk, g_strdup ( gw_db_disk_get_fstype ( disk))); } else { gw_db_disk_set_fstype ( dup_disk, NULL); } if ( gw_db_disk_get_path ( disk) != NULL ) { gw_db_disk_set_path ( dup_disk, g_strdup ( gw_db_disk_get_path ( disk))); } else { gw_db_disk_set_path ( dup_disk, NULL); } gw_db_disk_set_num ( dup_disk, gw_db_disk_get_num ( disk)); gw_db_disk_set_type ( dup_disk, gw_db_disk_get_type ( disk)); if ( gw_db_disk_get_volume ( disk) != NULL ) { gw_db_disk_set_volume ( dup_disk, g_strdup ( gw_db_disk_get_volume ( disk))); } else { gw_db_disk_set_volume ( dup_disk, NULL); } gw_db_disk_set_full ( dup_disk, gw_db_disk_get_full ( disk)); gw_db_disk_set_free ( dup_disk, gw_db_disk_get_free ( disk)); gw_db_disk_set_date ( dup_disk, gw_db_disk_get_date ( disk)); if ( gw_db_disk_get_serial ( disk) != NULL ) { gw_db_disk_set_serial ( dup_disk, g_strdup ( gw_db_disk_get_serial ( disk))); } else { gw_db_disk_set_serial ( dup_disk, NULL); } gw_db_disk_set_category ( dup_disk, gw_db_disk_get_category ( disk)); if ( gw_db_disk_get_description ( disk) != NULL ) { gw_db_disk_set_description ( dup_disk, g_strdup ( gw_db_disk_get_description ( disk))); } else { gw_db_disk_set_description ( dup_disk, NULL); } } return dup_disk; } gint gw_db_disk_free ( GWDBDisk *disk) { if ( disk != NULL ) { gw_db_disk_set_name ( disk, NULL); gw_db_disk_set_fsname ( disk, NULL); gw_db_disk_set_fstype ( disk, NULL); gw_db_disk_set_path ( disk, NULL); gw_db_disk_set_volume ( disk, NULL); gw_db_disk_set_serial ( disk, NULL); gw_db_disk_set_description ( disk, NULL); g_free ( disk); return 0; } return -1; } gboolean gw_db_disk_equals ( GWDBDisk *disk, GWDBDisk *to) { gboolean equals = FALSE; if ( disk != NULL && to != NULL) { if ( gw_db_disk_get_ref ( disk) == gw_db_disk_get_ref ( to) && str_equals ( gw_db_disk_get_name ( disk), gw_db_disk_get_name ( to)) && str_equals ( gw_db_disk_get_fsname ( disk), gw_db_disk_get_fsname ( to)) && str_equals ( gw_db_disk_get_fstype ( disk), gw_db_disk_get_fstype ( to)) && str_equals ( gw_db_disk_get_path ( disk), gw_db_disk_get_path ( to)) && gw_db_disk_get_num ( disk) == gw_db_disk_get_num ( to) && gw_db_disk_get_type ( disk) == gw_db_disk_get_type ( to) && str_equals ( gw_db_disk_get_volume ( disk), gw_db_disk_get_volume ( to)) && gw_db_disk_get_full ( disk) == gw_db_disk_get_full ( to) && gw_db_disk_get_free ( disk) == gw_db_disk_get_free ( to) && gw_db_disk_get_date ( disk) == gw_db_disk_get_date ( to) && str_equals ( gw_db_disk_get_serial ( disk), gw_db_disk_get_serial ( to)) && gw_db_disk_get_category ( disk) == gw_db_disk_get_category ( to) && str_equals ( gw_db_disk_get_description ( disk), gw_db_disk_get_description ( to)) ) { equals = TRUE; } } return equals; } gwhere-0.2.3/src/db/gwdbdisk.h0000744000175000017500000000673510241213570014571 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwdbdisk.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.
* It's an object for disk representation. His structure gets many informations as name, capacity, size, label,...

* @abstract This is the disk data structure. * @author Sébastien LECACHEUR * @version 1.0 2004/06/07 * @see gtk/gtk.h * @see gwsupport.h * @see gwdbcategory.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwdbdisk.c * @author Author */ #ifndef GW_DATA_DB_DISK_H #define GW_DATA_DB_DISK_H #include "gwdbcategory.h" #include "gwdbdisktype.h" typedef gpointer GWDBDiskPK; typedef struct gw_db_disk_s GWDBDisk; GWDBDisk* gw_db_disk_new ( void); gint gw_db_disk_set_ref ( GWDBDisk *disk, GWDBDiskPK ref); gint gw_db_disk_set_name ( GWDBDisk *disk, gchar *name); gint gw_db_disk_set_fsname ( GWDBDisk *disk, gchar *fsname); gint gw_db_disk_set_fstype ( GWDBDisk *disk, gchar *fstype); gint gw_db_disk_set_path ( GWDBDisk *disk, gchar *path); gint gw_db_disk_set_num ( GWDBDisk *disk, gint num); gint gw_db_disk_set_type ( GWDBDisk *disk, GWDBDiskType type); gint gw_db_disk_set_volume ( GWDBDisk *disk, gchar *volume); gint gw_db_disk_set_full ( GWDBDisk *disk, guint64 full); gint gw_db_disk_set_free ( GWDBDisk *disk, guint64 free); gint gw_db_disk_set_date ( GWDBDisk *disk, gulong date); gint gw_db_disk_set_serial ( GWDBDisk *disk, gchar *serial); gint gw_db_disk_set_category ( GWDBDisk *disk, GWDBCategoryPK category); gint gw_db_disk_set_description ( GWDBDisk *disk, gchar *description); GWDBDiskPK gw_db_disk_get_ref ( GWDBDisk *disk); gchar * gw_db_disk_get_name ( GWDBDisk *disk); gchar * gw_db_disk_get_fsname ( GWDBDisk *disk); gchar * gw_db_disk_get_fstype ( GWDBDisk *disk); gchar * gw_db_disk_get_path ( GWDBDisk *disk); gint gw_db_disk_get_num ( GWDBDisk *disk); GWDBDiskType gw_db_disk_get_type ( GWDBDisk *disk); gchar * gw_db_disk_get_volume ( GWDBDisk *disk); guint64 gw_db_disk_get_full ( GWDBDisk *disk); guint64 gw_db_disk_get_free ( GWDBDisk *disk); guint64 gw_db_disk_get_capacity ( GWDBDisk *disk); gulong gw_db_disk_get_date ( GWDBDisk *disk); gchar * gw_db_disk_get_serial ( GWDBDisk *disk); GWDBCategoryPK gw_db_disk_get_category ( GWDBDisk *disk); gchar * gw_db_disk_get_description ( GWDBDisk *disk); GWDBDisk * gw_db_disk_dup ( GWDBDisk *disk, GWDBDisk **dup); gint gw_db_disk_free ( GWDBDisk *disk); gboolean gw_db_disk_equals ( GWDBDisk *disk, GWDBDisk *to); #endif gwhere-0.2.3/src/db/gwdbdisktype.h0000744000175000017500000000330610240507407015466 0ustar bartbart/* GWhere * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwdbdistype.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.
* It's an object for disk representation. His structure gets many informations as name, capacity, size, label,...

* @abstract This is the disk data structure. * @author Sébastien LECACHEUR * @version 1.0 2004/06/07 * @see gtk/gtk.h * @link GWhere Web Site * @link GTK+ Web Site * @author Author */ #ifndef GW_DATA_DB_DISK_TYPE_H #define GW_DATA_DB_DISK_TYPE_H typedef enum {NONE = 0, CDROM = 1, FLOPPY = 2, HD = 3, ZIP_DRIVE = 4, TAPE_DRIVE = 5, AUDIOCD = 6, NETWORK_DRIVE = 7, JAZ_DRIVE = 8} GWDBDiskType; #endif gwhere-0.2.3/src/db/gwdbfile.h0000744000175000017500000000726610501361722014560 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwdbfile.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.
* It's an object for file representation. His structure gets many informations as name, size, owner, ...

* Category field is collaborative. All other fields are agregated. * @abstract This is the file information data structure. * @author Sébastien LECACHEUR * @version 1.0 2004/06/07 * @see glib.h * @see gwsupport.h * @see gwdbcategory.h * @link GWhere Web Site * @link GTK+ Web Site * @ref gwdbfile.c * @author Author */ #ifndef GW_DATA_DB_FILE_H #define GW_DATA_DB_FILE_H #include #include #include #include "gwdbcategory.h" typedef gpointer GWDBFilePK; typedef struct gw_db_file_s GWDBFile; GWDBFile * gw_db_file_new ( void); gint gw_db_file_set_ref ( GWDBFile *file, GWDBFilePK ref); gint gw_db_file_set_name ( GWDBFile *file, gchar *name); gint gw_db_file_set_rights ( GWDBFile *file, mode_t rights); gint gw_db_file_set_rights_from_gchar ( GWDBFile *file, gchar *rights); //TODO gint gw_db_file_set_is_directory ( GWDBFile *file, gboolean is_directory); gint gw_db_file_set_owner ( GWDBFile *file, gchar *owner); gint gw_db_file_set_group ( GWDBFile *file, gchar *group); gint gw_db_file_set_size ( GWDBFile *file, guint64 size); gint gw_db_file_set_inode ( GWDBFile *file, glong inode); gint gw_db_file_set_cdate ( GWDBFile *file, gulong cdate); gint gw_db_file_set_adate ( GWDBFile *file, gulong adate); gint gw_db_file_set_mdate ( GWDBFile *file, gulong mdate); gint gw_db_file_set_category ( GWDBFile *file, GWDBCategoryPK category); gint gw_db_file_set_description ( GWDBFile *file, gchar *description); GWDBFilePK gw_db_file_get_ref ( GWDBFile *file); gchar * gw_db_file_get_name ( GWDBFile *file); gboolean gw_db_file_is_directory ( GWDBFile *file); gboolean gw_db_file_is_real_directory ( GWDBFile *file); gboolean gw_db_file_is_real_file ( GWDBFile *file); mode_t gw_db_file_get_rights ( GWDBFile *file); gchar * gw_db_file_get_rights_to_gchar ( GWDBFile *file); gchar * gw_db_file_get_owner ( GWDBFile *file); gchar * gw_db_file_get_group ( GWDBFile *file); guint64 gw_db_file_get_size ( GWDBFile *file); glong gw_db_file_get_inode ( GWDBFile *file); gulong gw_db_file_get_cdate ( GWDBFile *file); gulong gw_db_file_get_adate ( GWDBFile *file); gulong gw_db_file_get_mdate ( GWDBFile *file); GWDBCategoryPK gw_db_file_get_category ( GWDBFile *file); gchar * gw_db_file_get_description ( GWDBFile *file); GWDBFile * gw_db_file_dup ( GWDBFile *file, GWDBFile **dup); gint gw_db_file_free ( GWDBFile *file); gboolean gw_db_file_equals ( GWDBFile *file, GWDBFile *to); #endif gwhere-0.2.3/src/db/gwdbfile.c0000744000175000017500000003056510501361667014561 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gwsupport.h" /* str_equals */ #include "gwdbfile.h" #include #include #include #include /* strlen strncmp */ #if defined ( OS_WIN32) #define S_IFLNK 0120000 #define S_IFSOCK 0140000 #define S_ISUID 0004000 #define S_ISGID 0002000 #define S_ISVTX 0001000 #define S_IRGRP 0000040 #define S_IWGRP 0000020 #define S_IXGRP 0000010 #define S_IROTH 0000004 #define S_IWOTH 0000002 #define S_IXOTH 0000001 #endif typedef struct gw_db_file_s { gpointer ref; /* File reference */ gchar *name; /* File name */ mode_t rights; /* File rights */ gchar *owner; /* File owner */ gchar *group; /* File owner group */ guint64 size; /* File size */ glong inode; /* File inode */ gulong cdate; /* File creation date */ gulong adate; /* File access date */ gulong mdate; /* File modification date */ GWDBCategoryPK category; /* File category pk */ gchar *description; /* File description (or comment) */ }_GWDBFile; GWDBFile * gw_db_file_new ( void) { GWDBFile *file = NULL; if ( (file = (GWDBFile*)g_malloc0 ( sizeof ( GWDBFile))) != NULL ) { file->ref = NULL; file->name = NULL; file->rights = 0; file->owner = NULL; file->group = NULL; file->size = 0; file->inode = 0; file->cdate = 0; file->adate = 0; file->mdate = 0; file->category = NULL; file->description = NULL; } return file; } gint gw_db_file_set_ref ( GWDBFile *file, gpointer ref) { if ( file != NULL ) { file->ref = ref; return 0; } return -1; } gint gw_db_file_set_name ( GWDBFile *file, gchar *name) { if ( file != NULL ) { if ( file->name != NULL ) { g_free ( file->name); } file->name = name; return 0; } return -1; } gint gw_db_file_set_rights ( GWDBFile *file, mode_t rights) { if ( file != NULL ) { file->rights = rights; return 0; } return -1; } gint gw_db_file_set_rights_from_gchar ( GWDBFile *file, gchar *rights) { mode_t mode = 000000; //TODO replace by hexa code if ( (file != NULL) && (rights != NULL) && strlen ( rights)==10 ) { switch (rights[0]) { case 'b': mode|=S_IFBLK; break; case 'l': mode|=S_IFLNK; break; case 'd': mode|=S_IFDIR; break; case 'c': mode|=S_IFCHR; break; case 'p': mode|=S_IFIFO; break; case 's': mode|=S_IFSOCK; break; default: break; } if ( rights[1]=='r') { mode|=S_IRUSR; } if ( rights[2]=='w') { mode|=S_IWUSR; } switch (rights[3]) { case 'x': mode|=S_IXUSR; break; case 's': mode|=S_ISUID; mode|=S_IXUSR; break; case 'S': mode|=S_ISUID; break; default: break; } if ( rights[4]=='r') { mode|=S_IRGRP; } if ( rights[5]=='w') { mode|=S_IWGRP; } switch (rights[6]) { case 'x': mode|=S_IXGRP; break; case 's': mode|=S_ISGID; mode|=S_IXGRP; break; case 'S': mode|=S_ISGID; break; default: break; } if ( rights[7]=='r') { mode|=S_IROTH; } if ( rights[8]=='w') { mode|=S_IWOTH; } switch (rights[9]) { case 'x': mode|=S_IXOTH; break; case 't': mode|=S_ISVTX; mode|=S_IXOTH; break; case 'T': mode|=S_ISVTX; break; default: break; } file->rights = mode; return 0; } return -1; } gint gw_db_file_set_owner ( GWDBFile *file, gchar *owner) { if ( file != NULL ) { if ( file->owner != NULL ) { g_free ( file->owner); } file->owner = owner; return 0; } return -1; } gint gw_db_file_set_group ( GWDBFile *file, gchar *group) { if ( file != NULL ) { if ( file->group != NULL ) { g_free ( file->group); } file->group = group; return 0; } return -1; } gint gw_db_file_set_size ( GWDBFile *file, guint64 size) { if ( file != NULL ) { file->size = size; return 0; } return -1; } gint gw_db_file_set_inode ( GWDBFile *file, glong inode) { if ( file != NULL ) { file->inode = inode; return 0; } return -1; } gint gw_db_file_set_cdate ( GWDBFile *file, gulong cdate) { if ( file != NULL ) { file->cdate = cdate; return 0; } return -1; } gint gw_db_file_set_adate ( GWDBFile *file, gulong adate) { if ( file != NULL ) { file->adate = adate; return 0; } return -1; } gint gw_db_file_set_mdate ( GWDBFile *file, gulong mdate) { if ( file != NULL ) { file->mdate = mdate; return 0; } return -1; } gint gw_db_file_set_category ( GWDBFile *file, GWDBCategoryPK category) { if ( file != NULL ) { file->category = category; return 0; } return -1; } gint gw_db_file_set_description ( GWDBFile *file, gchar *description) { if ( file != NULL ) { if ( file->description != NULL ) { g_free ( file->description); } file->description = description; return 0; } return -1; } gpointer gw_db_file_get_ref ( GWDBFile *file) { if ( file != NULL ) { return file->ref; } return NULL; } gchar * gw_db_file_get_name ( GWDBFile *file) { if ( file != NULL ) { return file->name; } return NULL; } gboolean gw_db_file_is_directory ( GWDBFile *file) { if ( file != NULL ) { return ( (S_IFMT & file->rights) == S_IFDIR ); } /* Ugly coder!!*/ return FALSE; } gboolean gw_db_file_is_real_directory ( GWDBFile *file) { if ( file != NULL) { if ( gw_db_file_is_directory ( file) ) { if ( gw_db_file_get_name ( file) != NULL ) { switch ( strlen ( gw_db_file_get_name ( file))) { case 0: /* Impossible case!! */ return FALSE; break; case 1: return !(strncmp ( gw_db_file_get_name ( file), ".", 1) == 0); break; case 2: return !(strncmp ( gw_db_file_get_name ( file), "..", 2) == 0); break; default: return TRUE; break; } } } } /* Ugly coder!!*/ return FALSE; } gboolean gw_db_file_is_real_file ( GWDBFile *file) { if ( file != NULL ) { return ( (S_IFMT & file->rights) != S_IFDIR && (S_IFMT & file->rights) != S_IFCHR && (S_IFMT & file->rights) != S_IFIFO && (S_IFMT & file->rights) != S_IFSOCK); } /* Ugly coder!!*/ return FALSE; } mode_t gw_db_file_get_rights ( GWDBFile *file) { if ( file != NULL ) { return file->rights; } //TODO find the appropriate value... return -1; } gchar* gw_db_file_get_rights_to_gchar ( GWDBFile *file) { gchar* rigths = NULL; if ( file != NULL ) { rigths = g_strdup ( "----------"); #if defined ( OS_LINUX) || defined ( OS_CYGWIN) if ( S_ISLNK ( file->rights) ) { rigths[0] = 'l'; } else { #endif switch ( S_IFMT & file->rights ) { case S_IFBLK: rigths[0] = 'b'; break; case S_IFLNK: rigths[0] = 'l'; break; case S_IFDIR: rigths[0] = 'd'; break; case S_IFCHR: rigths[0] = 'c'; break; case S_IFIFO: rigths[0] = 'p'; break; case S_IFSOCK: rigths[0] = 's'; break; } #if defined ( OS_LINUX) || defined ( OS_CYGWIN) } #endif /* Owner rights */ if (S_IRUSR & file->rights) rigths[1] = 'r'; if (S_IWUSR & file->rights) rigths[2] = 'w'; if (S_ISUID & file->rights){ if (S_IXUSR & file->rights) { rigths[3] = 's'; } else { rigths[3] = 'S'; } } else { if (S_IXUSR & file->rights) { rigths[3] = 'x'; } } /* Group rights */ if (S_IRGRP & file->rights) rigths[4] = 'r'; if (S_IWGRP & file->rights) rigths[5] = 'w'; if (S_ISGID & file->rights) { if (S_IXGRP & file->rights) { rigths[6] = 's'; } else { rigths[6] = 'S'; } } else { if (S_IXGRP & file->rights) { rigths[6] = 'x'; } } /* Others rights */ if (S_IROTH & file->rights) rigths[7] = 'r'; if (S_IWOTH & file->rights) rigths[8] = 'w'; if (S_ISVTX & file->rights) { if (S_IXOTH & file->rights) { rigths[9] = 't'; } else { rigths[9] = 'T'; } } else { if (S_IXOTH & file->rights) { rigths[9] = 'x'; } } } return rigths; } gchar * gw_db_file_get_owner ( GWDBFile *file) { if ( file != NULL ) { return file->owner; } return NULL; } gchar * gw_db_file_get_group ( GWDBFile *file) { if ( file != NULL ) { return file->group; } return NULL; } guint64 gw_db_file_get_size ( GWDBFile *file) { if ( file != NULL ) { return file->size; } return 0; } glong gw_db_file_get_inode ( GWDBFile *file) { if ( file != NULL ) { return file->inode; } return -1; } gulong gw_db_file_get_cdate ( GWDBFile *file) { if ( file != NULL ) { return file->cdate; } return 0; } gulong gw_db_file_get_adate ( GWDBFile *file) { if ( file != NULL ) { return file->adate; } return 0; } gulong gw_db_file_get_mdate ( GWDBFile *file) { if ( file != NULL ) { return file->mdate; } return 0; } GWDBCategoryPK gw_db_file_get_category ( GWDBFile *file) { if ( file != NULL ) { return file->category; } return NULL; } gchar * gw_db_file_get_description ( GWDBFile *file) { if ( file != NULL ) { return file->description; } return NULL; } GWDBFile * gw_db_file_dup ( GWDBFile *file, GWDBFile **dup) { GWDBFile *dup_file = NULL; if ( file != NULL ) { dup_file = *dup; if ( dup_file == NULL ) { /* Don't check if gw_db_file_new return NULL because all following functions check it too. */ (*dup) = dup_file = gw_db_file_new ( ); } gw_db_file_set_ref ( dup_file, gw_db_file_get_ref ( file)); if ( gw_db_file_get_name ( file) != NULL ) { gw_db_file_set_name ( dup_file, g_strdup ( gw_db_file_get_name ( file))); } else { gw_db_file_set_name ( dup_file, NULL); } gw_db_file_set_rights ( dup_file, gw_db_file_get_rights ( file)); if ( gw_db_file_get_owner ( file) != NULL ) { gw_db_file_set_owner ( dup_file, g_strdup ( gw_db_file_get_owner ( file))); } else { gw_db_file_set_owner ( dup_file, NULL); } if ( gw_db_file_get_group ( file ) != NULL ) { gw_db_file_set_group ( dup_file, g_strdup ( gw_db_file_get_group ( file))); } else { gw_db_file_set_group ( dup_file, NULL); } gw_db_file_set_size ( dup_file, gw_db_file_get_size ( file)); gw_db_file_set_inode ( dup_file, gw_db_file_get_inode ( file)); gw_db_file_set_adate ( dup_file, gw_db_file_get_adate ( file)); gw_db_file_set_cdate ( dup_file, gw_db_file_get_cdate ( file)); gw_db_file_set_mdate ( dup_file, gw_db_file_get_mdate ( file)); gw_db_file_set_category ( dup_file, gw_db_file_get_category ( file)); if ( gw_db_file_get_description ( file) != NULL ) { gw_db_file_set_description ( dup_file, g_strdup ( gw_db_file_get_description ( file))); } else { gw_db_file_set_description ( dup_file, NULL); } } return dup_file; } gint gw_db_file_free ( GWDBFile *file) { if ( file != NULL ) { gw_db_file_set_name ( file, NULL); gw_db_file_set_owner ( file, NULL); gw_db_file_set_group ( file, NULL); gw_db_file_set_description ( file, NULL); g_free ( file); return 0; } return -1; } gboolean gw_db_file_equals ( GWDBFile *file, GWDBFile *to) { gboolean equals = FALSE; if ( file != NULL && to != NULL) { if ( gw_db_file_get_ref ( file) == gw_db_file_get_ref ( to) && str_equals ( gw_db_file_get_name ( file), gw_db_file_get_name ( to)) && gw_db_file_get_rights ( file) == gw_db_file_get_rights ( to) && str_equals ( gw_db_file_get_owner ( file), gw_db_file_get_owner ( to)) && str_equals ( gw_db_file_get_group ( file), gw_db_file_get_group ( to)) && gw_db_file_get_size ( file) == gw_db_file_get_size ( to) && gw_db_file_get_inode ( file) == gw_db_file_get_inode ( to) && gw_db_file_get_cdate ( file) == gw_db_file_get_cdate ( to) && gw_db_file_get_adate ( file) == gw_db_file_get_adate ( to) && gw_db_file_get_mdate ( file) == gw_db_file_get_mdate ( to) && gw_db_file_get_category ( file) == gw_db_file_get_category ( to) && str_equals ( gw_db_file_get_description ( file), gw_db_file_get_description ( to)) ) { equals = TRUE; } } return equals; } gwhere-0.2.3/src/db/gwdb.h0000744000175000017500000000275310214105106013705 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*! * @header gwdb.h * GWhere
* Copyright (C) 2000 Sébastien LECACHEUR

* This Distributed under the terms of the GNU General Public Licence

* This component was developed for the GWhere project.

* @abstract This is a tool component for database. * @author Sébastien LECACHEUR * @version 1.0 2002/05/19 * @see gwsupport.h * @link GWhere Web Site * @author Author */ #ifndef GW_DATABASE_H #define GW_DATABASE_H #include "gwdbcontext.h" #include "gwdbcatalog.h" #include "gwdbcategory.h" #include "gwdbdisk.h" #include "gwdbdisktype.h" #include "gwdbfile.h" #endif gwhere-0.2.3/src/db/Makefile.am0000744000175000017500000000064310241213570014646 0ustar bartbart## Process this file with automake to produce Makefile.in INCLUDES = \ -I$(top_srcdir)/intl \ -I$(top_srcdir)/src \ @GTK_CFLAGS@ \ -D${HOST_OS} noinst_LIBRARIES = libgwdb.a libgwdb_a_SOURCES = \ gwdb.h \ gwdbcontext.c gwdbcontext.h \ gwdbcatalog.c gwdbcatalog.h \ gwdbcategory.c gwdbcategory.h \ gwdbdisk.c gwdbdisk.h \ gwdbdisktype.h \ gwdbfile.c gwdbfile.h EXTRA_DIST = $(SOURCES) libgwdb_a_LIBADD = gwhere-0.2.3/src/db/Makefile.win0000744000175000017500000000123710240240150015037 0ustar bartbart# Project: libgwdb # Makefile created for GWhere CC = gcc.exe WINDRES = windres.exe RES = OBJ = gwdbcontext.o gwdbcatalog.o gwdbcategory.o gwdbdisk.o gwdbfile.o $(RES) INCS = $(GWINCS) $(GTKINCS) -IC:/MINGW/include -IC:/MINGW/mingw_extra/include -IC:/GTK/include GTKINCS = -IC:/GTK/include/gtk-2.0 -IC:/GTK/lib/gtk-2.0/include -IC:/GTK/include/atk-1.0 -IC:/GTK/include/pango-1.0 -IC:/GTK/include/glib-2.0 -IC:/GTK/lib/glib-2.0/include GWINCS = -I.. BIN = libgwdb.a CFLAGS = $(INCS) -O2 -Wall -fnative-struct -DHAVE_CONFIG_H -DOS_WIN32 -DGTK_ENABLE_BROKEN .PHONY: clean all: $(BIN) clean: rm -f $(OBJ) $(BIN) $(BIN): $(OBJ) ar r $(BIN) $(OBJ) ranlib $(BIN) gwhere-0.2.3/src/db/Makefile.in0000644000175000017500000002364110506327620014667 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ INCLUDES = -I$(top_srcdir)/intl -I$(top_srcdir)/src @GTK_CFLAGS@ -D${HOST_OS} noinst_LIBRARIES = libgwdb.a libgwdb_a_SOURCES = gwdb.h gwdbcontext.c gwdbcontext.h gwdbcatalog.c gwdbcatalog.h gwdbcategory.c gwdbcategory.h gwdbdisk.c gwdbdisk.h gwdbdisktype.h gwdbfile.c gwdbfile.h EXTRA_DIST = $(SOURCES) libgwdb_a_LIBADD = mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I../.. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libgwdb_a_DEPENDENCIES = libgwdb_a_OBJECTS = gwdbcontext.$(OBJEXT) gwdbcatalog.$(OBJEXT) \ gwdbcategory.$(OBJEXT) gwdbdisk.$(OBJEXT) gwdbfile.$(OBJEXT) CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best DEP_FILES = .deps/gwdbcatalog.P .deps/gwdbcategory.P \ .deps/gwdbcontext.P .deps/gwdbdisk.P .deps/gwdbfile.P SOURCES = $(libgwdb_a_SOURCES) OBJECTS = $(libgwdb_a_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .lo .o .obj .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu src/db/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-noinstLIBRARIES: clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) distclean-noinstLIBRARIES: maintainer-clean-noinstLIBRARIES: # FIXME: We should only use cygpath when building on Windows, # and only if it is available. .c.obj: $(COMPILE) -c `cygpath -w $<` .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core -rm -f *.$(OBJEXT) clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: .s.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< .S.lo: $(LIBTOOL) --mode=compile $(COMPILE) -c $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: maintainer-clean-libtool: libgwdb.a: $(libgwdb_a_OBJECTS) $(libgwdb_a_DEPENDENCIES) -rm -f libgwdb.a $(AR) cru libgwdb.a $(libgwdb_a_OBJECTS) $(libgwdb_a_LIBADD) $(RANLIB) libgwdb.a tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = src/db distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu src/db/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) -include $(DEP_FILES) mostlyclean-depend: clean-depend: distclean-depend: -rm -rf .deps maintainer-clean-depend: %.o: %.c @echo '$(COMPILE) -c $<'; \ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-cp .deps/$(*F).pp .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm .deps/$(*F).pp %.lo: %.c @echo '$(LTCOMPILE) -c $<'; \ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ < .deps/$(*F).pp > .deps/$(*F).P; \ tr ' ' '\012' < .deps/$(*F).pp \ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ >> .deps/$(*F).P; \ rm -f .deps/$(*F).pp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile $(LIBRARIES) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstLIBRARIES clean-compile clean-libtool clean-tags \ clean-depend clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-noinstLIBRARIES distclean-compile \ distclean-libtool distclean-tags distclean-depend \ distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ maintainer-clean-compile maintainer-clean-libtool \ maintainer-clean-tags maintainer-clean-depend \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-libtool distclean-libtool \ clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir \ mostlyclean-depend distclean-depend clean-depend \ maintainer-clean-depend info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/src/gwhelper.c0000744000175000017500000004733210247421310014213 0ustar bartbart/* GWhere. * Copyright (C) 2000 Sébastien LECACHEUR * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gwsupport.h" #include "gwhelper.h" #include #include /* strtol */ #include /* strlen strncmp */ #include "data/gwdata.h" #include "res/gwres.h" #include "tools/gwtools.h" #include "gwapplicationmanager.h" #include "gwguimanager.h" gint gw_catalog_get_total_disks ( GtkCTree *ctree, GtkCTreeNode *node) { GtkCTreeNode *child = NULL; gint n = 0; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif child = GTK_CTREE_ROW ( node)->children; while ( child != NULL ) { n++; child = GTK_CTREE_ROW ( child)->sibling; } return n; } gint gw_catalog_get_total_folders ( GtkCTree *ctree, GtkCTreeNode *node) { GtkCTreeNode *child = NULL; int n = 0; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif child = GTK_CTREE_ROW( node)->children; while ( child != NULL ) { /* Counts the number of files for each disk. */ n = n + gw_disk_get_total_folders ( ctree, child); child = GTK_CTREE_ROW ( child)->sibling; } return n; } #ifdef __DEPRECATED__ gint gw_catalog_get_num_disk_with_type ( GtkCTree *ctree, GtkCTreeNode *node, gchar *type) { GtkCTreeNode *child = NULL; struct disk_info *disk_info; gint n = 0; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif child = GTK_CTREE_ROW ( node)->children; while ( child != NULL ) { if ( (disk_info = disk_data_get_info ( gtk_ctree_node_get_row_data ( ctree, child))) == NULL ) { disk_info = NULL; child = GTK_CTREE_ROW ( child)->sibling; continue; } /* Checks the disk type. */ if ( strncmp ( type, disk_info_get_type ( disk_info), strlen ( type)) == 0 ) { if ( strncmp ( type, "iso9660", 7) == 0 ) { n++; } } else { if ( strncmp ( type, disk_info_get_fsname ( disk_info), strlen ( type)) == 0 ) { if ( strncmp ( type, "/dev/fd", 7) == 0 ) { n++; } else { if ( strncmp ( type, "/dev/zip", 8) == 0 ) { n++; } else { if ( strncmp ( type, "/dev/hd", 7) == 0 ) { n++; }}} } else { if ( strncmp ( disk_info_get_type ( disk_info), "ntfs", 4) == 0 ) { if ( strncmp ( type, "/dev/hd", 7) == 0 ) { n++; } } else { if ( strncmp ( disk_info_get_type ( disk_info), "cdfs", 4) == 0 ) { if ( strncmp ( type, "iso9660", 7) == 0 ) { n++; } } else { if ( strncmp ( disk_info_get_dir ( disk_info), "A", 1) == 0 ) { if ( strncmp ( type, "/dev/fd", 7) == 0 ) { n++; } } else { if ( strncmp ( disk_info_get_dir ( disk_info), "B", 1) == 0 ) { if ( strncmp ( type, "/dev/fd", 7) == 0 ) { n++; } } else { if ( strncmp ( type, "Other", 5) == 0 ) { n++; if ( strncmp ( "iso9660", disk_info_get_type ( disk_info ), 7) == 0 ) { n--; } else { if ( strncmp ( disk_info_get_fsname ( disk_info), "/dev/fd", 7) == 0 ) { n--; } else { if ( strncmp ( disk_info_get_fsname ( disk_info), "/dev/zip", 8) == 0 ) { n--; } else { if ( strncmp ( disk_info_get_fsname ( disk_info), "/dev/hd", 7) == 0 ) { n--; }}}} }}}}}}} /* if ( strncmp ( type, disk_info_get_type ( disk_data_get_info ( gtk_ctree_node_get_row_data ( ctree, child))), strlen ( type)) == 0 ) { n++; } */ disk_info = NULL; child = GTK_CTREE_ROW ( child)->sibling; } return n; } #endif gint gw_disk_get_total_folders ( GtkCTree *ctree, GtkCTreeNode *node) { GtkCTreeNode *child = NULL; int n = 0; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif child = GTK_CTREE_ROW( node)->children; while ( child != NULL ) { n++; n = n + gw_disk_get_total_folders ( ctree, child); child = GTK_CTREE_ROW ( child)->sibling; } return n; } #ifdef __DEPRECATED__ gint gw_disk_get_total_files ( GtkCTree *ctree, GtkCTreeNode *node) { GtkCTreeNode *child = NULL; int n = 0; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif /* Counts the folder's number of files. */ n = dir_data_get_num_file ( gtk_ctree_node_get_row_data ( ctree, node)); child = GTK_CTREE_ROW( node)->children; while ( child != NULL ) { /* Does the same thing for each subfolder. */ n = n + gw_disk_get_total_files ( ctree, child); child = GTK_CTREE_ROW ( child)->sibling; } return n; } #endif GtkCTreeNode * gw_folder_get_catalog ( GtkCTree *ctree, GtkCTreeNode *node) { GtkCTreeNode *parent = NULL; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif parent = GTK_CTREE_ROW ( node)->parent; while ( GTK_CTREE_ROW ( parent)->parent != NULL ) { parent = GTK_CTREE_ROW ( parent)->parent; } return parent; } GtkCTreeNode * gw_folder_get_disk ( GtkCTree *ctree, GtkCTreeNode *node) { GtkCTreeNode *parent = NULL; GtkCTreeNode *root = NULL; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif root = gw_gui_manager_main_interface_get_tree_root ( ); if ( GTK_CTREE_ROW ( node)->parent == root) { return node; } parent = GTK_CTREE_ROW ( node)->parent; while ( GTK_CTREE_ROW ( GTK_CTREE_ROW ( parent)->parent)->parent != NULL ) { parent = GTK_CTREE_ROW ( parent)->parent; } return parent; } gboolean gw_helper_db_catalog_is_open ( ) { gboolean result = FALSE; GWDBContext *context = gw_am_get_current_catalog_context ( ); if ( context != NULL) { result = TRUE; } else {} return result; } gboolean gw_helper_db_catalog_is_open_and_modified ( ) { gboolean result = FALSE; GWCatalogPlugin *plugin = NULL; GWDBContext *context = gw_am_get_current_catalog_context ( ); GWDBCatalog *catalog = NULL; if ( context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { catalog = plugin->gw_db_catalog_get_db_catalog ( context); gw_db_catalog_free ( catalog); } else {} } else {} return result; } gchar * gw_helper_db_catalog_get_usefull_name ( GWDBCatalog *catalog) { gchar *name = NULL; if ( catalog != NULL) { if ( gw_db_catalog_get_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_name ( catalog))>0) { name = gw_db_catalog_get_name ( catalog); } else { if ( gw_db_catalog_get_short_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_short_db_name ( catalog))>0) { name = gw_db_catalog_get_short_db_name ( catalog); } else {} } } else {} return name; } gchar * gw_helper_db_catalog_get_full_name ( GWDBCatalog *catalog) { gchar *name = NULL; if ( catalog != NULL) { if ( gw_db_catalog_get_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_db_name ( catalog))>0) { name = gw_db_catalog_get_db_name ( catalog); } else { if ( gw_db_catalog_get_short_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_short_db_name ( catalog))>0) { name = gw_db_catalog_get_short_db_name ( catalog); } else { if ( gw_db_catalog_get_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_name ( catalog))>0) { name = gw_db_catalog_get_name ( catalog); } else { } } } } else { } return name; } gboolean gw_helper_db_catalog_is_new ( GWDBCatalog *catalog) { gboolean is_new = FALSE; if ( catalog != NULL) { if ( gw_db_catalog_get_db_name ( catalog)==NULL && gw_db_catalog_get_short_db_name ( catalog)!=NULL && strlen ( gw_db_catalog_get_short_db_name ( catalog))>0) { is_new = TRUE; } else {} } else {} return is_new; } GdkPixmap * gw_helper_db_disk_get_pixmap ( GWDBDisk *disk) { GdkPixmap *pix = NULL; switch ( gw_db_disk_get_type ( disk)) { case CDROM : pix = PixCDRomDisk; break; case FLOPPY : pix = PixFloppyDisk; break; case HD : pix = PixHardDriveDisk; break; case ZIP_DRIVE : pix = PixZipDisk; break; default : pix = PixHardDriveDisk; break; } return pix; } GdkBitmap * gw_helper_db_disk_get_bitmap ( GWDBDisk *disk) { GdkBitmap *msk = NULL; switch ( gw_db_disk_get_type ( disk)) { case CDROM : msk = MskCDRomDisk; break; case FLOPPY : msk = MskFloppyDisk; break; case HD : msk = MskHardDriveDisk; break; case ZIP_DRIVE : msk = MskZipDisk; break; default : msk = MskHardDriveDisk; break; } return msk; } GWDBDiskType gw_helper_db_disk_get_db_type ( GWDBDisk *disk) { gchar *type = gw_db_disk_get_fstype ( disk); gchar *name = gw_db_disk_get_fsname ( disk); GWDBDiskType dt = NONE; if ( strcmp ( "iso9660", type) == 0) { dt = CDROM; } else if ( strcmp ( "cdfs", type) == 0) { dt = CDROM; } else if ( strcmp ( "smb", type) == 0) { dt = NETWORK_DRIVE; } else if ( strcmp ( "/dev/hd", name) == 0) { dt = HD; } else if ( strcmp ( "/dev/fd", name) == 0) { dt = FLOPPY; } else if ( strcmp ( "/dev/zip", name) == 0) { dt = ZIP_DRIVE; } else if ( strcmp ( "\\\\.\\A:\\", name) == 0) { dt = FLOPPY; } else if ( strcmp ( "\\\\.\\B:\\", name) == 0) { dt = FLOPPY; } else if ( strcmp ( "ntfs", type) == 0) { dt = HD; } else { } return dt; } gint gw_helper_db_catalog_get_nb_db_disk_of_type ( GWDBContext *context, GWDBDiskType type) { GWCatalogPlugin *plugin = NULL; GWDBDisk **disks = NULL; gint nb = -1, i = 0; if ( context != NULL ) { if ( (plugin = ((GWCatalogPlugin*)gw_db_context_get_plugin ( context))) != NULL ) { nb = 0; if ( (disks = plugin->gw_db_catalog_get_db_disks ( context)) != NULL ) { for ( i = 0; disks[i]!=NULL; i++) { if ( gw_db_disk_get_type ( disks[i]) == type ) { nb++; } gw_db_disk_free ( disks[i]); disks[i] = NULL; } g_free ( disks); } } } return nb; } gboolean gw_helper_db_disk_num_is_exist ( GWDBContext *context, gint num) { GWCatalogPlugin *plugin = NULL; gboolean exist = FALSE; GWDBDisk **disks = NULL; gint i = 0; if ( context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL) { if ( (disks = plugin->gw_db_catalog_get_db_disks ( context)) != NULL) { for ( i = 0; disks[i] != NULL; i++) { if ( !exist && gw_db_disk_get_num (disks[i]) == num) { exist = TRUE; } gw_db_disk_free ( disks[i]); } g_free ( disks); } } } return exist; } gint gw_helper_db_disk_get_max_num ( GWDBContext *context) { GWCatalogPlugin *plugin = NULL; gint max = 0; GWDBDisk **disks = NULL; gint i = 0; if ( context != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL) { if ( (disks = plugin->gw_db_catalog_get_db_disks ( context)) != NULL) { for ( i = 0; disks[i] != NULL; i++) { if ( gw_db_disk_get_num (disks[i]) > max) { max = gw_db_disk_get_num (disks[i]); } gw_db_disk_free ( disks[i]); } g_free ( disks); } } } return max; } gint gw_helper_db_disk_get_num_archive ( GWDBContext *context, gchar *num) { gint num_archive = 0; if ( context != NULL && num != NULL) { if ( strlen ( num) == 0 ) { /* If number archive no filled. */ num_archive = gw_helper_db_disk_get_max_num ( context) + 1; } else if ( gw_helper_db_disk_num_is_exist ( context, strtol ( num, NULL, 10)) ) { /* If the filled archive number exists. */ num_archive = gw_helper_db_disk_get_max_num ( context) + 1; } else { /* If the filled archive number is valid. */ num_archive = strtol ( num, NULL, 10); } } return num_archive; } gboolean gw_helper_db_disk_name_is_exist ( GWDBContext *context, gchar *name) { GWCatalogPlugin *plugin = NULL; gboolean exist = FALSE; GWDBDisk **disks = NULL; gint i = 0; if ( context != NULL && name != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL) { if ( (disks = plugin->gw_db_catalog_get_db_disks ( context)) != NULL) { for ( i = 0; disks[i] != NULL; i++) { if ( !exist && strcmp ( name, gw_db_disk_get_name (disks[i])) == 0) { exist = TRUE; } gw_db_disk_free ( disks[i]); } g_free ( disks); } } } return exist; } gchar * gw_helper_db_disk_get_name ( GWDBContext *context, gchar *name) { gchar *tmp_name = NULL; gint i = 2; #ifdef GW_DEBUG_MODE gw_am_log_msg ( 0, __FILE__, __LINE__, __PRETTY_FUNCTION__, NULL); #endif if ( context != NULL && name != NULL ) { tmp_name = g_strdup ( name); while ( gw_helper_db_disk_name_is_exist ( context, tmp_name) ) { g_free ( tmp_name); tmp_name = g_strdup_printf ( "%s (%d)", name, i++); } } return tmp_name; } gboolean gw_helper_db_file_name_is_exist ( GWDBContext *context, GWDBFilePK file, gchar *name) { GWCatalogPlugin *plugin = NULL; gboolean exist = FALSE; GWDBFile *parent = NULL, *found = NULL; GWDBDisk *disk = NULL; if ( context != NULL && name != NULL) { if ( (plugin = (GWCatalogPlugin*)gw_db_context_get_plugin ( context)) != NULL ) { if ( (parent = plugin->gw_db_file_get_parent_db_file ( context, file)) != NULL ) { if ( (found = plugin->gw_db_file_get_db_file_by_name ( context, gw_db_file_get_ref ( parent), name)) != NULL) { exist = TRUE; gw_db_file_free ( found); } gw_db_file_free ( parent); } else if ( (disk = plugin->gw_db_file_get_db_disk ( context, file)) != NULL ) { if ( (found = plugin->gw_db_disk_get_db_file_by_name ( context, gw_db_disk_get_ref ( disk), name)) != NULL) { exist = TRUE; gw_db_file_free ( found); } gw_db_disk_free ( disk); } } } return exist; } guint64 gw_helper_plugin_db_catalog_get_capacity ( GWDBContext *context) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); GWDBDisk **disks = NULL; guint64 capacity = 0; gint i = 0; if ( context != NULL && plugin != NULL) { if ( (disks = plugin->gw_db_catalog_get_db_disks ( context)) != NULL) { for ( i = 0; disks[i] != NULL; i++ ) { capacity += gw_db_disk_get_capacity ( disks[i]); gw_db_disk_free ( disks[i]); } g_free ( disks); } } return capacity; } guint64 gw_helper_plugin_db_catalog_get_full ( GWDBContext *context) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); GWDBDisk **disks = NULL; guint64 full = 0; gint i = 0; if ( context != NULL && plugin != NULL) { if ( (disks = plugin->gw_db_catalog_get_db_disks ( context)) != NULL) { for ( i = 0; disks[i] != NULL; i++ ) { full += gw_db_disk_get_full ( disks[i]); gw_db_disk_free ( disks[i]); } g_free ( disks); } } return full; } guint64 gw_helper_plugin_db_catalog_get_free ( GWDBContext *context) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); GWDBDisk **disks = NULL; guint64 free = 0; gint i = 0; if ( context != NULL && plugin != NULL) { if ( (disks = plugin->gw_db_catalog_get_db_disks ( context)) != NULL) { for ( i = 0; disks[i] != NULL; i++ ) { free += gw_db_disk_get_full ( disks[i]); gw_db_disk_free ( disks[i]); } g_free ( disks); } } return free; } GWDBCategory * gw_helper_plugin_db_catalog_get_db_category_by_index ( GWDBContext *context, gint index) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); GWDBCategory **categories = NULL; GWDBCategory *category = NULL; gint i = 0; if ( context != NULL && plugin != NULL) { if ( (categories = plugin->gw_db_catalog_get_db_categories ( context)) != NULL) { for ( i = 0; categories[i] != NULL; i++ ) { if ( category == NULL && gw_db_category_get_index ( categories[i]) == index ) { category = categories[i]; } else { gw_db_category_free ( categories[i]); } } g_free ( categories); } } return category; } GWDBCategory * gw_helper_plugin_db_catalog_get_db_category_by_name ( GWDBContext *context, gchar *name) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); GWDBCategory **categories = NULL; GWDBCategory *category = NULL; gint i = 0; if ( context != NULL && plugin != NULL && name != NULL) { if ( (categories = plugin->gw_db_catalog_get_db_categories ( context)) != NULL) { for ( i = 0; categories[i] != NULL; i++ ) { if ( category == NULL && strcmp ( name, gw_db_category_get_name ( categories[i])) == 0 ) { category = categories[i]; } else { gw_db_category_free ( categories[i]); } } g_free ( categories); } } return category; } GWDBDisk * gw_helper_plugin_db_catalog_get_db_disk_by_name ( GWDBContext *context, gchar *name) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); GWDBDisk **disks = NULL; GWDBDisk *disk = NULL; gint i = 0; if ( context != NULL && plugin != NULL && name != NULL) { if ( (disks = plugin->gw_db_catalog_get_db_disks ( context)) != NULL) { for ( i = 0; disks[i] != NULL; i++ ) { if ( disk == NULL && strcmp ( name, gw_db_disk_get_name ( disks[i])) == 0 ) { disk = disks[i]; } else { gw_db_disk_free ( disks[i]); } } g_free ( disks); } } return disk; } GWDBFile * gw_helper_plugin_db_disk_get_db_file_by_name ( GWDBContext *context, GWDBDiskPK ref, gchar *name) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); GWDBFile **files = NULL; GWDBFile *file = NULL; gint i = 0; if ( context != NULL && plugin != NULL && name != NULL) { if ( (files = plugin->gw_db_disk_get_db_files ( context, ref)) != NULL) { for ( i = 0; files[i] != NULL; i++ ) { if ( file == NULL && strcmp ( name, gw_db_file_get_name ( files[i])) == 0 ) { file = files[i]; } else { gw_db_file_free ( files[i]); } } g_free ( files); } } return file; } GWDBFile * gw_helper_plugin_db_file_get_db_file_by_name ( GWDBContext *context, GWDBFilePK ref, gchar *name) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); GWDBFile **files = NULL; GWDBFile *file = NULL; gint i = 0; if ( context != NULL && plugin != NULL && name != NULL) { if ( (files = plugin->gw_db_file_get_db_files ( context, ref)) != NULL) { for ( i = 0; files[i] != NULL; i++ ) { if ( file == NULL && strcmp ( name, gw_db_file_get_name ( files[i])) == 0 ) { file = files[i]; } else { gw_db_file_free ( files[i]); } } g_free ( files); } } return file; } gchar * gw_helper_plugin_db_file_get_location ( GWDBContext *context, GWDBFilePK ref) { GWCatalogPlugin *plugin = gw_db_context_get_plugin ( context); gchar *location = NULL, *tmp = NULL; GWDBFile *parent = NULL; GWDBFilePK current = ref; if ( context != NULL && plugin != NULL) { location = g_strdup ( "/"); while ( (parent = plugin->gw_db_file_get_parent_db_file ( context, current)) != NULL ) { tmp = g_strconcat ( "/", gw_db_file_get_name ( parent), location, NULL); g_free ( location); location = tmp; current = gw_db_file_get_ref ( parent); gw_db_file_free ( parent); } } return location; } gchar * gw_helper_db_file_get_cdate_to_str ( GWDBFile *file) { return gw_time_to_str_df ( gw_db_file_get_cdate ( file)); } gchar * gw_helper_db_file_get_adate_to_str ( GWDBFile *file) { return gw_time_to_str_df ( gw_db_file_get_adate ( file)); } gchar * gw_helper_db_file_get_mdate_to_str ( GWDBFile *file) { return gw_time_to_str_df ( gw_db_file_get_mdate ( file)); } gchar * gw_helper_db_disk_get_date_to_str ( GWDBDisk *disk) { return gw_time_to_str_df ( gw_db_disk_get_date ( disk)); } gchar * gw_helper_search_item_info_date_to_str ( struct search_item_info *si) { return gw_time_to_str_df ( search_item_info_get_date ( si)); } gwhere-0.2.3/stamp-h.in0000644000175000017500000000001210506327554013340 0ustar bartbarttimestamp gwhere-0.2.3/TODO0000644000175000017500000000401710247171632012134 0ustar bartbartFor next versions : - In explorer, sort disk in tree as in the right-pane. This feature must be optional. - Colomn switching in explorer or search result. - Edit disk serial number and disque in order to prevent autodetection failure. - Multi-selection in the explorer right-pane and mass category editing on this selection. - Multi-catalog opening with drag-and-drop to move disk between catalogs. - Multi-threading - Put a retry on open(".") for scratched CD-ROMs. - Allow to choose a combo box or a button list displaying for device list. - Add a filter for available devices. - Add a refresh button for device information. - Add keybord sortcuts for adding a device (+c for c:\, +D+1 for /dev/hda1, ...). - Add keybord sortcuts for explorer navigation. - Add a option to do not display the ending adding status or more to show the status with a timeout (2 seconds for example). - Sort the "Name" column as number if there is only number names. - Real-time scanning status (number of directories, files, descriptions, ...). - Add "AND" and "OR" special word of the key words search. - Add a search from last search result. - Add a option to display search result item in real-time or at the end of the search. - An option for catalog autobackup (no backup, backup on open, backup on save). - An option to activate/desactivate configuration file autobackup. - A button to set default settings. - A settings panel for plugin (to list plugins, to display information, to activate/desactivate, to set parameters, ...). - Support new file format (MF) for multi document opened with organization by categories. - Export catalog to catalog by categories. - Add disks from any path. - Advanced search. - Print to printer. - Translate in others languages. - Add any plugin description. - Function "What is?" inder to say to user what do the fonctions. - Reading of archives file (tar, tgz, gz, zip, bz2,...) - Implementation of a search engined. Conception of a mini langage (GWSQL) in order to do request on catalog. - Recursive cancel. - Lot of things... gwhere-0.2.3/win32/0000755000175000017500000000000010506575515012412 5ustar bartbartgwhere-0.2.3/win32/gwhere.ico0000444000175000017500000004313610023202521014346 0ustar bartbarthV ¨ ¾ ¨ f ¨ 00¨¶)( ÿÿÿÿÿÿÿÿÿÿÿÿëëá³³••bŠŠPŠŠOX££uØØÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ££xyy6ºº™ÛÛÊóóíûûúççÜÊʱŒŒTBóóîÿÿÿýýýÿÿÿÿÿÿ††KŸŸmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊʲoo)ããÕÿÿÿÿÿÿ””_µµ‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõðww3ÿÿÿããÖ––bÿÿÿÿÿÿÿÿÿððçììâííäííäííäííäííäííäøøôÆÆ©­­ƒ««ëëãÿÿÿýýýÿÿÿ°¡e‹€6…=„<‹‚=œ‰<’…=‘…<˜‡=F›ŽJ––aÿÿÿÿÿÿÿÿÿÿÿÿ*°ÿ‘ÜÿÚÿtÐÿ¶êÿ¤ÿWÄÿƒÖÿ2µÿA¼ÿPÀÿ¬¬ƒÿÿÿÿÿÿýýýÿÿÿ›ý ¦ÿkÃý4­ÿ4­ý!¦ÿÏëý†ÿV»ýGµÿ°ßþ©©ÿÿÿÿÿÿÿÿÿÿÿÿ:¯ÿÿzÉÿbÀÿ‰Ïÿ"¥ÿøüÿlÄÿ}Ëÿ2­ÿçõÿ’’\ÿÿÿÿÿÿÿÿýÞñÿ©Ýý^¾ÿ†ÍýÑÿ»äý;°ÿ)¨ý+©ÿ0«ýiÃÿ!©ÿ¬¬ƒëëáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöäÅå娔”aÿÿÿýýþÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÔÔ¿ŸŸrÿÿÿ””`´´Žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòòëss-ÿÿÿÿÿÿÿÿÿ††K¢¢uÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏϹrr*ãã×ÿÿÿÿÿÿÿÿÿÿÿÿ¦¦yww4¹¹•ÚÚÇòòíûûùää×ÈȬ‹‹QBííåÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿîîæ³³Ž˜˜eˆˆOŠŠP[¤¤wÙÙÅÿÿÿÿÿÿÿÿÿýýý( @ ÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýþÿÿÿÿÿÿùù÷ÇǬ¯¯†©©~——b——e™™f™™f––b¬¬ƒ¸¸”ÐиÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÖÖÞžlˆˆOY““]‘‘ZYUŒŒRW‘‘ZX’’\XŠŠN©©€ääØÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ££w‹‹P““]TUœœkµµ‘ÍͳÚÚÉööñÒÒ»ÇǬ··“––bŠŠNX‘‘\‡‡K¹¹–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýýýýýýýýýýþþþÿÿÿççÛ‰‰Q‘‘[ŒŒTššiààÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍͳŒŒTYXššiÿÿÿÿÿÿýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÖÖÄ„„H””^‰‰PØØÆÿÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿ¹¹•‡‡M””^ˆˆNííæÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ××Ã……I‘‘Y——dÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääÖˆˆM‘‘\‡‡Lÿÿÿÿÿÿýýýÿÿÿÿÿÿññ놆JUªªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ˜˜f‘‘Z‘‘Zÿÿÿÿÿÿþþþÿÿÿ““_‹‹R²²ÿÿÿþþÿþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýÿÿÿÿÿÿY‹‹T¼¼šÿÿÿÿÿÿÑÑ»ŠŠO››jÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿU„„Iøøôÿÿÿ””`††JüüûÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿææÜÆÆ©ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÓÓ½¬¬„‘‘Z¶¶“ôôð……Hªª‚ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÌ̲††JYX‘YŽŽX‘YXYXY‘X‘‘YX‘YXYXY—–a™™e•”_Ë˲„„GééßÿÿÿýýýýýýýýýþþþýýýÿÿÿÓͯŸE•S “S¦—SŒS¢•S”SŒ‹S£•S£–Sª˜S«—S¤–S§—SSŸ“S¥—S’S©˜S«—S¥–R¦¦y’’^ÿÿÿþþþÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿçùÿ€ÿÿÿÿcÇÿ¡ÿÿÿÿ˜ÿÒóÿÿÿÿšÿ~ÓÿŒÿ‹ÿ ­ÿ”ÿÿÿÿÚÿÿÞøÿ‰ÿ‹ÿ¥ÿY»»™ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿŽÑÿƒþÄçÿ.«ÿƒÿÿÿþ—ÿÏëÿÿÿÿžþÿ_¿ÿ²àÿØïþÿüüÿÿ›×þ(©ÿL¶ÿ³áÿ»ãþXÏϸÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ]½ÿ†ý¤Úÿ˜ÿˆÿÿÿýšÿÜðÿÿÿÿ ý‰ÿøûÿÿÿÿÿÿý’ÿ ŸÿŸÿÿÿý žÿàòÿÿÿÿÿÿýUÞÞÏÿÿÿþþþýýýýýýýýýþþþýýýÿÿý¢ý$¦þC²ý’ý›ý×îþ&¨ý‚ý€ý”þ•ýšý–ýF´þŸý‰ý‰ýŸþE´ý–ý—ý0¬þW××ÄÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿŠÿ—Öý‹ÿŸÿeÁÿ—Õý¢ÿ‘Òÿ×îÿ ý‘ÿSºÿfÁÿžØý‘ÿµáÿÐëÿ‹ý£ÿJ¶ÿgÁÿ‚ÍýYÌ̲ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ{ÿÿÿý‡ÿD³ÿ˜ÖÿY»ý¡ÿ×îÿÿÿÿŸýˆÿöúÿÿÿÿÿÿý…ÿÿÿÿÿÿÿý›ÿâóÿÿÿÿÿÿý‘‘Yµµ’ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÁæÿ„ÿÿÿý|ÿ\¾ÿÀåÿ›ý ÿÈçÿÿÿÿ•ý›ÿÿ’ÿ œý˜ÿ’ÿ“ÿˆýP¸ÿ‹ÿ“ÿ’ý§§}‰‰OÿÿÿþþÿýýýýýýýýýþþþÿÿýÌêý„ÍýÿÿþˆÎýÙïýøüýsÆþ‹ÐýåôýÿÿýxÈþëöýmÄýtÆýÌþ‰ÏýtÆýnÃý¸ãþÿÿýjÂýuÆýuÇþÍͳ……HèèÜÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿõõñ……H©©}ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ­­ƒ°°‰ÿÿÿ––c††IùùöÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿË˱……I²²ŒÿÿÿÓÓ¾ˆˆN™™fÿÿÿþþÿýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýÿÿÿÿÿþ††L……Hÿÿÿÿÿÿÿÿÿ——b‹‹T±±‰ÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿXT¿¿ ÿÿÿÿÿÿÿÿÿôôð„„FŽŽV§§{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ——c‘‘YZÿÿÿþþÿÿÿÿÿÿÿÿÿÿ××Å……I‘‘ZššfÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïçT‘‘\ˆˆOÿÿÿÿÿÿýýýýýýýýýýýýÿÿÿÖÖÂ……H‘‘\VØØÅÿÿÿÿÿÿÿÿÿýýýýýýýýýþþþýýýýýýýýýþþþýýþÿÿÿÿÿÿÿÿÿ¾¾ž‡‡M““^„„GòòëÿÿÿýýýþþþÿÿÿÿÿÿÿÿÿýýýÿÿÿêêኊPZŒŒS——dÜÜÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÇÇ¬ŠŠQ‘‘ZX‘‘[ûûøÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ¨¨}ŠŠO’’\ŽŽUŒŒTl®®†ÎζÕÕÁõõïÑѺÃÃ¥±±Š’’\‰‰PY‘‘\‡‡L··”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÛÛÉ¢¢t‰‰NY’’\‘‘ZYVŒŒSX‘‘[Y““]W‹‹Q¯¯†èèÝÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýýýýýýýýýýþþþýýýýýýýýýþþþÿÿÿÿÿÿøøõË˲±±‹­­„••a˜˜e——e——e––b±±‰µµ‘ÕÕ¿ÿÿÿÿÿÿÿÿÿþþþýýýþþþýýýýýýýýýþþþ( @ ÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýþÿÿÿÿÿÿùù÷ÇǬ¯¯†©©~——b——e™™f™™f––b¬¬ƒ¸¸”ÐиÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÖÖÞžlˆˆOY““]‘‘ZYUŒŒRW‘‘ZX’’\XŠŠN©©€ääØÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ££w‹‹P““]TUœœkµµ‘ÍͳÚÚÉööñÒÒ»ÇǬ··“––bŠŠNX‘‘\‡‡K¹¹–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýýýýýýýýýýþþþÿÿÿççÛ‰‰Q‘‘[ŒŒTššiààÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍͳŒŒTYXššiÿÿÿÿÿÿýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÖÖÄ„„H””^‰‰PØØÆÿÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿ¹¹•‡‡M””^ˆˆNííæÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ××Ã……I‘‘Y——dÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääÖˆˆM‘‘\‡‡Lÿÿÿÿÿÿýýýÿÿÿÿÿÿññ놆JUªªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ˜˜f‘‘Z‘‘Zÿÿÿÿÿÿþþþÿÿÿ““_‹‹R²²ÿÿÿþþÿþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýÿÿÿÿÿÿY‹‹T¼¼šÿÿÿÿÿÿÑÑ»ŠŠO››jÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿU„„Iøøôÿÿÿ””`††JüüûÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿææÜÆÆ©ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÓÓ½¬¬„‘‘Z¶¶“ôôð……Hªª‚ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÌ̲††JYX‘YŽŽX‘YXYXY‘X‘‘YX‘YXYXY—–a™™e•”_Ë˲„„GééßÿÿÿýýýýýýýýýþþþýýýÿÿÿÓͯŸE•S “S¦—SŒS¢•S”SŒ‹S£•S£–Sª˜S«—S¤–S§—SSŸ“S¥—S’S©˜S«—S¥–R¦¦y’’^ÿÿÿþþþÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿçùÿ€ÿÿÿÿcÇÿ¡ÿÿÿÿ˜ÿÒóÿÿÿÿšÿ~ÓÿŒÿ‹ÿ ­ÿ”ÿÿÿÿÚÿÿÞøÿ‰ÿ‹ÿ¥ÿY»»™ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿŽÑÿƒþÄçÿ.«ÿƒÿÿÿþ—ÿÏëÿÿÿÿžþÿ_¿ÿ²àÿØïþÿüüÿÿ›×þ(©ÿL¶ÿ³áÿ»ãþXÏϸÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ]½ÿ†ý¤Úÿ˜ÿˆÿÿÿýšÿÜðÿÿÿÿ ý‰ÿøûÿÿÿÿÿÿý’ÿ ŸÿŸÿÿÿý žÿàòÿÿÿÿÿÿýUÞÞÏÿÿÿþþþýýýýýýýýýþþþýýýÿÿý¢ý$¦þC²ý’ý›ý×îþ&¨ý‚ý€ý”þ•ýšý–ýF´þŸý‰ý‰ýŸþE´ý–ý—ý0¬þW××ÄÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿŠÿ—Öý‹ÿŸÿeÁÿ—Õý¢ÿ‘Òÿ×îÿ ý‘ÿSºÿfÁÿžØý‘ÿµáÿÐëÿ‹ý£ÿJ¶ÿgÁÿ‚ÍýYÌ̲ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ{ÿÿÿý‡ÿD³ÿ˜ÖÿY»ý¡ÿ×îÿÿÿÿŸýˆÿöúÿÿÿÿÿÿý…ÿÿÿÿÿÿÿý›ÿâóÿÿÿÿÿÿý‘‘Yµµ’ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÁæÿ„ÿÿÿý|ÿ\¾ÿÀåÿ›ý ÿÈçÿÿÿÿ•ý›ÿÿ’ÿ œý˜ÿ’ÿ“ÿˆýP¸ÿ‹ÿ“ÿ’ý§§}‰‰OÿÿÿþþÿýýýýýýýýýþþþÿÿýÌêý„ÍýÿÿþˆÎýÙïýøüýsÆþ‹ÐýåôýÿÿýxÈþëöýmÄýtÆýÌþ‰ÏýtÆýnÃý¸ãþÿÿýjÂýuÆýuÇþÍͳ……HèèÜÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿõõñ……H©©}ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ­­ƒ°°‰ÿÿÿ––c††IùùöÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿË˱……I²²ŒÿÿÿÓÓ¾ˆˆN™™fÿÿÿþþÿýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýÿÿÿÿÿþ††L……Hÿÿÿÿÿÿÿÿÿ——b‹‹T±±‰ÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿXT¿¿ ÿÿÿÿÿÿÿÿÿôôð„„FŽŽV§§{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ——c‘‘YZÿÿÿþþÿÿÿÿÿÿÿÿÿÿ××Å……I‘‘ZššfÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïçT‘‘\ˆˆOÿÿÿÿÿÿýýýýýýýýýýýýÿÿÿÖÖÂ……H‘‘\VØØÅÿÿÿÿÿÿÿÿÿýýýýýýýýýþþþýýýýýýýýýþþþýýþÿÿÿÿÿÿÿÿÿ¾¾ž‡‡M““^„„GòòëÿÿÿýýýþþþÿÿÿÿÿÿÿÿÿýýýÿÿÿêêኊPZŒŒS——dÜÜÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÇÇ¬ŠŠQ‘‘ZX‘‘[ûûøÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ¨¨}ŠŠO’’\ŽŽUŒŒTl®®†ÎζÕÕÁõõïÑѺÃÃ¥±±Š’’\‰‰PY‘‘\‡‡L··”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÛÛÉ¢¢t‰‰NY’’\‘‘ZYVŒŒSX‘‘[Y““]W‹‹Q¯¯†èèÝÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýýýýýýýýýýþþþýýýýýýýýýþþþÿÿÿÿÿÿøøõË˲±±‹­­„••a˜˜e——e——e––b±±‰µµ‘ÕÕ¿ÿÿÿÿÿÿÿÿÿþþþýýýþþþýýýýýýýýýþþþ( @ ÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýþÿÿÿÿÿÿùù÷ÇǬ¯¯†©©~——b——e™™f™™f––b¬¬ƒ¸¸”ÐиÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÖÖÞžlˆˆOY““]‘‘ZYUŒŒRW‘‘ZX’’\XŠŠN©©€ääØÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ££w‹‹P““]TUœœkµµ‘ÍͳÚÚÉööñÒÒ»ÇǬ··“––bŠŠNX‘‘\‡‡K¹¹–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýýýýýýýýýýþþþÿÿÿççÛ‰‰Q‘‘[ŒŒTššiààÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍͳŒŒTYXššiÿÿÿÿÿÿýýýýýýþþþÿÿÿÿÿÿÿÿÿÿÿÿÖÖÄ„„H””^‰‰PØØÆÿÿÿÿÿÿþþÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿ¹¹•‡‡M””^ˆˆNííæÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ××Ã……I‘‘Y——dÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿääÖˆˆM‘‘\‡‡Lÿÿÿÿÿÿýýýÿÿÿÿÿÿññ놆JUªªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ˜˜f‘‘Z‘‘Zÿÿÿÿÿÿþþþÿÿÿ““_‹‹R²²ÿÿÿþþÿþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýÿÿÿÿÿÿY‹‹T¼¼šÿÿÿÿÿÿÑÑ»ŠŠO››jÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿU„„Iøøôÿÿÿ””`††JüüûÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿææÜÆÆ©ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÊʰÊʰÊʰË˰ÓÓ½¬¬„‘‘Z¶¶“ôôð……Hªª‚ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÌ̲††JYX‘YŽŽX‘YXYXY‘X‘‘YX‘YXYXY—–a™™e•”_Ë˲„„GééßÿÿÿýýýýýýýýýþþþýýýÿÿÿÓͯŸE•S “S¦—SŒS¢•S”SŒ‹S£•S£–Sª˜S«—S¤–S§—SSŸ“S¥—S’S©˜S«—S¥–R¦¦y’’^ÿÿÿþþþÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿçùÿ€ÿÿÿÿcÇÿ¡ÿÿÿÿ˜ÿÒóÿÿÿÿšÿ~ÓÿŒÿ‹ÿ ­ÿ”ÿÿÿÿÚÿÿÞøÿ‰ÿ‹ÿ¥ÿY»»™ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿŽÑÿƒþÄçÿ.«ÿƒÿÿÿþ—ÿÏëÿÿÿÿžþÿ_¿ÿ²àÿØïþÿüüÿÿ›×þ(©ÿL¶ÿ³áÿ»ãþXÏϸÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ]½ÿ†ý¤Úÿ˜ÿˆÿÿÿýšÿÜðÿÿÿÿ ý‰ÿøûÿÿÿÿÿÿý’ÿ ŸÿŸÿÿÿý žÿàòÿÿÿÿÿÿýUÞÞÏÿÿÿþþþýýýýýýýýýþþþýýýÿÿý¢ý$¦þC²ý’ý›ý×îþ&¨ý‚ý€ý”þ•ýšý–ýF´þŸý‰ý‰ýŸþE´ý–ý—ý0¬þW××ÄÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿŠÿ—Öý‹ÿŸÿeÁÿ—Õý¢ÿ‘Òÿ×îÿ ý‘ÿSºÿfÁÿžØý‘ÿµáÿÐëÿ‹ý£ÿJ¶ÿgÁÿ‚ÍýYÌ̲ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ{ÿÿÿý‡ÿD³ÿ˜ÖÿY»ý¡ÿ×îÿÿÿÿŸýˆÿöúÿÿÿÿÿÿý…ÿÿÿÿÿÿÿý›ÿâóÿÿÿÿÿÿý‘‘Yµµ’ÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÁæÿ„ÿÿÿý|ÿ\¾ÿÀåÿ›ý ÿÈçÿÿÿÿ•ý›ÿÿ’ÿ œý˜ÿ’ÿ“ÿˆýP¸ÿ‹ÿ“ÿ’ý§§}‰‰OÿÿÿþþÿýýýýýýýýýþþþÿÿýÌêý„ÍýÿÿþˆÎýÙïýøüýsÆþ‹ÐýåôýÿÿýxÈþëöýmÄýtÆýÌþ‰ÏýtÆýnÃý¸ãþÿÿýjÂýuÆýuÇþÍͳ……HèèÜÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿõõñ……H©©}ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ­­ƒ°°‰ÿÿÿ––c††IùùöÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿË˱……I²²ŒÿÿÿÓÓ¾ˆˆN™™fÿÿÿþþÿýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýþþþýýýýýýýýýÿÿÿÿÿþ††L……Hÿÿÿÿÿÿÿÿÿ——b‹‹T±±‰ÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿXT¿¿ ÿÿÿÿÿÿÿÿÿôôð„„FŽŽV§§{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ——c‘‘YZÿÿÿþþÿÿÿÿÿÿÿÿÿÿ××Å……I‘‘ZššfÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïçT‘‘\ˆˆOÿÿÿÿÿÿýýýýýýýýýýýýÿÿÿÖÖÂ……H‘‘\VØØÅÿÿÿÿÿÿÿÿÿýýýýýýýýýþþþýýýýýýýýýþþþýýþÿÿÿÿÿÿÿÿÿ¾¾ž‡‡M““^„„GòòëÿÿÿýýýþþþÿÿÿÿÿÿÿÿÿýýýÿÿÿêêኊPZŒŒS——dÜÜÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÇÇ¬ŠŠQ‘‘ZX‘‘[ûûøÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿ¨¨}ŠŠO’’\ŽŽUŒŒTl®®†ÎζÕÕÁõõïÑѺÃÃ¥±±Š’’\‰‰PY‘‘\‡‡L··”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÛÛÉ¢¢t‰‰NY’’\‘‘ZYVŒŒSX‘‘[Y““]W‹‹Q¯¯†èèÝÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿýýýýýýýýýýýýþþþýýýýýýýýýþþþÿÿÿÿÿÿøøõË˲±±‹­­„••a˜˜e——e——e––b±±‰µµ‘ÕÕ¿ÿÿÿÿÿÿÿÿÿþþþýýýþþþýýýýýýýýýþþþ(0`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùù÷ÞÞξ¾ž¶¶‘¯¯‰––a™™f™™f™™f™™f™™f——c¥¥y··”¼¼›ÞÞÏ÷÷ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿþþþÿÿÿÿÿÿççÛ±±Œ‰‰NV““]““_––a——e™™f——e™™f——e™™f——e——c““_““^VˆˆM®®ˆää×ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÄ¥••`‹‹Q““^˜˜e™™f™™f˜˜e˜˜d••`““]‘‘ZT‘‘Z““]””^˜˜d˜˜e™™f™™f˜˜e””^ŒŒS‹‹Pµµ’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿùùö¡¡tT••b™™f——d••`ŽŽXTX‹‹R¨¨}µµÅÅ©ééàÇǬ³³³³Ž‰‰PŽŽYŒŒSŽŽW••`——d™™f––d‘‘ZZòòìÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÖ‡‡J””_™™f˜˜e’’\ŠŠO§§|ÑÑ»ÝÝÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿããÕÒÒ¼ªª~‰‰O’’[˜˜e™™f——b††JÑѺÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿ±±Š‰‰P˜˜e——e””_ˆˆM¹¹–üüýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿ¼¼š‡‡N””_——e˜˜eŠŠQ¬¬„ÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™hX™™f˜˜eŒŒR¢¢tûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþ¥¥y‹‹Q˜˜e™™f‘‘Z””^õõòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿœœl[™™f••b‡‡LÏϸÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÒÒ¾ˆˆM””a™™f““_ŒŒTÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ››i’’[™™f““]ŽŽVððêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôî‘‘Z’’[™™f””_——cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿ¯¯‡ŽŽX™™fŽŽYŸŸpÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿ©©U™™fYªªÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿààшˆM™™fX®®…ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼¼›T™™fŠŠOÚÚÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒŒU——d[¡¡rÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿ¥¥zZ˜˜dŠŠRÿÿÿÿÿÿÿÿÿÿÿÿÁÁ¢Y––b––aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜˜f••a““]««ÿÿÿÿÿÿÿÿÿŒŒR––c‡‡MññéÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV——d††KüüýÿÿÿÓÓ¾ŽŽV’’\»»˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõïn¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨}¨¨~¨¨~¯¯‡™™g˜˜e””^··“ÿÿÿ¡¡t••`ˆˆOùùöÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿóóK““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_••`““_˜˜e——e™™f””_ÿÿÿŠŠO””^ªªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóï‹‹Pš™e˜˜e˜˜e™˜eš™e˜˜e˜˜e™˜eš™e˜˜e˜˜e˜˜eš™e™˜e™™eš™eš™eš™e™™eš™e™™e˜˜e˜˜eš™eš™e˜˜e™˜eš™eš™eš™e™˜eÛÛÊVSÜÜËÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿòòë—ŠB¥˜V—’UŽV¦˜U¦—V—’UŽVŸ•U¢–VUŽŽV”‘U¥–V›“U©˜V§™U¨—V§™U •V£–Už•VŽU•‘V¥—U¤—V“U§˜V§˜U¨—V§™U –Vµµ‘““]’’\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-¯ÿˆÿíþÿÿÿÿ¥ÿ‘ÿñÿÿÿÿÿ.°ÿ–ÿÿÿÿÿÿÿÙõÿƒÿÍðÿ§ÿ–ÿ˜ÿ“ÿZÁÿ¢ÿ5³ÿÿÿÿÿÿÿÿÿÿÿÿ¦ÿ–ÿ˜ÿ”ÿ@¸ÿŸŸpYÁÁ¢ÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿýŠÿŽþ‡ÏÿÿÿþŠÿŒþ“Óÿÿÿþ3®ÿ”þÿÿÿÿÿþ×ïÿ‡þ0¬ÿ‘þÿŒþ‡ÿM¶þ¡ÿ<±þÿÿÿ,ªþÿQ¸þ¦ÛÿŠþŽÿŒþ‡ÿ2­þ——dWÖÖÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåôÿ‹ÿ“ÿW»ÿÿÿÿŠÿ’ÿfÁÿÿÿÿ4­ÿ”ÿÿÿÿÿÿÿÖîÿŒÿ•ÿÿøûÿÿÿÿÿÿÿÿÿÿ–ÿP¸ÿÌêÿˆÿ‰ÿÿÿÿP¸ÿ‡ÿèõÿÿÿÿÿÿÿÿÿÿ™™fŠŠQööñÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿ¥ÚýŽÿ‘ýIµÿÅçýŽÿ’ý1¬ÿÿÿý4®ÿ•ýÿÿÿÿÿýéöÿŠý—ÿ—ýÿÿÿÿÿýÿÿÿÿÿý—ÿB³ý–ÿý³àÿÿÿýP¸ÿ‹ýÿÿÿÿÿýÿÿÿÿÿý™™fŠŠPóóíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrÆÿÿšÿšÿ×ÿÿ“ÿÿÿÿÿ8¯ÿ’ÿ{ÊÿoÆÿZ½ÿ“ÿ—ÿ–ÿûýÿÜñÿÚðÿÿÿÿ ÿ“ÿ—ÿ•ÿyÊÿíøÿ]½ÿÿøúÿÜòÿÛðÿèôÿ˜˜eXÿÿÿþþþÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿ@²ý‘ÿiÂý“ÿS¹ý“ÿ[¼ý‰ÿÿÿý;±ÿý‰ÿ‡ýÿ—ý™ÿ–ý‰ÿ‡ý„ÿGµý!¦ÿ’ýÿŽýŒÿ”ýqÇÿý‰ÿ‡ý…ÿ,ªý˜˜eŒŒSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ›ÿŸ×ÿÿ“ÿšÿ«Üÿ‚ÿÿÿÿ>²ÿ“ÿ”Óÿ†ÎÿmÄÿ’ÿ˜ÿ–ÿ¡ÿŸÿšÿqÅÿ¡ÿ£ÿÑÿÑÿ0¬ÿÿ>±ÿ“ÿ¡ÿŸÿ›ÿSºÿ™™f‰‰Pööñÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿþýÿÿÿ…ýL¶ÿÆçýŽÿ’ý>±ÿÒíýƒÿÈèýC´ÿ•ýÿÿÿÿÿýæõÿŠý—ÿ—ýÿÿÿÿÿýÿÿÿÿÿý•ÿC³ýÿÿÿÿÿý®Þÿ‹ýA²ÿŽýÿÿÿÿÿýÿÿÿÿÿý™™fTççÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì÷ÿƒÿzÊÿÿÿÿŠÿ‘ÿ~Êÿÿÿÿ‚ÿšÖÿI¶ÿ”ÿÿÿÿÿÿÿÖîÿŒÿ–ÿ”ÿÿÿÿÿÿÿÿÿÿÿÿÿ•ÿF´ÿÿÿÿÿÿÿ§ÛÿŒÿ<°ÿŒÿÿÿÿÿÿÿÿÿÿÿÿÿ——dŽŽWÕÕÀÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿý½äÿý§Ûÿÿÿýÿý‡Îÿÿÿý‡ÿlÃýO¹ÿ”ýÿÿÿÿÿý×ïÿˆý¡ÿ’ý¤ÿ ¥ý¤ÿ?±ý¥ÿ—ý%¨ÿ%§ý™ÿý]¾ÿý£ÿ!¦ý¥ÿ¥ý  q““]««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\¼ÿxÿÙïÿÿÿÿ•ÿ~ÿÍëÿÿÿÿ†ÿ˜ÿB³ÿ‰ÿÿÿÿÿÿÿÏëÿxÿž×ÿ‹ÿˆÿ‰ÿ‡ÿ”ÿŸÿ‰ÿ‰ÿ‰ÿ†ÿ)¨ÿÿÿÿ†ÿˆÿ‰ÿ‰ÿ‰ÿ¶¶’’’]ŒŒRÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿýåôÿ¿äýÿÿÿÿÿýðøÿÎêýÿÿÿÿÿýÜïÿÒìýàñÿÉéýÿÿÿÿþýøüÿ¾äýÿÿÿóúýÊèÿÎêýÍêÿÓíý×îÿÍêýÎêÿÎêýÆçÿÿÿýÿÿÿöúýÉèÿÎêýÎêÿÎêýÞÞÎVŽŽUÜÜËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰‰Q””_¥¥{ÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤¤w••_‰‰Oööñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùö„„GUŠŠOÿÿÿÖÖÁŽŽU‘‘[¶¶”ÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿ½½Y’’\¸¸–ÿÿÿÿÿÿS˜˜dˆˆLííãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿññ뇇L˜˜e‹‹RÿÿÿÿÿÿÿÿÿÄÄ§ŽŽW——b‘‘]ÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿþþÿÿÿÿ••b––bZ±±ŠÿÿÿÿÿÿÿÿÿÿÿÿW——c““]  qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥¥w’’[——dSÿÿÿÿÿÿÿÿÿýýýÿÿÿååÙˆˆM——eY¦¦{ÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿµµ‘ŽŽV——e‰‰OßßÏÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿ¯¯ˆX™™f‘‘Z››iÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶’ŒŒS™™f‘‘Z©©~ÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿþþÿÿÿÿžžo’’\——e””_ŠŠPýýüÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿmW——e””^ššiÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ••a’’\™™f––bŠŠQããÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿççÜ‹‹R””_™™f––aUÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿŸŸpV——e˜˜d‰‰O¨¨~ööðÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿ÷÷õ««‚ˆˆN˜˜d——e””^ŠŠPûûûÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ··•ŠŠN˜˜d™™f””_ˆˆK³³ùùõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúú÷¶¶‘‡‡L””^™™f˜˜eŽŽVmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿþþÿÿÿÿÜܡ‡K’’]™™f——e““]ˆˆM££tÉɱÛÛÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÜËÌ̳¤¤w‡‡N““]——e™™f””aˆˆM¼¼›ÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþý§§|ŒŒR––b˜˜e™™f••`‘‘ZŽŽUŒŒSˆˆL¬¬‚®®†ÀÀ ããÕÍ͵­­„®®†ˆˆLŒŒSUY••`™™f˜˜e˜˜dX••`ììãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÊʰ˜˜gŒŒQ’’]™™e——e™™f——d™™e““_””^ZŽŽVŽŽX””^““^™™e——d™™f——e™™e’’]TV»»šÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíí䯯ˆˆˆMŽŽU’’\””^••`™™f™™f™™f™™f™™f™™f™™f––b””^””^ŽŽV‰‰N¬¬„êêàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿþþþÿÿÿÿÿÿþþþââÕÂÂ¥ºº™³³Ž””`™™f——e™™f——e™™f••b§§|½½¶¶”ââÖýýûÿÿÿÿÿÿþþþÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýÿÿÿýýýgwhere-0.2.3/win32/gwhere.rc0000644000175000017500000000020210023202521014165 0ustar bartbart// THIS FILE WILL BE OVERWRITTEN BY DEV-C++! // DO NOT EDIT! A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "..\\win32\\gwhere.ico" gwhere-0.2.3/win32/gwhere_install.bmp0000444000175000017500000132506210023202521016102 0ustar bartbartBM2ª6(ûëü©ÄÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™f™™f™™f™™f™™f™™f™™f™™f™™f™™f™™fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿgwhere-0.2.3/win32/Makefile.am0000644000175000017500000000051510472431755014446 0ustar bartbartEXTRA_DIST = config.h.in \ gwhere.ico \ gwhere.nsi.in \ gwhere.rc \ gwhere_install.bmp \ allusers.ini \ ../po/ar.nsh \ ../po/cs.nsh \ ../po/de.nsh \ ../po/el.nsh \ ../po/en.nsh \ ../po/es.nsh \ ../po/fr.nsh \ ../po/hu.nsh \ ../po/it.nsh \ ../po/pl.nsh \ ../po/pt.nsh \ ../po/ru.nsh \ ../po/sr.nsh gwhere-0.2.3/win32/Makefile.in0000644000175000017500000001443110506327706014457 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ EXTRA_DIST = config.h.in gwhere.ico gwhere.nsi.in gwhere.rc gwhere_install.bmp allusers.ini ../po/ar.nsh ../po/cs.nsh ../po/de.nsh ../po/el.nsh ../po/en.nsh ../po/es.nsh ../po/fr.nsh ../po/hu.nsh ../po/it.nsh ../po/pl.nsh ../po/pt.nsh ../po/ru.nsh ../po/sr.nsh mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = config.h gwhere.nsi DIST_COMMON = Makefile.am Makefile.in config.h.in gwhere.nsi.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu win32/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status config.h: $(top_builddir)/config.status config.h.in cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status gwhere.nsi: $(top_builddir)/config.status gwhere.nsi.in cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = win32 distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu win32/Makefile $(mkinstalldirs) $(distdir)/../po @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/win32/nsis/0000755000175000017500000000000010023202521013340 5ustar bartbartgwhere-0.2.3/win32/nsis/Contrib/0000755000175000017500000000000010023202521014740 5ustar bartbartgwhere-0.2.3/win32/nsis/Contrib/Language files/0000755000175000017500000000000010472431460017564 5ustar bartbartgwhere-0.2.3/win32/nsis/Contrib/Language files/SpanishAR.nlf0000644000175000017500000001266710472425432022133 0ustar bartbart# Header, don't edit NLF v6 # Language ID 11274 # Font and size - dash (-) means default - - # Codepage - dash (-) means ANSI code page - # RTL - anything else than RTL means LTR - # Translation by MoNKi & Lobo Lunar # ^Branding Nullsoft Install System %s # ^SetupCaption Instalación de $(^Name) # ^UninstallCaption Desinstalación de $(^Name) # ^LicenseSubCaption : Acuerdo de Licencia # ^ComponentsSubCaption : Opciones de Instalación # ^DirSubCaption : Directorio de Instalación # ^InstallingSubCaption : Instalando # ^CompletedSubCaption : Completado # ^UnComponentsSubCaption : Opciones de Desinstalación # ^UnDirSubCaption : Directorio de desinstalación # ^ConfirmSubCaption : Confirmación # ^UninstallingSubCaption : Desinstalando # ^UnCompletedSubCaption : Completado # ^BackBtn < &Atrás # ^NextBtn &Siguiente > # ^AgreeBtn A&cepto # ^AcceptBtn A&cepto los términos de la licencia # ^DontAcceptBtn &No acepto los términos de la licencia # ^InstallBtn &Instalar # ^UninstallBtn &Desinstalar # ^CancelBtn Cancelar # ^CloseBtn &Cerrar # ^BrowseBtn &Examinar... # ^ShowDetailsBtn Ver &detalles # ^ClickNext Presione Siguiente para continuar. # ^ClickInstall Presione Instalar para comenzar la instalación. # ^ClickUninstall Presione Desinstalar para comenzar la desinstalación. # ^Name Nombre # ^Completed Completado # ^LicenseText Por favor, revise el acuerdo de licencia antes de instalar $(^NameDA). Si acepta todos los términos del acuerdo, presione Acepto. # ^LicenseTextCB Por favor, revise el acuerdo de licencia antes de instalar $(^NameDA). Si acepta todos los términos del acuerdo, marque abajo la casilla. $_CLICK # ^LicenseTextRB Por favor, revise el acuerdo de licencia antes de instalar $(^NameDA). Si acepta todos los términos del acuerdo, seleccione abajo la primera opción. $_CLICK # ^UnLicenseText Por favor, revise el acuerdo de licencia antes de desinstalar $(^NameDA). Si acepta todos los términos del acuerdo, presione Acepto. # ^UnLicenseTextCB Por favor, revise el acuerdo de licencia antes de desinstalar $(^NameDA). Si acepta todos los términos del acuerdo, marque abajo la casilla. $_CLICK. # ^UnLicenseTextRB Por favor, revise el acuerdo de licencia antes de desinstalar $(^NameDA). Si acepta todos los términos del acuerdo, seleccione abajo la primera opción. $_CLICK # ^Custom Personalizada # ^ComponentsText Marque los componentes que desea instalar y desmarque los componentes que no desea instalar. $_CLICK # ^ComponentsSubText1 Seleccione el tipo de instalación: # ^ComponentsSubText2_NoInstTypes Seleccione los componentes a instalar: # ^ComponentsSubText2 O seleccione los componentes opcionales que desee instalar: # ^UnComponentsText Marque los componentes que desea desinstalar y desmarque los componentes que no desea desinstalar. $_CLICK # ^UnComponentsSubText1 Seleccione el tipo de desinstalación: # ^UnComponentsSubText2_NoInstTypes Seleccione los componentes a desinstalar: # ^UnComponentsSubText2 O seleccione los componentes opcionales que desee desinstalar: # ^DirText El programa de instalación instalará $(^NameDA) en el siguiente directorio. Para instalar en un directorio diferente, presione Examinar y seleccione otro directorio. $_CLICK # ^DirSubText Directorio de Destino # ^DirBrowseText Seleccione el directorio en el que instalar $(^NameDA): # ^UnDirText El programa de instalación desinstalará $(^NameDA) del siguiente directorio. Para desinstalar de un directorio diferente, presione Examinar y seleccione otro directorio. $_CLICK # ^UnDirSubText "" # ^UnDirBrowseText Seleccione el directorio desde el cual desinstalar $(^NameDA): # ^SpaceAvailable Espacio disponible: # ^SpaceRequired Espacio requerido: # ^UninstallingText $(^NameDA) será desinstalado del siguiente directorio. $_CLICK # ^UninstallingSubTex Desinstalando desde: # ^FileError Error abriendo archivo para escritura: \r\n\t"$0"\r\nPresione abortar para anular la instalación,\r\nreintentar para volver a intentar escribir el archivo, u\r\nomitir para ignorar este archivo # ^FileError_NoIgnore Error abriendo archivo para escritura: \r\n\t"$0"\r\nPresione reintentar para volver a intentar escribir el archivo, o\r\ncancelar para anular la instalación # ^CantWrite "No pudo escribirse: " # ^CopyFailed Falló la copia # ^CopyTo "Copiar a " # ^Registering "Registrando: " # ^Unregistering "Eliminando registro: " # ^SymbolNotFound "No pudo encontrarse símbolo: " # ^CouldNotLoad "No pudo cargarse: " # ^CreateFolder "Crear directorio: " # ^CreateShortcut "Crear acceso directo: " # ^CreatedUninstaller "Crear desinstalador: " # ^Delete "Borrar archivo: " # ^DeleteOnReboot "Borrar al reinicio: " # ^ErrorCreatingShortcut "Error creando acceso directo: " # ^ErrorCreating "Error creando: " # ^ErrorDecompressing ¡Error descomprimiendo datos! ¿Instalador corrupto? # ^ErrorRegistering Error registrando DLL # ^ExecShell "Ejecutar comando: " # ^Exec "Ejecutar: " # ^Extract "Extraer: " # ^ErrorWriting "Extraer: error escribiendo al archivo " # ^InvalidOpcode Instalador corrupto: código de operación no válido # ^NoOLE "Sin OLE para: " # ^OutputFolder "Directorio de salida: " # ^RemoveFolder "Eliminar directorio: " # ^RenameOnReboot "Renombrar al reinicio: " # ^Rename "Renombrar: " # ^Skipped "Omitido: " # ^CopyDetails Copiar Detalles al Portapapeles # ^LogInstall Registrar proceso de instalación # ^Byte B # ^Kilo K # ^Mega M # ^Giga Ggwhere-0.2.3/win32/nsis/Contrib/Modern UI/0000755000175000017500000000000010023202521016462 5ustar bartbartgwhere-0.2.3/win32/nsis/Contrib/Modern UI/Language files/0000755000175000017500000000000010023202521021270 5ustar bartbartgwhere-0.2.3/win32/nsis/Contrib/Modern UI/Language files/Portuguese.nsh0000644000175000017500000001427210243230521024157 0ustar bartbart;NSIS Modern User Interface - Language File ;Compatible with Modern UI 1.68 ;Language: Portuguese (2070) ;By Paulo ANDRE' ;-------------------------------- !insertmacro MUI_LANGUAGEFILE_BEGIN "Portuguese" !define MUI_LANGNAME "Português" ;Use only ASCII characters (if this is not possible, use the English name) !define MUI_TEXT_WELCOME_INFO_TITLE "Bem-vindo ao Assistente de Instalação do $(^NameDA)" !define MUI_TEXT_WELCOME_INFO_TEXT "Este assistente o guiará durante a instalação do $(^NameDA).\r\n\r\nÉ recomendado que você feche todas as outras aplicações antes de iniciar a Instalação. Isto possibilitará fazer update dos arquivos do sistema sem reiniciar o computador.\r\n\r\n$_CLICK" !define MUI_TEXT_LICENSE_TITLE "Contrato de Licença" !define MUI_TEXT_LICENSE_SUBTITLE "Por favor, verifique os termos da licença antes de instalar o $(^NameDA)." !define MUI_INNERTEXT_LICENSE_TOP "Tecle Page Down para ver o restante da licença." !define MUI_INNERTEXT_LICENSE_BOTTOM "Se você aceitar os termos da licença, clique em Concordo para continuar. Você deve aceitar o contrato para instalar o $(^NameDA)." !define MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se você aceitar os termos da licença, clique na caixa de seleção abaixo. Você deve aceitar o contrato para instalar o $(^NameDA). $_CLICK" !define MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se você aceitar os termos da licença, selecione a primeira opção abaixo. Você deve aceitar o contrato para instalar o $(^NameDA). $_CLICK" !define MUI_TEXT_COMPONENTS_TITLE "Escolha de Componentes" !define MUI_TEXT_COMPONENTS_SUBTITLE "Escolha quais características do $(^NameDA) que você deseja instalar." !define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descrição" !ifndef NSIS_CONFIG_COMPONENTPAGE_ALTERNATIVE !define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Passe o ponteiro do mouse sobre um componente para ver sua descrição." !else !define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Selecione um componente para ver sua descrição." !endif !define MUI_TEXT_DIRECTORY_TITLE "Escolha do Local da Instalação" !define MUI_TEXT_DIRECTORY_SUBTITLE "Escolha a pasta na qual deseja instalar o $(^NameDA)." !define MUI_TEXT_INSTALLING_TITLE "Instalando" !define MUI_TEXT_INSTALLING_SUBTITLE "Por favor, aguarde enquanto o $(^NameDA) está sendo instalado." !define MUI_TEXT_FINISH_TITLE "Instalação Completada" !define MUI_TEXT_FINISH_SUBTITLE "A instalação foi concluída com sucesso." !define MUI_TEXT_ABORT_TITLE "Instalação Abortada" !define MUI_TEXT_ABORT_SUBTITLE "A instalação não foi concluída com sucesso." !define MUI_BUTTONTEXT_FINISH "&Terminar" !define MUI_TEXT_FINISH_INFO_TITLE "Concluindo o Assistente de Instalação do $(^NameDA)" !define MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) foi instalado no seu computador.\r\n\r\nClique em Terminar para fechar este assistente." !define MUI_TEXT_FINISH_INFO_REBOOT "Seu computador deve ser reiniciado para concluír a instalação do $(^NameDA). Você quer reiniciar agora?" !define MUI_TEXT_FINISH_REBOOTNOW "Reiniciar Agora" !define MUI_TEXT_FINISH_REBOOTLATER "Eu quero reiniciar manualmente depois" !define MUI_TEXT_FINISH_RUN "&Executar $(^NameDA)" !define MUI_TEXT_FINISH_SHOWREADME "&Mostrar Leiame" !define MUI_TEXT_STARTMENU_TITLE "Escolha uma Pasta do Menu Iniciar" !define MUI_TEXT_STARTMENU_SUBTITLE "Escolha uma pasta do Menu Iniciar para os atalhos do programa." !define MUI_INNERTEXT_STARTMENU_TOP "Selecione uma pasta do Menu Iniciar em que deseja criar os atalhos do programa. Você pode também digitar um nome para criar uma nova pasta. " !define MUI_INNERTEXT_STARTMENU_CHECKBOX "Não criar atalhos" !define MUI_TEXT_ABORTWARNING "Você deseja realmente finalizar a instalação do $(^Name)?" !define MUI_UNTEXT_WELCOME_INFO_TITLE "Bem-vindo ao Assistente de Desinstalação do $(^NameDA)" !define MUI_UNTEXT_WELCOME_INFO_TEXT "Este assistente o guiará durante a desinstalação do $(^NameDA).\r\n\r\nAntes de iniciar a desinstalação, tenha certeza que o $(^NameDA) não está sendo executado.\r\n\r\n$_CLICK" !define MUI_UNTEXT_CONFIRM_TITLE "Desinstalar o $(^NameDA)" !define MUI_UNTEXT_CONFIRM_SUBTITLE "Remover o $(^NameDA) do seu computador." !define MUI_UNTEXT_LICENSE_TITLE "Contrato de Licença" !define MUI_UNTEXT_LICENSE_SUBTITLE "Por favor, verifique os termos da licença antes de desinstalar o $(^NameDA)." !define MUI_UNINNERTEXT_LICENSE_BOTTOM "Se você aceitar os termos da licença, clique em Concordo para continuar. Você deve aceitar o contrato para desinstalar o $(^NameDA)." !define MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Se você aceitar os termos da licença, clique na caixa de seleção abaixo. Você deve aceitar o contrato para desinstalar o $(^NameDA). $_CLICK" !define MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Se você aceitar os termos da licença, selecione a primeira opção abaixo. Você deve aceitar o contrato para desinstalar o $(^NameDA). $_CLICK" !define MUI_UNTEXT_COMPONENTS_TITLE "Escolher Componentes" !define MUI_UNTEXT_COMPONENTS_SUBTITLE "Escolha quais qualidades do $(^NameDA) quer desinstalar." !define MUI_UNTEXT_DIRECTORY_TITLE "Escolha do Local da Desinstalação" !define MUI_UNTEXT_DIRECTORY_SUBTITLE "Escolha a pasta na qual deseja desinstalar o $(^NameDA)." !define MUI_UNTEXT_UNINSTALLING_TITLE "Desinstalando" !define MUI_UNTEXT_UNINSTALLING_SUBTITLE "Por favor, aguarde enquanto o $(^NameDA) está sendo desinstalado." !define MUI_UNTEXT_FINISH_TITLE "Desinstalação Completada" !define MUI_UNTEXT_FINISH_SUBTITLE "A desinstalação foi concluída com sucesso." !define MUI_UNTEXT_ABORT_TITLE "Desinstalação Abortada" !define MUI_UNTEXT_ABORT_SUBTITLE "A desinstalação não foi concluída com sucesso" !define MUI_UNTEXT_FINISH_INFO_TITLE "Concluindo o Assistente de Desinstalação do $(^NameDA)" !define MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) foi desinstalado do seu computador.\r\n\r\nClique em Terminar para fechar este assistente." !define MUI_UNTEXT_FINISH_INFO_REBOOT "Seu computador tem que ser reiniciado para completar a desinstalação do $(^NameDA). Quer reiniciar agora?" !define MUI_UNTEXT_ABORTWARNING "Você deseja realmente finalizar a desinstalação do $(^Name)?" !insertmacro MUI_LANGUAGEFILE_END gwhere-0.2.3/win32/nsis/Contrib/Modern UI/Language files/SpanishAR.nsh0000644000175000017500000001401710243230502023641 0ustar bartbart;NSIS Modern User Interface - Language File ;Compatible with Modern UI 1.68 ;Language: Argentina Spanish (11274) ;By Luis PARRAVICINI ;-------------------------------- !insertmacro MUI_LANGUAGEFILE_BEGIN "SpanishAR" !define MUI_LANGNAME "Argentino" ;Use only ASCII characters (if this is not possible, use the English name) !define MUI_TEXT_WELCOME_INFO_TITLE "Bienvenido al Asistente de Instalación de $(^NameDA)" !define MUI_TEXT_WELCOME_INFO_TEXT "Este programa instalará $(^NameDA) en su ordenador.\r\n\r\nSe recomienda que cierre todas las demás aplicaciones antes de iniciar la instalación. Esto hará posible actualizar archivos relacionados con el sistema sin tener que reiniciar su ordenador.\r\n\r\n$_CLICK" !define MUI_TEXT_LICENSE_TITLE "Acuerdo de licencia" !define MUI_TEXT_LICENSE_SUBTITLE "Por favor revise los términos de la licencia antes de instalar $(^NameDA)." !define MUI_INNERTEXT_LICENSE_TOP "Presione Avanzar Página para ver el resto del acuerdo." !define MUI_INNERTEXT_LICENSE_BOTTOM "Si acepta todos los términos del acuerdo, seleccione Acepto para continuar. Debe aceptar el acuerdo para instalar $(^NameDA)." !define MUI_INNERTEXT_LICENSE_BOTTOM_CHECKBOX "Si acepta los términos del acuerdo, marque abajo la casilla. Debe aceptar los términos para instalar $(^NameDA). $_CLICK" !define MUI_INNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Si acepta los términos del acuerdo, seleccione abajo la primera opción. Debe aceptar los términos para instalar $(^NameDA). $_CLICK" !define MUI_TEXT_COMPONENTS_TITLE "Selección de componentes" !define MUI_TEXT_COMPONENTS_SUBTITLE "Seleccione qué características de $(^NameDA) desea instalar." !define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_TITLE "Descripción" !define MUI_INNERTEXT_COMPONENTS_DESCRIPTION_INFO "Sitúe el ratón encima de un componente para ver su descripción." !define MUI_TEXT_DIRECTORY_TITLE "Elegir lugar de instalación" !define MUI_TEXT_DIRECTORY_SUBTITLE "Elija el directorio para instalar $(^NameDA)." !define MUI_TEXT_INSTALLING_TITLE "Instalando" !define MUI_TEXT_INSTALLING_SUBTITLE "Por favor espere mientras $(^NameDA) se instala." !define MUI_TEXT_FINISH_TITLE "Instalación Completada" !define MUI_TEXT_FINISH_SUBTITLE "La instalación se ha completado correctamente." !define MUI_TEXT_ABORT_TITLE "Instalación Anulada" !define MUI_TEXT_ABORT_SUBTITLE "La instalación no se completó correctamente." !define MUI_BUTTONTEXT_FINISH "&Terminar" !define MUI_TEXT_FINISH_INFO_TITLE "Completando el Asistente de Instalación de $(^NameDA)" !define MUI_TEXT_FINISH_INFO_TEXT "$(^NameDA) ha sido instalado en su sistema.\r\n\r\nPresione Terminar para cerrar este asistente." !define MUI_TEXT_FINISH_INFO_REBOOT "Su sistema debe ser reiniciado para que pueda completarse la instalación de $(^NameDA). ¿Desea reiniciar ahora?" !define MUI_TEXT_FINISH_REBOOTNOW "Reiniciar ahora" !define MUI_TEXT_FINISH_REBOOTLATER "Deseo reiniciar manualmente más tarde" !define MUI_TEXT_FINISH_RUN "&Ejecutar $(^NameDA)" !define MUI_TEXT_FINISH_SHOWREADME "&Ver Léame" !define MUI_TEXT_STARTMENU_TITLE "Elegir Carpeta del Menú Inicio" !define MUI_TEXT_STARTMENU_SUBTITLE "Elija una Carpeta del Menú Inicio para los accesos directos de $(^NameDA)." !define MUI_INNERTEXT_STARTMENU_TOP "Seleccione una carpeta del Menú Inicio en la que quiera crear los accesos directos del programa. También puede introducir un nombre para crear una nueva carpeta." !define MUI_INNERTEXT_STARTMENU_CHECKBOX "No crear accesos directos" !define MUI_TEXT_ABORTWARNING "¿Está seguro de que desea salir de la instalación de $(^Name)?" !define MUI_UNTEXT_WELCOME_INFO_TITLE "Bienvenido al Asistente de Desinstalación de $(^NameDA)" !define MUI_UNTEXT_WELCOME_INFO_TEXT "Este asistente le guiará durante la desinstalación de $(^NameDA).\r\n\r\nAntes de comenzar la desinstalación, asegúrese de que $(^NameDA) no se está ejecutando.\r\n\r\n$_CLICK" !define MUI_UNTEXT_CONFIRM_TITLE "Desinstalar $(^NameDA)" !define MUI_UNTEXT_CONFIRM_SUBTITLE "Elimina $(^NameDA) de su sistema." !define MUI_UNTEXT_LICENSE_TITLE "Acuerdo de licencia" !define MUI_UNTEXT_LICENSE_SUBTITLE "Por favor revise los términos de la licencia antes de desinstalar $(^NameDA)." !define MUI_UNINNERTEXT_LICENSE_BOTTOM "Si acepta todos los términos del acuerdo, seleccione Acepto para continuar. Debe aceptar el acuerdo para desinstalar $(^NameDA)." !define MUI_UNINNERTEXT_LICENSE_BOTTOM_CHECKBOX "Si acepta los términos del acuerdo, marque abajo la casilla. Debe aceptar los términos para desinstalar $(^NameDA). $_CLICK" !define MUI_UNINNERTEXT_LICENSE_BOTTOM_RADIOBUTTONS "Si acepta los términos del acuerdo, seleccione abajo la primera opción. Debe aceptar los términos para desinstalar $(^NameDA). $_CLICK" !define MUI_UNTEXT_COMPONENTS_TITLE "Selección de componentes" !define MUI_UNTEXT_COMPONENTS_SUBTITLE "Seleccione qué características de $(^NameDA) desea desinstalar." !define MUI_UNTEXT_DIRECTORY_TITLE "Elegir lugar de desinstalación" !define MUI_UNTEXT_DIRECTORY_SUBTITLE "Elija el directorio desde el cual se desinstalará $(^NameDA)." !define MUI_UNTEXT_UNINSTALLING_TITLE "Desinstalando" !define MUI_UNTEXT_UNINSTALLING_SUBTITLE "Por favor espere mientras $(^NameDA) se desinstala." !define MUI_UNTEXT_FINISH_TITLE "Desinstalación Completada" !define MUI_UNTEXT_FINISH_SUBTITLE "La desinstalación se ha completado correctamente." !define MUI_UNTEXT_ABORT_TITLE "Desinstalación Anulada" !define MUI_UNTEXT_ABORT_SUBTITLE "La desinstalación no se completó correctamente." !define MUI_UNTEXT_FINISH_INFO_TITLE "Completando el Asistente de Desinstalación de $(^NameDA)" !define MUI_UNTEXT_FINISH_INFO_TEXT "$(^NameDA) ha sido desinstalado de su sistema.\r\n\r\nPresione Terminar para cerrar este asistente." !define MUI_UNTEXT_FINISH_INFO_REBOOT "Su ordenador debe ser reiniciado para completar la desinstalación de $(^NameDA). ¿Desea reiniciar ahora?" !define MUI_UNTEXT_ABORTWARNING "¿Está seguro de que desea salir de la desinstalación de $(^Name)?" !insertmacro MUI_LANGUAGEFILE_END gwhere-0.2.3/win32/gwhere.nsi.in0000644000175000017500000004714110472430672015016 0ustar bartbart;NSIS Modern User Interface version 1.69 ;Multilingual Example Script ;Written by Joost Verburg ;-------------------------------- ;Include Modern UI !include "MUI.nsh" !include "${NSISDIR}\Contrib\Modern UI\System.nsh" ;-------------------------------- ;Configuration ;General Name "@PROJECT_NAME@" !define VERSION "@VERSION@" OutFile "@PACKAGE@-${VERSION}-win32_setup.exe" !define MUI_BUILD_DIR "." !define TEMP1 $R0 ; Show the install and uninstall processing ShowInstDetails show ShowUninstDetails show ;Default installation folder InstallDir "$PROGRAMFILES\$(^NameDA)" ;Get installation folder from registry if available ; InstallDirRegKey HKCU "Software\$(^NameDA)" "" InstallDirRegKey HKCU "Software\$(^NameDA)" "Install_Dir" ;Remember the Start Menu Folder !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\$(^NameDA)" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" !define MUI_STARTMENUPAGE_DEFAULTFOLDER "$(^NameDA)" ;-------------------------------- ;Interface Settings ; Adds an XP manifest to the installer XPStyle on ;!define MUI_ICON "${MUI_BUILD_DIR}\@PACKAGE@.ico" !define MUI_ABORTWARNING ;-------------------------------- ;Language Selection Dialog Settings ;Remember the installer language !define MUI_LANGDLL_ALWAYSSHOW !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" !define MUI_LANGDLL_REGISTRY_KEY "Software\$(^NameDA)" !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" ;-------------------------------- ;Pages !define MUI_WELCOMEFINISHPAGE_BITMAP "${MUI_BUILD_DIR}\@PACKAGE@_install.bmp" !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "$(URL_License)" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY Var STARTMENU_FOLDER !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER Var INI_VALUE Page custom AllUsers !insertmacro MUI_PAGE_INSTFILES !define MUI_FINISHPAGE_LINK "http://www.@PACKAGE@.org" ;!define MUI_FINISHPAGE_LINK "Visit the $(^NameDA) website for the latest news, FAQs and support" !define MUI_FINISHPAGE_LINK_LOCATION "http://www.@PACKAGE@.org" !define MUI_FINISHPAGE_RUN "$INSTDIR\@PACKAGE@.exe" !define MUI_FINISHPAGE_NOREBOOTSUPPORT !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ;-------------------------------- ;Languages !insertmacro MUI_LANGUAGE "Czech" !include "..\po\cs.nsh" !insertmacro MUI_LANGUAGE "Dutch" !include "..\po\nl.nsh" !insertmacro MUI_LANGUAGE "English" !include "..\po\en.nsh" !insertmacro MUI_LANGUAGE "French" !include "..\po\fr.nsh" !insertmacro MUI_LANGUAGE "German" !include "..\po\de.nsh" !insertmacro MUI_LANGUAGE "Greek" !include "..\po\el.nsh" !insertmacro MUI_LANGUAGE "Hungarian" !include "..\po\hu.nsh" !insertmacro MUI_LANGUAGE "Italian" !include "..\po\it.nsh" !insertmacro MUI_LANGUAGE "Polish" !include "..\po\pl.nsh" !insertmacro MUI_LANGUAGE "Portuguese" !include "..\po\pt.nsh" !insertmacro MUI_LANGUAGE "Russian" !include "..\po\ru.nsh" !insertmacro MUI_LANGUAGE "Serbian" !include "..\po\sr.nsh" !insertmacro MUI_LANGUAGE "Spanish" !include "..\po\es.nsh" !insertmacro MUI_LANGUAGE "SpanishAR" !include "..\po\ar.nsh" ;-------------------------------- ;Reserve Files ;These files should be inserted before other files in the data block ;Keep these lines before any File command ;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA) !insertmacro MUI_RESERVEFILE_LANGDLL ReserveFile "allusers.ini" !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ReserveFile "${NSISDIR}\Plugins\NSISdl.dll" ; ReserveFile "${NSISDIR}\Plugins\ZipDLL.dll" ;-------------------------------- ;-------------------------------- ;Component-selection page ;Titles ;Descriptions ;Titles ;Descriptions ;Titles ;Descriptions ;Titles ;Descriptions ;-------------------------------- ;Installer Sections Section $(TITLE_SecCopyUI) SecCopyUI SectionIn 1 2 RO SetOutPath $INSTDIR File "${MUI_BUILD_DIR}\..\src\@PACKAGE@.exe" File "${MUI_BUILD_DIR}\@PACKAGE@.ico" File "${MUI_BUILD_DIR}\iconv.dll" File "${MUI_BUILD_DIR}\intl.dll" File "${MUI_BUILD_DIR}\libintl-1.dll" File "${MUI_BUILD_DIR}\mingwm10.dll" File "${MUI_BUILD_DIR}\libregex.dll" File "${MUI_BUILD_DIR}\zlib1.dll" File "${MUI_BUILD_DIR}\..\AUTHORS" File "${MUI_BUILD_DIR}\..\BUGS" File "${MUI_BUILD_DIR}\..\BUGS.fr" File "${MUI_BUILD_DIR}\..\ChangeLog" File "${MUI_BUILD_DIR}\..\ChangeLog.fr" File "${MUI_BUILD_DIR}\..\COPYING" File "${MUI_BUILD_DIR}\..\NEWS" File "${MUI_BUILD_DIR}\..\README" File "${MUI_BUILD_DIR}\..\TODO" SetOutPath $INSTDIR\plugins\catalog File "${MUI_BUILD_DIR}\..\src\plugins\catalog\libgwcatalog.dll" SetOutPath $INSTDIR ;Read a value from an InstallOptions INI file !insertmacro MUI_INSTALLOPTIONS_READ $INI_VALUE "allusers.ini" "Field 3" "State" ;Display a messagebox if check box was checked ;StrCmp $INI_VALUE "1" allusers currentuser StrCmp $INI_VALUE "$(STATE_SecAllUsersUI)" allusers currentuser allusers: WriteRegStr HKLM Software\$(^NameDA) "Install_Dir" "$INSTDIR" WriteRegStr HKLM Software\$(^NameDA) "Install_Users" "all" SetShellVarContext all WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^NameDA)" "DisplayName" "$(^NameDA) ${VERSION} (remove only)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^NameDA)" "UninstallString" '"$INSTDIR\uninstall.exe"' ;WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ctg" "Application" '"$INSTDIR\@PACKAGE@.exe"' WriteRegStr HKLM "Software\$(^NameDA)" "Start Menu Folder" "$STARTMENU_FOLDER" Goto endusers currentuser: WriteRegStr HKCU Software\$(^NameDA) "Install_Dir" "$INSTDIR" WriteRegStr HKLM Software\$(^NameDA) "Install_Users" "current" SetShellVarContext current WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^NameDA)" "DisplayName" "$(^NameDA) ${VERSION} (remove only)" WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^NameDA)" "UninstallString" '"$INSTDIR\uninstall.exe"' ;WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ctg" "Application" '"$INSTDIR\@PACKAGE@.exe"' WriteRegStr HKCU "Software\$(^NameDA)" "Start Menu Folder" "$STARTMENU_FOLDER" endusers: WriteRegStr HKLM "Software\$(^NameDA)" "Installer Language" $LANGUAGE WriteRegStr HKCR ".ctg" "" "$(^NameDA)" WriteRegStr HKCR "$(^NameDA)\Shell\open\command" "" '"$INSTDIR\@PACKAGE@.exe" "%1"' WriteRegStr HKCR "$(^NameDA)\DefaultIcon" "" "$INSTDIR\@PACKAGE@.ico" ; Write the installation path into the registry ; WriteRegStr HKLM SOFTWARE\$(^NameDA) "Install_Dir" "$INSTDIR" ; WriteRegStr HKCU SOFTWARE\$(^NameDA) "Install_Dir" "$INSTDIR" ; WriteRegStr HKCU "Software\$(^NameDA)" "Installer Language" $LANGUAGE ; Write the uninstall keys for Windows ;WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^NameDA)" "DisplayName" "$(^NameDA) ${MUI_VERSION} (remove only)" ;WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^NameDA)" "DisplayName" "$(^NameDA) ${VERSION} (remove only)" ;WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^NameDA)" "UninstallString" '"$INSTDIR\uninstall.exe"' ;WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^NameDA)" "UninstallString" '"$INSTDIR\uninstall.exe"' ;WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ctg" "Application" '"$INSTDIR\@PACKAGE@.exe"' ;WriteRegStr HKCR ".ctg" "" "$(^NameDA)" ;WriteRegStr HKCR "$(^NameDA)\Shell\open\command" "" '"$INSTDIR\@PACKAGE@.exe" "%1"' ;WriteRegStr HKCR "$(^NameDA)\DefaultIcon" "" "$INSTDIR\@PACKAGE@.ico" WriteUninstaller "uninstall.exe" ; optional section Section "Start Menu Shortcuts" !insertmacro MUI_STARTMENU_WRITE_BEGIN Application CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0 CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\$(^NameDA).lnk" "$INSTDIR\@PACKAGE@.exe" "" "$INSTDIR\@PACKAGE@.exe" 0 CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\$(^NameDA) Home Page.lnk" "http://www.@PACKAGE@.org" "" "" 0 ;Write shortcut location to the registry (for Uninstaller) ; WriteRegStr HKCU "Software\$(^NameDA)" "Start Menu Folder" "${MUI_STARTMENUPAGE_VARIABLE}" ;WriteRegStr HKCU "Software\$(^NameDA)" "Start Menu Folder" "$STARTMENU_FOLDER" !insertmacro MUI_STARTMENU_WRITE_END SectionEnd Section $(TITLE_SecCopyGTK) SecCopyGTK SectionIn 1 2 SetOutPath $INSTDIR File "${MUI_BUILD_DIR}\libatk-1.0-0.dll" File "${MUI_BUILD_DIR}\libgdk_pixbuf-2.0-0.dll" File "${MUI_BUILD_DIR}\libgdk-win32-2.0-0.dll" File "${MUI_BUILD_DIR}\libglib-2.0-0.dll" File "${MUI_BUILD_DIR}\libgmodule-2.0-0.dll" File "${MUI_BUILD_DIR}\libgobject-2.0-0.dll" File "${MUI_BUILD_DIR}\libgtk-win32-2.0-0.dll" File "${MUI_BUILD_DIR}\libpango-1.0-0.dll" File "${MUI_BUILD_DIR}\libpangowin32-1.0-0.dll" SetOutPath $INSTDIR\etc File /r "${MUI_BUILD_DIR}\etc\*.*" SetOutPath $INSTDIR\lib File /r "${MUI_BUILD_DIR}\lib\*.*" SectionEnd Section $(TITLE_SecCopyPLUGINS) SecCopyPLUGINS SectionIn 1 SetOutPath $INSTDIR\plugins\descr File "${MUI_BUILD_DIR}\..\src\plugins\descr\libgwplugindescriptionhtml.dll" File "${MUI_BUILD_DIR}\..\src\plugins\descr\libgwplugindescriptionmp3.dll" File "${MUI_BUILD_DIR}\..\src\plugins\descr\libgwplugindescriptionavi.dll" File "${MUI_BUILD_DIR}\..\src\plugins\descr\libgwplugindescriptiondescript_ion.dll" File "${MUI_BUILD_DIR}\..\src\plugins\descr\libgwplugindescriptionfile_id_diz.dll" File "${MUI_BUILD_DIR}\..\src\plugins\descr\libgwplugindescriptionmpc.dll" SetOutPath $INSTDIR\plugins\catalog File "${MUI_BUILD_DIR}\..\src\plugins\catalog\libgwcatalog.dll" File "${MUI_BUILD_DIR}\..\src\plugins\catalog\libcsv.dll" SectionEnd Section $(TITLE_SecCopyLANG) SecCopyLANG SectionIn 1 SetOutPath $INSTDIR\locale\ar\LC_MESSAGES File /oname=@PACKAGE@.mo "${MUI_BUILD_DIR}\..\po\ar.gmo" SetOutPath $INSTDIR\locale\cs\LC_MESSAGES File /oname=@PACKAGE@.mo "${MUI_BUILD_DIR}\..\po\cs-windows-1250.gmo" SetOutPath $INSTDIR\locale\de\LC_MESSAGES File /oname=@PACKAGE@.mo "${MUI_BUILD_DIR}\..\po\de.gmo" SetOutPath $INSTDIR\locale\el\LC_MESSAGES File /oname=@PACKAGE@.mo "${MUI_BUILD_DIR}\..\po\el.gmo" SetOutPath $INSTDIR\locale\es\LC_MESSAGES File /oname=@PACKAGE@.mo "${MUI_BUILD_DIR}\..\po\es.gmo" SetOutPath $INSTDIR\locale\fr\LC_MESSAGES File /oname=@PACKAGE@.mo "${MUI_BUILD_DIR}\..\po\fr.gmo" SetOutPath $INSTDIR\locale\hu\LC_MESSAGES File /oname=@PACKAGE@.mo "${MUI_BUILD_DIR}\..\po\hu.gmo" SetOutPath $INSTDIR\locale\it\LC_MESSAGES File /oname=@PACKAGE@.mo "${MUI_BUILD_DIR}\..\po\it.gmo" SetOutPath $INSTDIR\locale\nl\LC_MESSAGES File /oname=@PACKAGE@.mo "${MUI_BUILD_DIR}\..\po\nl.gmo" SetOutPath $INSTDIR\locale\pl\LC_MESSAGES File /oname=@PACKAGE@.mo "${MUI_BUILD_DIR}\..\po\pl.gmo" SetOutPath $INSTDIR\locale\pt\LC_MESSAGES File /oname=@PACKAGE@.mo "${MUI_BUILD_DIR}\..\po\pt.gmo" SetOutPath $INSTDIR\locale\ru\LC_MESSAGES File /oname=@PACKAGE@.mo "${MUI_BUILD_DIR}\..\po\ru.gmo" SetOutPath $INSTDIR\locale\sr\LC_MESSAGES File /oname=@PACKAGE@.mo "${MUI_BUILD_DIR}\..\po\sr.gmo" SectionEnd ; uninstall stuff ;UninstallText "This will uninstall @PROJECT_NAME@. Hit next to continue." ; special uninstall section. Section "Uninstall" ; remove registry keys DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^NameDA)" DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^NameDA)" DeleteRegKey HKLM "SOFTWARE\Classe\$(^NameDA)" DeleteRegKey HKCU "SOFTWARE\Classe\$(^NameDA)" DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ctg\OpenWithList" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ctg\OpenWithList" DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ctg" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ctg" DeleteRegKey HKCR ".ctg" DeleteRegKey HKCR "$(^NameDA)\Shell\open\command" DeleteRegKey HKCR "$(^NameDA)\Shell\open" DeleteRegKey HKCR "$(^NameDA)\Shell" DeleteRegKey HKCR "$(^NameDA)" DeleteRegKey HKCR "$(^NameDA)\DefaultIcon" DeleteRegKey HKCR "Applications\@PACKAGE@.exe\shell\open\command" DeleteRegKey HKCR "Applications\@PACKAGE@.exe\shell\open" DeleteRegKey HKCR "Applications\@PACKAGE@.exe\shell" DeleteRegKey HKCR "Applications\@PACKAGE@.exe" ; remove files Delete "$INSTDIR\@PACKAGE@.exe" Delete "$INSTDIR\@PACKAGE@.ico" Delete "$INSTDIR\iconv.dll" Delete "$INSTDIR\intl.dll" Delete "$INSTDIR\libintl-1.dll" Delete "$INSTDIR\mingwm10.dll" Delete "$INSTDIR\libregex.dll" Delete "$INSTDIR\zlib1.dll" Delete "$INSTDIR\libatk-1.0-0.dll" Delete "$INSTDIR\libgdk_pixbuf-2.0-0.dll" Delete "$INSTDIR\libgdk-win32-2.0-0.dll" Delete "$INSTDIR\libglib-2.0-0.dll" Delete "$INSTDIR\libgmodule-2.0-0.dll" Delete "$INSTDIR\libgobject-2.0-0.dll" Delete "$INSTDIR\libgtk-win32-2.0-0.dll" Delete "$INSTDIR\libpango-1.0-0.dll" Delete "$INSTDIR\libpangowin32-1.0-0.dll" RMDir /r "$INSTDIR\etc" RMDir /r "$INSTDIR\lib" Delete "$INSTDIR\AUTHORS" Delete "$INSTDIR\BUGS" Delete "$INSTDIR\BUGS.fr" Delete "$INSTDIR\ChangeLog" Delete "$INSTDIR\ChangeLog.fr" Delete "$INSTDIR\COPYING" Delete "$INSTDIR\NEWS" Delete "$INSTDIR\README" Delete "$INSTDIR\TODO" Delete "$INSTDIR\locale\ar\LC_MESSAGES\@PACKAGE@.mo" RMDir "$INSTDIR\locale\ar\LC_MESSAGES" RMDir "$INSTDIR\locale\ar" Delete "$INSTDIR\locale\cs\LC_MESSAGES\@PACKAGE@.mo" RMDir "$INSTDIR\locale\cs\LC_MESSAGES" RMDir "$INSTDIR\locale\cs" Delete "$INSTDIR\locale\de\LC_MESSAGES\@PACKAGE@.mo" RMDir "$INSTDIR\locale\de\LC_MESSAGES" RMDir "$INSTDIR\locale\de" Delete "$INSTDIR\locale\el\LC_MESSAGES\@PACKAGE@.mo" RMDir "$INSTDIR\locale\el\LC_MESSAGES" RMDir "$INSTDIR\locale\el" Delete "$INSTDIR\locale\es\LC_MESSAGES\@PACKAGE@.mo" RMDir "$INSTDIR\locale\es\LC_MESSAGES" RMDir "$INSTDIR\locale\es" Delete "$INSTDIR\locale\fr\LC_MESSAGES\@PACKAGE@.mo" RMDir "$INSTDIR\locale\fr\LC_MESSAGES" RMDir "$INSTDIR\locale\fr" Delete "$INSTDIR\locale\hu\LC_MESSAGES\@PACKAGE@.mo" RMDir "$INSTDIR\locale\hu\LC_MESSAGES" RMDir "$INSTDIR\locale\hu" Delete "$INSTDIR\locale\it\LC_MESSAGES\@PACKAGE@.mo" RMDir "$INSTDIR\locale\it\LC_MESSAGES" RMDir "$INSTDIR\locale\it" Delete "$INSTDIR\locale\nl\LC_MESSAGES\@PACKAGE@.mo" RMDir "$INSTDIR\locale\nl\LC_MESSAGES" RMDir "$INSTDIR\locale\nl" Delete "$INSTDIR\locale\pl\LC_MESSAGES\@PACKAGE@.mo" RMDir "$INSTDIR\locale\pl\LC_MESSAGES" RMDir "$INSTDIR\locale\pl" Delete "$INSTDIR\locale\pt\LC_MESSAGES\@PACKAGE@.mo" RMDir "$INSTDIR\locale\pt\LC_MESSAGES" RMDir "$INSTDIR\locale\pt" Delete "$INSTDIR\locale\ru\LC_MESSAGES\@PACKAGE@.mo" RMDir "$INSTDIR\locale\ru\LC_MESSAGES" RMDir "$INSTDIR\locale\ru" Delete "$INSTDIR\locale\sr\LC_MESSAGES\@PACKAGE@.mo" RMDir "$INSTDIR\locale\sr\LC_MESSAGES" RMDir "$INSTDIR\locale\sr" RMDir "$INSTDIR\locale" Delete "$INSTDIR\plugins\descr\libgwplugindescriptionhtml.dll" Delete "$INSTDIR\plugins\descr\libgwplugindescriptionmp3.dll" Delete "$INSTDIR\plugins\descr\libgwplugindescriptionavi.dll" Delete "$INSTDIR\plugins\descr\libgwplugindescriptiondescript_ion.dll" Delete "$INSTDIR\plugins\descr\libgwplugindescriptionfile_id_diz.dll" Delete "$INSTDIR\plugins\descr\libgwplugindescriptionmpc.dll" RMDir "$INSTDIR\plugins\descr" Delete "$INSTDIR\plugins\catalog\libgwcatalog.dll" Delete "$INSTDIR\plugins\catalog\libcsv.dll" RMDir "$INSTDIR\plugins\catalog" RMDir "$INSTDIR\plugins" ;MUST REMOVE UNINSTALLER, too Delete $INSTDIR\uninstall.exe ;remove shortcuts, if any. ;Remove shortcut ReadRegStr ${TEMP1} HKLM SOFTWARE\$(^NameDA) "Install_Users" StrCmp ${TEMP1} "all" allusers currentuser allusers: SetShellVarContext all ReadRegStr ${TEMP1} HKLM "Software\$(^NameDA)" "Start Menu Folder" Goto endusers currentuser: SetShellVarContext current ReadRegStr ${TEMP1} HKCU "Software\$(^NameDA)" "Start Menu Folder" endusers: StrCmp ${TEMP1} "" noshortcuts Delete "$SMPROGRAMS\${TEMP1}\*.*" RMDir "$SMPROGRAMS\${TEMP1}" noshortcuts: DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu\Programs\${TEMP1}" DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu\Programs\${TEMP1}" DeleteRegValue HKLM "Software\$(^NameDA)" "Start Menu Folder" DeleteRegValue HKCU "Software\$(^NameDA)" "Start Menu Folder" DeleteRegValue HKLM "Software\$(^NameDA)" "Install_Users" DeleteRegValue HKCU "Software\$(^NameDA)" "Install_Users" DeleteRegKey HKLM "Software\$(^NameDA)" DeleteRegKey HKCU "Software\$(^NameDA)" RMDir "$INSTDIR" ; !insertmacro MUI_UNFINISHHEADER SectionEnd ;-------------------------------- ;Installer Functions Function .onInit ;Extract InstallOptions INI files !insertmacro MUI_INSTALLOPTIONS_EXTRACT "allusers.ini" ;Check if @PROJECT_NAME@ is already installed ReadRegStr ${TEMP1} HKLM SOFTWARE\$(^NameDA) "Install_Users" StrCmp ${TEMP1} "all" allusers currentuser allusers: ReadRegStr ${TEMP1} HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^NameDA)" "UninstallString" Goto endusers currentuser: ReadRegStr ${TEMP1} HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\$(^NameDA)" "UninstallString" endusers: StrCmp ${TEMP1} "" nouninstall MessageBox MB_OK "$(UninstBefore)" ExecWait '"$INSTDIR\uninstall.exe" _?=$INSTDIR' nouninstall: ;Check if the installer is already launched System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e' Pop $0 StrCmp $0 183 0 +3 MessageBox MB_OK "$(InstAlready)" Abort StrCmp $0 0 done MessageBox MB_OK "error creating mutex" done: !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd ;-------------------------------- ;Descriptions ;USE A LANGUAGE STRING IF YOU WANT YOUR DESCRIPTIONS TO BE LANGAUGE SPECIFIC ;Assign descriptions to sections !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecCopyUI} $(DESC_SecCopyUI) !insertmacro MUI_DESCRIPTION_TEXT ${SecCopyGTK} $(DESC_SecCopyGTK) !insertmacro MUI_DESCRIPTION_TEXT ${SecCopyPLUGINS} $(DESC_SecCopyPLUGINS) !insertmacro MUI_DESCRIPTION_TEXT ${SecCopyLANG} $(DESC_SecCopyLANG) !insertmacro MUI_FUNCTION_DESCRIPTION_END ;-------------------------------- ;Installer type ;Full install ;Compact install InstType $(InstTypeFull) InstType $(InstTypeCompact) ;-------------------------------- ;License page ;-------------------------------- ;Uninstaller Section ;Section "Uninstall" ; ; ;ADD YOUR OWN STUFF HERE! ; ; Delete "$INSTDIR\Uninstall.exe" ; ; RMDir "$INSTDIR" ; ; DeleteRegKey /ifempty HKCU "Software\$(^NameDA)" ; ;SectionEnd ;-------------------------------- ;Uninstaller Functions Function un.onInit !insertmacro MUI_UNGETLANGUAGE FunctionEnd Function AllUsers !insertmacro MUI_INSTALLOPTIONS_WRITE "allusers.ini" "Field 1" text $(SUBSUBTITLE_SecAllUsersUI) !insertmacro MUI_INSTALLOPTIONS_WRITE "allusers.ini" "Field 2" text $(ASK_SecAllUsersUI) !insertmacro MUI_INSTALLOPTIONS_WRITE "allusers.ini" "Field 3" listitems $(LIST_SecAllUsersUI) !insertmacro MUI_INSTALLOPTIONS_WRITE "allusers.ini" "Field 3" state $(STATE_SecAllUsersUI) !insertmacro MUI_HEADER_TEXT "$(TITLE_SecAllUsersUI)" "$(SUBTITLE_SecAllUsersUI)" !insertmacro MUI_INSTALLOPTIONS_DISPLAY "allusers.ini" FunctionEnd gwhere-0.2.3/win32/config.h.in0000644000175000017500000002117310241225776014436 0ustar bartbart/* config.h. Generated automatically by configure. */ /* config.h.in. Generated automatically from configure.in by autoheader 2.13. */ /* Define if using alloca.c. */ /* #undef C_ALLOCA */ /* Define to empty if the keyword does not work. */ /* #undef const */ /* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. This function is required for alloca.c support on those systems. */ /* #undef CRAY_STACKSEG_END */ /* Define to `int' if doesn't define. */ /* #undef gid_t */ /* Define if you have alloca, as a function or macro. */ #define HAVE_ALLOCA 1 /* Define if you have and it should be used (not on Ultrix). */ #define HAVE_ALLOCA_H 1 /* Define if your system has a working fnmatch function. */ #define HAVE_FNMATCH 1 /* Define if you have a working `mmap' system call. */ #define HAVE_MMAP 1 /* Define if you have that is POSIX.1 compatible. */ #define HAVE_SYS_WAIT_H 1 /* Define as __inline if that's what the C compiler calls it. */ /* #undef inline */ /* Define to `long' if doesn't define. */ /* #undef off_t */ /* Define as the return type of signal handlers (int or void). */ #define RETSIGTYPE void /* Define to `unsigned' if doesn't define. */ /* #undef size_t */ /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ /* #undef STACK_DIRECTION */ /* Define if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if your declares struct tm. */ /* #undef TM_IN_SYS_TIME */ /* Define to `int' if doesn't define. */ /* #undef uid_t */ #define PROJECT_NAME "GWhere" /* #undef HAVE_CATGETS */ #define HAVE_GETTEXT 1 #define HAVE_LC_MESSAGES 1 #define HAVE_STPCPY 1 /* #undef HAVE_LIBSM */ #define PACKAGE_LOCALE_DIR "locale" #define PACKAGE_DATA_DIR "" #define PACKAGE_PLUGINS_DIR "plugins" #define PACKAGE_PLUGINS_CATALOG_DIR "plugins\\catalog" #define PACKAGE_PLUGINS_DESCRIPTION_DIR "plugins\\descr" #define GW_PROG_PATH_MOUNT "" #define GW_PROG_PATH_UMOUNT "" /* #undef GW_DEBUG_MODE */ /* #undef GW_DEBUG_TIME */ /* #undef GW_DEBUG_TOOLS_COMPONENT */ /* #undef GW_DEBUG_DATA_COMPONENT */ /* #undef GW_DEBUG_GUI_COMPONENT */ /* #undef GW_DEBUG_GUI_CALLBACK_COMPONENT */ /* #define GW_DEBUG_MODE 1 #define GW_DEBUG_TIME 1 #define GW_DEBUG_TOOLS_COMPONENT 1 #define GW_DEBUG_DATA_COMPONENT 1 #define GW_DEBUG_GUI_COMPONENT 1 #define GW_DEBUG_GUI_CALLBACK_COMPONENT 1 #define GW_DEBUG_PLUGIN_SETTINGS_COMPONENT 1 */ /* #undef HAVE_GTK12 */ #define HAVE_GTK20 1 /* Define if you have the __argz_count function. */ #define HAVE___ARGZ_COUNT 1 /* Define if you have the __argz_next function. */ #define HAVE___ARGZ_NEXT 1 /* Define if you have the __argz_stringify function. */ #define HAVE___ARGZ_STRINGIFY 1 /* Define if you have the dcgettext function. */ #define HAVE_DCGETTEXT 1 /* Define if you have the dup2 function. */ #define HAVE_DUP2 1 /* Define if you have the feof_unlocked function. */ #define HAVE_FEOF_UNLOCKED 1 /* Define if you have the fgets_unlocked function. */ #define HAVE_FGETS_UNLOCKED 1 /* Define if you have the getcwd function. */ #define HAVE_GETCWD 1 /* Define if you have the getegid function. */ #define HAVE_GETEGID 1 /* Define if you have the geteuid function. */ #define HAVE_GETEUID 1 /* Define if you have the getfsent function. */ #define HAVE_GETFSENT 1 /* Define if you have the getgid function. */ #define HAVE_GETGID 1 /* Define if you have the getmntent function. */ #define HAVE_GETMNTENT 1 /* Define if you have the getpagesize function. */ #define HAVE_GETPAGESIZE 1 /* Define if you have the getuid function. */ #define HAVE_GETUID 1 /* Define if you have the getwd function. */ #define HAVE_GETWD 1 /* Define if you have the hasmntopt function. */ #define HAVE_HASMNTOPT 1 /* Define if you have the mempcpy function. */ #define HAVE_MEMPCPY 1 /* Define if you have the memset function. */ #define HAVE_MEMSET 1 /* Define if you have the mkdir function. */ #define HAVE_MKDIR 1 /* Define if you have the munmap function. */ #define HAVE_MUNMAP 1 /* Define if you have the putenv function. */ #define HAVE_PUTENV 1 /* Define if you have the regcomp function. */ #define HAVE_REGCOMP 1 /* Define if you have the setenv function. */ #define HAVE_SETENV 1 /* Define if you have the setlocale function. */ #define HAVE_SETLOCALE 1 /* Define if you have the stpcpy function. */ #define HAVE_STPCPY 1 /* Define if you have the strcasecmp function. */ #define HAVE_STRCASECMP 1 /* Define if you have the strchr function. */ #define HAVE_STRCHR 1 /* Define if you have the strdup function. */ #define HAVE_STRDUP 1 /* Define if you have the strerror function. */ #define HAVE_STRERROR 1 /* Define if you have the strstr function. */ #define HAVE_STRSTR 1 /* Define if you have the strtoul function. */ #define HAVE_STRTOUL 1 /* Define if you have the tsearch function. */ #define HAVE_TSEARCH 1 /* Define if you have the header file. */ #define HAVE_ARGZ_H 1 /* Define if you have the header file. */ #define HAVE_DIRENT_H 1 /* Define if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define if you have the header file. */ #define HAVE_LIBINTL_H 1 /* Define if you have the header file. */ #define HAVE_LIMITS_H 1 /* Define if you have the header file. */ #define HAVE_LOCALE_H 1 /* Define if you have the header file. */ #define HAVE_MALLOC_H 1 /* Define if you have the header file. */ #define HAVE_MNTENT_H 1 /* Define if you have the header file. */ /* #undef HAVE_NDIR_H */ /* Define if you have the header file. */ #define HAVE_NL_TYPES_H 1 /* Define if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define if you have the header file. */ #define HAVE_STRING_H 1 /* Define if you have the header file. */ /* #undef HAVE_SYS_DIR_H */ /* Define if you have the header file. */ #define HAVE_SYS_IOCTL_H 1 /* Define if you have the header file. */ #define HAVE_SYS_MOUNT_H 1 /* Define if you have the header file. */ /* #undef HAVE_SYS_NDIR_H */ /* Define if you have the header file. */ #define HAVE_SYS_PARAM_H 1 /* Define if you have the header file. */ #define HAVE_SYS_VFS_H 1 /* Define if you have the header file. */ #define HAVE_UNISTD_H 1 /* Define if you have the z library (-lz). */ #define HAVE_LIBZ 1 /* Name of package */ #define PACKAGE "gwhere" /* Version number of package */ #define VERSION "@VERSION@" /* Define if you have the iconv() function. */ #define HAVE_ICONV 1 /* Define as const if the declaration of iconv() needs const. */ #define ICONV_CONST /* Define if you have and nl_langinfo(CODESET). */ #define HAVE_LANGINFO_CODESET 1 /* Define if your file defines LC_MESSAGES. */ #define HAVE_LC_MESSAGES 1 /* Define to 1 if translation of program messages to the user's native language is requested. */ #define ENABLE_NLS 1 /* Define if the GNU gettext() function is already present or preinstalled. */ #define HAVE_GETTEXT 1 /* Define all used string in the win32 installer */ #define InstTypeFull N_("Full") #define InstTypeCompact N_("Compact") #define TITLE_SecCopyUI N_("GWhere (requiered)") #define DESC_SecCopyUI N_("Main engine application.") #define TITLE_SecCopyGTK N_("GTK+ 2.6 RunTime (required)") #define DESC_SecCopyGTK N_("RunTime for GUI environment.") #define TITLE_SecCopyPLUGINS N_("Plugins") #define DESC_SecCopyPLUGINS N_("Plugins for auto extraction of file descriptions and plugins for importation/exportation of catalogs.") #define TITLE_SecCopyLANG N_("Languages Files") #define DESC_SecCopyLANG N_("All languages files for the program translation.") #define UninstBefore N_("You must uninstall your last version of GWhere") #define InstAlready N_("Installer already running") #define TITLE_SecAllUsersUI N_("Install options") #define SUBTITLE_SecAllUsersUI N_("Which users can run GWhere ?") #define SUBSUBTITLE_SecAllUsersUI N_("GWhere install rights access") #define ASK_SecAllUsersUI N_("GWhere can be installed for all users or only for current user. Select for which you want install GWhere please.") #define LIST_SecAllUsersUI N_("All users|Current user") #define STATE_SecAllUsersUI N_("All users") gwhere-0.2.3/win32/allusers.ini0000644000175000017500000000070210044037516014733 0ustar bartbart[Settings] NumFields=3 [Field 1] Type=label ;Text=GWhere install rights access Left=0 Right=-1 Top=0 Bottom=10 [Field 2] Type=label Left=0 Right=-1 Top=20 Bottom=50 flags=MULTILINE ;Text=GWhere can be installed for all users or only for current user. Select for which you want install GWhere please. [Field 3] Type=droplist ;ListItems=All users|Current user Left=0 Right=-1 Top=60 Bottom=120 MinLen=1 ;State=All users gwhere-0.2.3/autoscan.log0000644000175000017500000000000010130615465013746 0ustar bartbartgwhere-0.2.3/slackware/0000755000175000017500000000000010506575527013427 5ustar bartbartgwhere-0.2.3/slackware/GWhere.desktop0000644000175000017500000000054210244172472016173 0ustar bartbart[Desktop Entry] Comment= Comment[en_US]= Encoding=UTF-8 Exec='/usr/bin/gwhere' GenericName=CD Catalog GenericName[en_US]=CD Catalog Icon=/usr/share/pixmaps/gwhere.xpm MimeType= Name=GWhere Name[en_US]=GWhere Path=$HOME StartupNotify=false Terminal=false TerminalOptions= Type=Application X-DCOP-ServiceType=none X-KDE-SubstituteUID=false X-KDE-Username= gwhere-0.2.3/slackware/gwhere.SlackBuild0000644000175000017500000000377010255621234016642 0ustar bartbart#!/bin/sh # # Date Last Modified: 2005-05-26 (YYYY-MM-DD) # Author: Venelin Georgiev xyzt2@yahoo.com # NAME=gwhere VERSION=0.2.0 DEVELOPMENT= ARCH=i486 BUILD=1 CWD=`pwd` TMP=/tmp SRC=$TMP ### must be absolute PATH PKGDIR=$TMP/package-$NAME ### must be only file name without the extention if [ "x$DEVELOPMENT" = "x" ]; then PKGNAME=$NAME-$VERSION-$ARCH-$BUILD TARNAME=$NAME-$VERSION else PKGNAME=$NAME-$VERSION.$DEVELOPMENT-$ARCH-$BUILD TARNAME=$NAME-$VERSION-$DEVELOPMENT fi # Prepare the framework and extract the package: cd $TMP if [ $? -ne 0 ]; then mkdir $TMP if [ $? -ne 0 ]; then echo -e "\n\n\nERROR: Cannot cd to dir \"$TMP\" or CANNOT create it\n" exit 1 fi fi cd $SRC if [ $? -ne 0 ]; then mkdir $SRC if [ $? -ne 0 ]; then echo -e "\n\n\nERROR: Cannot cd to dir \"$SRC\" or CANNOT create it\n" exit 1 fi fi echo -ne "INFO:\tCleaning..." cd $TMP rm -rf $PKGDIR $PKGNAME.tgz cd $SRC rm -rf $NAME-$VERSION echo done tar -jxvpf $CWD/$TARNAME.tar.bz2 mkdir -p $PKGDIR cd $SRC/$NAME-$VERSION TEST=/TESTER unset TEST ./configure \ --sysconfdir=$TEST/etc \ --prefix=$TEST/usr \ --without-catgets \ --without-included-gettext \ --disable-nls make make install DESTDIR=$PKGDIR # # Docs # mkdir -p $PKGDIR/usr/doc/$NAME-$VERSION cp README NEWS TODO INSTALL ChangeLog COPYING BUGS AUTHORS ABOUT-NLS \ $PKGDIR/usr/doc/$NAME-$VERSION mkdir -p $PKGDIR/opt/kde/share/applnk/Utilities cp $CWD/GWhere.desktop $PKGDIR/opt/kde/share/applnk/Utilities ( cd $PKGDIR/usr/doc/$NAME-$VERSION; chown -R 0.0 *; find . -type f -exec chmod 0644 {} \; ; find . -type d -exec chmod 0755 {} \; ; ) # # Man Pages # ( cd $PKGDIR/usr/man/man1; gzip -f * ) # # Chown to root.bin for Binaries # ( cd $PKGDIR/usr/bin chown -R 0.bin * ) # # Finalizing package # mkdir -p $PKGDIR/install cat $CWD/slack-desc > $PKGDIR/install/slack-desc cd $PKGDIR makepkg -l y -c n /tmp/$PKGNAME.tgz # Clean up the extra stuff: if [ "$1" = "--cleanup" ]; then rm -rf $SRC/$NAME-$VERSION rm -rf $PKGDIR fi gwhere-0.2.3/slackware/slack-desc0000644000175000017500000000101710244172476015355 0ustar bartbartgwhere: GWhere gwhere: gwhere: GWhere allows you to manage a catalog of your CDs and any gwhere: other removable media (such as hard disks, floppy disks, gwhere: Zip disks, CD-ROMs, etc...) indexed in a database. gwhere: It is easy to browse your CDs or to make a quick search gwhere: without needing to insert each CD one after another. gwhere: GWhere is not finalized, but it will still work. gwhere: GWhere is free and under GNU GPL license. gwhere: gwhere: Packager: Venelin Georgiev (xyzt2@yahoo.com) gwhere-0.2.3/slackware/Makefile.am0000644000175000017500000000013110247155104015441 0ustar bartbartEXTRA_DIST = GWhere.desktop \ gwhere.SlackBuild \ slack-desc \ README.SlackPackage gwhere-0.2.3/slackware/Makefile.in0000644000175000017500000001333610506327563015475 0ustar bartbart# Makefile.in generated automatically by automake 1.4-p4 from Makefile.am # Copyright (C) 1994, 1995-8, 1999 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. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AR = @AR@ AS = @AS@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CXX = @CXX@ CXXCPP = @CXXCPP@ DATADIRNAME = @DATADIRNAME@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ GCJ = @GCJ@ GCJFLAGS = @GCJFLAGS@ GENCAT = @GENCAT@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_CONFIG = @GTK_CONFIG@ GTK_LIBS = @GTK_LIBS@ GW_PROG_PATH_MOUNT = @GW_PROG_PATH_MOUNT@ GW_PROG_PATH_UMOUNT = @GW_PROG_PATH_UMOUNT@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_LIB = @HAVE_LIB@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_WPRINTF = @HAVE_WPRINTF@ HOST_OS = @HOST_OS@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LIB = @LIB@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIB = @LTLIB@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PROJECT_NAME = @PROJECT_NAME@ RANLIB = @RANLIB@ RC = @RC@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ EXTRA_DIST = GWhere.desktop gwhere.SlackBuild slack-desc README.SlackPackage mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu slackware/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = slackware distdir: $(DISTFILES) here=`cd $(top_builddir) && pwd`; \ top_distdir=`cd $(top_distdir) && pwd`; \ distdir=`cd $(distdir) && pwd`; \ cd $(top_srcdir) \ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu slackware/Makefile @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am -rm -f libtool distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # 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: gwhere-0.2.3/slackware/README.SlackPackage0000644000175000017500000000041410247154473016611 0ustar bartbartTo build Slackware package do the following Copy tar.bz2 file of GWhere sources to some directory, for example /tmp/gwhere.src/ Next Copy gwhere.SlackBuild, slack-desk and GWhere.desktop files to the same directory. Next go to it and run gwhere.SlackBuild