tickr_0.6.4.orig/0000755000175000017500000000000012147427510013245 5ustar manutmmanutmtickr_0.6.4.orig/doc/0000755000175000017500000000000012147427510014012 5ustar manutmmanutmtickr_0.6.4.orig/doc/feed_formats/0000775000175000017500000000000012147427510016452 5ustar manutmmanutmtickr_0.6.4.orig/doc/feed_formats/atom.xml0000664000175000017500000000070212147427510020133 0ustar manutmmanutm FEED_TITLE_(atom) ENTRY_1_TITLE ENTRY_1_SUMMARY ENTRY_2_TITLE ENTRY_2_SUMMARY ENTRY_3_TITLE ENTRY_3_SUMMARY tickr_0.6.4.orig/doc/feed_formats/rss10.xml0000664000175000017500000000105012147427510020140 0ustar manutmmanutm FEED_TITLE_(rss1.0) FEED_LINK ITEM_1_TITLE ITEM_1_DESCRIPTION ITEM_1_LINK ITEM_2_TITLE ITEM_2_DESCRIPTION ITEM_2_LINK ITEM_3_TITLE ITEM_3_DESCRIPTION ITEM_3_LINK tickr_0.6.4.orig/doc/feed_formats/rss20.xml0000664000175000017500000000076712147427510020157 0ustar manutmmanutm FEED_TITLE_(rss2.0) FEED_LINK ITEM_1_TITLE ITEM_1_DESCRIPTION ITEM_1_LINK ITEM_2_TITLE ITEM_2_DESCRIPTION ITEM_2_LINK ITEM_3_TITLE ITEM_3_DESCRIPTION ITEM_3_LINK tickr_0.6.4.orig/doc/widgets_packing0000755000175000017500000000226412147427510017106 0ustar manutmmanutmwidgets packing --------------- ----------[env->win]--------------------------------------------- | | | --------------------[main_hbox]-------------------------- | | | | | | | ----[vbox_ticker]----- -----[vbox_clock]----- | | | | | | | | | | | | | -------------- | | -------------- | | | | | | | | | | | | | | | | | | | drw_a | | | | drwa_clock | | | | | | | | | | | | | | | | | | | -------------- | | -------------- | | | | | | | | | | | | | ---------------------- ---------------------- | | | | | | | --------------------------------------------------------- | | | ----------------------------------------------------------------- tickr_0.6.4.orig/INSTALL0000644000175000017500000003633212147427510014305 0ustar manutmmanutmInstallation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. 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, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. 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. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use 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 `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer 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. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= 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'. 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. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. tickr_0.6.4.orig/depcomp0000755000175000017500000004426712147427510014637 0ustar manutmmanutm#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2009-04-28.21; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 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, see . # 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 Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u="sed s,\\\\\\\\,/,g" depmode=msvisualcpp fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: tickr_0.6.4.orig/tickr.desktop0000755000175000017500000000042712147427510015762 0ustar manutmmanutm [Desktop Entry] Version=1.0 Type=Application Terminal=false Name=Tickr - Feed Reader Icon=/usr/share/tickr/pixmaps/tickr-icon.xpm Exec=/usr/bin/tickr Comment=GTK-based highly graphically-customizable Feed Ticker Categories=GNOME;GTK;Network;News Name[en_US]=Tickr - Feed Reader tickr_0.6.4.orig/tickr-url-list0000644000175000017500000000527112147427510016062 0ustar manutmmanutm- 0http://feeds.arstechnica.com/arstechnica/index>Ars Technica - 0http://feeds.feedburner.com/d0od>Omg! Ubuntu! - 0http://feeds.feedburner.com/ubuntu-news?format=xml>Ubuntu Fridge - 0http://feeds.finance.yahoo.com/rss/2.0/category-stocks?region=US&lang=en-US>Yahoo! Finance: Stocks News - 0http://newsrss.bbc.co.uk/rss/newsonline_world_edition/business/rss.xml>BBC News - Business * 0http://newsrss.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml>BBC News - Home * 0http://newsrss.bbc.co.uk/rss/newsonline_world_edition/science/nature/rss.xml>BBC News - Science & Environment * 0http://newsrss.bbc.co.uk/rss/newsonline_world_edition/technology/rss.xml>BBC News - Technology - 0http://newsrss.bbc.co.uk/rss/sportonline_world_edition/motorsport/formula_one/rss.xml>BBC Sport | Motorsport | Formula 1 | World Edition - 0http://nyt.hs.fi/rss>Nyt - 0http://planet.debian.net/rss20.xml>Planet Debian - 0http://planet.ubuntu.com/rss20.xml>Planet Ubuntu - 0http://rss.cnn.com/rss/edition.rss>CNN.com - 0http://rss.slashdot.org/Slashdot/slashdot>Slashdot - 0http://rss.weather.com/rss/national/rss_nwf_rss.xml?cm_ven=NWF&cm_cat=rss&par=NWF_rss>The Weather Channel: National Weather Outlook - 0http://static.feed.rbc.ru/rbc/logical/rbcdaily.ru/daily.rss>РБК daily - последний выпуск - 0http://tuxmobil.org/tuxmobil_rss.rdf>TuxMobil - 0http://www.aamulehti.fi/cs/Satellite?c=AMChannelFeed_C&cid=1194596264225&p=1194596117294&pagename=KAL_newssite%2FAMChannelFeed_C%2FAMArticleFeedIngressRSS20>Aamulehden uutiset - 0http://www.france24.com/fr/monde/rss>Info, news & actualité, information internationale en direc - 0http://www.guardian.co.uk/news/blog/rss>News: News blog | guardian.co.uk - 0http://www.hs.fi/uutiset/rss/>Uutiset - HS.fi - 0http://www.nasa.gov/rss/breaking_news.rss>NASA Breaking News - 0http://www.nasa.gov/rss/shuttle_station.rss>Space Shuttle and International Space Station News - 0http://www.nasdaq.com/aspxcontent/NasdaqRSS.aspx?data=quotes&symbol=IBM&symbol=GOOG&symbol=YAHO>NASDAQ.com Stock Tracker - 0http://www.nasdaq.com/aspxcontent/NasdaqRSS.aspx?data=uvup>Stocks Up on Unusual Volume - 0http://www.nytimes.com/services/xml/rss/nyt/International.xml>NYT > World - 0http://www.rususa.com/tools/rss/feed.asp-rss-newsrus>RusUSA.com News: News in Russian - 0http://www.ts.fi/online/rss.xml>Turun Sanomat - Uutiset - RSS - 0http://www.tv5.org/TV5Site/rss/actualites.php?rub=12>TV5.org info - Nouvelles technologies - 0http://www.tv5.org/TV5Site/rss/actualites.php?rub=14>TV5.org info - Science/environnement - 0http://www.tv5.org/TV5Site/rss/actualites.php?rub=2>TV5.org info - Monde - 0http://www.tv5.org/TV5Site/rss/actualites.php?rub=7>TV5.org info - Economie/finances tickr_0.6.4.orig/missing0000755000175000017500000002623312147427510014652 0ustar manutmmanutm#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar*) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: tickr_0.6.4.orig/AUTHORS0000644000175000017500000000005512147427510014315 0ustar manutmmanutmEmmanuel Thomas-Maurin tickr_0.6.4.orig/config.h.in0000644000175000017500000000551212147427510015273 0ustar manutmmanutm/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #undef HAVE_REALLOC /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* 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 `strncasecmp' function. */ #undef HAVE_STRNCASECMP /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_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_UNISTD_H /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O /* 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 home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to rpl_realloc if the replacement function should be used. */ #undef realloc /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `int' if does not define. */ #undef ssize_t tickr_0.6.4.orig/images/0000755000175000017500000000000012147427510014512 5ustar manutmmanutmtickr_0.6.4.orig/images/tickr-rss-icon.png0000644000175000017500000000634412147427510020076 0ustar manutmmanutmPNG  IHDRPPsRGBbKGD pHYs  tIME -2zXtEXtCommentCreated with GIMPW ?IDATx[lߙ=-7JBC (6jQCZFBJBd-.)***/T+MQR TԆJ&qķagֻ띝3k'ۻ;}U>yQz>|p~qk!ٛ+빎 "/\"憎>av5c?fNEi+OEzKzǒ,U[ tu]Ƞ (,"v9"Mk  |z b@ S&9Q@  /_<J^3!P X1xx0O3\^%Aȣ}[Ӌ0M諬&ĄP ւiIJaφ* (6Z'l,th揲:'HV^pW6+Z txs5H*k\ʇ^y1ӶJ@6f+o'e:yR V]gE ifhbnLYROa1Ê)LT(|ڒoM!'?ȹ^u{!ڎڬʓpR@Z1\ pƅ ur< |uVף<׀QUyԥ?*Sd6"xjQ\ o-k'c@/W(ŸzgsO]eS^5O*x D}N‘8Fҩ>MfC<|T!@1'`TY>mO^!ԵyK9v;cIy(~h+㬼r!y`"xZ(5Za,ۣ!\h[T-*ϢgdFdL}Դ`Sxe`!9㤼k`*е0ÓwTimk}7bW&k (O40j6В:h:;#[dfdouC|XsfJ8m+i TsV9Y/6'c ޢiKzd pY,)C&Y:8+//L" Ӓ2-h~HfFȑSznf)/cMyPi_wUKk)/ ^R"V>=s+|e(o1]|Κ oLc|%fQڌ1Exr-7L/4FLاW ^uC:+/! n&8UK>&83I6q~=.ʋ~/ӌ1.s* P+?M~-|9<fj9xQ( /n̩>&\\ݮ[w@RJxI\rSoL~H&[K_rnkύWMU4^r4KJ,sc;e|l:yT[,)MWUKUeY-Ďeo=' Ţ'!rUֳ6ByʳNIm$8lru*/<*:jU]^xɆ2tI|:PuQxՍiGYyuUZ;ӳk/uk;+B{YS* 8c4⺦V)/O h*qUfzUٽwr:?"1iWoq}$uIni51ݞ@UQ^eN9N%+*Vϳ{!\N8 MfNJʳ Li4Q4ǵsk$ZR JMW`9.2Yu 8<SlWIENDB`tickr_0.6.4.orig/images/tickr-logo.png0000644000175000017500000005164212147427510017302 0ustar manutmmanutmPNG  IHDR,kWsRGBbKGD pHYs  tIME-ItEXtCommentCreated with GIMPW IDATxi$Y%x{f[l/UI-Jk$]H$ffzAts3t03= 2f; $pHhATURU eef垱yޝfaKwez={&v/oo;*Omc"MMɏZ,^_>>eZUusKZ^;ԩ_>x<׽t35*No̹~H#ZN&9H^юS$ mX +0kX\d%o}5وo2At/FKQSꀍZT7@mX[1p5LjqՑѷ4,G_q#0itIHZ`X(Vle}H%g-;ѱ|˻_ko`}z/k!h0XmR*Vil@`[yK`:qeSfi烻~|?qxY#J@n{H}Ǚ$')$y$lxYp X[!S~ز<4ۦj5o1)g@vƀH܀ɋ {L$!ilԽ8?^<~J- T'~jmzf2&v#px/3Szml& .{YkkVR _UBzeJ3qU( E FOupֹ>g2qÒ=ܩOuĮ]йBwf^SȾ5Ԧ@*ؔ/ m!{~Mc߁.{}xv-M9h6faZ3ȼsl/z~f dsb5fXLwM5^F֦j $y8 r@+2IP{F[qm{,kl!@ 25iSSi5<:^hR!~b .)[^sl;=Gc.w(I&, U,50 -Mh(m@\K<٘unKU5 ,jzpǿ<{ @rmMlbW X{c߽W5zր>!9|TzS'C14@hɚ ə Vg4W3tXXCXC ,k@ju9).x¾ lz vqv'N5aY؍gX%rQ۳i_k"TI@83EfNVYg"cKa {{VRil {ZAZS MXƾt5!hFhPyG9ѳ&6XWӠ5,^-0ך$IOƓ uEc xxdeg 9hik7v5}B" [2 T姸!z*pf+$%3ZV#7zҕ.d lvlR2׈_řdAK+ kf^vX#(0{ǹ=gileٺɚi3:G/khY0 ̜¢6ب 0]%x}E1a~%VtO.v~$[>;]e02 ҴZ>eHAOc6Kא2@1xxɜX<Ԍw.mLf-LQy̪FsF265.3qޖmK4(\KQWJ$E$/N=f5b -\9pP!= !'sN9*̢0e_)4yHKֲ*L2ǎؙ"4~ P";>"_+<ȧ60m+~* w4pmZ_ ]oPnĂf@yh"գk$9p9IWsτ)48y./K.vЬL4W 519*3dsy^K;}%;liea@UmU32lƴ6fDy_Uj#dju1y7!Y͡$  9z@1~ʢ҂:K1։]`@E䁗I|0I…Y%j5wW-?n jIБo^lօ nXUp-WTDSσrGT L[Vk6`@ >X9珬FGC_ 4LFXqWů >pG<ξnq׽mǫ ָཱྀUyyٯb+޷KzoZƞ8h nvUh02^{HYOk9 {rp_C_В<$KIZ`vC n"#P%s\"*j \'| NVz$Uh+ǻ`plv\/]9~t;|7ɷ 4j'<"#SNxH{H jW7{xll~-U**gOe:^k‘<%I fà 0ckoٰ!FXm% +c/ؖ'i 9a9d].24-^˳IH*YkS'v=^+[lέ F@fnh~^χE4WK^o*/q$IF3[|XrW^ ˇHUxW/YD WϠ,c| dWu֣=0=Պ>8좥I뭵18.¸|yd!ze"kn10JUlx4&٩xn `$6_;I(FKC / zIK4@Vc0'I@>{m KfWܧp}v72`% ID >d Ly4w݀#h dd10\ΰ3}KGC4@C8i)ȗam9=Wykb# XQttPQL3Rna ^A_|e^O@t: VR*\of X%@&X XQYS\ a^0_Nc @%,}fI hz8e/""ާi 眐/cA`J=eRzɶl: iY$BBrB r)hX77i!Īv@wIBv^B@> />W4&hq WE6kAcazb'G@`C7`&YjjFltHӊ Y(Y e i{ast8aN %Ho?`= _ Ac@AJ..!ɷWl$[ahp#f/D n\̝*I?*X]-.-]1+v#%O,K`lTV! ^yyL~9⩡ɞ^[5)'&@hَ`}LS*Vxc f ?}>X0t{ a9elfCYtd Rw@N\*,+=rYI,^td,Er;拁@CnDE¥؍?k>!&X (~3[9{IZM>@HV˧fQeͦ:01cL^lF yvzvUÙ%f|m1s5m -!Ln\mvZh1tq17F5ZS8v|, l<##x{DJ.Z;It *XL%'Gci4MDZ.1|~l6!2uL(Qγ! V"]SH~Tү( B55NGǒ^E_n?& X]aVg EG?.QIcJt+A~ߐ]uI\ Fk|_sHyІ>;$*R4pĴA`1au/#;`X.A&aj #h>Zz4|n~&լJӔI0MSDZM4<g.du3|& 2 r; -u1oIH+"/v:'yYn`KH~YeN\v?~XA!)pH6vb:2΢LyQ0Wʊ[ɛ^AZ} VdY,˔)t1{O=,Yq8-V=Q5>=؉ ȒAf+,8{x9\sg ~4E0H1QDK?:W׹=dcE&r_Et-U~Ej R𛅫wͬ ե o" )Fu _ny+}?Udݽ*+E\TDMMϛma^S`(yo]$}<pp8Ka7Ck VC1\4|l+{ <|bhadk5")L2K<7'Nhl3SՒ`c1ZsjV9yREVKZ.4Gnr+gs vGcՖ.u?Gwù$ROzk|c Z'z Lff9xeCoPna?m-f N_ٜaql}ǃsba=Pc*B(Eײ"O?__b Ow|;܋]ȧec??b%n r`VWBe0YL$ˠm.mԃ{ϛv[khkA? eٺ8*0`ioG" 4䑥 -li{Cs|ϧ036ej:V}  IDATNbTT5.ip= f^ &l6`eaMOe8C hLP~ h֬Ͷ0]Zr>0ৢ Vv4$}m&1_z6M7lDc(1dh|oܡ $aȲEq\GXL}Y?xhF3*9TRhҨIW‹N&D4 z7(<qVŚpTձUDf $?XFz(VO~ ndvKwr0Ӭٚ2333l Jt̒5Y"I={xI}/!Ռϐ8kLJO|`(d"ybjs2w 8ܪ%5^ mA)ܡa˔~ykxܫyZ{cJzs/G%z ^r?J.vq?7ߓEfmچ2VQSH8Y`dt>a9O 5:R齐%CZzp&]m02aJyA/!Ϟ3:bJ)m3|JpBrI|; ^z=}NA7 T,ɋpè*[A?c$g`ʂp?vap[σ6h,$d5<%䇞h9@&OcWK퉒`8_,.)k'OQuU܌uĮ`&.,$qS7|}ɷ}ʹ O|ckPYF5/. ~^ϋ`w>h狐}0/*]>}ޯ;Era"MV1dj:~ 2 -*{ E;wFIU(ntpO-(~zQIVSQ^kZu'ug|Q*5vw; (?,GnE8C'nK"8R ew= K LHRY擻$eYYhEIxH: {O.2)b!Qn4]jgfۡ)l9GCkH#Wa cÙ6#.᭦aU4VsWⰦ,wKX'|kݞo|Xlΰl#iM z.'gN,g\첏by/ %)^Vf_#9|fEXA`(EM‘8G8OZyI>/G%sY}'Z5]Bˢ=9@VSd#(Qm-N9lz$* ilAkR+ݐ;H~oә.d_.v2o&ԃpf3/sC$!Xkno| ffX@KH^fW{:>c!,++qTYh`GOeHLؼ!q;\'>(N==TZ84ef? A/iv,䜤귫R(@"Q~\&{N篮b[o"yͪW{ ;Ep)EÀHg"}>F:5zܱrY/h|yB0-km`Ue*,2/K)=McOq*`Nv7Yd< jyRH~Wh]<&וdn[=6n_\]EQrXC$nw+)nAKJsV?{?~15Jf>H Ԃ+0-?f I0 .ОHxK*?KZ)]8"5JSe ,?<í]_NQoYܹJvŵv$-r9 κ3JV!=v;,FM4,  '(0J ~310&ƅƘcj=iY*&)}A8uI1wIr>/#c /RKh^0 P8s gcؕT.u(kXwN[qsZB"`JMIp%ਯ^Dbo|U%(ۘa1Th[yKK~N/.#"z1)ä[CaS~d0`eLC$ |'aƙ 9/2'!‹^Є/ގ:3nT`{}Õz}}8zK\ W|A{/ɽ0^/!5X_DRWHHwKFnRs~SH1OJ$$SI @F N hw. UŻLs1;|8 .!#;ԗyܔ7aR5UeN8Ra5@vSa{'[%dIOb ^R׺<*4\HEIܮ2f8G|dE5t,s1g(|/`ZՊy}8ZfMcV.K$_QY@3'.qJ\D0aj&L^ ;9p)Ak׮J `]'U6qG>8k;k}Nv:rͣAclKEE/[jƘq@@f"k1ƍ+'pB4#k TO Ck;5 ]z\?//$Ȏ5V@t.[Xڼ t9U:*6ѰJX*uQ$ ?t:ۯq t:w#_r&ݮza/WGܶ(Ƌ "۽nq4Ȑh9/`}-SđA($OGk-0̫ `GCSf|%(t%Ry鉀!UYKrbNo:Fc%{h1E`e^GEPr7;`_QzgV{pJg=3E0G^VR *כ eV=CS)Qltnqv^ttOO/[T|yG~IN篊J5izтv 2[rq NII@r8m+^/%Wg@X̹,\4@Cly0 =  KVUe7ƠVfaK Çvy wJ@#@ņVQp;; upHgJRXi0 sD-hAe$i,I0O_K \9ck}ɗHz$&yTҳN1I}EL~|HTҸ_Kף=nt>"闊L߰UJ2*IJط,`HatqD @.]sl as:x<|c)f@FLe1m}v+u_s#se۪!O 8EUs0+9n7mw]u:.e;$g/-X-*i{TmnXsˍ/5fBˉ1B^dizx`ix|e]%J,MYxDͺ&v5\ Dkeh.lkZ윭w57 cM9,M)[2<9b40t9c`6;(ʒR8I_Yy+CKU~D &?z`XLX8LB_Odɇ%˙+t16[Ŷ@*Q7vH6LIz%{׹ENscnWV3=E;Gw|0IS `EFh&S/zbv谖,O5y`0KY\ KEYӜ~i0LNce왎kU"!`h{6gKk6m57s&;] 5}(#' h`j-$-_C{,tAc2 z'/9(̢Z@5`yϟ=GV 5?H]~Oȗl"_+q6CI_*F[, vfpGcmD2!ֹ "cQy.^Oe8:6mR2t`f׈6YEqçI2He!gLR7i~Rd.F&*E,c#3;3Ãȫкtn,ɗǗiIt~yhV_rR9zbBû]jy-/ wvn{wrV^Y. Y^X7vU+"n2jQRxQ/Ty9Gd0 V$Z9UcCւoç}{0*m Ӻ!t" 1KWzuvW$% fxa($oej#_RS?rsyǎ/~E?5Qͪ NP\Z X[Qflcc.`7?JS\`vٳ˟g><$ƢoWu;ƒucӡ!0O{%ԅ8?"f[ @`أh~ vmGsP-d<| LaX[c/.քlBU.(ȃ6MmC6~Iq: uە]ݮxn*ɿ&I/'yp#rufd"ɺn"w݅N0$`KQaYT^6V`s+՟>7ӯw~7B1yey/]@m2.!V5}10aa}>0eC qJuVkmr"9VvB`"2@N䦺Nת`<֭dv{!_V6I-"bUsJZ%$iT].^/n{qj[Eb?S+tfu㍇tT]r__n$abQz-dPi1`kX+yWjAxT.ҹt@ *[Njbɀ ؠN6aYf  P^F5,@tʿ &6ȰAk#8FnZ"Y&@[2M1K*X*`m㠕V@j8&6Mlbڤ^mfg߃7K#r6#o|Ŏ_}NA0E2 7n]r`.`I|_L-5 d ^^p<# >Hʤ'vkb$=_9sU^[}>D|d׳MrL`bHx$|u/|`Ǥu&6ݢH "3cf0n]1w#o #|U&v `I›v"4? F? {d0k,%|=1aspI'v#kb[cN?`؎Bf wjA$q&vGcO .z~$@8"?uqH"{3NJ{1kDxӸPGlm /Cl^E$#=/BL֣?˷Gt_Gϼ/"m9D ]1sioqb?J_8*%x.Ca>p}0WĽv@E^o@SDJ 3$Ί8 g~+m3jvJ_[ <ᰈ 3|,J]_8Cx7xe}~/' pDqxdg6ֳޙUU{fh6MNZ(H $"Ch NЇV)>;-<(>eR@ 2R:MIqN4 |=^{ 3pԍҒcFeu,7e@|LfL6X"HQ1(泈HKd hCF 1lۖYܙXk}3Ys EmՍY[T"nkl,n6sOc] &a0V\Ҡ*#8\r:17eV ':3&imjV8Da )B2qT6捖m&9&\Os/Dwzj&CFE-,KVs3~skgF+G^Y(CK:wrH^Ap"p)2DoGV=Lif,bٵ:a>kq`_|\h5֦y m׀IGaZVIDATqnC 7Խcո `, 3Q  c'qņj`wax2NEu{=w~w'k1bK}'K+J1׌i@?^ەܾ@Us!IVlSDBFe)miU_K3Ci.es<OZR<8JưW.\fS?-y%Xo\*x$AƜ`=}NQqrB+C=G.JJbg:xb \oD.-e;Mįp,xy.!6*ü)cҽPTb<_?~'ʮ:HQx5yA!޸ cl;~!䭈NYZ͵ M2$0b M$*ΐpMS\q uQ x9.l_Ō[4='.lf'K ς;{1^(on_|8NJz..u}ͨ88zp?-  X 0ʜit2Zp|yE9kߊtQV򰾡ߛ/c^_p\ ]Fْ+p#AC7E ٯQPZ^-v6 gE]aKd<YSSxۇ{} ռDJ}DDQf1BR㏽W58g 78 1Q+^ԇX1NQDg0+,p`S8|KeN)6yfl~m߲ElYW qLX&ʦLɅ`3FE@pyN M7<øv(r@[HXײ>T2*(|x1.2p<{qKo*ݾf ᰖ.<({#4zŋ8~X_.nc;`? 7 o(q@?挓$((ѽT-W$6gQp^ҨgYQkXgBi.15 yU{wOKgQQv%fWpN"0Pb2!k #m 1!bt>oxol*^(#QVG8S8njo܋*(= e׷n,<`|r@e!# b+epQ݁9qי4Lb; Vl/q!x1;vhx6P6e QvjvpY0#:`T ֘ŋ6Hy6ɹ8'J+XM/[cܔcf9#wώ4ϴUTfl A䁕03g f N,jl5cB3id5},"rZVgzEJH*`\3"{Ta#ޔ`aq&7q/\@gz]A6-`Y}x$̨ݠïF,fxYͺS]esM&^38OY 9O֌8HEneՑ1 f}W&8<yi[7 zRnO J26fUB<װ.W%pGC5!Y2' N"hnܩ,KkAf,Z]_!%f(g@d-g̕qzzÌd 7/,Կ}Y\0q,EC͕1  q{̻2AS"9_6[K.#flpI’O01昸f's1bg1yA~9 qX 3vnT%oYDEﱰ/0^O1r>bcFB?d ^7Æ+*V3bz<VZ x0gN;E^ݡ:.R½8.d 눬75p~ ^6!HVsYDX[):ENJDsho(a+ 𗍳))@T40xi.N! 2Yo9uVˁK9=¨b#LV` FE:0bGH|BanE7Xx 7RaBY+dJ44E1VXBYX;'+W6Ts'qP)c/X,+c)uވo!gW:''OǶrpA,0r #}sx:'ɕMBppW*xy+&*âe6)x_a*U6VZhp|8>, ?IENDB`tickr_0.6.4.orig/images/tickr-icon.ico0000644000175000017500000005372612147427510017265 0ustar manutmmanutm00f h00 %  B hnS(0` ` @@@```@ `` @ ` `@@ @` `` @@ `` @ `phxpphhhXh`h 8@h(p x p`PXh8xp``XXh @```hH p@x XXX0x ((((`XX0x xx (X`hxxx8x x00(888HHH(P`hh Hxphx(880H@8XX`xx(XX@hPX(x`xHH   ( ( ((80088@0X0X8@XX``0h8p`hphppxxp@xxXh(P`pH(P0XXpXx8`8hXxP0hXX`8pHxX hh(p h0x8x(p(x8x@pHpxPp( (( 0((@8((00@@8(H8@HPHHPPHHHPXPP@HXHPXPXX0`8`HP`h``hh`8hPXh8p(@pX`p8x@x @x8(P@@ H PH` HXp`xHH`xHPXphxh`PxXxXPxXhxXX` `hSi777777777777777777777777iHi`@8::::::::::::::::::::::::8@`i3333333333333333333333333333+3+D+++33DDDDDD++++++DDDD+++++3+@Kv++KJJR++++++8uJJJJ@+++WJJJJu8vK@sR+++R^K++++QqpA+AfQQȇ2+Rs++Keode8+++2]UUL2+2NUUO2+MK22+/[ON*++2OOOOZ*+2~OO[]G2+KMMK2*GOOOOnc[22+*L/OO[*+2gL/O[5G22KMMK2*OOOOOZ222KN/O[]22+5N/O[+22KMMa22+ZOOO[O*2*//[g22*tP///Z222KM`a222EZ[~O+2Aaу///[*2.P//[*22K`@a****GӠ+*2ydT//NG***ʀP/N]t*2*K`@a******+2***y@dP//L2*.G//Lg2***a@@9******.***yud//n5G**9//n****a@@9********9mo///n**9KU///PG****a@@9....9Xmwo///L2*.XT/PN*****9@W9..ywwQpd/L+..XU//t..*.*9WW9.lK^Q¿T//L3..XRdL*.....9WW9.l+dT\//ի9Xm|pN]......98X.l+P/eff<<140Qfes9......98X.lfQQBBB^wC111-r00hB|||m9..X8mm|wVVVQ^wx111>{r0 Vw<111<<|mm88|11xxC1=1;-r00 B^C11111111|88<1111======;>-{_00IBC111111111<88<=====;;>4-,?_00 B z;=====1111<881;=>--,,F?_000 B;>>>>>;;====<881;>ޒ_0000 V;>>>>>>>>>>;;181>4k__0000 VIk4444444>4>>>>>18R=44k000000000 B 婸-------444444>>=R=44k0000000 BBI⩲--------------444=RR144kh BBIjY,,,,,-------------1RG<--kI I{,,,,,,,,,,,,,,,,,-----,,,,,,,,FFFFFFFFFF,,,,,,->1xCCCCCC;;;;;;;;;;;;;;;zCCCC????( @Xhpxx@phhh@Ph`XH`XX`````h`phh ````X`hhX```phX`xp`xxppphhhh`xhXPhxpp`XPX`pPHXX`X`XPXXXXXXX0@PXhXxPxphh@ Xpp `80(@@@PHHXPHXpPpP`p@8( xpX  (((0( 0080`P`h@88(00 @h X p(pPhPPP H(h00( Xp(Xh(x8PxHPP(( Px(X( 8phHXp ` p(08h(x8Hh 8hH(P @@h`0X0X(@ Hh0`0`(Hh`(PX pX8p`P(H(p8`H@@@@8@P` 8`80 (H0(( 0p@xHx0xHx8ph@x@p h(Hx0p 8h0h h0X(@h\ltx|pX|\DhhlpxxDTlh`XL`\\`dl`phltT$`hdd`\dhhddddd``\X\`d`thlhXdѻllllllllllllllllllġĵġϡlʨle`\vv\q\\1pp\uv\qp\\Mgp\qkz\MbvpwM_u\k\\M\MMu\MgurMkyk\\\MM[|auM_vuM\kyy[M[ZB }na_vM[_M\\kyL[MTnP_uqrNlt_vuMMM[LL[^_`tbcBB0bghNMMM[LLMOPRS/6T;I"0 YB[MLLB27EFGHI"G2BL&;9>?"72&3*5!##7'&V)*+,-!"#0 !."##$( ##$??( @hy{}~|ziVnkqx~}{yuWYko]Cg_R`abd{lomjjYRn|maN^ckababQAVZ_j}xqgb`]\ZU@w%TD*>;6?W|CZ\WP>DN,vyqq$q?p?@ABCD-./012345678!"#$%&'()*+,  (0` %  %()*+*++++++++++++++*+*)(% !/< D I L L M L M M M M M M M N N M M M M M L M L L J D</!  ';IPTWYYYYZZZZZZYXXYYYZZYYXXVSOI:' &>M h"Dy7c=j?l?l?k>k?k?k?k?k?k?k?k?k?j?k?k?k?k?k?k?k>k?l>k7c"E{ dK=& 7L#Dx9t6y(p#m!m"m"m"l"l"l"l"l"l"l"l"l"l"l"l"l"l"l"l"l"k!l#m(p6x9t#G{J7 ,B.X<!mcbbbaa`aaaaaaaaaaaaaaaaa`abb!l<~.YB,  /'L=hdfdeefddddddddeeeeeeddddeeefgbg='L/   C9x!oehg$s>GD0zkeffff%p?|IIIF4viei3vEIHI@}(qd!o9x C  ) &U4{gii,xDxVe}[^cY`kNn7znghgj!h6CVTSQXZ\VY]G@8%Nnfm'RHGEWY[WZ[STU59Adjg4{&T  ) 99qŨ&thh#s.g;96:72///444=6+3Mr'sjhhjZ%&%#())&'*;kgj6r()*(()!! [kh&t9qĩ 9 9?yϲ!qhkj(E !$ SpiilS Flgk3d  %_kg!q>yγ!8!:@zѳ rim^ <{ljiqFLlil+P  !8bjh q?zϳ!9!:>yҳ sjn] Akkln0Y *\klh"7 -Ygji!r>yг!: 9kmsc ""#,Qkmmm t7wԴ!:!;7wմ!voopppqqpmn)|?}BKZ41, "0`nn!vJ'" "Cpnnmu6vִ ; <5v״ uopoponoq w9H{JOU961"#$ Jnnu#o(,1(((#anpon t5uִ ;<4uشvpqqt w"z'~>LWpMLJ753"#$9rjno${*N0+%##%6jlqpoou4uִ ; ;2vٳwqq&z=PX[[sXWUEA;0// !! 0[fpo#|-n431,,+Zpqqppv2u׳ < <0uڴvqt$rDQcZajZ[\RLCB>8222#$% -Zboov.{6CW3/*"#$ " :qlpqrrpu0tش ; =-t۳wrug 0.,-./#$&!!!##$$# "! At l#x"x&|9FaD?9/01#""(\qrrrrqv-rڳ < <+sܲxsve !"",,-667??@HHHKJIOKEPYfPyPRSVhyxtoghiXXXRRRHII;84*W xspprrrw+sڲ = =*sݳwrw"m8:?IJLUWX[[Z^][_\X^][[`hXtSTUTYm~~zupoqffffeecef`^Y[nOLH=/!ytqv*r۳ < =(r޳&}0DS][U^ZT]ZU[Z[X^iWg}TtTVXVXcv󅕮~{xpqrfggdddccd^[WYbnRRTTUSOC1&|(qݳ = >&p߳IXWVWuVsWwW}WYYZ\Z`q鉑~|yoopgggeeeccd_^[[_dUUWVUUTTUWJ&p޳ > >'qOYXZZZ]^]]^_crۈ|ywnnofffeeecde_]Z[^bXY[[ZYXWXVVL%o߲ = >(rP\\]\\^_bim{ߐӃ~uvuklmhhhfffccd_]Y\_d[]_^^]\[\\ZZN&q > >*s߳T`_eosvxꓯ哢ޒ҆~yyynnoiiigggffgccd_\X]do^accbaa``_^]^R'r > !?+s޲Vaao◬ޚڙڕے׌ҁzwvvoopiiihggghhfghba_][W^nbegfeedcccca``T)r߲ ? "A,uYddgvuuфۆց}{zwutsoopklmiiiggggggffgccb^[W]agafikjihhhgfedeccW*t߱ "A*P .wZffffgkiiillmjkkhhihhhhhhhhihhifggcbb`]Z^`acvglnmmmlmljjjiihefZ-v *P 1^ 0x[hhgegjfgghhhghhhijghifghdcba_[^\Z^aeatimqsrrpopoonnmllkii[0y2^ @y0yXkkjcefdddddcca`a_\_\W^\X_bh`m~d}lquvvvuutstssrrqqonllY2zAy NabNonl`dg__b_ch_gsape{hkrvxy{zyyxxxxwxwvuutrqopObb"O"KBgtpmlmorvy{|||}}}|~~|}|||{{zxxutuhD"L#N6d#^TQtxwz{{|}~~}|{yzuS$^T8e#OJm;pWr~~sX=pmLJSyXTSVerxyz{||~~~~}||ysgWVSZUyLE0^ ORTYYY[\]^___`a`a`a`__^][ZZWRR 2^G????( @                     0;@CDCDDDDDDDDCDC@;0    "9[7Z)Ck)Cj(Bi(Bi(Bi(Bi(Cj(Bi)Cj)Cj(Bi(Cj(Cj(Bh)Cj)Ck7[Y8 " ,M 3!>i2m*q&o%o&o%n%n%o%o%n&n&n%n%n%n%n%m&n*p2m"?k3 -M%A )K}v2vjabc``aaabcbcaabbcdi1v)K}v%A 8 712qke$sA{H{1xjffi4rIzJ{?skg+oFxI}Ew#jj2p527 (E)O\(sf r7.$'-bmK5*@=9/#Sj(r)N\(E4`h#qk_:-03#@poqrv$Yh"Ygtv"b82(GGFROJYUNZ[]XpUUZp󃊕rniegja]XT`sC;.!xru"YgVh2ET]^_]eqYkXyVVVby킈pmjdfhb`^\_cTUWUQE2VhUgL\YWYZZ\ewჃnljeghba^\\]XYZWWWZKTgVgN^`cekw㍐{vpjjjfgib_[]_c\``^^\\\LUhXgRbo璭咥㔜ي{wqmmkgikeeea]W]gvbffdccb`aQWg[dUggxqf~{wvsoomkjjkghieedb_Y_`bazhlkjiiggefTZe$b^Wjfda^ghjgggedcda]a^Z_aecwjprqooonmljjX$c_7SEVoh`XM`_]`ab`fobqhnuxwvuuutssqnpWTF8O[ Eoqjknsx{|}||}|||{yxvwqF^ fJUR@[w~y\U@XNSNI>\nuwyy{|}}}}~}|zywp]K>P[JP7L5THTIVHWIYIZI[I\I\I]I[IZIZIXHVIUHO58 RL??(  @(M3mVWVVVVl3(L 3 O OP O N O P N2 "@nT"_gdb d h edh#b"@nT #gn:h*jhd:_bd:^#d"h  sK%2nLNRD s689 rV% 7vs"6U dMU r960&1Bprn"z6`4gs!.@hq',5$*4q$q?p;6?W|CZ\WP>DN,vyq(;)AVZ_j}xqgb`]\ZU@9 7Rn|灇maN^ckababQAYko]Cg_R`abd{lomjjY#Vnkqx}~}{yuWq"hy{}~~~|zi#ttickr_0.6.4.orig/images/tickr-icon.xpm0000644000175000017500000002315112147427510017304 0ustar manutmmanutm/* XPM */ static char * news_icon_xpm[] = { "32 32 475 2", " c None", ". c #F38E49", "+ c #FFA365", "@ c #FFAF79", "# c #FFB381", "$ c #FFB583", "% c #FFB584", "& c #FFB684", "* c #FFB686", "= c #FFB787", "- c #FFB788", "; c #FFB786", "> c #FFB685", ", c #FFB483", "' c #FFB07B", ") c #FFA367", "! c #F38E4B", "~ c #EE853E", "{ c #FFA76C", "] c #FFB17B", "^ c #FFB17C", "/ c #FFB27D", "( c #FFB27E", "_ c #FEB37F", ": c #FFB481", "< c #FFB482", "[ c #FFB582", "} c #FFB380", "| c #FFB27F", "1 c #FFB07C", "2 c #FFB07A", "3 c #FFA76D", "4 c #EE8640", "5 c #FF9854", "6 c #FFAA71", "7 c #DA996D", "8 c #AB8266", "9 c #B48768", "0 c #CB926C", "a c #ECA372", "b c #F7AA77", "c c #FDAE7B", "d c #FEB07C", "e c #FFAF7B", "f c #FFAF7A", "g c #FFAE7A", "h c #FFAE78", "i c #FFAD77", "j c #FFAC75", "k c #FFAB72", "l c #FF9955", "m c #FFA263", "n c #BA8A68", "o c #616263", "p c #5D5F61", "q c #5A5D5F", "r c #6F6660", "s c #A07D65", "t c #F8A974", "u c #FFAD76", "v c #FFAC74", "w c #FFAA73", "x c #FFAA72", "y c #FFA96F", "z c #FFA264", "A c #D66E28", "B c #FFA366", "C c #FFA568", "D c #BF8A67", "E c #656667", "F c #686868", "G c #676767", "H c #636464", "I c #826E61", "J c #D09269", "K c #F9A66F", "L c #FEAA71", "M c #FFA86F", "N c #FFA86D", "O c #FFA66C", "P c #FFA66B", "Q c #FFA468", "R c #D76F29", "S c #CF6B26", "T c #FFA163", "U c #C38C69", "V c #787A7C", "W c #7E7F7F", "X c #777777", "Y c #707070", "Z c #6A6A6A", "` c #696969", " . c #656565", ".. c #8C7260", "+. c #E99B67", "@. c #FDA66B", "#. c #FEA66B", "$. c #FFA66A", "%. c #FFA56A", "&. c #FFA469", "*. c #FFA466", "=. c #FFA061", "-. c #CF6A24", ";. c #CD6824", ">. c #FF9F5F", ",. c #F6AA76", "'. c #E6B18F", "). c #DFB394", "!. c #CBAB95", "~. c #A99E97", "{. c #878A8C", "]. c #7C7C7D", "^. c #6E6E6E", "/. c #636363", "(. c #615F5D", "_. c #D18E61", ":. c #FBA266", "<. c #FFA364", "[. c #FFA05F", "}. c #FF9E5D", "|. c #CD6723", "1. c #CC6622", "2. c #FF9D5B", "3. c #FE9E5D", "4. c #FF9F5E", "5. c #FFA060", "6. c #FFAB73", "7. c #FDB27F", "8. c #D5AC90", "9. c #91908F", "0. c #7A7B7B", "a. c #6B6B6B", "b. c #595C5E", "c. c #C0845D", "d. c #FA9E5F", "e. c #FF9D5C", "f. c #FF9C59", "g. c #CC6621", "h. c #CC6520", "i. c #FF9B57", "j. c #FF9B58", "k. c #F69759", "l. c #EE9659", "m. c #F5985A", "n. c #F79B5C", "o. c #FF9F5D", "p. c #FFAC73", "q. c #CDA589", "r. c #7F8385", "s. c #706F6F", "t. c #575B5E", "u. c #C28358", "v. c #FC9B5A", "w. c #FE9C5A", "x. c #FF9A57", "y. c #FF9A56", "z. c #FF9A55", "A. c #CC641F", "B. c #CB6825", "C. c #FD8432", "D. c #FF934A", "E. c #B6805A", "F. c #55595C", "G. c #5D5B5A", "H. c #796557", "I. c #A77757", "J. c #E58E56", "K. c #FA9959", "L. c #FF9B59", "M. c #F3AA78", "N. c #8B8785", "O. c #727272", "P. c #666666", "Q. c #D58853", "R. c #FD9854", "S. c #FF9853", "T. c #FE9955", "U. c #FD9249", "V. c #FC8333", "W. c #CA6825", "X. c #CA6A29", "Y. c #FB7319", "Z. c #FD7317", "`. c #A6541F", " + c #363838", ".+ c #4B4B4B", "++ c #585858", "@+ c #5D5D5E", "#+ c #575A5D", "$+ c #956F58", "%+ c #EA9053", "&+ c #FD9855", "*+ c #FE9855", "=+ c #90867F", "-+ c #717070", ";+ c #625F5D", ">+ c #EE8B48", ",+ c #FE8B3E", "'+ c #FD812D", ")+ c #FC761D", "!+ c #FA7217", "~+ c #FA7318", "{+ c #C86A29", "]+ c #C86B2C", "^+ c #F97318", "/+ c #FB7419", "(+ c #A45018", "_+ c #242526", ":+ c #242424", "<+ c #1C1C1C", "[+ c #1E1E1E", "}+ c #282828", "|+ c #2D2E2E", "1+ c #333230", "2+ c #BD672E", "3+ c #F88031", "4+ c #FD8331", "5+ c #FC8F46", "6+ c #625B56", "7+ c #3E3E3E", "8+ c #2A2A2A", "9+ c #1C1D1D", "0+ c #643313", "a+ c #F56F15", "b+ c #FA7218", "c+ c #F97218", "d+ c #F87318", "e+ c #F77218", "f+ c #C76A2C", "g+ c #C76C2F", "h+ c #F87218", "i+ c #CF7131", "j+ c #8B6F5B", "k+ c #6D655F", "l+ c #474C4F", "m+ c #363637", "n+ c #212121", "o+ c #1D1D1D", "p+ c #101518", "q+ c #A74E14", "r+ c #F77017", "s+ c #EB7B30", "t+ c #2E3438", "u+ c #222222", "v+ c #10161A", "w+ c #C75C14", "x+ c #F87117", "y+ c #F67119", "z+ c #F57118", "A+ c #C66C2F", "B+ c #C66D32", "C+ c #F67118", "D+ c #F8751D", "E+ c #FA7E2A", "F+ c #F38B45", "G+ c #AC7855", "H+ c #454A4C", "I+ c #1B1B1B", "J+ c #0E1317", "K+ c #BC5713", "L+ c #F56F16", "M+ c #F9741D", "N+ c #A0592A", "O+ c #2C2D2D", "P+ c #502D16", "Q+ c #F26F18", "R+ c #F47118", "S+ c #F47019", "T+ c #F37018", "U+ c #C46C32", "V+ c #C56E33", "W+ c #F37019", "X+ c #F47119", "Y+ c #F57119", "Z+ c #F47017", "`+ c #F67621", " @ c #ED843E", ".@ c #594E47", "+@ c #2D2C2C", "@@ c #1A1A1A", "#@ c #191919", "$@ c #171514", "%@ c #E16615", "&@ c #F66F16", "*@ c #FA7822", "=@ c #2B2A28", "-@ c #202020", ";@ c #0C1217", ">@ c #D46217", ",@ c #F17019", "'@ c #F06F17", ")@ c #C36D33", "!@ c #C36E35", "~@ c #F06F18", "{@ c #F16F18", "]@ c #F27019", "^@ c #ED6E18", "/@ c #EC6D18", "(@ c #F36F18", "_@ c #F16E17", ":@ c #F38033", "<@ c #4C423A", "[@ c #252525", "}@ c #181818", "|@ c #161616", "1@ c #6B3714", "2@ c #ED6D17", "3@ c #F1711C", "4@ c #9B4D1A", "5@ c #232425", "6@ c #161717", "7@ c #854214", "8@ c #EE6E17", "9@ c #C26E35", "0@ c #C27038", "a@ c #ED6E17", "b@ c #EB6D17", "c@ c #C45A14", "d@ c #5B2E10", "e@ c #4B2810", "f@ c #A74F12", "g@ c #E96B16", "h@ c #EE6D17", "i@ c #E4762C", "j@ c #252B2F", "k@ c #090F13", "l@ c #DB6515", "m@ c #EE6D16", "n@ c #E96F1C", "o@ c #12191E", "p@ c #322012", "q@ c #EC6D17", "r@ c #C16F38", "s@ c #C0703A", "t@ c #EB6C17", "u@ c #D66316", "v@ c #0D0E0F", "w@ c #121212", "x@ c #060C10", "y@ c #AE5113", "z@ c #EB6B17", "A@ c #ED701D", "B@ c #86471E", "C@ c #212222", "D@ c #141414", "E@ c #111213", "F@ c #8B4413", "G@ c #EA6C17", "H@ c #EF6F18", "I@ c #372215", "J@ c #090E12", "K@ c #E26816", "L@ c #EA6C18", "M@ c #E96B17", "N@ c #BF703A", "O@ c #C0713D", "P@ c #934613", "Q@ c #0F1111", "R@ c #111111", "S@ c #582E12", "T@ c #E86A17", "U@ c #DD691C", "V@ c #0F161A", "W@ c #131313", "X@ c #442511", "Y@ c #E76B17", "Z@ c #E96D1A", "`@ c #7A3E14", " # c #171818", ".# c #0A0E12", "+# c #BE5915", "@# c #E76B18", "## c #E76A17", "$# c #BF713D", "%# c #BE713D", "&# c #AB5216", "*# c #15181A", "=# c #101010", "-# c #6E3713", ";# c #E86D1A", "># c #E66A17", ",# c #EB6D18", "'# c #211812", ")# c #12100F", "!# c #E76B16", "~# c #E56A17", "{# c #9B4A13", "]# c #101213", "^# c #0C0E10", "/# c #A14C13", "(# c #E56916", "_# c #BD713C", ":# c #AF6533", "<# c #E66E1E", "[# c #E46916", "}# c #EA7627", "|# c #604B3C", "1# c #3A3D3E", "2# c #393A3B", "3# c #404040", "4# c #DC732B", "5# c #E26916", "6# c #E36917", "7# c #E66B18", "8# c #4E2B13", "9# c #303131", "0# c #2F3030", "a# c #0B1217", "b# c #E26716", "c# c #E26917", "d# c #AA4F12", "e# c #212527", "f# c #303132", "g# c #242627", "h# c #924410", "i# c #E56E1E", "j# c #AE6433", "k# c #E77A32", "l# c #E16816", "m# c #E8782D", "n# c #C78051", "o# c #BE7F54", "p# c #E47C36", "q# c #DF6819", "r# c #DF6717", "s# c #E06A1A", "t# c #C0733F", "u# c #B67D57", "v# c #B67E57", "w# c #AD734D", "x# c #E06F23", "y# c #DE6615", "z# c #D5712F", "A# c #B17953", "B# c #B77F58", "C# c #B47B55", "D# c #CD7132", "E# c #DF6615", "F# c #E67A32", "G# c #AB6435", "H# c #E17023", "I# c #DC6515", "J# c #DC6616", "K# c #DB6313", "L# c #DA6313", "M# c #DA6414", "N# c #DA6515", "O# c #DA6415", "P# c #D96415", "Q# c #D96213", "R# c #D96212", "S# c #D96314", "T# c #DA6312", "U# c #DB6314", "V# c #AA6435", "W# c #A25F33", "X# c #E07933", "Y# c #DA691E", "Z# c #D76315", "`# c #D76314", " $ c #D66214", ".$ c #D56214", "+$ c #D46214", "@$ c #D66215", "#$ c #D9691E", "$$ c #DE7833", "%$ c #A36033", "&$ c #84502C", "*$ c #955D38", "=$ c #955E39", "-$ c #945D39", ";$ c #935D38", ">$ c #945D38", ",$ c #965E39", "'$ c #85502C", " ", " ", " ", " ", " . + @ # $ % & * = = - - - - = ; > % , ' ) ! ", " ~ { @ ] ^ / ( _ # : < [ [ $ [ < : } | ( 1 2 3 4 ", " 5 6 7 8 9 0 a b c ^ d ^ ^ ^ ] 1 e f g h i j k l ", " m { n o o p q r s 7 t i i u u j j v w k x y 3 z ", " A B C D E F F F G H q I J K x L y M M N { O P Q B R ", " S T + U V W X Y Z ` G .q ..+.@.#.$.%.&.Q *.B m =.-. ", " ;.>.=.,.'.).!.~.{.].^.F G /.(._.:.B <.z T T =.[.}.|. ", " 1.2.3.4.>.5.+ 6.7.8.9.0.a.F /.b.c.d.[.>.}.}.e.2.f.g. ", " h.i.j.k.l.m.n.4.o.=.p.q.r.s.G /.t.u.v.w.j.i.x.y.z.A. ", " B.C.D.E.F.G.H.I.J.K.L.5.M.N.O.P./.t.Q.R.S.5 T.U.V.W. ", " X.Y.Z.`. +.+++@+#+$+%+&+*+#.=+-+P./.;+>+,+'+)+!+~+{+ ", " ]+^+/+(+_+:+<+[+}+|+1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+f+ ", " g+e+h+i+j+k+l+m+n+o+<+p+q+r+~+s+t+u+[+v+w+x+e+y+z+A+ ", " B+z+C+D+E+4+F+G+H+8+<+I+J+K+L+M+N+O+<+I+P+Q+R+S+T+U+ ", " V+Q+W+X+Y+z+Z+`+ @.@+@@@#@$@%@&@*@=@-@@@;@>@W+,@'@)@ ", " !@~@~@{@]@^@/@(@_@:@<@[@}@|@1@2@3@4@5@}@6@7@8@8@8@9@ ", " 0@2@a@b@c@d@e@f@g@h@i@j@@@|@k@l@m@n@o@}@|@p@q@/@b@r@ ", " s@t@/@u@v@w@w@x@y@z@A@B@C@D@E@F@G@H@I@#@D@J@K@L@M@N@ ", " O@g@L@P@Q@w@w@R@S@M@T@U@V@D@W@X@Y@Z@`@ #W@.#+#@###$# ", " %#####&#*#w@=#<+-#;#>#,#'#D@=#)#!#~#{#]#R@^#/#>#(#_# ", " :#<#[#}#|#1#2#3#4#5#6#7#8#9#0#a#b#c#d#e#f#g#h#6#i#j# ", " k#l#l#m#n#o#p#q#r#r#s#t#u#v#w#x#y#z#A#B#C#D#E#F# ", " G#H#I#J#K#L#M#N#O#P#P#Q#R#R#Q#P#P#S#R#T#T#U#x#V# ", " W#X#Y#Z#`# $.$.$+$+$+$+$+$+$+$+$.$.$@$#$$$%$ ", " &$*$=$-$;$;$;$;$>$-$-$>$>$;$>$>$,$'$ ", " ", " ", " "}; tickr_0.6.4.orig/images/website_logo/0000755000175000017500000000000012147427510017174 5ustar manutmmanutmtickr_0.6.4.orig/images/website_logo/NRT-logo.png0000644000175000017500000002342612147427510021312 0ustar manutmmanutmPNG  IHDR5(;sRGB pHYs  tIME&'*Χ IDATxyU?ڷK:tw:HXBHU@TPFTpYqFgTa1,,IȞ;wߵs?ҝPsU}ϹB)JB>$F&0 -A@x-7UI#AI$EtNeP Pd6zB Q??ejmT;c;1M$=@'EQճN_0H .[ߋG@(e#m . t>"@}$S:6(tRA5};i}_,4NDZHi#]`(X-_1.ڛm`G)E)^Qs`"ZFMG1{pp$Wqdf&) --DvZ)˴OQ;B`p m=Jo Ҁ:7 www&ڟwDRRZw)&P rH;ޟrDgP2QR4z&\DDN=HH|8E*`]<'+<;ƾ_pqUӿ M(۳P $k%Ta!.0"y%I( 4sGD؁Սa@ٞA‰D PPLAA} JIN#L`pU}5{f`IF%4WUsd !>ͤ[|(ݫ6AB/i°p4p.+ W*_nv>2 т?J !(@,g$1ޡM{D6!xp@لhN>ƒf/)E ÉH]?!q@=GId6PF+\A`SQ7<]Hw k"T;zJ({1Je\%tߙ @`pU*;Nrx%mkDH?FJҙJ(ڠf'0TQ `p@ ?zQYg F4,#PT?(fR8ifgp pp$ЃhSLWFՔϧ!v/Bvv_ G:b}|8 QAR4?GӞ-tAi=td`7|rFh taAx%PvF_B {[BFnJ#G* *&AdU6@m\ĘьB}RJs6' Y^N6X}8()AX?>@1bŃIDB(G)_µEl^BZl!'m"Aj!Fc辡p%v?Isݣ猓+heSAD䦺־Cй} P@4,$rl#w -*'TMgLF\8d'~^mO0G}TޥKY+**Ꚛ`"ܚhNZ1@Lq! )Ne)H "F@ҿ&2g4lz{F <\c1 tF7Ͱl`)L[4=%#bc`SА:?L!0={̐ 蔏a!sLt\f߬t>YTM!EK{~̙x=>zn|v-[VTTABB۶S hѢ F"q~6hѢ.lӦM?j}{~)nUaXa 8E;;^;)Lv:_cntCc` U:=uhTcllHحZCl&},iTN!:v]_m+R¹tCn֗ Eŋ`ĝʀGGpV˻O,Z"|iiZOOO<'Lp7R+_RjĈgm1 %G_m-v?GG(Q%I C(dxP¨@@hW1GIŽIqhVfTMexAdo ~l(ak^WYS"Qˆ9ԜoC~8c2D'=xRCGK, @H=ϲ\=`xH/tÁc \/2V|akz!wiڤIvuuD"!'gef !眪ӷoJ^)I;i4K"%Ff}*U`d\ )LnaW9M6-+z8+ K<;d($Dc[ B=&X` BA8ǷsUO+48&GΐH4fz)EQ 3a!ord BGӹ{T<N!m##.ʸGx0Vl)moӽ04X^kIIrh5^f6nyR}}h~'ѷ A3csiA#뼑N{!S>Δ8P)uR ^z;#BL:uYMb+W0$P0% gpyz:|񔑫gӿƷ23l/ći=D@d(An:l~yut#{VD5׼) `+|{މҝO#K(á,HgAk5sߋZ6ox\Ӵh4 0V^;4Mܼyuޚ!xp,\y.=z4 yۃ]vҥ/}RHeݝB.&RX7;l @I0dkt2o?{Huѷ2LC2;qlV4~@l }#[",5#[v%q8z.Ώ%fH: |TMc'9Sl}U kg[dml%yftس"^HtTOBf2• icgtJh>j>/s7d`>J%XF2_/^|_[/_.6mڵ^[RR/ڵkٲew}$BJ裏1v%KXniiill[&LN߭\'9rd]]wܱaÆ۷^:^{UUU}m-jh6HhM?9hpIZKƵtfS<2?N/#%RywխVBtRHl}$#̜!g?ŌJ</F-B1b.4cka4?ЫMÖG:ӹK-LqBh(Ib OZsd-~ུ4L/PUG $`{||x"̏OjC;vpSLUUUm˲SO=bŊBd2ݭɂ!$]I J+Ǫ¨_VEH?B:(Eo|͛WXaf+B3iZ$9r)R.A|;}H AH4LXCH4e i)0"A’" 2q ?yߦt Auk;~ʅ {_¨$^$xyKe]bPE(ᑑLS8 +LEYJnhYCF/O58+..#"A`9 h:>B0B:c /0^_M${A*Z(nZA ;q`%I"s?媛6(c'i{-J/:HfP>T7À$Nzh#/֗yd(*Y'IQQQ(J&gix{vtt<37|s֒yϛ7T5qNZӨFii)I;8$$nv %7 bI#)V_aw0ݢSt5d҉$і@u9aR\[HTh088"W "mvplw)t_/P62ge\oN$~9 d6Q0fI+7(\/spK|nF0S}|())F߿߶l'M1"S)IJz9b$RfrJ GyGGJҖ_"8Cf& d:*@)cÔQEc;һ*L?NGtHJKL?A:\2dB>$Q:ޥ}9䷷<\L粖gI)fxex_} =Ďo'\1;}F1l"JO X ^?ɾh񭴾Ɇa tpn& z<{3Mq-ڷ.^;k^F׮]Q_NN !17$ cek"mv<兕Zf64'K(D> +Mr:JGo2ge=L 4rgSl7U:v&#jsN{^2KDqyKhl, mަ7NI 꽊L}ǀx#|!jmXHHl|OR:jZ֐y2j3J,K~]쥿5ByFD;)UN4qj:=ر W:e(wqw9sWZ5sѣG3fǎ?_^WW,ݶm[8O>^ϳo[,PdiI"`xE.Df `(dfLE&~@yBqi:&D%OEOOAǑ9` Iea|U w/3tngC(S3iR448 ES֐HŊ-+9Ut/~\΀YaO )&HHǛh9gxґ(R@&^ipLBĒ^K+H,/= 1O_t*:錟}mݺU)um]z饦i>ڻ[^^.>jp2| ʳf͚;wkf˖-K,Yt˛_[[ t[[[nq۱,+J\wCs;"L^5⎢+E}'T"2\.f3L`ٲh!EfSrC |h) @1‡#U]XG*Ӥ8aXR,_:fW?.**ZdI:Of~ԩSѨbѢE[ IDATǏ?p;\jƌƍ5j~;~رK.9rdsss]]]uuuii'?y۷(..ꪫ^__zes̩=z W`m_܁ǧx"1MO|  $8W|Hj뾃?E0$Ll|l+Fq/K/M t#1RIY4RhiJ{gkB)Ԍ4!| p,DukC^ tca4oA͚ة\Fx|orSέ8J!4YId N8(olIJ)7u#VivtZJu]I٫,lk:mǶm4 |قi~%RJ22i7q_  M!cR1ЖdDnS44UFe#MħauERb)$S{!9ʫ ,uAM`:^2M"`dKɢߛ + I;X3וo;I?`YT'9j ]'婆̬ 4諓>gs?OK:9);St]'6uּa?q>P,x 0j>«?⥧ػ>Mz=88n!Ts!J ?~Ë, I\N@aM,:* Gy%i}2hh øpW~VxrR'4:3;Wx>љNiΧ|xno1.;96IEhEG)R ^N "@ +CPBۺ_uQ6QѰL! +e5AI|)O7(R?02F0P?Vo(=bX6vwr`#=48dN:aL2s&] _̄˨':8eJCR~f|k_M)E )HA?NU{Vt% DD~ĺ6y+kLX@&@f0M.;yg{)ébyk 7I,8eȧElBn Ua s?1nVarиt5g a q00x<%Q%B3(*u Eq$ Ym/YbaU6)A e#7& J}\|+Iu ? ]s }f-#NX% _`% ق*"O0&M(9f\me"=Nw}u(ņ!mLw=/ xH ;l%G;QzDp5MRfΕp_E92L$ 1~Wϔ+ H(9|lfӬ{[Ms,!Xfx1yI3C>$V :eHcyv9hJIW2L19*r& :hƦy%ț *QӘyӮj,EFsÐJrҤM4o~$X& *9:9Z }$ rIENDB`tickr_0.6.4.orig/images/tickr-icon.png0000644000175000017500000001772612147427510017277 0ustar manutmmanutmPNG  IHDR@@iq pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx[i$Wuν^^mf͌`{16 )!d q`"D$ H"bXXdQPP (2mc=cϾ7^oU]='?_u~d%J]ԭ{{{Ḋ/+~>L [:}HU|6B3xHQHT{U5p͛,@+ 6'_e5Ef~"Jo|_ͻn1  诲zMǔWA ʀvV*8 gMD py&wN}/92 П^?񚿪T@uPYq+1sV @kv{>wjt!6@xN/_W6q+/WV ZMb3 ceui ԏlS> `E6?ozW%06(C- l <|{$v'w[}83Gs+O:Du4Q&F , "(`h&zV6E _ Tbg7_ほwb1n@q8z;W{Ȭ,:z!!R3*;WVֲB</*8)0  x;ö߸{'1w<:Yc5wߊ`"GXh΄͔|1 DbO H.r+gʶ}G\"5{!GHNo\pDP\e\v# Px=;#QZ댈E3S̬NEo[9wjdL`&|EQVNxN`@ +u540 2ZI+%UJr̬3+]}4懎gLk`fz%Ę *h,0Z@4鯥C$je`5xA(̬R,""fl,3ɰxnoFOL%G Bʾ 7iS& "92޸w6hFvҊYGqRe1q,QIXkUn"3ngSImUy:hׂ5Oʍ!R}3zXFm6l64Zk57-9=,>`4fիu; W_CT|WǜI'>·?sޗ A 2RF4.6PxPhbZC5ZRz=[ZZ(2^BDLDvo8;K$O<~]%c 8漞)ԃ Zn}J5D"6 ~F,+|Y/|cveµv[>v vo)fgg֭[uR!HJD %LۿgZr,`6jIRJp>FfE _ϱτec'x`.dŇXGMSaO?+O_Y-/PJBZz @nѶ |1'!2z 'T)EZk,9^=7!!B3Ol#WnI]T@JDR*ste1u4MnQ خ(|,bXa~~&04˘Y`;'pDO\ݝrJ+ȊHS_<ʧ dlK0 @ Ⱦ~XS,+o6 ,gLp6b  ')쫆Wqe7r|ߧ"%@v*޽GHhGV[v[i1HDEĊ=܆w&vbe|!>@EU/hČ gC~:]xd<ܴ8ӱmX҅m-uoޞRy2H_\/>˱2%6J={3-dB|:qUfhĂ=d t/^̽h)_Q2[GշckP6OBD[vGԗ~+>$J)֊}4~1a.Dh}w3A'>HzGZJXHGOeS,CA(1 6m^HDpk%v}4!):b]ȩp-i{{aRR*&bTBDI̊ىLI$m|,uf m"Hyvxpo4$ d%K)iY!"`^24z3v!w^$cRN9ҒLrMc0)tH#eQF| Bv2w_^5YeYc"F6<5@+T#1 RdK3bkȒ({~434[H8 #"LSHЅjwvOoںȦ2ZӰg)vUq16mX~3xJY+mqw~DHbhviT*Ru݁SJqR.־YgV;,i$l90˹Vl- )""dR `iR$BW;UɒJ{xu}9rirriZ`f @e$<2a=c|d0Ld< i%"fR 0 Cij;5K:m~u;/mrm[>s``˚M^WZy͖0y܆˽*3V-[y8Ne* CzA"dʞΝ,1{}ph qW i]G}/%P3"榶oK(PkANh xܑٙcl^${g=$i b=A 7]U\\HTVM^I1yT<z`fvS>?²ʯBOm9~l naYvp5VT~0ہ,[R+COl &w me2ğ^z?|zvyM<[S'_xZ(&Np98 `ĦmFkԪ = /gBrkOU}7_87헿29}{7BEc[bA_t9?~}7{|dk&o Tآ ۯ޵1bn l\^d™݅;#hH/%tfֱ'D6Bx/)2Le*ST&CJ9i݋ʊ 4Mò,ZZZikoGӴRj49r}siw G&Lxn66 TFL;u| DPj#TQ 됎Ѷm'ن*+ e*ST2LT RDŽv!T BqR7oͷf0 PCEGJɿ׻ReJp|$3g{oO8c0GIw!?TU|LiwnѨ8(BD ˈpGJЁݺ kӣmW0e*SN۶4 ]g ͢:i2iO.{43N?# iqc8a?֯߄aCw]h4m)}RT*M,o^[}&}vt)Aa$?Kۉs iqUighMؙປk돛XK)D(!lGߚ*5AhhBxJ (Ɉ},D/!$P^2L'p<6oaÆhK6Ư~u7;敐2oi]suJ-ZO?ۯlHv38=t&i,d2~PQYWr \y9q6n86ٜM(DEI˿l\j KBǻ]Ws$!@)E&Au˲q BP5<(_DNHiy RQV@&sG -oo$UQ.q]!Ӝuu5>rXT&E$`(ISmژ|kz4j+S;n]P6Legsأ?>,[lH)m lbUzIlذ[7X4M^zb^eKVJL&=+v:c40}1icql)aϷmK,o ӷ'Fm,F!0 _+r#G&]e!Bu~7v:t2>7YH0Lm<^u|>M\!0~|%E)E6A3|_wݣƘQ#ƶ-lGjl*"u ߡh+&0M˶7f7oFLRT֭nt2y'w LMI3<380bAՠiap)'ȣ$Iwޗ`+`&  _&31=t0}v Yrᕜ}ֆϯw=ZR(H$u\8~ M CHQnj.`saQvأBD-!w@(΍,L:)]\{DuY(E#m2CGЧ.վ=*"mWp9S956gM(b'A:1c J˰mB>YJC9)Cp62$uZX¶L;j*+̚j i` 3sдv\N%ӎ9 >+#B nǎLUPG9YZeU$TON*E)a8|8ÇcҥbiиK ΆMyG r5l6ǂO7۰nlz=\rُeURR:6BsKDgCks Mgxg3ur9aGE-eGoF+(;w6Nֲ 45줡(TC~2?^q!=W$r7 3DJIv56Je0}>LCqlijnD2?g$qvld:G8ܫ"4`:>]m0Гk!ڀ+Ow-vIcS XEM]JƆ 3ֶ(B󞗮Cc7hNoM5UWp|ì@wĶ]-Vl=GhJUr/fs4&U}U>AkkuYšMX8Gk [5>C'Кqr\8~8؛o=団,]egdΦ"ifDT2˓gi\zɅ}XPj&OOCc[lölA)wߊH)2d03.1G1|jkkhjnæʂEhmm㔓gX`ȑ1tPO?~<~۶q]?)%X'L2M%]5בO;kZx3tD"N{[+ MM45zg_>%uz+h7КzLX܅o:ghعvr/8s_䓍-dEU8T>n:548 c :glFBc|r@"cWqMW2Ά8+Yh8UabI#.!=ٶ |#ul ssڵu&pI!#u>!ƜxM1%dMKeV~o=ZЏ@aGr۷.Ʒ|.;{ ݫ'W\v H=EC`Ӈں,X2$v6J,qA:[LZ[B0y57yX/Hx7CTyHe}H7%ͭ\Ee8O@lk'M?`vIYEs)'3vh6lD,ۻAbR 4H$R ۶y7p9 TLlNy/< vATv\WZ:c.j55A6k9SP%_FN><{ŠyOQzitü}(oúGl o }%?0%9+ _K35 xզf|XuZ{SQBCOnad5 ,AL[3'wy7ĬJ.fNyG?vQ']ɗNL;O:GNk7tm~}{m/cW _. 9٘'"0ImY+[u4-> }uʢ+TYMՐ0Ėm"cm$?jH=hSaHٜonA*HY&0dY8.Mv}e?2L O-P`зW/Zugۼ ÄB!Y~UUU|ګ9i̙O<^Zwd&>$ r_S\a8SesEB GH$(\ץ_>xusӍ_h.L$-fw_c dOhA.mQq5rL =+_f3/H/,> )]_rV{XMXf6y=uhҁC£3fg]n_z(oMJiQ]')\/WrC xMLK]r.( c;v(UUUH);w;v/C2G3.qc0|Pl֥r:}#T`gxr}~Wͦ Y>8q!q/g~CZE/ sa)ޣ7O ~x5O4+ھq9x$Ǝş"ޛM(,޶qn~~=wQ<̟popr]L,SN>B)Ũq𤉬Xq!~8ӥ?o~^09+fc9&F #޽pMq'pO۷F '==;K1q]'o֐'B.e%Mr_2&ѳ lǸv2_+\LV>~ ,ץ]pdje~FU~{Yެ~^.tܕ\y V~{_u,[6?d#$I^RxH8)#@*~=XOwNr<]~1>Nv&G_?XM" r1qӄ쪚̷o+bØ8T_]]_@Iw/jR )N'6ok$--NgbuSޟ0&]4}q Go&6lx!o,M2~RȎ/Ư۪q-7rk c7kkqHV$a8F N-c9Xqr6-vFI4H=mz< kΦvVlm[-kSp0PNU2_`'ؽnPJIzA6Ų? 83o6gqrA.ue{;ɓ&1y1l>Yh=ٶ}>+DJ П 3/=q]]I$z twM0l]GtZjYCBݛwq=m\ֶ+ %X4?!+"gyi}>g ȋo8(d: ^3fn~wɻF7t~8?@<]8Y~cg^q8+^~'7w ]Y؎u\kc6Gm=m/#xUױ9Sx׭4Ie%ӰG t]i]?r,OH2' .xL6 _+.gvh5JJo/ իxT  СCe3 tmVw(_;_{͛u~~1r(וv3q9󘑼6\WnEsM;ѓ~^f o@3a&ĆWu QhX19|zwu*% p4ٜexL6dN;dk>x&}#`WvH6muw8c~Ӝqlxq&l'\]W?@6ٚa``;ONK@?/ϫTd*ˀrThk8~pӕ贓5~`oZνz BSWs G m+S9]VRSEeı5:.;xǘm%m pCx)>y3[Vo#۩|(priRwQ5:FU003j\%L5kolAYoQi \\" QMRYiamIry"ۛ,|;Nı-@;&XzR*Wb.  k8}B6dy|F+Jbz|Q2_2\|>T쩨HsO^J)D* 1ǡL6؄Ca,&p]_m9> ;"LqOR(cJӻo/i;Ŋ#jC yZ-%Rc1 RMDu}9bB_V^> vJef}yܧJ̡] E<ȓaehq'0Ѭ~R6*cc&ŲLUﶢb1tJ4}Ro$\E2kX.֞!\vǑy".2#5TJ(icU rYޜԈ,4,ݖaTU\ ړឳr7joe_Lc/g^=NSn#h^BGO Yjpb|/8\ph&i=Fl)"K]laӸV#,qʕ1~01@m8(Cؖ\ w{{Y&`Y3_{+.h ދ/ IDATd]BaB9.R44J!a*Ǣbn S(^~AO$[Oocgs/ИϬZ ṃ]חZ nX֮"J^8Luv,+Gmm =zɒeL0!"I3kl6oʕ wA"TsɑX e00x =FZMXN/"P(@i5q /''4lW`Bؙ"U$[p8|%+ d.1|$U;{1kSUF"TƄ=p?n"'H޳([ê̙ۏ##8l7qT[L)q]R&bl[ l]tޤ֚s9)lxi!),f8n6I\@m7g{.X]i!k׭ghƯPM^:̙ØQ#?~,RJLq;?a(sLP8;sքOhM, ٗ6 M?B*4.__W&5oК&.B&_@dm!`yq4;l*vB1qŲe+r]vQj2nƎ8H)¹gXj &aBEe%]r!r&g,]KT]1l4zآFRIfkr'/䀣.!Yї=#=.xsb>_Ù'_Qs4M.,zg\M"j2}4^w,g_f6Һx];csCѫji9>ZEB 5<"RZ MR+/$%KSh цm4_Ň~!q V}b.WqFVXxW|ɴfZ| aj|,AM}gr}+WN8Jak.@lcK9ﶃxv֫Jc|>%mY}\x#:E9kxfFf\t#17ˊ/| -¯{$5h]1rS1s5csAj+@yhd:8 Ǎ1W4mт %F:Ra㸞1p ҜIww G-Q.H&mkȥLe*ӿ<73uF&O<"<.q7lb'x~~87ߚa̸h:gq*?Uk8cqd- ׏H$LSS~ETWsWE4a!g"0Wry_-g`I .q4_-/ EYNbM+Р}^k ϾKv1/ϑ—|mvT&_:j{%]|=G8o=5_k/O 7Ǹ/\I{!fw~m7EY*p8urWGjk!قP}=~Qf7 J)ޟ=ѣFb6_Z,5UU\1"ƌ1Gyv+ܭh\w&n)i{ (sXg]ǐÛQ޸-M?X,n 2<~}ē`^ ރ]ץ_cYdhKF<gq,^*z~~GcQhmM"K&-LZ[RrO>&Fځt#ï>noo#i 4PZv\*NS»j" l5C VQW1X$m$-GU] l9RU_k%x*@KRJ *z@O4*~z _]KįC2N"oS֤Dk(qIMK%\`e5U!B[[HZ"VN.AK[:.V&A4.fR2@CaeDc 9C.0n?0zj6@Q:筴m "UUD&µIډg=%h(QE:AKC;6:=hKYh\!8b:lA"_ Ƙ-Wf^kSS r68լ %> G5HY2L)PBp̈u|oj $aFt2*dLe*ӿ":I,i}~nꗙ0n,Ggom\/ѷooy]^jEEk3]9L¯`e_o\_.]\6ox at\)Fz_l RшESy0uU}JF) Q]!q hZ޽I TPWƧC.FkF3CT$h3L!>ĤO~:Z'=j"~dђ qnbe9|7HU=z*] Z*41,A]jmd\=ңrqi*Y[R`e5a7NKsYWʋ=*% B𥫿)JYL1]@]׊;|Y^:a- ^=kAjL:2Fl|4"4"$$RY\%E#ɥ]*jj\ұ(%󅩭-IJ(/^δiSiii!% r~͊O?ܸ0q1GtS\irW\^it\msϏJuu~*b(ֶY+dy?9f}c3q@*irֽ?㰹׳|eF*zD8l5 }yR} G=⠃_a5tM"4MEmZ%w6"wdmJġS~W;$`$[bl_LenJeT2+3s7nba[{"{Ž|>69s?$ 'b9UDlX'k-ޱQS]E NW_y9gkAURʫ_a!ф(nI)iƸ5E$RH&L_1\tH^ߙs*)8ԓLvK,^²l8ú}u%M;s:'t˖o \+d؊Gr%LJFzg%韉\WcSȡ4-yZFMXI73JSWokZP!Ay5 Q溴 {&PUJR9H fϨlBh~+e*SNPQQm߸ {+߈)TB x&HE*B?p{}T6ۓds6}m %Z[[;f &w^iV^˂4 Ovyt)I67x}Rhcd$I/~*++4}qGսHҫgOƍ ۷iL$Yv=.㳕pJõlnbgnퟙ`;dGIƢ 5sJ'Up%D*$FH`묌Fxa]*"NDžjRdAEoL0QB ul\ h"ؾ`M4m}T2?,ۦh_>x%% H4=?lƲ|]a}RP8e`VugBq}Rz1L0V2pT IsNwR$`n)c `.j):U,t?F MvPr~;&Bk2Le*Sw ,fNbڤ1+wDQٗ/쵁F'~ydϩڇ٧aaλc9s5w])\R!5м!m-5cr=\t<_9CV]O)@D13;*v(YL[cbyXu۷*`>.[Wgu޳wퟞw膭8>[wJޣ>w.>tULtym&[9V,zUQ'J״PTќÅJE?dg&J)̫[(MGVM$BxK]]w'DGO( uB|~,eAP&@<#7>M %VD1[[Gf jwtn)uS;]8EBt [~ȟ\XjuP%` x|UX k{i% }W1:vpIx: M 8 !P䪤^]XJ)TN<-F׾ D=;dt۪qBU!%܋(/,JEay/ Y=@3\t)lTW8PϤ]V@Z"NBՅV_i^^;=Jb` uC*kF0w7mu+QdaU` H@u:R[\E)=@GhT,9]kDò!2nP\:T+1{sJrWD$#tMRn1|֝ VȎ9.=KO1-?S O%3#Ug_S!^n9TT:伒絗CIwNȒEcM;ᢽĊxZqS Qw@S٨i CGB.>8E躆O7:~=_P:hB $9U Wf踎WŶ,\kX0}^lyBCh{bRʃgr혥 x*,UXI蚔>/Br>$P՟B5 ^m}"ݸ*0%3DO@(fW{Q9?z1(9 7~?nr h,>5޷zxu=ʓCr )U5j! U &v$&%|`8#y6ELb05 Ӕ!'qmdZ>yd_ʂw -i`& 9GȀN"H:̀C;p- R0 &A ـa@or5/+c3~U.E]q}8$d cWGp&v d;D\% ~&"\7bG&mcvٲ,+ ֖ʃ`!e̱fhLVZp˭I >7Y(&ab9Ih}m,0  < qM$ IDAT O|?S$ |C-\+ҸGq}Ō(['Ffw38  H1%Dm 21Ck 'yA 4Ÿۜ-߯w2T:d=|h:4pM3w ~\̓A i v4id2RIێ@F\ +L´D#M)MRb(ZHES`D"BR .qp=۲HN,ش7|>Rǂ[B*&LaZ |-$zZc6k[v&`c2:8Y&u Jb4-Oвe`IR.ΡC1PG7F4UڶO3rlwuzRm.Q}ixH8~{>a;XҠ,V> 'yII4/d(R9D寗ԹSn PB`}HȡZH40?زf;k/uTQdP<5F'd|c [cQN9^|_19Tv3T昰A~A@ Yt 35_r 3- ɕ<1ڿ8.3DmW##CKjQ{҄?(|FN]4=&B4d9DAEy9r|[*JfL3y߯ͭ ?{lف ^;fE(%"CAS:|,Q|.43 AP2@CȓrI CB iB8]%HMsE",7Ej&~|(ߍδ1U9P6i:Ϧ4'VnWgyGire5w%Q QUA { ~놚z'dbEj we7л0PO U=*[T#]\bUЪ2E( !GX.\!d P .tA qZ 678 EUՃ/T)j<ΰn#45X=u|J?g!)i~bA X{-#xl"~}y?q#Z*QB  pѫSv=w^.֫ɲb׬%YG [27RW(4cD3O -7rV F m 5ސʭ[#M8G4UX&n7(BTx58gEJ?upuK8\y)i]lёW6Č6I{.ub,dwL95} + A@vdkG!!DkCI |iX )0D^9P"t{2d?GOa </_p  +O)L]n͞~vO3Zb $8ؑ(M2Ŵ,ivY$Id\q}۶q!%,pc@=AJIỰ"z iۤ`8g4Ų"$S)2,XI&RJy&o:`Pdʧ6=ad ς`iH鬃60O½_\Tn`ǴLU' @l@Ӹ@92Iqt/&ͪ&kEJĎd-rIYd10q1@{RԐUAx`oP3iİ#D"\WiGD,dι ^L f$NĒ % \CMWNkb"@N&G&f,mӻ9SCzhA4 qq྆M$ 5iSGy(40Ll^Ify&'[TJӮ]WN/\z+,&" ZwU"IGX8!}~Bbgkfm{4eָK31{q\7t qH*d$iJ<傓&#d|Gy82EL060HR޴)};q|qLeB>WA?4s_Smkؼr%?ZņUr6Le녟m IQ0 KʋpM _Mt <0~&]Pjh$32h*|6N* T9iJ~ \;[:٪]gZFKĪW$Wq^W|0g<>2` >gP*{+ޚf 7Vx}4n оT˹ b7E|ƛ Vre!mr<׏YM[IfQ=0W9F離x>~gqϤZ_OY68E9SG8h>-1GunIVhyF93p)uyq2z#ޚ $@4–_ o;\~Xi@3g>ěBCqu/G0w{#<9u-MyJ?tz+-^ǐχsù1P u*F\\ <!ϖx)(9FnpNN!_Шsj}O{~E>+ײ| fz>R2(@|M|0߯u ~/<}^  00hu4F=ߍH ͞_@!&0{C^J 2Pq4g)/]ɀyKx}Ի\ulSs_DS/\_r%TuȠ9 W^{#ZUPYAIW 1g_i\-~pN<#|q _Iw`m$YyVOl.oq6&Bq=xnƏ \_}]:Q$UAr$l碌`%Ŀ/s] z>u;~kٸbeIۡ))7\BaP+:+e-{[%kݷ2ZYnt  m5K3i8Uǽ͈S8I \nMe|/^q\Li]/d>-&-gPf1-:< !t(L_J y1ӿl*FB\ . l[ֲy2h{h $z\AւU34D[sΛ TM|E'38 9 c%ڶYaf,]4489y#>2_+ˡ|lh)}1+!r=r!:@=} LZLx99%xzN-xE \_ˏʤS%>/KK61aLN77uTVWQwe2x,)xC[)<*[?Tpd/W0 wm=k/b˪[ݵ.leÊJ7GpskWx+C7NwS^U&psx^[sÙe&=Sro}[l/o-bݰ.F|O,a88ű(1C C4q8n^K~YwMiׁL\:!-̫> oB4ڏFBi6eSRVN-ˋhbp)ş>iOxsK1a`-xs904qSG2~mޏw^JB)\O=F{T-f,lYUV+ͮ|> 1a?_/X#s!ex9dD(ݨG*-Vż_bz{ڕ4f]tGM,7= z$uOk/)!b(gV>b4qHfRi~Hn'#DK DP{.%q "mWDfӋ!/0ڇPEq\#>Qo`y?~zBRhM9qd5`Bɒ"Y&>} ?~>_|9iljj'tdƼ>Ϯ1ym6 O{^q"g'zn`]a՘ьÓUSfH)0WE"df\qAx!pSA6?3ii$DGO!}bGg3 ;fǴ ,߂;7CV3j?0Q'=ċo_GY[ޣߣ@Gkl\81q0hʹ}#O]!69 tZ*EnZˍn . Cz^K[$#|됣iӱU%#dLˤ)>3 >L׮"[~lA7;7 GYHn̾tcJ2w~bgs_>ơBamA#W ußfsO1I1b̨>ْRkX:v[>9mu6ltA$'t̘;ڥy㴑yˁ:)Kh}<4VC4 f¨qHCke/` y˒-fcd/N4~?.y'm&ָ^ -}:Ħ>GqnS+hݑ=4gķll?{=gǢ/rWH-0_YZc!Xl^I9=2EOrsJcLdU%i_.[G W|6w+Vδ+@#CS9UsK3^ | މ6DLGr^o,[~bb@h'~w?MS9rWisu)% Fn [ےB#'I@',?dƮ2(\gĉRTZFii  G;ٿ'lƵ7ѳK^+?*.=O)ǯ͊u+q3>(D;qNצ߰ʴw6T;+{+ ~)EJ5j Fhi9eŴl2h#k`)e<_+1S>ZCaӽt+YLj93C߯;Vf#6Eѿ'.\Jlz)i֧w,嫳Hmw/v,׿MǏwഁ#] >89T%2`;L3MBLײĥמX5Sa(]I,j)Y'?[/YR>?؋W}W8n,[X0o8)|DG"HDq1UUU}oϑF7ԍZsKtPkOh HOz-9ƒI-[e_I9h!/BkEkpNcE \?x\wIlz Mit޻'O%ΚM9wuKs{S~B[6~~nuq!;v,aXZ.fN\NRg -"2v GKOw`},xF&Wi ͰOdzfO}0Bk')簀aÜ_2d,o }'P+,\#'}Ws2l;{-XF$<I!l5,󯼎jb,?>Kw*"S^=?)85~˗Go#D/tAr>,! *\?T+(ɱ$ X}l>BB4pkHT𳒊4VFC8DB6}(k/ (g:xσ,!#G~~>v1W7פq2i.?o/L^2yLi@uEv1k_ .M_erGE}{uwv5Ϥ^7h繹n{#,x^?ʗ'#mVgXSJ*/m][LUo  љxpH_i|a|40ԍHdl%wswfN˒$4nΑ%RRĽcϮZIromG2!oݓTxKCH)'ߏ]q/sVF R\t_b&1wb~޶60MaɂHq숅`Ӝ%\yn;;-=8휵F'#i].ْS5]F֏|nǦ0-O83YpCD8Wy`u{{7w3nv㉠F}>N%1Xzl?߰<.lKr^$YɦWɝ/%9c.KA4 *<ʥa 4)$Fz))nky[9v\_\Xd&eiE\ MbR]77ĄDbF$ք_UKXĆ!rCBmX<ڣzN2r.yLÒ%+My$ ܅3mJC;MQ;5ch<Gj~ ߰):=JƽY*h^VxLd .&)v8e'MPN&dD6Ҋ>򤻸Ǖ٪$`VRfxnB$+I` %MJQ|n!GTp@yD> LE-Ԯgz˰%%QS㦪R 9? a.bxh0͠KҰi&S6TS^^L:Ѧ\@m_Б(8緡Ywq`G7(#ʰ~wrwsOjiҦ4㪲Zs̉0eT lv--.6K] MRZ:RmmGER}-[VWdI(wr6v`1 v!M |\%&\"W'x'6~x!FMZGђ#ZYk6b|"sf5!-pADVmj.N^`h+BFz.z3ʱ |?9X-H )PvԠHՔCfNi\wݎƲT%[rOqPQ)CJ/۴3Ҷo'KҦ.TॠQiWP*tz f2OwZ+DhљPyT-ޞd͛]qwVէ3l5sd->0E3Iy8B A_m`R.BbgW %||:ж NTS"R!4{+ѫ[&ޡ+ݺQb "'BCnޏ??A8IѐcFlV{af>6\w7]CD"Ec6tYVCCM9LSW4`_%^Z@ ^ȕ¼1Y}7U9i^TB y T:_Ȗu[F2sѓb(q.@Gǡ(Ih $kb~čQ+&EJfx5 E01"O>;W# FS{H99Soud_n11U=ćבfh/ R +]w-8B vRw-QZlƱ}_5N)tuMT6Oa*&9iVT'wV圧 cʂ)2?ba6N D.ίkV׌Xh)ge]Ymv[ha_] ZH$*$wT*Mb>߿+{UtmiP5`ۉc E*8ءg w k/"sfbf5k"l] %+ /@aϧW 6.ݍ ;5F>*>߶` 쬬$9NI̎)vgow q G;3òfX7bąXf#+uSK Q[Sv8:ꐤTQRnjD:Mgu%_eNbkz&B`P%3f7tēBKr@,#a[bVw[ ʌHq] i`n*R:BAϑrMKD,A$a3B3?|s ޻Z}To0Wxz/l#ͧOY6aF a@952[vW,G!T]i; AZcR|ـZQgW3K9Ъ땮qBn1uvm3fXbd?>q6we-ɚ[cpnr[y|/~IoD+Q4X^TgaSW]$5=* fKWl)kcG:aIB3%g6I$`miff=cwgwEaE0:EiBbʢMNvvaߤI͓ua0hL\a'Mɟ.h2oRxfnUMb]J|"'3Ɍ'z=yiEY&Ė\PJs/BNbdul zwNR-HOuLSV,G]& F ,9mgrk 4lz`h m-#]ry.B([D*>j /BШ3aZƍEѮ-b~EX$3pHYuj eOp>y3l/_o39gsϜ3#3C0u:-"fr:_y6/TWBjG<Ř=?.kϑrY'AX1ì5")To֦D{D"FL$ӫR!ntffHBϒ"P2ϮoIiF19g왍ڒ&)/K;3{G洶q1V~֚Cg~7=xs{9ڍ̜>ӢYAAFǨ- 1c:~W*0F`E;2z3L8Ke2-B$j7tZtMڱTxp'y81'ӫxc–xnH0}zI,v{*~ y9 - / G?$M :Œj-|{]h ~O`]vat ?x)?><yʟsmOECJJSKOglDm8 ۞cT5nƒ* W-ս %&u;D6X`WbƋ!ۗ88[kdi!0PQhRNDhJ" uce1N9AN]]-Xa7wT$xw,'~bqGy&j-"dA:묿rV= 3 4tycKM}S'ҎV . mQ5V 9=0ڠrQjm/( j Tl(k B*| )m7]kv9_8X1Tcfq9=C;YR[ggKW7!|'ixp Μ8tS 4( 4+Xz 4NPF їֹ\ ]q.*B .NelX*!5.bՄIbScS|<]? o&ߡ uhZtZ4:QYgw f^bݲi-gيݢs1Ko5UCaRcLxTc%b3Nhm6QPK2('Ѥ|{Q"eVP]'Dr*fm{;[6ٶe'x5ǰ٘f>n_~|TKtr=l!ihC;iCȎ?"H0}[D6v,Y24]Xo|Nc IDATG^^[=tCKU W2bO3/NIT& Y8o>ETѻ/ẟm3 k'" ^.hsϰi|G{XiBUh]vf%K>m{wr?a=KURsP:0HUou7D I)%RMocWpk0ud)9 7mϬbRM?pͿ]:/5LUYFp5$qiYG2> ".,UQ KaIf4A|?M`;/&e+wm_ *Y2{f"͛gSCyn!< i}G5Ψ/qL'O^,:pfvŸz~MII(qE3/S\+O+Lgѻ=碔sw\`NҦnű{&6QMYGm,dHg^-wX K:P]pE3_q6o11@S_HbA,n 1h6|lmj6k󛈉!RəDFg o4cZu>Gkq%mlx}}4i{k[ӶM{h6YT6QV^*kGe/HJlŎF[Is93lW]X2r'xPز+քB+ˍw&a5Z7/J|o.ڷc?xؽTfYд97B(.$Vجh5-E]s77 ,|U>Bv_vz?vk/ڡ :}N9 Y|ӣtv=ޅAVuOʺ_1NӉY[z7%16$xh|~\tW?DcS9ONJAkPA@UHq`!╔ry3ڏp`Y B8 yۻ 6ԅ`,{Tsnsò'Uϲ)b緾6?HMLIbX'x||fdO:+)xڬ>.>y+72wsؽGek]^rvtwK(ۓNc}TL9IK;*0M4Q9,>b5yi{%ξ`1|ꁧp~!XGV~g<ŕ׭' B<ʟ˞=C/X/lp6tM2[xY|tA{0 |ݘa+g$4 >4kW?Ϙ?N3C~jTAl/p#ؔL{޵;c< <җ:=_#ȷu?$ ♇yi]31}Oo mc|&~wq}Tq9Hv^wy|iW^´XeЌc6_ʰOǤv/~rS)]3~?Db5[$ؗn,Ny|zCN憋o}øOYtI34?tMK ZQ: QL'C Fx8&Q$kK*~q/rjXx]}EEU44C9>vg~8OF^Yq|ױڛy|$esǏ>k'su4:̟;pD;eƍx'_WCsRfL"I̘54I9{Н|]Oerԛf>-bݘ".ڇnX"Rr%mΞ,e3gsCJB#[\FG}Q×q׿$(E?_F`1,=p1xqHsûˎdI~}ό4h:Šxz<$}g`ɧqcwI,p;OgpBKF0Y@ؘ2N>f?z$3^ZuVy/>C=yw㘹n[ᥜ|Nl2}ҙq8o:ndgo8؍Xïp$Q#D<=Ӷ_rN"]#6D^WB8T9l^y촜þ\Fry'Oꬽ*wV)IeN8ܾ"_Hq{1-yvCDr?½?h⡅%ڮɶޅ;U cwoRɄX5DiEGE8Wߑ,\;λ/fA|ނ|" ZKuRo]ŭ~Kr,p>\ ̺F>޷7/"y5]/^7c ;;-ޕckH&mS{/atd-O{!mcHṡAu!o1B4P5mIwg>{14,.yU\+Xpro!~ȕ?y}Hu^`zk/ﲌflx{H*}J=~ +p /=]fO]ǝ=8Xe|`[7_]`gQۅVx#wlŁǟġϡoc#x;x5ZxGi=d'6r#t,?swҚQ'v,1{㶧7X;N݃.W!Jc*}xyJ$ł~=Xvo%z-\m/y8kgb9GIДV po I:Tӱ>P~HdNI(5DxAy : h}(V1x(N# }C6U:nPm^uyeou2Z>jaKTS `mv "cX8M"8m#<  RtAW<:6ĒPn|o&IJ[VYv4մMiT Q _"O3MOBgDVJ"@!ث!!9~h/*R6%ֆ81 㮿[_/O"kuhc:M$Ibh C/{ ^Mb q $ asƣA,@b%W;k>v~Q2BCUרR*L&S"MeRڍ6ieJhJ2$$FuP6:Z6ĚZTt S0v@i=NP)u=aR,vZ6-,*'1X|aILETUdM6z)|g7f̆XRu䭿(?6 -"5ASP6>qרU\'m ATj.Y\uڴ%w|,Nآ8vn$&"DF2j^PwN ( C& YzmLNc2 jIVAUU4團lҢ݉XŸ4$)@V&mTaa["j!oc_XqTkuc[1V0[F͘A!MclÜYÄ^ c&8(F[AL HNAs|-8jCuHE?"imEڨ0DyUT_ 2k8'֖^}*Ew rdBKqEL lq^uUI3&$/ !ʍH5Ml*hFHGV(PY(v/\!{Ln_8Nޒ6d dYz L'9}Lt_Zp ί4 {/H%nwԒk:LL\1sXl,6i1zԯi\w׫D@MsK%aJy2Ye!EEEȯ%w$[p9a rgʮl"+Jk̞:@n";@V _9]jj^[ &=wC-~VB[bݺʨl%صLBWSrC8sS~f)KG }kR!zS҅~=-pʲHRP`Y#3P[Xi%1EsRS6a.<&Q$TMw ye6R2VS8 v-7!YJB(&"-zA,am?` !T2sRԤiU[a+5YuB{Oeih;%:Wdj; F(wjcI1!H4lhZFN!I5(ibH:MJi@JEhCRlIE}`cclk6Q~@NiR:qD_6Z&N5HflGty`A5GݡR!&IS4~0 :mBߣR @ (&Ibu6lF3q3s碵3{D IDATQ1IXdjTb_R0*˫[lM,-dޝm~YDUN[O"y ͡h1S }PhT>=E!s)9C.Ψ{p8CU,b\ 2]nnɚm "h7UdI"or Ƽe sr72WxE(nu.1~ag ufIM &!\%N4ys=͇r Pע+_'%v*IV%ǕIB}yZbEԄg1u-]JD&5ۢ`ɛ;5TҖ@yd.w1b_"zfR=dQ.e~f"YceH J]rY<րre/XG*RX5`%/~UV>_IW+/ ii-2!n@X[&k)< \*nNʚ96TϺ4K늗^t so*EYS9Vm5šk(\nM_f[:1w4Nщnlma򬴷90"[[U< ͳUe-FInעdKc"kKޖzl)4;)P9Д}c}!7(vabJF/ 3cX`"g$_lŪl޻f|laI :E#:i;oQvn.=s^xcF$w;< Xvq^ $M66R EnP`wd/ Gy %(7> :k'HM]DY,MNgϓ6&[wkL? #eLV̓bbݡъ& h c(`щ1@2Pgh+AZ&&5x^ ^@ET€N'!M VD!hԅxqD(m18h'P ؔ8JQG,m8)3VaaJ@lO@xtZM(bN*:OP=VŴ;mvDV@yXiNP=cdFR% DyXwZ)Nsg"w=35T~ Wm ՠ?0<8jМhWi֚_]nd OZ #̙_ZKN,Z7D-(Mi .|EyܑX1&},.3GMS,b흷E/L/G -!~=hl1h8Cj*3}#]GNB&$;ƕ[#CSL@uBj3|09[*MZ#GvE1IEGZmɹEv7-+dͨy('z.n'Q)-neoC|dz,'Tx|rש,0LJwHS䍭 N^vh厄dV~54+ :vf;:+55f#GQB'&N@EW!;O\R<*JRqJe"V7P9ϔ-aB8$˚n]/YnV2U(()zBLqeM夵LT&"SLcqRMu;MV )K)&U0kI}+Ay/+5 S YLzF&p~!3[kLzzjӭ'&7jEX}O[<`{EN@SaeM42. F{hFSUCIT)`Κ PJK'~=Vgϴ4YB|-Ơ{k-4]iXm:1V'Ij%n϶Mp6JQU}Ř\ᔦWݒ|`D疈 '?@H,qCf9]]G2sZ%dK11MzZW )5}R&؞)CdAڑ4m6CfMeh~=:/:E3{5;~gTT.C+9`d{秢K ^UOBmCеȩ{VsMEXϒu*,1oۅK(-wR)HC)nW8 _ -hJRX)Vɣ1.sJgX+<"c'2D "cMZn;ʹU QӌY2{wbm0Aƈ!*4jAôjF'fтDc&/JF1I~M08}:*-hZDQD_0ZZQfss"k XL!!h1-PjKctTt:m8!4'$QjC&inc`p {֘j A#&!4 ST cqhy,= cviQHV,Dv8nヒ'>I,a5l;گP߮qcϽʴ~<[C|ԓ9J6/ɅŢ;DxgP ;%+ɎWdwDͮb_Yr.EeG9P:I%;%H/B ንeLl:!eVdTm\vǼto6et?Z i&-M@"0o;~nؗ)J1%rZ.h !C9Ǧ8&vMo0+p)c1Pmlzq}e/$O]+eȚ4NL+,"-]m0YGƷ(Q9T Q"BkmUq~F¢Zt!{o`u/ŊIXk{M&%JtgeW])ńtEoEo1?%(;㲇zVFwi 2j(чuŪF#Lv٢e#,b=PcuYN5% ¤wSCm ykrM'Ip(Lǡ6A%=NqR$HIϓE[Β) k vԸe-[&4`"%cIHh>(/ZQQQ` BkB!Wo7nf6ZIaaZgX=J@Kv:gͤiefnQ)J~UC|ߧjE! ^#*}566 t)AXAvdjPjh!&% |mxee͝>D_Peta_c-'40?@k&*6lBRE #B )-6IYUa~4J=rl?^ўo*L4r>#zG/0Sw~J펩XS'(F\xLIt<ٍhd6rp\wij2d{ttX͒l'7,gbN(%mD6\˸5ʖؿE]W%e%]H'tMim1^MHvU终-mVL"ڼ}(l`-/sdq7)J 7JvShrYxpbRcFOpo'`_f+.-=&˔Qy7K1U"Qt9uuٍݢ=CKxGtEfT a}lQ x.ZdTX.zBb>1= Y̐&(|IrqYڸ.y:khT0/*ߑHvJgOu>6K7E`-si,LV]H)ݵUٿT,Lfby][]M@>*k{qy7]ٹNt0q릐(+ $%)]P+He}"NӭqW A%wlOq˝TFw ]̗/ӼqJ1Yɦn䮍2S,0.zFu=) MAAHDhKjLp>_ULcc5"lJHւf%i~XkSUemc6l1%@<  !2`dx@@Q[6XMw]v*ʼ=7|n̆ڴlV[RC!(ۮC>ha^T|g Jԇ(Q_<<6EC V2 ݼ?;3aipw]V?we}}]O>/0m8ٛM)ӮLc١$gxK 鯰tJhI|Ԓ&$ukAu(b1qi$ 3pnE^$DuZ hAc61M8nK&c@QT`A hd}!.N;%{*`'o|o5 ^iZG*7(YRZe9J+ƐN0f_DIr%L-N| $uO;4G47pD\5ȺgLrmE\B4p~6t&C^Y:{f q*TdFD##DGJO2Ȟ@ 77jgtra1ΟN|.|N3͎O4i %:!? zdдA.Y:6CnIw骴`#Cy_=bL$lb6hݛ=kֈCB3Z_ .~֢hD劧[mEeրr[,-B4-NlMͫ2*"ZS O0 o;8Q2rQXq-73\s{-Y1aXR-鄭m9q l~E&,aEX\زaxhi4ses1:Ӭ-ueZiےeVO#Fgljxq.yy}}*^o4[e1_گќd|>ף_=ca -g'\_ݲ_i,Y5̋cYƧaQZ~gt7>!״M]YŒ{wwK֛-cr,N'viELwy5R[\jbyf59_qڕNI_@ʳx7h<,ew)ြuP(|eiL9yK1%Mt_$%Y]!kPyְ~g׾XsS_ѧ͍%?? g$?_xi-=D<@huNN߄ZKw8&Q>}k7??OVA ;zg*>˾W2$%ǢRgW6:P>BlT"Ֆ=[_lEo/ e FEIWL%R KlrTBd=B:F :-i?" =LyzK& 5ԭ uZ:HYPSJlENz15r  L[k,=@/p`Cl2àؤ& l'VI#^`&> N3CIz;ID\ZpkdQ#R_ A=CZa0萯ɉΖ ,?8gE Qbi6)Sx*YH k( |x2licS7MͶmؖmU㌯̶zKۺbelgT͖"r4hnZ̦d2l%bZ3LK&onoV 1ʼh~OeIf5yDbɄ\?q,-" :+X7~[<iЊtjcش9-8xon([l:_]g=˗+Z#})4ϯ_je4^W-㣜rѾe^7~[KUm%g t݂vkj).I!븇_Mx ,E~/!w]-G~7 #:Lv-m{N/ҕ|)n ~*,.l_7Val.%;dՁC|^41? w_>iZC=}W5tp. .tKt"u=]k%1FDRT=5sEw ],Յ1@;=JhX(P(?yu}5@×&MU_H0謍Հ1Mp#):Z{($J~Q/JTjJd)LYQs(Y֪#W(6eM+8Q*ak'4ykJ~rY16 4Ўqa2 эon$5yߡ@VN )&.CK BL IDATm!Y'Րg.uv0&6az@Q.!Jd}|ѦNI_X TxV y1^Ѕ]aP _Ƃ58/!+T^G<`+k=+PF1s4M;5\/CA\Ǟ*O4It˸/Kru4" ^ljȲֵsq6tZC\wnXKmv~.Cv uT (MYZ5Q& fW M0QNh8330Ֆ7wΟ(6ۊ4X0blٶEQpv<з4՚1M" uc(cOwWdqUI*\3]PYN&P 44ٌz9cDa3dmZ՜Ӕ%G)ZFGGܗ%Ū=^{tGl+ǣj'g)Ub ihʒQQ ֠(c|zǼ=^Ūdr1VܮEF4w ɜ[O'sjggWaY3wyNqq%\_d^p'߭P{@0 Pk/s2Ԯou0r$37݃K])]SNnabʇF_6_`anO٧pH^k?3@FsU% 8q'B%*}hi;q e/dZFru>RUϗp끒 ;yON8pDy`!"Ϸ?0v@u"vpmciKlLw %{}qm#{7MR JL)TcȲ88\ 8ա#$MFoJG 3Ie(]#`8){|6lvu!"R'AMgNp҉kBˠQ}3Q@HOk#2@yǦ:} l/HwN7Mݰ#:$D]V_VH"iѮk6l]#D6aX(za^ȲK2@cF&昹&C)ys$ 0+Cǡrob"lI(<*8K4ۦbDրͨTݚGg,jpJXKJliq qbŤgq&ϟ~1{zae#LX.x%G9ƴEA:rO(V5ַuM>p4]˺Bi2},i eeeLG#6WPeȳզ$Sآ1UeU诱0=2z0\HN=۶4_ G)<Q>F:t"quD]u 7 ȝ !1"HQW!TwBgϞb])EtttI];]!|ў4RF]% W+EF&^xPxP DNz͠y 4C\D, MӐi50uK5d"Ш҈ <L!:8u{+ ܯ2ИD}rWgWG=|>P χ]١0E힅gvlRcQzgSa7tnכ @v˸/dv" \W*o"O)={2 .QޣFS 霑PL = JV"8rf;ovpK>$qT,$ptf%5Y· "<)9UOX)ҝ˞MnRN)ss2a\-ha:\.q8f)mkymIh_5 Y>fRhښJ˺~b>k(hc>/_[\3!¼(<57o-L'X+HcЅ%MkiBy\M 'ǔ%>gzɊEѲ-Kڲe6a˚\ ^>bYwxcw?S5۪O.)oD12CMۄv,"mW?4yMCM5Sok]}$ɗBQ?\ "9E$Lջp094gkXTpK_u?O[<6~BZ"9$=fs;8 ,JeNŁ""9ahO~1>\j M k]ZzfJ=QK7p!gH}q™2g*t]SY^n}tT6 b]L7v]ET*%`iZ)%mɴO;֐g:s y kL;[OY$;|! K{vi{(C2N@X]]2vnw뚏]]#:L]%rCkMGLϒtOވ?O߈tF2 F,*Ӣ$PAQ&AfjBEgԟi%e?-Cŷ&T8ك{6x=U& :A-=sHKv/fK<%n:71'%˪f9֕NpEA#/^*NܯV'3Zh'}GTdikl]ѴUiqm3-]b]mYlkF#275՚cB㬥,T5''߲ެ4GgJtG٘5dfrru-x2aZWoN&;hU XNϸa296qt|FV` ͘,E8QFkwzD[3{|oӶ|%W7ت(S./1KfXVb6;T[&J8q%q|GԦȝddyF2Nm2)F! ^%}/=TWC֋_dxeX])s:Sߋ)#?!eA:*QKyJBtUE8inꊺ,+W_k' n_?M4<]ŧECQH\ih!l/"̾qw&=R{G_-:cb]߄m-$4+~NT(`%_L*q]ICvTI&oQ9:86DC. <. LsHR;OD pIqvLXӯ*Re}si;|( g蘢yi}%QK jQC8GM]ȭÝ_޲Glm\43׀;Mt95Dh\( ] Jw HjTKDwJ lX?>cv$5~*jE2doyyVв̜^? Vϙ(y.vTY$0ԫYi 4mͶް f4;ՖF뗬qTOgTL(4i+N(w hbgJ[W1[Vۆ8bS*KurŬKΏ9jՂxD^hFe8%|c>{M]ZCk,kLq,״ֶgXeq{CX&yAYdYv["uMӶdZq9M>G|Di 2TrdZ rW`OK56˰aT%-B(2\ GsgGyA1-s>}1~Pԋ5lonjt1YP?-^CE:ΠBO㮮Zkr#z Twޚs>Hf- K"; {yQi͗!^*=ܭ[37a-8sio{ZP S<v"OŜP7b¤`e.&rKa[3Io+Iq14݃=QSLmgA&aHDwMDCUY˯Zkr%/dF( 9)pC޵;4w|΃gb rݯHkyN㝓K~^v^;%ykP}RĿL4Y),mS1*2<ömȆAuZQg18шVԦ-۶5xFt1$ >,HpxEm:dx{ ,NJ2?7K研fHYBY܉e{pUܡ%Z:5(w 'Q%et=-bU\8뺟]zx s>gؘ0Qjc1c) ։շr;K4]zpH?|paDNHYJTv~!xF41&~R YЋz#otbHkE7D%=!Ikx JeIabÕq֛{0jqTq.y}u.\O^Hp]"0wl8-H][\^\"9/XWG)%^r>3lЈ4~7[ -|[mxco??Fr&Qe.YgSʸgƾ8L C,"H ~cۥ-I j@?Pq~GD8tw\dw$ 3?\1%$֞GL3O~:&>8%ʙK0z v'V; -.PE,s ;"9l=ڃ 4!٧PA5zPC12 钳Rwn A_ +=kRM(]g,3bnv񩱞yJK&- E-=\ gez:qZ_hNgcDg4AX_es58ɲL)r,9HU^#BPNctr m'bҵ >o]Xg&T%:ɁJyylfCro|T\;)6CLb{qiIuEtVQR,#(Xw{h1'Cd8tg$C g\vXFDú$XkeZty?.\{c0E]ifus0Jnr8H@Q20C8{T8 !$)Euv~RĂw->rRZ:`p[bМ)Ų5!uiijvjK:\SQ*OǒŚ EQppW;m]P˲ vza)9e:sW9}tJl~̲YW-SlX.̎NȳcV-YnMSVtkf^_]S3Dy єilT+/x WW7l<`Z2N<Ɉ>O?̣ GSyr!NFqݲfM>s^\3)FLfbmP8E3n+slWkӂ#> hN'nAEFnϘL゛7#ǧL=~[/[ޡ_? O]. Leɦp:b65Yn9֐ ҃[ 6v6ld]·w{SyӇQ=Ap;Bt?LPG_=`$_j RP5h&V:=a+n5u7fk_(;Xy VoKڕį=چu|rYc҉qd{,>o;}7gp r nyH8! c S'q?ػ]eĆ:}PW2/vT/&9Ăտo]K+bT DYiC|1.dlK-_28s(듃 *By#1tV.".Up]N!AQd&M( 9"I#8$QzjhsXr{,c*KFJ)Ke\Sd#2mkk,gr=ȴ:GVJ4)*k98&^zt0вTtr&ه LlhB>CSj9tg9'#Z lk:$[켮*qkl$ai2 4fs_rTu&A!w#%AB:pNVE;/ýtH'(+:XŇAhy1E@/lm1&G-uŗ5}@QDAX iJ:G+P{SI tD#*]ʥT> iuͥSa?j]#l9vtdT11,+R-84Yc gHQe vd1Bm o&YꦤM9?:8d>ճX,Q#6eU ܭJd40&ar:(a<3hfEC= zc}4ajw??W=6ulZcMIU Ug|kǏYm%Sm-G13ںf>ΙʔѬ6GH_)Җ-u=sjÏEhN?SDikg nYќQ6ºcjhԹiD?Rv*YY ;71 "=caQrGwyITSOt^bI@:Wd&˧%*I$)w9^z9^Mlpc!z4$J!]ą`}K)-$Abw,^Ѝ /·An:HHMRcT*&{0 mU*WKG7D ]L0u*Hp=lMOZ''{+1 IDAT`7b}Xc7Qogfo틠;$e}7O tllѱIPb2NSScP4nRstZҙ#e0u%X huXWU(6kd gLSu"'TuMCF#e|a1cQ[51SR(ۣϘn}N%PhfH?Tɻڽs&̎n͆b.:kaCtiŦNC.8߄aH MRΈ!^^ Va'.*Qل<$ yY, c^Laa1mv^%U^YL鍃kCҪ4Rqo }Xf9e4.L㜲j߬8=:f]3=:µ ՊiQ],[lbTΦ5Tzh2#3}܍sߎnZ> ~ȦwW}@sT#$p7K ;ۡ\Hw?!A}Ú١eEkDgݯ5ylɵ移/qd^6Ù(ib[r,0;O?w Esf/`Pwb"1pbZ@ mذEbhT.[^7i滤"~#MeL'f ~6iea%dHպ f߹!~$(O[u~h;S ӣI_4+59һy"614MM+ }F eZMhZkäb6iC+(׉L`wb#YsIX)KwfiC XVjh;.mh&_xt䋆./rB:h=pɃY"1HCZJ):Z+wAtF*XF[khmWEY\"f ( *Ch~hq.\Úe0v K4ᨓglim].1vsW_]Ŧ#T?fk:3V-U㨝-W 67•|je-9=;՛7Ϲ_-0*r䔲,YW-L#&ӌlH'\~V"Ҕ'gǨǔMbg[8rt4fMMruzhS5 #on\/L/b-lVL[s2?Yk=`k}tu{)Q1MUaůja6;Bk e-ф.,ui'9͆(pYh<"+2-Pq,/e4勗LFYbYNSHVs64 \j4db-2\Lɬ^vb:?VknKp1|, 2Q|K'lk&Zsqv^B_BtFi ِS>`&ȎM.R"Rн耈Lv|غl,](\_0 )vCd!1[O_y]`)VufH;ppINǍ"$L*L)N%ID*;׊Hw? Pv,owhvo Or2i(Z8^{aǵ$" i(K I"b/ :U t22@$nӕPbCs.ޡE_ud$ VT_:ױSwhhΚQJ3E:6X _M^> #B{ҀI?h J=ɞO)#/mYIRj1!ӊ('/2Fpd&X0:(#f EuҴ0c P6 AU58pZ@g!7$6zE-t4m(mMC4; {$t)HXwXMM ueTw'ȇκF&<>q'EC͌6x3U7dTj {HKUcZ7E9$Tr7#*i*#T<,Z  |(QEWx NktB/t $ukn"@uwΚ?r, ~iTޱ1x X"6ZSʚ[|Tl4*nk"uǟ=cz|ֵxN^^<}hjq8-H5b|UbCm{XXE(@Z8\3C.#skE 쑄,; ^317|uO?(5;Mq_v]pQ:dжv͇ƪϢE%bwlkl(D}Adl{k'u@zÌ nX(«\'YUꟖNOYA龐$ H :Ztq;e񻄉sL:o($l\P$?ES }L y*J^NFdwg/=Ց3bpVjh3wF "Kc3N7ɺ ?4BbDJ#.hdtG kVIq [gTtՇ*R37Ah^'B <6e- "a]jڧZi@mCe>+*6wS?wv # )k E%O Xw@o#rv:C -nxx3D숝wo!N*jrzԾ5gpsYTxk ΄}APs+#T|mx~omV$m@9Zk0.SЭxjZhWU]f(ib08sbC#]V3`ʹ~; mPMTإ_ ^̦ RZu5J2u=xS9+ Ekz䂻mݶdmx OΎxsszE <~/_p<$c BZK)Y[F 9PW79?`,c1|*F'.9>9f>?µp}}%ucYl8>>f\D,V\ΘMƀbVF's~zx>׸vuG TVPLS6w+_ Z#r֚lGYVq$d: a9@U]3py~ t`Ɠ1wo9=\\f25,ny;nܯWl Yzr F)FZ]-1Nr'~hvW<8A0Fl[V᳏6ޖk" sXv"JʾajrLNy/8_`'n S\H݈Lo5c $I=!ɇ@(,G:T'#6@9o+ы$Ez9ePCGJICd;$jw T`1h)Gy;RAE]Xߠt@#=%Iu)qb>{s ^ğ:۝jG[H~9oh~wzGS`z"%PBQ{*.0GL'H[:;RK*~H>?2&=)6_ -TBfçU~*u*u@+ʲ&5qA&CEc Z7.a4ʘNgyK6TeMk,Y5"b0糌,mi*YjgТބ!t>f\SM ]ʉS^:d3Z {;YaǨD10%=AO):6 %5ː`ώgݡa`U@v0Ah*r[g96ՆG3l䈓1weP[gfSnonQSW4Mxi)Tx֭ 2 $8?XuܘP] ؠH%qX4d(#`UOYFl`at3J:wDg"?NZuc^7Q B"JNJS\\ww9L4(l*{5[>(d%6ڔ~L- ʐ.K֛(QjJ]0DmkhI=m7wwsF\2L~/M΅>3f'V"FfZ3PޠpL#Im-"tF"dz U@+G3Z-Y77㌦i0y˛VpsJޤʤeCQKQE"*"C "1PQDK$JVֽunsv;0ƜsZ[.:9~?_}I-j5skuQMI9cșgP$_Gq!H1;wJK'"bW?Nc{¶R)/P$dr%VdQRJMґ&)YUc9褠:꽟J`1N{$6kD0K<߲;º7 Wmw1M<}MoltEEC1 ˝Hg h;< +@*"~@(& C8;ܝmjĐ?#ӯ<[ ѸA NY;fĀ.1KDbyZc&0Dp;i8=J8l<,k( eBH/;Na{`Cs:KȀq()>ZoB6n kRP:|5xˢzoLdavĨpďpm RzT޼ Y1S)*/9;?5뫷yIttl{Lב%o./1B(IS9:>B XTlśl:n V9!RΏچztqr.H~G"r-QtP9ݱX #k4VlikNN .Wnf[cp(E"ѭe!T,O|e!v_^r"+=~NOO|*$,Ah?;Z8*J$ha"Iy[f匳}հFw5*wTuţg=k:f9''K3eʓ'0mӚ,ny(:XlkHiy9֟+^z峧ϸf%|2cQ.!SxszH3|_g6+m9/YY61n+jbDw2V8߻hZ?{'/ e!ZN#~2M1M w1P_|~_8ٚIwЭa{$ }aB@_AC9gǙQT8qdu'XHA$aqg.*:7w:eGFR5½ZsDAg'{Q}`Zj'ou=/$92_-Ch24$wM:"2qɵ~Z9g`julx8@#9&R-!V]NL"QzP3'n;NH)bB A֍ P ?j~! IDAT:_Fm[s$F(IW7hyۛD\\_stq힮m)%Ir1gծsD"RYp8-KNysqAYu fb9+Xr5%dt~ˬ99Y5;kO3~p2鳯۬]$9jޑ2KO*˔Nɴxw!>67Tly>7><¶GfYfEbL9Fl^g;I1͚TINOxÏ8=ZhK~2'/KW;O>,rmnSoƣثI"+^_;nwN/{g|'|䓏QiQ}1gf섽<)oTKY9#I.S(Pt8 Gݢ_+?_ݤ5R;$_ׇV^vMpQd*\l"_5J. A0^rDX)(^'>Pp+a}5I\Еƶi?+gT~ۇ7 q@H!W!$S~g+̋_/ !& CeԝFpyKADUnL6H '/_Y~+T. 짳C2nDl-t…BSwE}6RwM_BR Lȉ&v/r{J/qw[oBS[J05kzm <]0YJfVF#m,mMڒ YAY(:n+>SRJ=G9g%糒ep][Ώ CaZMgT2Me)Gc[lW7H+VO99^.Qq77kr:Ǭ4c+-UR7ILjܨnʐ'orPmc_ȻFғW7=+ YG䤞~O3EoFq/ΐSK^BVG6@nM@tZe 4_(8t o{:-{xd ^BJiA7ÿ)˿ax h;ngl`O8bq&ěބ<䔈18%XwaZ׾> O6MG sA0Ѳ|"6c;9*C&q)9|ᄏw8Q x/2؀bk‚S= "=8\ `wqhX a;"^{aOv:X\[!n3B2s`N$¬Z1<Q:^c)WCt%9Sxqʇ?rbឰpH^m!*o6YhPgLj gw'F CRոOPD*DHAo0}"U{ka(!%PJu#|A[<~͚'S 2-7 b>vnC(|>Bf촭:BcR:c9>:b︾*8Z.1mQYpVfN|%Œt/[Jay} nn)򜪭YsLp~r~|-JsX?!U _(OƓG ^c,7W|Yk+eSUB{_k֛5yɃ2*ҵ\ .X%3xxiAk)J!s$*5-]SݚL:l"Xs}sHN%O d$t- ]̩}_ ngtE{gw>zvAdTF9|A[WwtL"}`MRkɗ h5ib)ʂ,Q4u[Qw$rFhc0kPO& Pi!nǻp vaǧX#o.Ddd<׊Xqkb:Ս.pʰddB s_f=8^=TE?&uPz=ED ;+981СL=wg=>/m@<1W!O_j""ktA=fww""D0'BAl`k! cCG'it ؎09 n a}܅(pq aæГ`iG NlKyG6zȠY*) Zh,f'Nq oP"3CJ}0\= q: aMsr sl{Z?%9d' ۰V"7׵5nCSż,,MRPZkh[ʠZc3΂ՠ9k@ٛ 8n)4A*2 (pM0@!סTvBGTlw`Ac\%qC|"R$!(=^*p@4~x9,~v/PsqGꓷu(  F\1z[$R gd &lNIoLݑi'ʌa9'(O躎6$e<&]صzCY[Y(DHR%ak\rHq:{q>D S5f0؈l%>nԄܗ&.:'Mq$}Ӧcɽ H yp"=Nt!R JT0ɰ8@>Uu4dd(̧)ѽc*QdR/:ݐ7 Z7$fG6! adFk__fCwQv'gQ2!J&@ccEԽpw!:pr~[(}=v!˹ Q1D8ΉKNkrр6maF诰M^3(:ѶC8 ) )뛃#l6BӱyG';==1=~Ӿc|U )L(DJORwVM @eFK*tgQv:g68p]zg/ߑ#Hy/*Pl(c 6RೣAd=wG(> e 3F )#Y跐9] 9H1=.^duiP^oN$7VgAIs"m /Cv}脋pKڦbwHNRj  e>X8597Y_8)9;Af{Ta̞y&]ۦfGKx>cXgQ.WB)tIB' 7uYӁ?qӪ}}FV1 h@̿ۄ;oŋj \M"`/#4wÇ]%]n|@|!F㸛+Fb{PJvPȱ)I?ѣ7|b^ /L}%vqqu@rQ/"yN*vu:f-Jӽ I hIMZӤw2ӋlH-q kmq]ꆜ 1].~29x*w.a6?C{S]Рŷq w!B ++|6zINZS6jsUװ6nAb@׾{+A키os8kw б}K&&rpU ΁ƁՆUWjTDF&Ik`I7޷$Lݩb (w!kXdnz畛b>eDkõ%{ifĹa!4rk%d~>3dӖ#1:v\i$XmC#fs9TVsȟU~OV32bξ\w%; uUqZs~zUf!g4ekC%)U Ky 2f%///y|[EQ5Uݐ&)I.SlZd4컎_2lNwH2O2ں!r拂S:žm8[.8YΩ;f UC786*aY納.fTBJR! $F3}qRPWIrj 3nVkv擏cL4%"dA$̋9Lq|;??gSU:copNT~say"MXrkg_488?YrR(GچUUه_4ul1$IbWՎT)H0ұIu.Ry4D'ƣlΪ1!ݐj{l@Ӝ ]}!mu %I$AHHeM׃R4HD]hk֏ RtƠ”\[ H[\3s#9y BcAwߟv:4uGR_9HbiKox$T{8HH8nL"ty|F"KN87bF)+'9gpƌ[~k#!|1[Ԑq~~2xP9;zzpjAyJT$A~}"WFAB >dDϋsK >!EdH1v$ixgc7*|h"1o޲Xn͚#n[prv̮jm<8;jKtfEn|V2OO{tv=ENN˿+B\)%U'Ul VNT!WWԍE&9%כ553n.f1~ʟ*iZv5'8.2Y M,3l֬,x#r4N^_ێ=6xqغ#V VH$ e9#S}vd1XI$ 2$@ 6ΉsHOm pѡ3-4 aƕߘHC &e3 IDAT@=M/I 1S7ʡ(uq s"mCT_rsa -&+ ,5 <=k8OtaK} 6ݶ7擘;գƲ;~mۿ]Oֿ{pѯkZh6+6#I4xCƿE>y֌ruh$"_|h9^?>}n 5N/KB\X8z?-f@v!p=>2ƉԄt뉡~Iv`p0"̑ ns@`龜 bpq=9DCnŁ%lteNtrӞVl 'tD2>SB(_SUc!:I5n{Z/?  @$6kAg %){i"A!$r1p*apʑi1a<&ۡ0Qj7.̈́YɄ2f~,gZy{a"_/EȟW0CTFXThzЇ/L$Cp([wAJ~%g:~ z?чjJ1H{[N~աg =_oؿ_&q)T"{,ߠ<>q9T)Y?ls^dضفQ c|B)к&sIQ_@$ʰv;e]ס1㞭>x}jZK&lqn[fN4]Mg-|#l 밉2-p,sNG]Ij%r#v,t΢O'uFW@njw0vydyIu4] Hi t=:-)/!hmA$)eNFp#~Z{$n|XvB ޒ>jE탋YN#UW#,px?0he\@I^V(A쑣P!ʚ ;1QFFot @:D]tlW;xN0_Yԉ 4mku/* GnRd~"}C)= K251c'a.Ԭ@8N =X RxITi0NH~`(x& b~K.$K1@i`Ѷ5Iptm*5I>c{O&ʥ\:UKJX\,$qVRO_vWsrr~Ks%`>+Ca4 Mkijs?bݲ_9޳'h!O4#gGe4_y.:Ֆy1H)yWi$bV2%v{G36-% h57DIBkljC5`ToR`n9~bpj8݄#(VvxH~wuwd,LMDCrh;3d-@ȱ os5@lw8pSVFxs~{?x)( ~a&%:)>s2E\7i')J~ $yQE:neI~Gq/! r1'A(7/L|o"41FDqO(=^ <:dyB^R٧F2;q 7 [4}q#arℚqjݸE_L untN9X'lFMiwAca0&;7BI ;A"^ ~w<]sM^.CfiH8l, "zV9;c͹}$sFMKj gKV H[kpV2PY-İGߎ1Y1=Lj?,3@TxP#e񳰇HOS! a6dtHAquD D9kAHIƼ4J pW?;OzFOLr~J54}7I|fq3H(@bBGG2ʦ"d abRB%dDi[hjAVBvNP#Y57D}ӧXsܐNwԭC!ٵ-B" mM$brQ~Gc4`xO>g_ |Ijvmݒ(hj.+tT ~׿-7+/8yz/_S7vCܮn)r%A$NU=(9>;҆˿J£Fk̊p4UE4Eˢꆮ]_52/+LHB2憲 MPEaDw-ؐU`^fth@ZX@[v]K?f#/ >|_\]^O "MAb/2Q+7)ھh.2YȄkHvi ??&Nv$|wBH `nqbV{b0%ξ@CD09<Ӽ8ao4Z!ݿugP}lyBe9Q$܄/Vq]M^5vh\ݿwv,z$o)x׃6ALrЊCBqvlb5,( "jE6W}!NаS/ 7Wbj2vts=]8 udYf.RUG}j>W,m7Fwxb$:?ۜ v}8~7 562JNrʵD()G-",U|lغ'idxQo& !pS"h"W*Ah?Ä@99x#L$$r*sҐHSlF0a  `ީp$<}^OI 9d g½_HX A}r-:Alc ܅Oѡ&ytolqP)&gT>i'0/"Tsy,qH?6Q FoK3mmuAbQi_ky=g-m֤ENQfV4ME$ y(p]w~/di4/ݬYY, UqiNfjHvBHT8,23Kx%OϞ&9b[Wt6֫7;fE< .nn9=;#RPWH6 i;KH2%!E)=X5W+2-<M[Lm uUbF׶tm,%2j)SUB Jmv] o[kNN_%/٢ M^^1qFs Ϟv&d"Нj|^eW/y茶2jn,diIUH89>jzQ/ٷwūk.6=YePn~?gh1)TZk;ޢg EDrhǓH9keH S rRz= F'nDV!4,lj FNR@-I'l`J"S _Q|%hz_S8& R5=ȓi@:A2`[^CqErBRAEYO6E݈UN$ƌwMFEq bL_W$[lof4Yyq`0C!K ^bTQIy$!?h3|}Ɔن>M<~>IpX y"8Ec$\ ` VL0g&RWH~&{5b&YQr,)RjS~\k/aQI}$B{U(f- q0 X?ȑzYx _Oq$mrѥzWeY&}-GŃ4[ʩi<|BD0KwbYsfaLK ^JN ,7`KP>XAMxk>{,+8>^--M[ (Yl;<'O}J9՞oޛ}I9LQ[b V[^_A脤5%_#.7-{Q2]Bq?H(%|7|o:i3Պ} 4՞bYe^(%N8V Jx^,gdBޑ*_f9gUś+R bN@mC/̊6(OyYf" .Ope[fUjR)=/HͶ"7߼zeo,Y AEJ2`naoIDhI2aݳm43c[3+sJ7^^o$yoHKz]Α X%2?-P>Y+mhBP(tm,qt֒岕`:o, uorsXb<-֦.BUD 䩰 q{)Io=z2H4i5%pC`\ѡˤduE&f%Kl<(ؑ<}H~(EnrHO:Rw_?F#;_O~tԬ%dfob$EyCtӣA?<JʼniD^ۂyeY]{7* ((*DiJPP۩mEω^n>sj_( "Cdb(j9q3L7"֒zu+#2#o܈g~Oe:Łܙy\Q9T~ZM(oj/c+Tp]ڵ*wB7n~>B)eVê\bF]8޷( qߜu{0LcWLM)-M~H[!vEmyX[ -OƸlm JHJO%|˚|M){ӱ̐.Dk-^fAudI]^&)XvJ)ZuQl>7 e.j:~]Ӳ>2f,+@Y$V(A]SO2rqPa̙};GH3Mj4JR1|K_r+N8k}fQ=é'u{e1RzI j2ExR28y(LǘODQJ%Dje'=fӈFCŖq ||_a9RG)'DI56ARv#%f$I@!mJץ4aH4C(,Il V*uW]5\mALε(+m3 )ʼHpb]ݴQļqs[y?`aXus1@ajl]`+S[FFuxBSsZn:'JDu}X??Uf /OJjbekrT?]{zq%e_>ܻVz(\,l-E AIkOA#A#Ɍ'ir .75yr|.) c&wOdY|Uk[ܲ!Rv@#ԿJ4O] csҕgog/=0~ ax ,y`* 5AuID1&7  3 R 2CGP-'פ4%<'EZł?jix0 &XsV|[(>^xݷ)7(GENC672ߔ1bh{XcbI 6Yσ\W p{Hp?,IEW_&1Ca6붋X/^,`zQgWܚ&FՎ, D)0Xg}b ߿YahPQ{M}8,.l Xֹ:}!i \ #ZIQk>Q8ؕ(% Kwȡ./3Z}ZH-+G.3)riu-^9%ZNQ |D!FB%qBh9UdiKBNUb^A enږ"-ڒr8'j= N4F(RuA4Gf6k&'ضM׺4*mR<%I TƐ"r6IݛY٦i!}A:$o)0PGf'#0CNBYI&RXA U)Jݮ{JܴS/ITQC 7UҶ9vfvdQ TNfU±3-O"鬭AJ=5j_3,mkj7gQ#PU܁ Cr輀05ݳhujX;|!7 )Z-VVP,Շʊ7b1@WTQ i@Xǭojmdagr#K\jzV6fJ2^ HOՐo6i)DO>\\lQkU5_G^^9̢3tF2 F FӘ GOqVxL$YH<0R_hZ6sއYti4Zē W_qe,e}{,NX416GiBi4iwDQIө脦,4h.f:llmMǬt&v;h6e:hHġ-~%Fg\:w WD-NnjF{yaniz M)f 'S R_9*2§bgcZ F2'(O{V 5>q4WVh\&^8xT k w6."4h>d jHH$DeDԞ(aN :jA6QϿ)o?,j'1us=^-?Ndjyy>pk'wȹ,(ĕDF<7GnA=# _ӊG?|U+Q\g4˦ ZPM_=Pր<%QJyIU{SlyR+4!S'\ӷf(!Rvu_"^({- kϽ3#ʫP<O3Oh#O8.!bX"2Q1E}.%&HGY\>q</.#Pd߀Tkc |>%]Bg6U'"Y|!Ȍ.FT^1g-"y$d^\`JԽx6[#9d>x֯$X(?cY+(A:vXy{X9vT,HuyΗrmafRI|n2D:g0d81hfri\X,!Ihu./-y ii, V.Чpq2VN9r xӟ6kLF1p4"||ڍN+sLx$FlN(XXinn lbswlcYH$鬸b-(Jc?]§N2A$hc2g,.TO UNWMg)k=kj%]^5Lr$ɚgBZ ~[̪@.S>me' [})o #c]AUj'Чd-^M&eG%k*o{~JYckZOܦG:'G8;\@:|>z7iS?Q~/>į,7 Ir\dDב^"}cG-g8%q^|{,ְ$UyjhFNcP$ǮWer~:c_/>ܜFҀL6:!y %~RAѮP\u;?oonJf_^@T2"ЫlE96夸xOy = /uw?=cg msw}T.F2yi/T(g }yQ I xl8iF|&18o2faHco4$hM BJJ*6lo}EI.dqo k;Mlv82Gd:nklbF{kKMÚxL#ɒVEߣcDln @zx^K'Y %l-ĚfhF" =B? 3 ٌvaf:"% t:h,yLG51]*?PYYpʼnU%7wF1v.qf1: ! huxnP>=3 Co%kF<~f!I2!'2VHR=uV(<* .Y%jT,1c‘*~β( =!VZZr2# /MlO-(,z%E_GCB0YI4YFov=_w"/1hOhx=2B?"9?F> Y_le>DE|.kW)0ʋ .?7Xz^ *K)JMt-+B`wh*O~=qMow|jPĬ=%>G u>sy҉3_Sw?X\̯מ۔LrG?Ztֺ0Ge@tL[=F!l>], x/z{S'21`|kx56`~O2Q~H8_w=FL;xm{|kyѳOp? z8s&8!恩tF_ {6st[LNbW>v4Yxa@hF }>.QGO/I|<>GtNj1#fqsmkƺiO'p ̷!&57;cqB`I :͓eOQ`Tfc SI@bX%*6؂J&TA-JϺ|qo+B"}\/a>sl[+OdPߘﹺؚ4}4/k0V }Y_.$B<ҷR xbk=Uqƥ]vc&C dpr?VFs("/ -G#Mc9>xhh4!i2vc|V;;`>3!ylh,c%IR8Nh&^3M:&i`g^Jf~d:EJIe$:L,c2e &)vV fVOqyYe;$N5)a4g4,/+X5;{L)'O]Eivy C?_dECQ"^gY4ᜁ"iLRCg9MaTrӽ8IC(X(^]t}ފb y/D^rH/D1yȓ *rL?E>EUVOYPr3)3rqO5{R{ GvtwynM!XTKk~NF>F{[k ';wfg4o}+| 9&&˿mNP/| 6Bb#=d[;XV^}Ho "J_~4?\{50Eaw񹳌t vdЩjUy/}HFcQ&,׽omy7g׷Y?(zӼWe=`{qǷib2yF^ _$Dr۷|;_{ECN>x󏼄NVMHHx˹-xr9F\?":)֩[׿ 6QX]xٝpD~kuu >-R&l`H H'RKԓy7<`B$4ny ooeҹ7ڞf[—G|KW܄g,ѫxsOcÏ5,M.qnkXMpK7}˓l?]nHnկ1$pvm%cX$SYЦSn2ϰ=2 X[c lx6MnY\шjR72WiVhx%>e fY~_R.9A6BF; C -Hy޾&9a{ڹ$T]5Dv["ge=tǻic2]n5 o֒[Kj,viBf@Ib=fgcp8Y. IDATighJj]:ue̢i`?A1.A_ }Z̀WIDDI|:mksezhN3Vxm')&t@Y+20/W"`͐JrdnE3Ҙ,K0iP)A@3|?uWH1$&P$$VtJ FAeӄv Xa2鎧3 쥆,clL'O<Ń8syi&or7=c:Ǐ J,8s1 ,[L#$B)t: 4e:M!.+6FKyۧ1!˿7?vM|cټž;P=0S{M|f2{?awh ~sYNjn@ oKEs^oX}c3)#!B9IiORw}sH>ﺈL"So-snj]]%\~ٱSp6cQc>xߔK^zG?r ~ ׇ]$S2kdYndz';$2`u& v.t8{dX8E:xwM%@) ƒb|l׌Cys$ O~62{"eiZtNƸ?T(p25f6鈑 Ԕ! ɴr٪o`/)h\ ` /'RH6dF(e8vAk]Ү_.hW} ܍ZU#9DE%ŦVҫbkfk%lXkrߐkJESNl!5[Z$V UJ9r^#K 9VVW d֐iM#MSi2쑦s.(GFxCG턄&a#.ySo{ eqH+fd2*+ n _jvIHOͦєNE cڭI4̳4k5 HK>eHkdy  !yLihL$rDkvF#97퐤 RyLk$'N$.e{mַ͐˗אBs˵Oo8e0;%^<O`J $YhD!l]2yؔmIB$e82SӈnC %L L-8 &`:٥qݵ&aG>y&W: Mbf9vd{ﻟ]#xJM*as ,W:knUοxmɬ'S[eU& '/W.DD "Ԛ<Fwŕj+ZJw8@^>[fO5O~6灯]G=򲯻# vǷOk[|YQ>?yo7?ͳc7hCK:l!)~JXך:QD]a#x,q -qvҫƑg\l.p#f Q7|^7^t;=ŋ5o%j0 ldsJ9jYTynX kA_Rmch墾sk ¯'+{܂%LYD]ReAp]2U cySx$*H1&d~:ِAyWk0/H6{f՟fTrfV0ujcp$!jo,qN 'ˬM2#i}mT^w$&Ֆ6cڡ+͐$q9q% I32S(E5a2O h4BVVP)J'[Yn>Y֢™sÀш8oH~@Sfp <GW |dAD N+wI'I GG)JhtAXud&2(%2ư7hd2aG4;=)51Ih2IS3 "&&opE1{QISN;BLuny:?F kb7#d &Ո(f@D-&!d1Ǐn3XΦ\yi9{VkkAٳ b%m.nl=&I*h7ĩUpűze('8PqbCwyw^hv$i&ﶈR guyW- XuQJJ:PJdKrI\ gr>Bdu6hC+4B tc4V"TX:%7%m~<2')#Hs5\

&a2026s/5OZFdVQ&8uu)(<7|sO=|}?ymEG)|osx7ǘ ?Q@[蟮z&$sZnKMbFوxOf|TN2sg9BbQAm~ko^F &t0"D<̗k&" R /slΝ)j-J* Jz\@6&@| ԩW7N]XE()-B`m噄 ]@:̯(~G_ TKs3Rr4Q|Y􎺷U~,nX5xERzsJ6.FrdlE 4-uR`O6-,1J.^bk4FxЗ[6Fg$qٞ'\ =ővjtr+f;57tZt{]IxXI,jxWLǜX]A[x̱'H'_g*6"Nb8'I:0rt0RLsF;> Ahj6o2c~f{D'#<"Kb 稰Aݶ}ZaK[M:c<ۣj.&ӄaOzS&^_7ՄnKj`h6"һZԎSx:cGäQJ %ք~y<Z4Մa,xw06#X7ͰG._GuڤR3"h6zıIMMG sU'').olߗNPG49F!k Vdln^䪓GH3MG1 =(aQs $C7i]I@`l._WXeNDg#[i㐺FTbq]ai3Ŋ|65CbP5%MA%[Lܯ-]6.V$-Qf_TҜ~SՃ%JB߮ RA۟CnrRU0eGTɂf\TW4 hR6 j~eew:DuL?A+mـvx۾= lx"H|֔m ~S>WI7aQx1^'|iDRSjQ$E?Ę*"pc~=;?%ןeԼ=;poJ^aovg>ʅ݄+x뿕w~ $%}lumin$hxg3;DžBvc?y0My#/qusD4𚧵/cyzW7 vno4 `o滿޻yr鷼g~.~nl8s~fC{|S!8S>X̱|%Frc-"DXhEK@s 7|Ky+[%Ṋ7='c:^.78$lopc'Oqߗasg@iF@H)fG[l Cvw >#Gf)4Z d^4t˳ٳ|%% O'#GHt8_sĕmm`ьSnIxA 4MnΟ KJפje h,VLɜF(Qa8CZ-Pwzm.PqcA4t :m,$Ȭ_ڽD'2`cQ4w`E@jmv4 %= QY]ZR|p4`wa8 i4ZlQ\쭲; DdcxکsWRk-2bQZNm6. %̽3T '%B zCs@:ƛ/n)-hlEjz2^;ַ !|~96[ /ݼ Ra?Io9ٺu9ʹ*::ωIL~aя2siv5c;XO݂Tc5[.qb؄V7Q!9D@xS? ^Urcba:^w;oeɐ_Boկ{=bG_bxkݙɯM&N#/{w>~彗bgL܂bs!u p(>ܗ?3CFKyO6#<Ηʎd c[~/ >1ä!:䭨0ٕrp0WM/uRo?{Oޛغ]w5ժ=tv8&UPrE\` 7p +@HܐD\p$Ċ`,XM'ggO5xqU96t{}OQ>?J[$񊓓Ղ,壏?z<Ҝ.lnYFXkL#2Azݎ4MH JRV YzQsT̽"#Hbnno|MU֐K<0hxO?H:yL^TW,OHjqo~=)jw>y UEIG_o0c eY_^g1y脦BJ&̒4:^_nj݆rA2a<(hbW7nwHO݂ A|5`^4edo,aD?3n.^sd[Ӑ{V2 \|̯?7rZfg/^E W~ƷuՒggRY;N$F|?3~ u֘.tT-xyX8h&?+|]5nS.E q8tE>'2+n:KlZ,*8p8lY!Mj G el̐;l]C3Ga 1 '%<{ ;_C_*˄FELJn "~kY{?sW/;ʐB0b73?4P) IDATمՁn0mӣtDkwD_u ڋ]gM]PQL) \4#),t;v\J,eS" MY࣌XPU, Y,6!^-nF)eR h2RUu?B$Ɠ$YnB8"5 EIê$Rʪ A*8F3 iKUDD U㈓E10p=&ĔGiWlsmg-\`-%4x[}1X$`:4T6#34×䞟D ՒX+b%"-%Z$ݹ `A?I VWېv=_C{=݇`.p{ܨy; 1}uwuù(wLX q0yj9u܂oCc0x aq5Ψ6gLmc-BGU;\n*;ϟsSrdiҁkępNubꚓ)uU/v8 tMi1^|o.β9M]3K3V+[UE%$-./QQDH"[P#HӈrA~ =0/pquJ3tɫ.o8/xt͓lQr|rG// ^J* 8Nb-(yFYyǘp~u BJvEGf G $JRhi4Tu3R'keSS7 q2UeADyE4vf$Vh #ư lcbbQ5%umxrv WרTs|zzkJVgg1o3Os))yvuA&#>yϞǤb5OQdEyX?$VCa1>f$%im+rs{$'efτ raJ4,m"Fn#C46'n{`y)pc^$d4ceDM|ޖSCahynHBW4W/LACH~xK;?g~/4ւFk=?}h>FC'\C8G~Uö bBJ,#2L8IGl6q4iFFY1Ӵq >IqJѹd,iIkÈI6:Ί,U{G(⻷R1+d,.J2%0$f84yUQV64ekdWqk(B(Ekf7lv$I~'K5$Rr\p ycTeNQ6L%JHi%2 1'OvSNKʲ.rbX2(е2gpyuo=z妠1fg9!h _@ 㦬{Oe,$Ԗ8K*')uS$Z/|HU}c=z%g_Rwuo|LI}]nnoh 'eMՄkFc^;n7 "g8!}C!=icEUX.if{MYw%ytrnaWxp bKsuq, ox򲤲 yen*UN .{rV3fγ3 99}Oѱh4D(ח*o?'EvP6 ]kEX޴! ԭŮof*8U5z3:m}ptMb\>2 Ȑ.;ڗc(am}1 dXE/"toةOo '1Azzky{[D/XN J'#HfA#IՇ ;Kp6YV{?@@ cwVٯKm,x;[No#w# ?csW*?WMc~/Gah W@/D+zQrvG όЏէs( 4?kZwjC~hDuWSthg=^" s%/҂DsGyI{KB:ǮfhnW4O(Fk}5؈91F 6mҼL[7ҟO'Fڐ-[kd݇^_ף hȢ4$FIXwF ᘪ{SC.|r݄ d807[}{C6y|FrhJYَ.pP1}]9v}*v7(kPA%&hV 3Ajj^`axp^d͗ڳqd^j*됑)kfs^'S\o ʲh}nAHx|zܷ$4xllw;*xd>_`(R4Ɛ;d` F/W+nv@O}k$Ѥi)r$AF4UMl;vEnWDF"_ u]ј=u^0bOJ˦5,3pꜦ.'@l7zSoɛطg8)A^nIDJzf[T֬)+~[qy7A T[E1-p9z>#JbvGǒU"ij6C 8jt[5*^|jrrz;8  7OHᐶXh)6nW}X9dQ !S{`t]a~jvs(e0 >/ijf16Th$R1Wۜbنl1[$1] *Q8 _`{ z"J5:89~fC#-MciR;9{c{'I$fl7輮QR%ĄF0GK5"h=AiQ֎O_qSfE㢈Tp̘ŒfxkP.;#$DTKEreK [ -#{YFMxͭl^I"ĀL1!MW]X1au`@B絨&~=Ȃrk6?;1^'ŀMPiiKυDYtCnꌿ?_ٮG߬Sdϝ8ѐ˿(S1Uw}5qx 1zbrw;B.eq~w>Hx̢=?Sh/&/u;ք4? j]xW odi'[^/ƮOij̕Rvw 6ߡh_0txnW(2?mho{2 c3m!xzz=\Ah>u?!ƟM>gwpbMQ+%G(_ֱ>eJn'D 2hu@YAt#o~!<=&Fru^Q{mQ_p^-T*IHgi8uDQc-BgZѿwa+7=u)}]^sY,Vd2 nQb%#oP*5-ɖGl+("3qhM"}M!#pDITA_'UY$4u~+RdI[yc>y̯oPTjuЏsP&,3Tv{8&S$ۼZupٲ+,x\U\x ztIwϞD ,PMM(ZxGm-yM^1_eh>߱dg+*v $:4Bv,KTa}VQ|!1H)hL"K8Y?B+ϧ/^QXǮlDE%r2#?U._6٫3*m#DĞ64Bܔ\~xF48|ITA Ql8`!v BAJћ&bB C"C7ԍp\QbE-/QIʳg+('ˎJceMyjՎ_]J@wꮫVZ%h:wBO&fN 4A٣|p~\- -}D7AZZJ8zmuTsh䈎ƽ"Q}N_M  'Ar}&= `2oϭQo;#Ĉ? {1ml:ta:>Pk:-G 2=:SQBsZՊŸ#@pѮz}=M ׋0aU(\Rh-"EYRmOЙ1yG! jLuTy詎f7ß䄞YS7R/)z8}|~×nA&TT#hS%FH#'.'͗;lvB*Zc s, Jp|#^^ ՒB`nH0ΰ=Iu5EQK J ,Kʲ: QQUuH6~η!ί* "##ʲ`s$hW ,YSc(b+8::2k͗$&4ήrP d[x^[1̣kC_ܕ$J1q㪜$Z5\sE)˳sJԞ}==/G^ʜ:OMC(ߴY-(Ui6hZ)zN$Jɷ v拄5D*nrB/YA+S6xEKl*PԄNlr- >|yw?=㦬 4hXO!.0dkV8$n5 #*ؖ5Kx)Fmw¹Յe#/z(U[l5İHQrs"'a Dyڅ>ЦǮdX81$80?f}Anl}֝>n]Ub#&!E3X$)R~jKqqИH`?= wk9xw~| PIh9bH@Lћkwjl6CRLB>c&oO/!Z`C&I^ŚW ۍ~:!vi7}̇?q9ǽEB(wS*'!'vq`;:WⰢ^qwOQH0'4&4Q)X#c)EKIvvя]߇ufx ƸAtwr>}CW50CsR$юtWޯR{j|7̰a &Zp0PEY% zQZ] ̮a }X\t$I#J'Q K"`E|N!/ f+1XoRR%BCa R- Y)5wVѽ(}L; Bq@;\~fڝi?c‘V.>P@t48TN0w6.To'ftoBN9vk֡"R%ÐB @Y7a铣Ða+rv&@{ʣ8 IDAT@s3x=d!";:QhMFOāh3hl5!h0;Üh΋{/ ߐXgX/V@)ٜ;} .wvIr|4֠1 M6X>X|vzu˗Y.4 L֞jl׭AqRͩ1Dن<ܗ|}K9bi05kpX߰X,N%UlCo+Nۆ XSo6O)Ꜻ;ss3ī~ƷbIGK\lw׸+r~_W,9.oCDY3.ιd}DSℲ18s+eȖK-_7q2Q£:C$=ERP=\mŴ&Â_1}uIIx쮳m`#-K>liLb< vxxLki>Qr/.Sz.a:~%r*{%˜p(~{*@H3Ĩ'/X\]"_S_ڋj_1~nq ;Z c'YB/ } !{Kz:owPy[8KE wӤk>iA"!OP GspL[Su҉5iH(R 5 6+iT I?BmLS[.q]i$\EAjx@%Y }HPw+7wrbdw?r|x@LNY id5~DBp uN=}.4F2xR`ǡ5)1-N ^!YJ㭡)*VK,I Y"8:Z`Mr18~#GRHV4Uk4K ,$FTH8Jӌ$N∲8|*#M".*w:WiG TGE)+u<=Y K9n_""C9:I#-f,"M8V4uIÐ,KQh)xZax h,Xd)E^R#"$Jj֗9: e#DIڕ.r<~t{ϰM!2wH NOm uA<9㕦4#Srt[/O^Cy[x[X4MsE6 AJPoϒB|DKi lJC.//,V3mJ|.!"v-HIm!3"/+*u-{`H,K'PԖh6g[T_nV WMcɲȠ$Z0I mnмt #BL! 5mh sDE t¹AѺR!u_+M%BXD4uk7sG7`9ص%8{M9# Fp=IRnsl $Zza# [Lh%=Gd'o{@6Dpg7> fC#IbV- EDžoOa+`6\]c!ZnzÁ;&lôW`:BIuSqQE^:-U:4,Z\-QRyY-x IRlvw9t5!t),u]PU%ytzz1cQ%u dX-VH|Є9-*q1:đ"M$T{-"S}L+*⭓G҈ǧSz2pMfs!dRJ"^S:X\M:OȲUc9}MQkf6m 7NOJYK7ap4#ME 0 wE4Ix1g(\ BZdYrh98;?;GSȎ$ٌݮjCYY3kM[d)6{Ҟ,MXR=xr4Y:9 msQBHNe ggT '#yN#:f6Q5q 4Jє%Xz"%0uW!O*5:Y.ܢ-^R{oN ^<.q{E{dIzyO8I(+C,|p"Mþس\8) Hi+ UٰJ`Mmf>\wx=zWp}}M4"d ӔQ(6䦱 ΐڳZ.f ʦ#lYJ7D'+ViBQY.欞oKb.6uF.#~+_xwOE΢A B{mSx"]Y6Xoڕ=R YG,KОZj'ʣ@%^@$FO@7*J,A<͞{ȿU~woaߏKw\!wJE IY=|{}AjXlkmJjtv 7miF&6cz\`$Isc̐%4=*-rhj1?I1M=q}|w]524sۢBϥrsRX7=./׆=c6-JIh$Kcm(!o7yYgW{hG+?yF@8H#t<:ZhpǡM8y)q!24SUST%Q:Ơd{ܒf>-,K$ۛ ՊX'S0/g4Gg$Za]0O}!8^R26fqFkcE:Ѐ4Hg)u]s{,ΰѸ0ނuH(1H!α+c S54EbHJ,g rV5=XAq}N$OV3lLn_%)eDq<[Q/v8otD6?⪼&^4awe0_̄ ̣l6$Ũp ʢF)MCp$IpH$8 3/yS>eՐ1q$+G^Xgyr|R"gö(R"\r ނ*G|2RfR $Ks{qKY fF 7.C0uNS[ۼi,ip>'ǘkƾOيO=H:YIiCג  eUW%uXv)Hʪf>Q]X_]_KZ9 =IPREIt. `'e/{H>r)}){xȽKz;qps {?&M a Z7BO~/_|]S/DiLs*/+~oQ @83潘OOO_5ףkD|~i~Go2Ĝ6!63L% i#eL8lhȢnݲw>TaBBXm7twUꪛOi7];{VMg=a^{xw<7M$Da=ou$*25@$ Umh[â,iۊ,qDSu8爢8N{C]V(^u0_,^azGז, !9yRKܹs6Ȟ$Jyߵ1$qBG\^.gqJ3b lOê8 Z/ c4m-(1W %GGG$Iz&RT8_LKi( {{x+TU,-uú bIJ\E1 *K&5e]TL4]Keے!j9L)Whaf]e/|ޝoGBN9Wo^h'$"֒,DZS7A㨼'O$WMz{bݡT4/9u5h[P${eǓ9oܹ2{QlI< EQ8X=x$8cZ8F`0x:jtRҶ=y8AE)+"K/ʭo ADYA$ 5sz  IDATS34f%[Z$օ+8׈O /o,~ nhBÌ6E*v0>ze/K*{Wpx!,n)!W~?o̰|+{K]i"B=?yzH<e֐y(sȞ,eWAAKb_W"_;':↭Y$ T<`3E=pM "4CKՄvK[9lj>MoJl-IqӍ߀@7c̾ g~(y;ep¿xqAӬnw)puapai?;a3 x!|9n^vK 6^mZ 9i!IC4kL n~!c6(t89Y?Cxmt&Y3RX!QL|/%+p(鬤l{|B>򊳓;W5뺥;HS#R%i7^GS<~CSHk6Z& W= auzDOɔlVF;E]iz(&`ob9P7!e9<'X%}סt𚶭cј$rLg ?ގ4%89BKA?+ Z%4+oo~/%9EK%i:1eqS#BZ6zUY'gְ\.J6 Az(i IfV+ft} Ϯf<|U#kz'G#TR%1MY+h4kFyF6QRFQD׷\}QXˋc!NRCJE{*ӳn;ޓ$}`#OTEOckJ:)ÄyOkW˒CϺ*zЛ%u1xX\ uFTULGL(ۖqrUIcjt4 N{)!dkz8miV Y :IEF#B%11\_1OwxI2f+#i1ί)y-d.I;ڮ;8@/X)8*Rb.rEiDѲޘ=YMaAs@ N;nh^%n3{Y2jiGS,aUѻ`xK;J0&wB-zwL7_R|3? %*3!`fb{.:  65*o+=KEbµH H?V?bXփ du-*p…k#kwrذ6Vpn>1QZe (ǹ wgC=ujӌXlpjq$8+so=cd,߼5D`rM%mOA&aw,`][Z\5DiNׇ2AHh5J@[9F<Ѵ"4DR l{"IDhoX^^"|Kj4MOՌF9Z3la:c"q`l hłZs:p2,}gG#Mԝ,K $ 0.{>zl3u"*Zc QsU42&SFY9n!<ʆH)1P)BrYݛ5ȴeMZ:GC'Ytܹ{<[Q7NOi)4-Uj j0ڎ8iӐxuSVMY+‰#bVeżjNfr]2;PkF2*=ug6A4B{RCG((TZ#D霪쨖q<#O8'2B:IW[w#^3g^"h}9+㩁{/nctaM:yY6\V;zO/׼yłi*_yWbY!/%ASd1wg|cG 94l<x[-?&s,eZ\O',k$VɘU˯{?;4 N(t(;F1Biʶ,S%9: ܆.9M8}}|4&J4CՒz1h*DEb*Wxi)"[LGAu&wG(V~ü--v,>dP,۽(VbH^D!7Z r}XkmbΡ`M߲dnHĩ %< ֹ}b\=?ZbِF8~ bKëч=!5/u;ڹ-t?4oȦvшidR[?H)Ov8<Av)n%XN fxZƆgn/@7FEʐFV;HnC4[ &1?Cl"aȕ'4պx2E+ [Bt}-ȳ*Xk~i|Mr=rIۗ|c].y)MR޶aE cPQLcaY6r i)OնtQ= i+j)+ż=Vq~%ӟU&bL'_eYӢyk( .8Цb Q{C u׆5!,k0J"MgLX%Jr1!wG?mLhqzz|8c\KM #R#VkB[К12MqmO[yR;x2hS5-ˊxd('S:ӡ#O)r&ɮuIA{FYJ]i St5 q $+!o\& ,- wS<ɰ~s Yi_Wȋ(!&j 3um!O&Û៏,ġ]q~+wޅc |wu7&Q؏(oK;<~?{Gܳ?Ϳ?PCcqpÿ/Ŷ٤L и]p\^Z:mA'g?g{4f w?ΘEUFHx(bW A&E9(CZ>t!߁|}|l qm .}c/Ǚf$>Pf;*#rin7AlXTJ)N ċj+T qm! -CD6b#? cʃ/ %m?Ica 9,)JT F 4744bT'y]oۭd_fH9" 8Go,Vt,5KKuUXy~yIv/,%M8/^( uUsq +ƔuQ@)Moy6zGCՒH((ӷ zф|2eXe ]lS^}uՒ"I ] l$̤(#EY5֡^;zczHt!#"-Ax!Cxm Q4mL]s<)8Axeqg}c.%nK!"'JcwV%zGGmߓg9 ,ѷ-wNI"kڞժj QTh1 D`CU5Lwz "`kzkJRw-MIEѠ C%@w^iNWl\7-o48oK!7sh7MF+y;|lmxʩ[<0[ ׷MGozzkq>8Oc?_)/~D)ioqbK?kc0:E"xS{=x)x>~q'FCRVU Q+&@ zӑ1Ӣ c;co?ß9ζz.gS>xsr-^dqFF9MJ3XULojALq?Yi[m@qk6!՚ł9M|Y1I n11- bbrpfMB1Әr9)JE+q(TیF#//·[& kǭc./$qBo--﹜))JyRƠo*",-phU_rڐF k#R!MK' 󆸋dR)\WY$$QS,X-KcJ rżb$RNK9)蝥^V(MXҨr5iZ$!BG,{_3$з I Z LQ1ՊQA4YF WU\ӄY,D֡E`h8Npyr0]:ɭ'L[)u&UeoX+\*i۲ $ۚPĩjR$\)cuYIHί)< )Ag`([/W__)9tB$C0b_& }~vo2maݿ;ykvσfV\Ɋ D_!m_圣 ? W/y_~O|/pu-lodw)ljO?C~|H2BҖbзGle׀L 7 SB8/^ԉ-0`H3ss^ZCk_'wl/6Rpxo{vyqwG ރ77P ty7@_?xð;A44}жuz]ULek`{@Ƣ"W>tpX6 Ms~q+Yu5>[1JE̎f, F"JfI|e[U-e(8s>2-=X %-jIV'ʇpb<|<)K:kYJDqQ.Ju ojJ Y2%RTLWc*$o qghPXOFc,n*"g][,&5wo!\$ee{F)ܻwO/Ȳ ,,÷=%AQ(wnjNVzTt.<@Ċ(0Ԥ %e%x>FZ1^[Ck$e^HeHco#KinMkX&IybQZӛXV+Q%d=wo^C?&*y)e/ZA>(Y<"zg>8ִ@{tZ(-jL#!Ws%^hێ8ôiƓH'O&>=꒺}zET$L0w8!>k빪J޼ut]G :͐b:prrp7Jh=F{G\ Nε$\T` xh'Z3H퉭"r!YZÑEMGɄnbŜ7nPp[R4 5:#Na^0)xS7-mrv댮iXkXS.,ʊ" dLoO)Q0'[5i9OTMMehDƸ`JӒrՒg},Kی"1Kۻ?UmtkxǑA"LC }ľ Zl!P76ٓ mʥkǷ{Ѩ&8d\wW'钿 NıKW?@CAu'<76,z'&鳿&I~ O_RA tLơ=MRI^:lY$2\[wMݒ_`ܽx?l{Ls IDAT6]Աk?t$)6;Ooq7'߾BNnq2P$LSkDJ 7͋ 7IG ܁GiO_{frl 5A d:~׿{5 +$=D6ȏI/y!+>Ϳco[_/|ZZ7>;,~X?cYTij~h !BW ?'C)8FEu "%54l<6 kܫi1Ck#SzcZdZLǺwl3r!nۏ]>LXL.y2T(7|x:' wOJ^afwgֽm[ M} t֔@k \G76!Z/89^b/A i6!T7/n 6!+@6$Hn[YOXy)r>wVc!$@'{cѺ~Hhڞ7W]oB)%xDi{ú _s{Mc r(C2և(T I28IE*EֲX-J!u<^"TP$ D@ t#ͺbʺ a4qhBhT, ¶LXH/9tLԁE]CW%AŨX"+z~!32.V 8y׹x{e&^*$0o#k OSv#,gSF ;yQLxZt8:v(S"d9ph$1:y vUCoQ30ZӬV^^RUEr knV+D"2N P#p]NHڀFC('qX 7Z)D ()1Zl̔AYabZm"ǩtJz=uۃI5f=p}uŤ/V,YE"ϟ_&cUƶ2#HoN<{%uP͏ MO_~?|A>agy|vB&UӳDۿ\3/$>M斶mil2(xy0?.xq妣Z4 7l1G"/Rm[bL&W_)Rr6m\R\].\(J)mS-Ę0 v! "%Jkt! $YP#>{<7hh[LUuL(*Ӳ-.F,) @Y6TY4-Nj#G\,Պj3L[P+yh>#h9^_r$>2oV!bۖG =7:ed-#ON! L^4k['yJDb%9G9YnR\u+F86؁E,f37%n"yGf :'x?N{+^$а{ ;ްKz(1_V&~E,&[S, PfO"Hi4Аc H@):/I a֒9ZwOG?_y?H [\N A(oi@~|s7?xO"< CF%52=nwS"o\_[m!yM7?x]ʥ 캧RB*IVZ.TBb?Tم=uqJ&˜NRH~%ޒ#Fz $R9b04%5Zi VtΥ~Dr!ly ` u&A,u۱c08B"TB4i1Y6BS =2: (JV[deLdQ"aԴH d`bd:^`{rd:=Y01\ 79)L6hU $$3^xs-4m3prrިٶ-yfLs#5ȩ:RYV>8,w#2h"rn]Bl73ȫkmBr:? eQΘM!Q;">b0Xddɤb{dlKYVvke12-sx@e&ԫi^,zBH&!x1 AQ ֱt4@5bc -Ri9r|AeC:(KV͂?|FrziqmGx/Mk?+}6K: .X+==2Kcmߡ^QΧL EzM$1bn0p B@Aٓg\\^c~G?@e9/܀7a՚,˰"-hO$2:i,K.SځoZ2 YKSXK4҄ٶ5kyr| BS\.}| =~ƫeMPeӦE0xQۦb;5ɣ7(yk6ԛbtAh\^ݢʌ̐lttA2{rI_mu/y'59^*fJqoSl^k4;t{.G^^? ?rn 2^,;Z9r>h"xT)䆾kIueƣAno~/U$N|)Z%6D)({lD? egtp(s+| jHA}+ɚh{" 4(؜f<2ʽCsh ͺ i#߅X"]׳6uG?8@kR 4ĘD!H!-WxMFɴNCkMUUX7P9v Cn̊ C簽EU9Eqg>RV.t<{("QYN7*Gh0R{pߤ 3a3;L&MMFHa`1SzK-A82e[a69珞yEGylfUӴ-m + =$:ں:BZ"$(BB(r!6R%0eF gg)h^] =G 8?>FA&$֚>}]YB@@@jPrK$ "@O@ W3u%9<#%BDh%Dfsl6 hz)GTezbwYւ"/Yq{yd;h!q}MgL%̪?Apvv =?|GD%JTdsCO(*?ݮQQ1=#dxZ ]|FGΧ MǏ`aۚW9}ުgslB} OV%3U''qqu\YojMͦfzt%G.SLQZXm7gWs?eyE=cIq" sE!cRd4u81Jb;ގ?~l]2!Ad97^(#h"Vx!nk#8{~)we\8Sj H!HC)k.# $S}%%r<^P;MP nbVoXweڻ3x+5%Nղb7~=O~W7?O J}U;c!ywbuq(~йIIB\5VB| ?ݥpa%9xE?S|g~op~A?F?ۋtM qmη~dyNP\޶*"WO3&~G T47:5{ٝ|ܑNV W%D:FAWp= =8wy ޭ{v`OQB표]:vOq|3H{n .o]oꂄcBYc4ᆞd)w,1[oFqOLV1=R(&)PyԸX3ʒK%R}I5Y 1wb=9) Hqd#%6:ɄiUq4S%Ea!UiϙM&(#XS^]]4ܳ8"Ȉ0?!`61xO3 }dZRVE~wѳnRiCr|2AlwdFctҤƍQs\MKgfI1i/L(3J#)MF)vH^]BC-(s\} [T&JJ<(MHMxF$HahAж=u@2=zBp~z̳3ӭxױ^-h!RV\].Y-Wg>-)3ɤ9Ψ 9YYg+]Vࢤl2#d?t""тz6u<{|$7biB\,|1Y7֓WS XojDGMZn̎yBђ|dZePw\\#e2\\n4>bA7ĚZd7 1 ("][ |^_/NN>|,V9{).X6%U'خ#/s^_]ur:s}N2c9xnfLٔLt;RU_\rqy X/^04gS)M?'.pQw{/_p:2Sx(Ï8{rQLYCIuRM[L|VQ89?vMg<^]r~:r~ʫ y䔮myg^4~rX&3.^"chb2l6aZf("ZHɊ88p9DF𢡄]"%#}G8S;#׏g"~D=\Rm(}_ntS.>8`u{A 'G 65|( ]vLkv@ dRb WKl?~l>z>%O'vPw~m˧/^,GOw ׷[Ξ>Ff͚g秼{O?! | U9Y! uM&"?=e:q|/^_3T)o65E? .2;sZ2 ;iE){錉֜uC(ÀӲ@#p]VVRP9ͶF)IUM6PT%M7i:稢`ݴ'˶@)7aBy2Q>4(iz 8sfC(rMiR3U['ǬO bʓ./'g'd2h"lM;%EfpmC5)9eJ;7vh1l[rL)h!Y-i |дRG[\ے)MU& Qjzmd$E}{noB:;F#:}O.&Þ D"&X$ yFJaH%FI24d#O2(4jgJN$dJiFMnVZ[FRf)F J1=>`h^CKJ)df|\IY\|r3C"M87 JI2cpe4*{!T^D#/5y_w~:Gi7>oxoڊ7Zw6oUcŗ˵.-E&Q7N^w=<@{xGcP0h\Fz} =Y$ZPkDv'-d+5NQ"6wbR&ܰw4c;{ޞuy^vO}>b],uݱ[=B@02alR7) Tx>AOz IV*9>hdMn#+ך~ *jCS¥RdS]^*]YtR}1ZzGo` A`;zNA!>Ǔ9l$FV3hВ9蓆GeAk:7a nkq31{XgD0`{R|йd2JC Z;c@d{ J )B 2n:9l2#WRgdBpv|B[8#'!3897 -dx8:>b~</4GB@˶0PDvD1XK۶B4MG״8U9YŤ(IYɜM 8;5LJ*h{TU\\39BU!=L˔ R,yuMvɴ`>p4OT{ol=wCb:'//n8Mo{,+G |,+2-ٮWd&#J7놋ۚUa@Z%NJcd:;7|kD\S6u`V8R>1xb|fٯ* U Uѷ-enl65AyFj9ٜׯ8=Mq5ۦdOaG^\.W 姾M z@bJ"fd:?f٠65ON($8K$g]r|ttR SE^m޶̦SD*j{t0X̧3^_"{GpB)r1 e2 }AQmJ|]RAꣷ! }0N+w%CjRH6l9:e۲{h>Pr1c&̌4#96 B PЫFSV%R\`R3iFF& l,>{gZ?=t=Y,K?3FaLjvrIP( {O-d:VƆ$LK2)2En E25D2ZǗ 2?.!՝4cjYm:cV}Xb(EQH2rr4AÏ|K.oWt>nz" 6MMuܬ71EAo7 AtcC^"8 FC LACKI۵8v84W1936En6mҧn^M#z^ѻ@V4M4\%(3/"܀R-DO9)Fb2lV 'E6:V='-E2f0MީtwfI“eɌIV AA90N1EFV%hc B!kWea۵{v,;RxNFSN*a.f}בkMs0Ba0̧xOnج7 c"zJi[^q45R&)'|џγ'|7=خ u;"N͉HrKѼbmOa4eO Uyݧ$z>_ޓg<M-''62˙j2AiŶ)LL$|g÷!??>n}d2)ɲ+!f J)ʢB h8hlڞm߳;jfeQ٬C^0Z f)nR(Z;PfG'.fHJFDpwaɖ]"8A4R:9&IpH͑iU>{Bw瓋=!'j!p@RD"-BcDj5!8Th1-"bbSMQۃnˏ~wԌH'MmW+b]+Euqyb;Hnj 4}PR~U% Ł=!#~8V{NB4>ǡV$JOA.e)Od3=Z|F&}]gf&%>gϘLK^zlqg}xG̪ VB-jʣ g-B80]jI&us4lM釀rv DOV|1e}۲ljzᨪFi2#ʘhRkO)tdCɄ"X7-* G bDR,q:B i[h{{sy I@vXf!*0g=.^=ѓ~1cL {OX^`pi9 C劾T8ٮ'H *YҸaKমiD&|wdJcEgo): Md2-Mrȋ͆&DM3zRo[?dݲ8Yu(-1Քg9YQ68]O8T3?:: J#%sH)hBk\f`yi5ٓg A{ %wCcS{MOFX|D܈:B)aXC&T^KyILz}1&R$ʱڽ(HM"P{fRu/58zϯЌb/D>Ym)ءCZI ~gB(7IֻbԊ{;|sXY?DNv;fmnY!_8(9KpIe#Dizf[D!vR2r]BuF.%AS BaC5,3 eZMK\;piBB[lַTUе Öj:ARPh!0YNu,>xc./_'ʲdi(˒[f$+d[Ry&eŤ*bb54!9MM7.~)YeVu h]tmd6aِh̾phJv"Hfo=dyA%kH6inBp4m{lBHQ0B`r4weQɑ+ }nn$&c&c]d\,l]'mgoL%+%C $k[z먪"} <ψZ"`隍x b2 hrcdr!(sUFGqr<_}AUNYΙϳӣ?q/OϱC˴P8\?M6HU?µ-(T`S ޱ/>|`^۾& E.j+2 IDATKi6YY!Y1 Er޶. cznt`c`n|b3M29&JH!g5=1lޱݬq|>_9-QP^e=)B=͉ oo/7ůW975 }hc|gP~1]n̎&ښF,$RhvH.ELҀ)&M%meNffءZ4E~@hڞxHW5. 3ݮx茓 ΦsP׷|OXoV0[F AeLkn@e0@9ƍ >ph_$5/ׯvwT_TpEAElIcYXĞ ePKHae$ g1XqQPEoN~d~kO*0`J[w^ͷֿyCzh&D@ذB:m#|oEьm27k ^@^^)J+x,j1YSt2J213,O&o"D=oEU?W^;C$?syuz!֚ٔzb68 P;I דL8"h4Zloh$f6+(gO1@9凈4aYд)$Y ZEaPAc|=4^˺ 9|t킴0hgyTMq,(G 0=vd2a黎VT(ے,K2y8q1v!%JW(6ۊb<%IA;ŝTe;ٟTx1{ey5/Gs=zYo]>nonyٽm?- b&D߼ھ >7$JnN F鍆bo~8vCɼ^`&@?!jGr훎7G۹д ·OX= 1BFa`\'phLߓ)IPB,c2oKlHK.&ȯu3aRƚt'3TQ%ZKuENemqX,0g<*sv~g, ".e|2fYn)TMr~yIe(Њ M;M] )TU\\.q(f#V""$&/Rtd(qDQtcyۖ:"MrWh)MO轧H$y:4JH>ÙrҒ-C fCW5?8Mj˶jH$E/Cu\_/0xW 5}o;wL FDR& ipXa6{U "Pok)Mr}`ukP˫KUM1GO\o'clKھ uizt{jLl-_{țG JYڎQQDx!Qu WmB陌rmsRJMٝ9ζhaId:7Lg#%;rmk|s2ӕ[>8c:Dq\#EFYL'lڎ ] c[qi{>Opvz UES /TBL7=ֹ!ӐӴ0oMJ8AM|s'C6$H,9OSh|zFJt2BV?9 fd\P5%5RKHq20MS6Ӝ(NhZzS Z9J%iN[8QQL/yu*|24D@FqD]Uhfd̺y90jWc]lQb~tL6Hnb|gg-dFӴJE6 2.rMqڒ bBcq!cses,ϮPq0Q'd<QW5ZE4MGUx!G!aG4#Bz{c WK5 =lrݠd}y"{ '`Qcn7 {c'dj[JNܗM]NJǪ "9\>$BcUX5 Jo q V2 M`TU{i xq/2n# @k"ݥ%-}E KC3|x.Q 9,B0ùSq͕i}_{l[Nwܧ zGm\O_S@m!DH찺7qRӹ؇wia"~Aw$>@NkDz~E#CYn#Ql=o '#e:%. F4ab1="ا?EMGVW$Q:x#´ Y eਬ\ctA#pJ5^H\oJ6MOۇl,n<||}(48 [6^"0Yc_1=zoZ-KT9CoZFEBUoX,fTR{K;+4m!ZW sJj֐h8ϨUWa0UK$H$:B#\0*F8ysTD-Z@o RGMh2)dYB4mOk6p\3H"*N9( K& 톲th8KjG6UM'XJ&1}"g6[o:CEH$8BSk̠}(Rt]GYtҴTD ߻˲x3t1.,kwݣj0UO3k;HS#zk)8)#$eZSm䄋NF0M3"Ltm00!B k{7/|DّuԮrߐ"=Zl(w 5mGP|6$9 Ah@nTn؇ F3r(vi1uݛ 6kw wpr<_֟_vxfyO{0{ɍ+ԋ}oޮ`iBFxC M ~ߜHen ́#p`@o7R`ÿ h'FAxAB'8cPaewkuxc~wsz{:VB3=E ֝ ^aE@oC"Mc U^+v nK{hb~Gs/A߻RAeEfOߛ=,-bT"E۷\/t NǷZh(B-i$ r(Ҝ2N麎8E8''¦#Xc\Gg$IP"xH؁sD^۞,Mn,&S "H%2!Q!K^dz=|6Fzh:lvJ[u=>:hx]9%Ib%)J.+uܽsxD\֬ʒfXk)F: G1lw6aLo<;/<^p.qԌuoX-`M9ὓ$)Y-,[>x?HQF]SS' 1& {I$"I#ںa.1c^&)qbyф)8kjbc?q:YK;P:g*|ΈnG1I]xDkmЙଟMFI/MwYWiNdx!轣o;lg( f߶i&Dm.rJq1]R2kz$, C{H !iڞ8Nu5އ˔M(Guh=Hn3b2fY1* fs)Zٽ|X58!V*iMl:a)y~}E>*diD%)N_&Rzk ?`HsUZPs6[:svtD_خGq-y R r~L4MI+-hՂL.7 -^ipH>&p_$>s="Rr>̡g@ A4xJvZ(P00w~ dkqֆ-w"`FS2vTj[9o"?g4Bؐ MC{Ya%$#;~3lFnBtN5F|Ѯ{|?~?ok_Iϻ}҇4ŭa2mMgwx!xP0!^ o}/и%{ lؐ"_i~K_/S2OX\yy/⶜ !H&g|^;M׃xvWH=aru>4 R1icJDb2d$UK6}J#jӂ4}C6q|6!,g\o1~0E'uCbIN8k+Jd>GK֠tvL4${NgQ IDAT5 . qIԊXjr5tJYmX)48 ŦnjIDQL(ҶgmmZUۆMYd]Sͦ\Z.Y%=$ISD6+d{.ՊŢrAYwV=()xlI|fZGkёdYw;oźBȘdt6jA]tmo%;zk(Eģ )8Fz3=~h./8'ׂ hʚ,J 4A:O)imDQ!wfG|W;|b㪮QBEa'X)(QIdHi3+2 (&) d@v(Vu`T{Gu͝;g4ME@Ɉ3<~vkBab"E] ܍P+E4 ڶ%I~4K#%cfiS,%I6LmO (Q(uZΦnDIwP 5$I;6/ZF #"IFcjZv=yN R+ HŇ@|d eU yQsh#1╤l ]o9) wu8Bhe!jUkM۶W-Y>!Y,Vi%!{&h/N0#5ɃF }^LJ yI!n_n\8voC174MC`V$;0rgv͕b lt >E:HXomR[rXG x7?n<;\Y*:97#xom~d?^_Ƿh)G3EF,@ńiukB1M|Ocx|6a'76hlB*\a䭗^3o;I xvtx}Oko|k|:Y\3y<)ttơ,He{D~gyJYNG 瘮˛O{|gُ[>Any}6Z4r7+Ci<e?m*߽pp]oօ` 0c=։x89Oi:uS tyH!Π =YEkrb[xh:$eSהubŇQ[˶i)Mu[Xn1489#%=|H QQ$N2ʲ v6 i!MPu5:JXo{"u=ƁQ3Ώgqha:S^Gc{,׌nil#פivUY.ZWW{\_h[ 0 t#DLRFx1YFrC^LL&l+~uݰ;t<"ͧq-'#kÝxѓ!=wԮn ǣx<4NۖG3FfF =㕣ykX㹼˼H~wp2')=;-K^9q:yxz(/$IH<>?dV;lzӆF#qKvRTna)Vӂ, /b<˫%Ury%qє ykJq|2`ʒD 4]Ϻ,q2t7z(AJA5a|mV*Hk E1;h;'l%u3ijIނsϏ6L$kȅRXi2ƑX4#uXkiQQ.8g!$ %%dRxiJ׵$q|F۶8Ho͆lʦa5]4M0s64tMf"rO|@*w]h@iF-(l} RΠ%U> ʦ6=q t-KEA]X(^UU#8Xok,k'+(߬!pބl`A"D93n07i7\ Ϟ#uϧLOr"*>v||SN<`}¹Ɲw}F7l{?}o] yA;,?O?jVnC& ;|l<v]ގZU 2aۆ {xAJ9J}YA!|Mi4FRi ^{ -<=g[w#pTp$dPeYzfSk1<',7k:o)| ՖUp~+W 'x ig r3xe&ɝ{I]X/(ˆ uȳjMc (E;'x5/5 b%ס4Uzdq$,WkbFi{Wq'M24q\PWc D,Ƙ.*YKA8$(&s"$jƢ(D,G\^7U|>&1Ϟ_i{TYN;g{bZD:Bkm=J0)-$R@CRU uCP5cd1q鼥[zAbSIst4( ,ziLQqLtA)#Jؾ%{(ؖ  NN1'Jb?e۴TX阌Ɯl+%R)$AIt!JRw!L/4yጡmFy +YYLѽ>C$NY.Viv=\^pgM&Wפ9?ט1\]\;rӰl/~i^p~qӫ+dV"1 qt$$#3tuLc8$" !+L#n[6mMTAl۞5L{''\="nJyVRX,x01OY\_AhfM/#ސՑDy"$T}H\-s8%Magv_^4U|vz"%I*j 4}|ʶAFP` B M9gGruEk (D{#p32"Th6|+>kb[& {(ψ&M"gBNx6 4KXV8kilǢܲijӏg#QLb&ńŪ;QjE9۶{Ϧ.9OJj5QAUوVvMDo(F]KEYmr<:HpMCx2ʪd:u'xiFmcyţ>}/CH :nwšn{.bK[q'[ 5l)3{0ER!IyVrX3"U0|/g Khox)! 'B&p`ҝ0 =u <ćdh_]va8~QZR~7oRۜ/]}tvѵ mo>q^m?~_EOǿqK5DC%UOSOx"j«g|h54Bؾolaݘ<׼~|!%{жh{ )o_gՆmڭؿ'&p$lBC&!7G 47Ŀ$}ȫ;xaŽhnւEK{ RJA?A!L(@%v?a#c_Suɦ xo5=xbdsy`ݶ)y%Ttig>͙F#cQQ1aZ!eOY$I5# H✣+,@4Gg'>bqŦ0g<Sn7!m>#&/D2cX"fzt'O%J{rh%E2BUfXriMw#= +-)*rZqjɶli|u|LȴtZ#`TMCW@P|`N坋kQr"0\_nY7'_+Mӯz X$Қd4M"߃NNiղb]Qn-t975yZzuvьTTt;wf(l6LF3.'g4]In2f]d41ƛ~\lq*iK׌3vxgGGDJrq~N9Zw5 G3G)")fm9}iˊq|S-z9]7ȕ$r< ODyT2;6 @ H8M aKH!4S(є K&,7 r˺y~~k20rޝdDS֠dR&W1M٠tDB>um0~{%Xmj-X*ш28I| 4Ut<㐱`'G3^qq$N Bac\3j cjӄޠ#B%)-zӁzJEe,7krc}h:v`=UU!+4&I,͸X.)8GI>BOb>a0튪iʒF\[WxUINNl"KX.7|\?fvr7$Q޲YPȇfq`YDPyUmoq2?l yqΠ} h@ n;,C{jx, dz0B@9{3mvC)HdRX+&=^Hs}sB6#p-D^Zq*?>G] |I3p )(y+L8`/^ Q{.3_i> ?N#s|G _`>p֡7w)_,_nýwi/H=r/ ֿq|Kߡ7{嗐~쥗.PӔU(d8oCy~1]~ZF*{? wMc<"}}{o{+Tt'5{ R /G%vM'o57݃L[ zn޿v[ wqDvgB$78pMR 4tZ>a>rt??iPBpG< ,ڦd4cPL'IoΓIg9r1U)n%JƴՆ<ٳs76KQAZ`[7GO],mcBzHqzO>j9;度a]OָfMOc4$MO5l6uQ҄mq}dZjB%  :=cfc[¶.BZh4e^aM1+Ҥ@(,IypUUry񜳳SNgKXRP)ziMOIdذm%J)Quň]?|syzU3$9r˦LOlI4eXm*/x%ǫ"@8vOϱ2ir*0O)8䘫D?Al6|J+$ԶVp KCfZۖIx:ھٔWSڮ"Ȓ\Gݶ*A~iRڧ^e%E)o冿$IP Ir]n{X[6_ݞΩ*Ǝb_B 9b%Y &!#P+ $$@LB)$npb߮n׾9U68%콚oy~ ǼXoٶ <[ҵ-RKҼķ eF4$ iĨhd~bi bv2Ut֣e$gZOT1 f,ypy M,i=ttEzI[L0}''펃$,uP#x~vsLJdZoŃ`L%٠q?Xm+6B*Øݾf>bZsQg-y`%A1O[>@k"x>])5~_\BPvQ s/n⪇[RPw^a R$!P.4b7wyy>HLǮjMei9F ziHJ`Ai *$RUXchbRk4Bڮ+wHCxT}ژ]L&uC")<˜rue>W5L3,'Irvg6!M4mGi닳H4gs6$c>Dd<p; IDAT%iBƳ YYkBY?D`udx\3-l.x|rB>*2%w=I6⋳ t0 FdH6K O8P4m/L Iٮ7|Dt,2*oo8L=E &%E\p:QoA9A8焾't=Ϟ=ji ;GƧ_cMU[^\Q|OHD¦xWK~U//ϘMUs\pݣ"pBv`e b!MW,5'YL MM&MJ27xS $`XVEՎѺy}F]x6nL&HhژieXXVGmxд}c=:!LShr1{Sf!fRAp QSGԍ{bH=447179򯿷Cxy9@7QփF5`NЀ0 )7p+j6[iewO!1?%Bx'F'Kc6ֿ=~$p[rH6.^EB^h#SRaWm@qٯ~;/GI! dloS~OG-I9|Iwۀ~{y֟eDӼenB|& -?}_KjLFTgv>}AYp Uzidft4uK$'hВ݋?7ނiiwt1ڂ9ȍp :r!VMk_Mw7.ю0D-݀]_!nk ŒEv8TRhێ<`P XgTScs?R{Z{$c^tIӌ 'y/[غi9y^B I"cۓ$)'G( u ƑԬ6 NN}з==ɘH[?2K6T葦IʇI.#^W,VƇGo qt8# 1Lgu4E$ W5YQ .v,ũ]#]Js0^[nhbo4վ&jEIJ" Ρi:FdFw=Kf)!?z3l\\/yY/^T+=8b#K5+P:6 T<~`U i zy/.$Yxy|XnL ڑ& ;rjOYA325#e-V$5^s0J9My“h/7h=eYPvYT 1Ds\zOqγkqv A*<1I%PHP"ͤt0A`0]3x4R7At$RBGLdNn2VC$@xb0194T2ʄ c ȝ/o"H2dBpOnIo6)o侮־!m7ѻ7@u6A7~۰<_/{Jn|%=g[ſ~_z:ђ%gGo[w~_:{wyc9?b/[7_y/;w9vffs#bYO'|pRܓ<ݼ8%_<_sş=NƁk^r/~üⳗOsW?F1/;Vk~{N=OY^~cp "w:8}*x߈؄xXkAJd(h{qhWx1V;ֻ/_׼<`8B1L}Rqm>U1bX,PZcLGS7 Y6\o7$Ax5:z_rA-(hsDӇ\_]Rf%tLg3taȋ$Ki;˦iYm+d# @/$y!͆}1gNOΒ)+4Uz厲:HL&ct[6;/.I"`_9>>b6RKD3I4eSU}Gk,.. J#hzP\.v똠6OTUKg!8>:[IaGHMY1r4foz.k] DHZ&y I$0lV >/{V-yVR`]Oxd:f<A)`Znqe6͘3zQQ2)r|2- LېH[?9"_3ȲEyc ̏YW;~,!2 ٜmRd7Kfᙝ!ugX5 |jɲiu;]ze6dEAY!]}gmHKDxzI Q$NHmk >jA GGZrڒd 8g20CI͖(Xmg $B% D\Ge]G⥳<k Tyq4QxѸp>gꄪ]GO^\ GOԌ J0)f_(VjJ3TWt]G$LF9}WtQ#}/m 3-SG̊AV(˜r3TR)K{%+J.֍$/(EG#O5ݖ,KBsZvuM9L#g)˂4Iе R@]o&Xw) Iã#|t3?8ׯ;{CX xqk֠Ҝ¹l4f2qqqAd!]pxt 7 mbdB781p`X)%!H)ahBY=JȲ8on n"oªrc36ܝ=`^1BHRQfMV/n^7[!H}wo1!GBY_[$P\+D ɊD$* #~gB!ҶwgqwR#%ͮ5l =}Sa=ŅI ".F1}ۃU{3`'-!;M dU6J Zi7zHHuN6xRbA(!8Ѵ5]'G`]qVk MCY*DxieZ̲0D/7[*;ZkEւdjaW7leRLG& zG壆ߛCp6A#f?'4m}gJ}OeJe79YL8fG4YaS2q{U)=cpig(8Vf R*6/WL#궥+QmGmS] v}GG9k/TQ"ik-")Ɍ+ONe^Y3G^yz RA5"?x[my#__/x_wJ٧? b1DS׆ S oz1*m=ylTK쳗Cro[Fenb{yD'}Y<:8C&5o}M֋5Zv-?a2;8`^s"eBLGW7 OlrqIs=tOEޑnw 3& w0){~N(}>{7O b(1OyS4}۪#1>.YmvȂIҵ(jV *}|lB@jM?#65X'giFhYnw@i k Ec KlJ*1ZM&4z3Li_%Mh.]u4Zݬx,%Qq01 MaC'9}gquyv524VUSst|VcZy1LJ@QXlRMYЉzcْ$k tŭD]amܲ&Uoh;dT0=MQ` 8c6s& _ͰB*IGJEƱV!Ʒm#MI$*ڎ\/6l1r6tͭ,nƸvC DI(hѩ&I"6MS$!R,!I5I6DjZn5% Q*A)ވrH2ESԸ`oŽۯz+Bu[7{ 1dB6Ob`ikZK>:v#Ri% {>!Zi$ X30qtKP6.徸kIyr"kEeQ&;rKu$u󂿋&naR2ýx]Z^0*Ea/ϮW\]lTUC0D%)IƏ:ccӤ$κ"Cit1QR.rvھ'HAwYF$:T%MENYD`[(Ȳ4dyB)f)}o8;{4IikK"#/JBl7;sLʂzGkIt\/WLS54$d1IFfujxv-q4{Kbh/󜓣jGg4ΰjV@5t}]G,Þ,KPԶ2ӀTFyF'cqRs|~b#FwuKiON9X7REB,6}PiMeER#-8`Z$q&V rblTҴ=)A A!5KRV5e1XzaTh(Jurg^l;ίpf:n}SnYvD"J)7Ml>&xu~20Sf))yOʧ?g_g4h8><=ݖO^j_Mơ\՚vKppx ',w }!x%$) 9[۞) 8/;CkXcgcư:, ziq˫ӒsJŸd槟|fVe0.ƴm'AԬv[嗢|N7yFYY..9I)ϑ2g2!/rg(.9q1-JRMV*IYY.a^1(xprB]=;Lh{ o-NHӔdd:z ļSFUa<#%OJݖlJvc=ePf]0Ng=băic Yp|x˫k-]Hw%">ꦥIQ#I>xT'D5mPN&|5͞T X6ŚዳK1E'8dZ0A@)2/pA:\nltқ!AP)BjNbz c>zyyY.6-dl,w5UeHIo쫆Fж0 GZ"xӳ^.Pf)IIgLܞ{A#ͭĸLc%TC>ѳ[4g6?`21.K5dJq|t̫sDW3\Q7Lvźn*ǟ1rx0z)x(&S4i}<e°lG*EQbc V`c*\"`X:e61*3DyCgw{?yhrH2\9N5l k^_XtٌnþkN$l*KHI9z.ik z߱ }筵-IɕS\rIP |ά,N&HZy<IYTXβwoYoVHh<=]ߡ0ayD"S;0 IDATFN54:1B&:J;|@ZJھp%%O%J s$*%OSzc҆Px,0Noh[Kg]LgPdRt۸v Sf9ĺ&ZbϺ2-KdRq0ihږm3`8kʜt<?`4n=wۚXO,Wmvwj E M4YƘU㲤2%iӔx)W&s1Ɉɨm+{y|r5Tkx$UchC(5LGiNY4!Պ˫ 99ƶYo+NO[ 0}3Dq2.sf2NALqxtHe,k<0FÛK3Cdv{UC4EbwM"C&JဨHSVHܐh)īh(t4 byRP,ŝHۆCHumaӁ(HAi!J-^<(#DݜW 0~˄KQF6̌nJ!u&7r ?v-v^w;zI?94 7Mgb#to@*JD>޺I'A>DmQ)M$^o8Jn SI C"y|1X:Ba{C'Yx4:Ck}CYNAPuug-͞ŒQITuJOvmq~K^Zk<łն-AHcL4"]}|)x2njPK j66Fˌ@βdԚr5>Jî gR*Ʋ\Fhu1<&I5EQ2J5>#I0O)ˌTE{RUtC$7Z"#V gz2@A;;0*:%Hdc-N8 TmKdH)ږs}}Lv]O%mӑjMv$:!U( a/?g]11]^SNsq[@KV14udxm:KS#'4Dؔ"Jas8|ikjBä((H ɴfl:R: J"i|Jp.F)h4;hM]WTU`J&ZFyFY>&kPI )h,!@W7\\_sy/XmY"iI  9Hrn-7ۅ0ܱ8ĝd0y'AB{3| ~K𵻲HnL>}h'oG[Ⲅ oi WNnnoۙ!Vެ[kbV@ nѺWBUx:?SZOWl _oG[K%.;f o|)u|o2-u|Y B4֛5ՆzՂ5ņbQU mEϯX,^rp~}r~/_W:媢iƀ!FP3F "ʟ4di1=BBj i$|\D9i0H%ta~t1nHtngZg<e>1NyMޡ&I3zqP|>%uݲlP2B5r G+E .=:ѨT10J\pZv=mgY<8=e}lRtF[x}LU-i^_9G<`]5T]LbbPS(`<6t1kha/$E{z2%{ htM 2ʹypxmU闯A+)y(GTƒcd:XYp ORFE:Vkr:Cc^Xm{br!,'׊'`ϧx1e%)g'3vUՒvx6cZƙ$OU8&)$L誚"DT؏,&}_Cyv(8?ћ8vHbz/IbƁ|e]p8P9 MR5 a!pġKE3dʲףvMęNY} NE\ovuGt{kTS{5>YXx+j|a}N[Aܛh '@{7uMSY$NcplLu qOʌ/?dQ\۱tp޾PZoqw weevZn0u#gj@HA|qqEQ!Dg%SݵaPh hG%1݀C!JH!T@o3z"?1' DiD>͈'a09K GOXeUDap(+^ʜ4mv"MUb&Ic(aobfSA~`Dۭ>;RP`_wM n+֕7$Yz%Ls%H3CDM"Pjꦡa$#(d6F 2jG5hfZf =%A 7ʾki!,Ekq.DGAI"XNsQ`U7M SUMY1]qv #C?R5N&)c麞 0Bqv2Gy܁đ%9Cߡ# $9zBtڂ lK/;rɒ4'FcWtm 4enW2$6 G(y,rG' %˒>{~f> ch~C #qQ BPN9CUcڗX*v͎~Ϻ.8TyrpzdY18M7ha`yz߷"ȋ0{޷E<~'?W^|,<=_E!X߼lyJU5|@;pj=5!LS4ōYƛp$IxhgSIrRw#!BF=lX(?u ԑTH#_a@۵I0mz߀ٔ<5ÐC( ]C(!'0c\5q! 2aÐ0 jGSL h8c?pqvJյlJ?1[,shA(K-ϟ>tJUVwj{]u)zA*r6+8ui1/ n6{OHbZЛFkC;Qkʦd>%VZKdqJ)ڶePU5cɂ Og@t899hg(u܊*#!HIrqw➀AzX݉L}~GulnMma\_Ih{89F:HGvcmϛ|Mnj>'8bw; VuL>&=On>E/0w@,B5`2 }CilDp/O~^{p.`'>Rr27-hP;*EgJF~8#dTK^*q:*{σP*$ M1w?<3¡E(@ b0=2䳜b$5ONH/:_愑G IR9AEM[E톧?>:0 Yl|ƨ5 y Y^þ# ޼^ssuC//5M1~4^^Zgiql_?! vMDIƛo^~ӧky?K^sqyIo-?˟o$r4S pꊮۻm5E$!u,KItn톏><lh&s -lԃ-5'DA@&|Opfk~זn8Ն<ͱ]0sDQ@|GE PaOv SsGӸpxUGsoL($M:=28 Q848bOVoAf^IڐFDQ)#sV)qs6I-k d"ږ7_5T*K(8$#6q6 ҟC?X,hf 4*pdkC@ ┛톶8=;#"eE; Nػ4Ŝ@JJI?4%cr){uFN9MSXHix{E;j"EF!Ӣ`Z&&>Uy(R-`Q8W;>y}m&Yд'' 4%3 %X,QHyؓDVkUU Yg $^yGU6yUJaAkfQOq& *7w\Įxeoxu#f<8⃍6C|/1:D>4!kxηe>lQ< q{_qĽvqw[;xx@A?n&n˞7>qGr&տ=x}_xppR|Yg ?G!GJ R5)!3c ?TRw|9".og:F=F@&9"l $Xn:IUMY֞E(!.麞0 I8RE}ba>pyy|>o(zԲP^(oj"tٙyG ("=fk AfgR,'tu4),Ow;Лs6(,3|9GuÓOۆ'95XzzqW->yW/JWnnTwu1[̼4 ҏ*(oְgs_> }Ւ˓GOs]cmUCw@!ɄK-8Xk֜rfYz4-d)))q\6ZsrqI>e8$Uā;>~vAUnSXf'3INFeZkB(7{S@p9y=F| dwTM06z}MGެ73fgQkC3I) V!4Uy`4AR=h)ѓ(893dQ| {ⴡ|+ƺ'/Xo*uG3t]Ac{P7W 햮Of$ooe6b4#g'';nV+P55q I ]U.m`*AqH)a0Ǐ/Ƒ0Mƞ NS5]Obh{4G)a1vG޸BK'`t0K; g3ơ#Q䱴~`q~ʻՆ) aз"+^gMRI(jG; )EkII‡ȢbAt UY€jѣE ꚶ^ƑtBX:AHVDQ%d»ՊfXCO1R)"/KRnq2L'i#8p$mwI>P*Ů 0E19톳iγqlX,H2Z4lij~E~$1@*Nwq$bSV7Σ#>g IDAT'B;m;g>ey'`{~ݦñqw>>:{,D/mJ{kGw'`Qi47+#CFcz~V::ʝ͉NIU x y0e&?' >^(ve`x} q=x,@Șӳ to!>؎|@+{ulF`W|D;{vvrFŜNr[:}>uVKqgRa[cXh5gz^JITz8/սq֣=XkRz1,: J$%JF~$  /ysjb9g!a(}XmJIl^panEHA((!EKE_~͊]Unb!]߱٭=ݲY$YOsy@l%IJw? fZTb# ÐtdY} >Dځ4(~kz=rk9YCT6 o0B  '3qkzđ("KzB(G% Ǔs$!vu/Pk +iKH}'#$}KյYo: IGo13tW8ɣ3ӐiFT)Q2!g_? ]GL'MעmP,C3lj832Ǝ8דeD8H@3+($`{4 ( R1 9sG<{tA>$/fV;Ns~MŒuURYMhn5Weh$md 9VWoQ8| *6,G\/a1o?}BӶa.# gO..x|,w|db8#r~݆ Ld:gl1DRp:p^\.,Sv8;;C8vH<}:ԓ4}hRZjj_pi3ۮ]-(b^b=Mk>0=m!$ zi DaH Th^?G@( 74Q/›G(B#I(@4MG^$$z$L",m;dN0 ȳH$e) ɢGڧHi);_њ0 AB IA; Xzm躎sT IőEF&]50rQǜ(NA ehcUfW1IDix@o2/PeUDio&G*/V/QY]|Λo^2sfE3~z!= AtdEGȃ+RyL{K,㋐c䎁dDݦpv(kz?}mGoSZ)vׯa޳hG!v,B{V@Po<0q[n`FFmN ep]q=uO~z؃A> =-=H8Keª ȝo%X'>He9ޓSɢ8qo/Z'o5?z_KEYv7' Df:fEX0Èpw:( U$AFkMy# A[ǡ1~0%Q^C1a%tphj$C1VHPdJRXHll1C邲 jT 8;;7o^cf .&"d9a2tޜ t}Gsĸ8z%$z,<"-U b9PS55_%Pm[%gggt]ncޑbӧϿK$Y1Yq~ &> `:)}5}0= |R&Sǂ@ 8"}K׎ToG)1\_o|bBMQS5\BZXΦ<rNJ xq:ZF %M"(D!x0jP1 1vp(F) * Y,$Y^4-}?E!E2 (zq}m}۱^m)' e-kIU@)7?sϸئ/^27W.W__3V/y^]:{RDa˦THҜw-͖wW\-)g<aFɄYzۮuo}4x/>zt38MwtCfŠ ar點+~DIBe,gy3Nf_ʀ-I3sfI4Jl“Ǘ$qW_鑯_D$AXCeWO[!+(!^ :,o* >E<ɱ@7kn|]"B$ AP5k ey H2o<1IiA Zn'0i[Y+s4gg'lG աH!f $o4 Ya5]? ]հL&o]$cv'd#rYt2D8쪚v<.8?=jv)0 F=b0I*1EkyA?P!i}Bjuf?,LSfǣӶ۵?':KvDqD*˳S=]aMG]gèW)$z?8 馳3lqy}6 /:>}j 飅nzsnSp"`sؗ W-큷k^RGYR[s H ?CooW_|McŽ ,GGo@ݚ=4ZLnAN2f K~wܴ ^s{_G㽷踿x^D,2{[3Ҟז.'5,ų<Vey'= %ھd[=K<@X'}lqo0]P<6֣0}pRJs#oQ&iwK;YavHӄq cqo}PR5-xN7Wo)fEbtq_~ Ŕ8z_p|w|;ߥo{Ϲ^|Dz5m}`:)qYm8!F^͊, RQvi& *~}YRUZ8"3_Lbя ֤qL|{.bI$zǨ5//fRLҐ˳3nVפ'E uӴ#. > Br`6uJIa`tՆC!N8* Ȳ'[Gj_#a m2á"}""-/4U(F]w9Ff^QAw~5ooXkFP fqď9ONOX]߰xr0jPmۡd6G C7uWo) dc2+GMHyp>#v4poAݬجArӧY1_.0βݮ8999yhaP7w{"0vAu8㏨}\w[ Y%} l;B%#* x5sA>n}vE8{D% bCI} xfX ڮCԣV4wrz`{&MRch|Ƽ(id8(Cf܇ ! PFsL#lF4& `]G%H%i(Ƨu|I ȭtzraX]_D>ihK)~gѣ =}7 0<:?oY.fTe%èB2Aص* ͚l2gW떿K֫=m;rsb;pkeٮKYGw7Y CPs<~wMpVc 8}FHEDkGF0llK J=##1fh}vf/_ZoZn@jA`-NRwH'w܇w$cǭj'_wNyEۆJ?;prGo|_^r8M{ * g fyɹ Y?ldz~ ?sv".n@{a $}{~M,?_$9'kYzgDk*2b;iA:2i{ˏy*ٱq֑^~o \ocXë_ϩyόkꎅyaJJhyϻSJ5B#H8#9PHaB>]#j$S$b1fha@Tu~_Zvkpְo}9Y̑C_-ɒ8bEݵiquzTQJvOSWGL 1F( RryvJtCO̦y24-P0~l!I1{<}`ÞӈnҘ(I|sg`ZL/%(/lUUѥT@kF:*YQ61Q81.ʊ8Z(d2D1#B^mнdbA'5\4o6e!( zf~T^]zcHKfd1-]בS(zDR"̦\m*ޫY( O2"FcgӂI gQSg>}dHd=j$fZ$ݑHAvڱھlDuӐ&f>s"{CM˛MidQddAD_̳LH(bYtUrAW<>?;/>O?/NONO'\f"l1<04Ŝ=y͖"-%]3)R0%sff|S3R E,y~|~n+QB0+rON{tےl2AȀnII%DvYx?jˡ?)YѓgL gO|~l*i8IO`tR:jY%CSCR-G 9Z4aġҔhV=9_^;oֻ E*2'!Rk3q%C@ 8$ymSaiq50&)hˡAȶ00) ІY#}S{R65IΡ*KL&ѠIƎgE0)&)NOahd~4NPxK:4M,h >b+}rܗd)M M˧Xky}}b:#IF^!Nme9iQ=u?*8,Ҕ 9JU5dAՁ`<99u;f9lAŘ( PBp\=H8.In{(&cdv=Z[&9Rj_{$ͩʊs!ٗI9rЏÐ< io0Ri`%/״aDsAFH m& cV]+bJ;Ibr&=c1!Z `tq i΅a;a)QS7#cwTMq$yI5!N;l,J T!q?N`^e@2]}osF;0PQ?yQs'ɢp?^[Ofǘ/9Fŧ?k\R74Ƀ/am{9&̏ؔ~+F\ցe?;KIqS~&QWtF1]$@ DM-b)0ccc\>Pjp#EL9RJP.. ';S wCUy/a\DГ̘'~g[ZH5x2PMƣq|L u( <\"Mq2q1#8CGdi՚m*A8JA)þzPSL9_B:_6]Clpuqȓ%9mzVP v 9ڌ\LP ޼z0QH4PfF CV778'svuoސg9 (C0 :Avac]q2[qFyθXmvl~T`ۊIEeS#T՚7o^#=){fIV IDAT{ ;)QUwhm~Vc')lFpۜFW:0d[VO$ہ'{4@GɔfG7$iʶ*yp@gqhh4a^Lΰ<3z-dFAtzPX$fD9ޛZYhf׮:4E!ƎD CFBA$P(Hx@HNh;NW}]Yǘc0VuG6sSj]k5}ߖW|oM~-ϼ"-Sn6 _z%.#X/oBH<;Sa { _ᷟ5E E>hZ1I?K"n3w656j"D.< 4&!^&0h_INNh"׽J!pDq3O{Tq CLx"$FX651 -ɲb7U 06(=E1bZV ʪe]')Ʉ }ZwqÁ[]Ote*w4 ! (x%)!<_CeZQ=U`8X5E>¶-Ն=t[T(UU?1.SD+֚gdFɘՒ4q8д W5_p`8I78c$J\,X/Ji4 D(eeٲXm. ޱZ2A*~#%Y3) 6]l@')vw٘e@:GX79CZԎ5?k߉b4 RMsU`,Z]i]U<`1Oˁe7Wo!GT W|QXyj/*oٲ4~/şq޿zoeVr8ޅ >po}Vnq+U̗g?_|?ap :r_(%â;Ҵ]t|˳z$I^Sz"Î~du%PRTy4 cL H&9X궦eh-,y 4!nwhFk Bj I^jLpbKXW($ n,#4uey䌢 y>e[&9|bE1!%mUqzi-:UޡeĭwyocvB ؿqȶ1lچhLpޑ@:rd>GXh6Hdr{;E#?{bAk9}tDe Qv:Uc`X8:G=g _z.$?!M[1*R(b2y~ aprx=}"hβ^_r0qmMUqv" fSnqFԷ3[1}E+6KC\$|eYe:tmúђAXxGݶ5ݼ?ņA F>|ȭ6}W!}mW >Wf^V#u KҷX n=_'1z[n޼|>zqA֤ӔGO_qp0.2([eyf2YT52ؔRT͆{nh(E s8޹Ŧܒ)DU7Ԕ5јǟ~ H1\q0RIw8JJy7t(UM!4XkP̎ʣ#ߍ i$ 妤 :88a(1]*aXlKA,'4ɄD)(H[6֡tD 8kf izb C R-\^p)ƱtWgմ{0X xL\_04uס]BY1=.=#ER , n12o}~__3->Q_| T:!^/ۓ ?v-= ?;y7K6^@[4zE֫?`)h?Z/cܰt׼%{'@9"D^]; |s+U3|{ɗ?3}yRw  |YX_|q!dCXKX]XV; C@]9|Ǚ0)Jv%[WiEgC'@ED )öL(0 ܕc8!y!I!5MOU78zzBZ]g)~8+^m~h~U"sA9Xf'4ᢄѶ޴X7')UUFf3Ti9=3\,zK{M[ӊ:< zý$ɋ >}~QCo嬷%Ś7 _wŦ`$H{ϟeRf,#Vӛfg`)Jy,h<,5؎H41ڮG~]s.*i8:!B:92zgb51$Q|2E)mב#. V{Q5uM& 3qHժd<8NY,L,qvt?x( Xɫ_g7J ՋtD}=Z:k;I7 qJ "ͦ,JYqA8ZX+N1]xDVx 2h0gvdU$M"%K=`Ӈ(Kg:NXhgZrz|$+d1۲iZ:di&3aP7 MN[F9&PjBo^PzC6QlJ]X Np;pvu䛿ğ/{S<\_쀼mS_LJ^^ o7𶯭_vʘ|kLED1$n%%WdX=?zLe*q/Ç4v`0Wy?>^2:b.h&IR"1T -s׆~ ]pYѬ`w'JW]W~(x=> 8iӳ3(ܤ5!{'hTx}g\4 #p4C!^ (L?uظ4ms *q"#/FEB%cExF:mӱ)+1tmvu%ƃ<X4X; u *iqT1scdԝe@:a9]ב$1J{}xՊMY!$(늦)q,s%XE1۪zMo {b<.88x$Jqu`iUuo9_,I CiB%IYK.`|:Sn],ێf[G197oSڶ/#rpiH9A׶imSQ 몡BU;0)ryjb J@^1Aʯi'8=(Bk*ϫv9WE;aXLʝJJL$iع]l9;OÈS<ё횀_z'O$Q nI8zY;ʦDIE"ϩʖ$iDeHi7qDDH$x8Ǻ!pwľ74M񞾷eYY%O%шq^\o;no:tP0p`:ᅬia7?%jdo:aYb6kiښ(ʺ$)RiQ,w,l=Zk#M5cpuG)BIϯXnMi lҵ qQ ؾHEh[I}oI$lG$: $VXXV!+b7<˘'Yh< `ێG'c:Ơi;"XpLÈݢ}Y޻&+Noa ITe8PQ(Y"v Q2 ZkYX'PۉۄS9MׂۖANb=m0ΐ%izlޕq<:#%;Śbι2gM m>Yү̷RJ4=v cZDWS-V&lێ Zv$q)uHg\`aXmK:hڎk79wݡޮmK> "fcH` ޱ^Uxp< G30rl߱?jί,ˆiyrZsr0'MYE1Eӵ5JzRҊlRx)XV`NeI隝{%mzcR }4nV ÀV1YQ $; 8oû5餵H߻7SV-uS-Qqx|j]su}:9?~F^ZD:T3Nc߭5g<w-]!ݏ}<VXWp3] yqOG8%"C2I4{Ltxkak.X>$Ib6k6x H gk(&f|yE?{W{ e6 R: 4Z=yqнj&l Û׬TZv+ vՂX D37%D6b7Zf]!}ׇA8.@KV%(cpQ"q |(<IJTLk-J+a[U4 &)ZĴMG,QB7xڪzݻXr EzpN,$bTdܺ}WNt `"R[7Nخ6DZR%ɜ+~g|;E>k<~N4l@* ~~ϞڬG%1wb'|޻ܹ}}*>e\Rd1u նlUQv=QD bj0Lx9"NA'ֱ)kka*[zgOfXW%q|2izY]]s?!J$Gя>F|zl2f}w~ dA/)Ihk ,Us8_{?9ZS[ 4螇.HeXW5]/i5xK׵UrQ=srޜ=YR-9eg.> %PJc$K>ܤ08/AˇEo,ٜr[Ce((/o dkڶ/8lpem Y,Ef(tDtDFRBa:X7P5HAikۚq(:i4VqD]!A aFHdQ;&bf8i``.G)HsG{38IQ^v= 6[j3P-͖Ҕ/wwݣ;g1M?(s\+ʶE MEWD1e,.y O/H%A)]c[cf<} nAcJ棝߭a,c0&lvK&dI`{Nn]߱?08GUdIF.Bq?G 7)5I"|W%˦{a 3s|7(f:|h<=7˲ix4I{aM"cKլ i(b21USc%$|ܚ̸KήyzfUm0x=W|)+C#z屑Ւeo蕦ν%cuQu-{19EFC]3NSfdh4|ٰZoi'H'dL[Hx%5TH@L@K,Ei4*ʲ.y"8|x:ɢ_sC0GQ1(x qQ@oE X0fXg>`:cv;KGnjmUb(:a`oN W$YU]j#lLTIB^X.V$q t-Ct()*k[$%F1MxoF)l[;w) ڪ(qPn7m4+Bev~fд G=8|jlJ1LOH0mt(޳-+n߹T Xc8ZpM{l˶9gA( 5NA"38n6eg.UmAPQѻ+>ϛеZ94IhZU&-Jw2Hۦ|˗iǻ-yR)-Y^2N|Gk54ѱ‰ЄqB7t^1&  o#c>[+g5R WKLƆ__Zg3W?(M|~q_ş@Ӓ?9%Ղw~ak<_qfb;3ԇo)b"wW_q:nûoy9^]q2w?}ho#c4ռ<7}?=yJ<<ɬዋ߼f5+P2(fFՑ?~~r8V,+.B&Y?`DF1uӞL$Y%inb6'՚Tiq2yfi V<exhi}ōYxntEϺ}6I$OԠ8AԹ?Xb1XgP:$aQQ@Eo#O4 ю}9cM*@!p8 Äf=mQ+W:g" K &Ns,9JÁFGD9?EEeE9͏?r\f)0^RcsD)dcJJv ˲ŋ6;-M =9Ɖw[w/WA'0NWZ'~z5-cpl'F'=4]KG̊e^눴؉ݡBGXrx9[/X96 o>%;nolwLư<[bǺə {$;FhȲZ1(!i7X"'V?~d61'Ev^Ŋ~h8Jᢜ f8;s P|%߾aD%Ht4vqB,Rzyo>/?}$-5;5_~%Q/Η/1}?||yο(#?|$_-X78;VG.g4H4o޾C+E, 8tU۲Xf_?̡iqB7#Պqi5: Y8U*( rdzi1}K%ł$IΝ(0u"gݑx/5,ŜAI|$]T<5I"*G O,q±>>{ħs_PoųU'TM|BP{B><z_zN8mM1+rg\vǦ8C(Ζs,xcqv"<9g申:HiG+˫- JHvzuꜮjxmo; IDAT (&N%q왦q~G0ͤb$gs8R0H3/sϸxv52**d]\Ӎ!l/:/g gW{Tm .g,e@ 8|?I(v͑ X`ݢt@C`:8IWEE<$BEv)EnL !cȡ7,Ÿ6恵)H(P*qd0IL3 *MK;ZcAk2H4s??û 2.y$\-ߐ?}U1 in`Te{hp46LgX٬dPjnnBSf Tbo85?GBd?mxoaP7gB~ 2:...fEjɄx)H4#RYHϲi5J)̜I*ҡVilqγZ軞bjj8?#u}daHYIt yܞ|pxY1Nu0#ǨVi<_ȝُ#sy|R,>axt<$9'?6M&z<3HQ鐉'$ q{.zȀyFnG @f)qu"%أ[" ?(y&Dw+ {,JalxS~,ɊmǺ?|5ۻ[!f6/(cUsuu͇C"sasyB8 i=ŢDڑD{Ds^0tJ+<$5[,Bd[<DeRf圦3GfyB%//¡N,qs{=8|C۲x%?}Ȼ{\+&-BٚjFƩnz'R~E `!2 )HC Gu/[Knb(}繹_F?ıx,^ YR`@cD@Bp)pWa*4xqO"펨\Y7?}1 TOoߢ"ɡ:0_fO#:sl~z?C,fPS!͇Bn:2ؐUuu?Ӓ8)qzO$N^!$1}U;E˳+ww`=e^)YIIXV5MW#5q:eyFk HݖzEFӇR:v#IgNH4!&Zfy$X;S!Ō-ŌzŇ[PtpvyE?znv&3.oڎ/pxrzͻ-u8ִcX !8 ޅH G}~ IR8rY[)z$Y!:9qY/Q"ʢ@>H|i$Ca5NAâO_)TH<СDI6! c{VTA*E$uHY0EK}o,5HTD znKi} Jq9޹G}>2"}b6cVpNv=UU'YY $idI7YF׶bb#uE΢$WWtmj,Mɔ#4LhGGD*"%0f2BResߐI1Ϲ2wH%lBTk,xؓh%7G_~jGԃ{:?j}x1L ִ@匣ڦjj޽?>[0|< W/^9͖XtV-%F=:TTgׇ۞wKSA"7|.|wOE|秋rz?ϚL.rMwmfm; LqtL;P nM#Qӌap[^~FON~O̱i݁Q5|c8Z#d*ABgcu#BKM})#}\ƴ#I/5ۏ7h/x`w[fy,On⧷H@݉ *0"p9*RD"Oc4)%1uYJ$*@8Os'%el>[4H#j9znK= X=n7qj0 }K[Ubr1#qs;6uî qğQzIy2V3Tqw80ZG'FzG1+HأdG4' dIrMlJ)y4MyXC]t!Y8&Ia28IT(V$YC%00 TgYU<˃/I‹C')q~qFCrne. ݨET}3#rIuKv4m$O:Ѝ("4(fL 4MGc6 2b肌g>É2'xw Uoc4#RCw"Iñnj ^LT]\8ZGV4M1m%Ύ1<d P׿'EUwl(MZoqƓK @& X~$4 a5Áv,Vg>MM,rNQfBE<, $4|a=|NՎ<8a S6Ɍ-ڦB*HӔrV-Qäi0Ļ+fݖ &@!Hƒ(y6K4]DZnJҤKS[ !tg uO-cq;l@}UяC75._?'1y8fgcsOM#8DtNg>#-y<~9,cm[ph-H% 5Z!5$yDZd!{&#32p8ଣH$M(b:ƒ4ş(GdRdyJGQl6C׵KP O8l7;ի$&U x uxnn86CD :(Axc8_?b`Bk= fbZ3m <-g^086 rIIn]f1YjŋkV˒Hk =nSM l(DٜJYKł~r-xBe%7 ?XTUKi,fC*חsoj%:TMu<4,cьN@83"!!KɡGÑocŸ q=)ZfŜi2$QL5(: &mC?8gӳm̈́Px[falb6IL5Le1v~+/5820ŌyQ5rrUɅAI& !K3$!S!prB"[)I%Z4hDiD`ihA(d/Mӓ.,.}za(!p.p͍ RJRc&q:JBcӠN`fĚ 3̊HJ^x4}'μi`6U3i޹Q( Vt}HJ' hLȷz9MD )AYk] t9XmnzqA?M'lV+)s[5v8KՍ!Z#V8l(ʢ`,q^/ǎiiaGqC&t]c 2 5?8JA+ž:2N^ gCSӍ# JOCG1 GAw#Z) 9G:'q<ލ#(v|p~KQ}3{"DZ5 @]׏F$Z"-K`FX̐x~d[˰eȋrR/gDQ "Dhwhcߓf8Qr8#8A0m8)fKi adx^&w#HQBt?*AT*8q1AJuzz U?y2OOFOOt,|v%Qp~^'_&x:B!Ud)>(x<7q:W9<qTבG.dRI-Y!D!_j O>$G1K mv;σ`>F&oPI C1tz`] %}*q9;;kv߿yK4I =FQ&iL?uyqn  3tڎwX$g3b 4uX/I'YS!EHں!ҊqQ#4]Sa-,J:Ҵ=ΆTq4,V+rxd0i9gurc,2b/ϘiGłvԃ!g 8//+g0߀ a~Yd %JvF,!öW_}%DYh ں^NM{<7ad(oCzQ&ernQk[Y1Rgh)(@pΠ'ҒݶzTB#WWu"e\a4PD+bȵW\ r(ق4K9 ivCkdѱb^ c~50 &P:B(MuvDZRP "(R REzp4Q19? IDATH,s3XǮmJxlxt:B\/9Dݑ( tcuy˱ڳ9-=֌mbK|xpī Mpm7rMq T|֚iNozLOF=X-/״M2MEK$S\%kJi~~qqxBp6{$iRv#n84-Pfþi(K"KɳJc-H!4S`WcaYO\]]cm8>8o}3tmOEl>#Jq'7ca^Of>ف 6D tx<=¹HHċ~N%y"aMĴ]c@Ō RwwǚjE!K nCf4MdȒr>&6mP"lúTRa&G,xjI4x,Լ}Lryf{4EFi UI8Nz0L:e2ձz(r}۷7kJ5@d[rKRC9B!V$ϸ5bm$(Z  }}GZi(pOT ^9E&ǫkھK1psy=e"R,9MGY4MO?L,Þy%L^h`ZRYBv#Sc*{P-VtqvKT'$I&n{jk2YV'aL)!sqqȮi݄--@idž1YIQcw:QfmQ,Zb:p k5q~='72E? 97gO v4>x8{y}uq]qyL'4?DnJ0Xo<>}V%ECFFO5ù ]xj]Ė)*}#?,'Ӂ~D0Đ cK0 [V媠H"um;E zC?8vb~rtDQV-iSG%a /saQ BSÑ\K.\,j|?'QZơc^0UjtXo6Fa$?1TO. ;3-64REo_0 o>r˩PzբBrkCa-FrRDx"KHy3796%k)雖jdaVRCLHEsB"v( )$!xib#0&Ҋ/tjx#!a"'"5Ea=خPԮmdt}S0:Αɸc*+~(JamHn87 4"/Sۻ../RP%U]}ZSjM׍"ьcƁ,+ڱCjbQc Ss><<6[^z?E^"c2fqՊmS>$`f: eM%/bR4Dw8R.P2mTerBIX, <nw;wG )a s3=QaNKPڤ.w/_ d'Xnn( #rBL`M'[s+ss2U'pX_EbJ OϿs\>+gNoOֿ.?/T[3M$*~5I>|;įse.gt3G|r|E}= Fd_9x-π+~X)u T4\~hrs@V$8Gi^\\puy֊|FIߧEr$Y3ZiBy{or>,] dlk MȎ4!esݮ~׼bE*TȨG$CS9/_r>68'^qܟHv`U%+2V77ɡZ,Y^SI*)m>$|ŋ7{RX/J&x u~i8qw#2"COt!$Cc q&4.+͉Lx,E >=gQ9};rЄ97}x "N"i $t!Of=G2MC|(Upx#g.Ux>qv>*U ( ˋK֛%h͉wx%0E `^-aZ;5npBfQ\lXK{ռzyAn4Cӏo9}Kuԋ%sO?x1ݵ-0D"m32i kP2I)bi$ \ {s|칼PfΘ=JqbFȍ?id]~zG`w>W+c@"d02/CD*}'sDvH|:;)8[.p!H76m{J% `u*WO'ҍqH33,PZ #JqrL@?nb>04MtÄ phZMEbn2b=i"M28DZih%˪(I*) ~E@1pltrr>fhqcG !X.đ7MQh[`l`<+!yqwȋbqcQDXT%W/6<ߑÞ;H|kL4?ӟ;$a1UM6]PaL7Y?<>,KRY?Iv֋-mJ J4PL,'/rPU5.D,GT #Ér;鐶>1=wPp#HѳZqQ aRT)w%U]"%H@FӍ \`|9(bUU1# ]bw#jt xq!Jg;Nf5A`{2DXU c s"%R2)ɭFH%ˋ-PZEɲn痛.'Gߵ4zr]bT$$*#e|ԴhLbzEQqsx%\ 8ᧉ((ʌ=Ǧ(k0hz6uSԫ U879:$J"f0NcDJt7翲Xdaӛ4XVK]'p!ĴrEN6}?Gܜ&ct>K$v0y@iscm:@]& 52Z9w:8ͅ ]ݝqw{d^Q 79Bɜ.tF΍ ZDuI6~2Qtiks88Ƕ!Ƕ=r扑UUr:0:F%͹IgpQpssh}?ɥmg_tv`ts4`$ H)dzy8¿2 S݀T,5]06+$x& 8BiR?*4nq Cqn;ȋx^kB 푫t]ぇql G9Ԍ 18r ʆH ctR-h2uUItZKl-4PP rS{G^^G_OXTEA^˯l[D~&2łOadqUEO\zqūkf{ÏߣdD8P!%ޮ!JaD)4Q*E$X xGe-Vh Lca6mqrE@e4Yiwgbatء+ ( nqHPZAH$RDdJaU23A =%02\4dJ\T6&Q?O8&0RYZ#TzSBC@I8.t+QM&%ՔEF >։=FK4[',<(ɜ $OLR2=Z4byJe1JdE>Ǫ /+NgƱg"D~C+C;ph[Yƪ #EU|2֋%v{'~"ƈRuHj'ԋ0Wyƛ7qjzM2tj"hԋ%w9{k EDktk3b10&˧M0 }4)ۂL)"edQaX>D1m$łlSd0$\8:"xO,ZiJn.v} Qf3js >$SDFv#؜ B` E%wL〛|"[#8aB/ ?`Eek"֒->o&ox@>g2o%·Ԫo,:ʺ>G-my_{/=]B\dʈ"yzD}膎rI(ҷd,QDVbIu r$u]3ak jz&3"nx ㉋ˋ$s\YiCrB ږxBFm2i) 1Z.ˌ"9 >"E Ty 8PVvEOg6I{͟}۳uh%FbiRD#c4Z&j saN?S\F2EV(-Ǧ- ΍t3"sQCG6-8w 4=(c&^4-W/xxxkt/eQ?xBK1K59`c0;ݮqq}oxߣ yd F%*rFL8Fo&2N>\.|G6EU\9a.߱=X8V+b0mRTY/)ʜȹ(ln8X)bdh">B4dYeYDX-g$t%߽K2mx#uA 8y|?0UQقۏljVkZ ެZBذZZcd㯬ʚ*eOz˲̸Jд=?GجJ~K^]]p?"'W9k;{i"HASQi&)A͗?!zȬ^(EUQZS9uMzo SJ_t]u#i)a,iGdL@qhP" %#я 3lLzRB^T8pw=M=C?0Ly%WCA$W~RO8hc*zI(Ǵi!fk{]y:NG2[q8E]*sL Tk9FX,BO⫸ȍ rR9 G0)f%s_#mFբ\~_'mGij%.%;+D0~{ E/~ >[|q-Gf$3vL87kQgǏyLڌMӵ 4z@7L a,'W׵(K4rn6ۥ.J$Dr1Hc1krkY%U"_S<>>0AYWL_N8CYb5-.8BXԔ%sk7M͙E]qn,5q88I {q"LU3-܍{!vvbh:!D,*"Oi ñix@E"fqr!3dᘜS2ZR%ɍ% wh)Huj$/ |s3pw{yafEfQQc^p:E^wk8w||ϻ%^)N3C7b&6uE%Z86`.VkNGC9~(jq( ҲJo&^KDss;a4.q@F)9oxsfd`4ǡ90ʀ%@$J0^!$9fU⧉q0F!P(86 l`BLؙ'T/h:ÏX/K53L?0M6,K58qhlZm96-ԂҼbŋDn8݈RKx8xZ~K??}Ղח[ۗBgR)~@C3NN0N7 "Tenw DOUfdEJء! 'G^ 1H30q6GfUX%V02R23hɔQQh0&#/@@e'!STe Տ#S x ~ƧI9ӨƢd?Bc/Jӻ'I7 pjX) RV).>o\$CNTDžlj oZ!|ꖄd@TJB\}L%t]Y 5!n4 =֦}7/@!HLy!~ͷ#=7(Y">E9,cW)85-Bŋ s46jy|xxT)Rɸ>ayNoОO˴!n/~s|5=+ Iqh ceYrq}cMZˍa4FD]U6c]3M=ÔYnLJ{恵0wO#3b=0Gh=1(rUkZqZ"97F7plNԫu!GȢNy (Tu#>:N}'Oی,ǁ;e1Lsز,+Tpz.V.*èt3Nl"}3E6{Uś7!çFo8v#&#E.1o!El!6H a!E\.膞(Ӆт2lv~cpЅ?LsT `X!0.7.7kN#4O m,C'O5 lx`x }Scr jAYTUj~yAk#tƅqOQTeAg?x#x<1΢d1Ѱr[0aIԑi1rQs: HD.f#89a!z'FқNOH)pKP@ ̑S&6 fms\h"ZLC;WZka  +R3`:F\.Wu]:/҇#A >ME m"la`לbw#hۖH.w·TMZr>i<pis2%8q>'4m F2GeR(!d=&1S{pjX3vױ]m ھG^pH8kl+O"EY$_QP9_+vY- Cc#1;v֦7vt cHi б\]nLN)K,DȚI4>mOy3>MsE))$L-bBxSA?}.zsAie?vXϩg|l=E5b9>{W$e[ ZS*"JV5qQ5E.Ov#Ua' 9c $G5D$Ն s>"p `ZLV0_&Jo¿qO7_lad mѱl0!rQ`u EFkk见vEgz6ՌYjȒս\,ƁaH*S( S-%o4Ҷ);yܲ?o[RW'NWW >DKf@kNZ맾[;$n全j]>"h~P4Dyyy,9v|2QzpsO#*6Dr-LKE*3<c5ww7f:VK>ݾg]#C7LoXda1Ųa]=rf߱|źdz|\^`?\]](i.EJx$ #no3Ch1&E9~ MK2  wʪdƞiv*Ea"Ah1Ќ#pB0!= Z2qϡHT9?p(<>HN48><2FcCvdʰxo~wטՂww(k+n|)bg7Zדe]U/?a 346K*1 ˚&p}}I׷=˯'T*fZuI>!}rAͲfYW3ah!B09Nk\"-eYWO8%c2 \Đ6 RJBL”dDF,c:y'~27#Sf;Ѷ)nZi) -QiYd6 քSeސ'1*nde9牞s,u HH+0D!DDgq]J0M88#mQ0kR~;diZku#t_ ~~O\xA[uPdbFG,()cTzc6i;h`Xѷ 5)87'v˹]B֋($8"b"Q)w?0xGU/*J.+޼|4ieZxHXE"|DԚǘ tcP27Mmf0ÞeL9#<~YchOGUӌ=Bil^0:v.wiN|x킮8lX>43+?#Z=l > :}:BJp8s9'R$3B2 ͐E7-ffO@g!%$K@ۧrb<7Knŀ_+EE. 8)pRؤaUO"ڌvhږpWoJ~(݀3*^Vޑg<3ei歺ҊH(=)rL!)zvE^dԫ4<%ab;Ph.m^qx(dɬdG$*iBDULlU]|g^l6D$|"} /J?2L(%w0)\l5V<N<ɴƒEB(\pÑyHsKH})$y1#}#B &V;U2SUyiF=RU5{Ͽ|Bڊ s?GqO / br%0N䘀Wh جHnbQekp~B Cߥ>r] 75woM{:LU6ihc0p "@HHH $@E" "` mvWWwיwsvʽkz{t֔$,1tq%^t!]PWQbOe9r"=ɍDx=- mɋ͆@6F,&⠭HXd xۘ`c /O,/ߤ2 Y^0Q( =;zŲ#V̎8;Ypvg6zxvJZ{-C* «sk p]s-K|VAA' 'u=iRb)ISMBK;aApvnh8b'Or|‡~1]1'k><Q'YS}p^iBP8ImR NJR9ƹ&N3x3[V ]1G e4'St4Z $ "Y$clRQ"W9֌&遤^#=#ҔC?c#[+a$Ցn]b},I%HdHh6|TU7) pf VL)LArdSN&lM!C>3NPg!>/h}7<1c!o8 jyYQ5eyI} kYbKYnZu0E\hdQxE>ȅ!Yya//. 7cl^n^|)P#hudZG۶}OQ AJWN!e$b0pޓ]7P%.p\RY -%Ӻ'+%EQVIo:^\^q|zz!2zz~*88Pn멳a 8K*#6XqCoƑD'WOvJQ5/wA0 f 4醑m3JAc]#")fǸoxWk#.[6/;l4ȰCFrR#  1|[9K&iFtqx-ܿs 6A*\,+A%I~EXdC_1;Nώw{5ޏ9?%QiZ)M)%qE8f\<"ytZca:Yo;~.{<,A*6-Lj&5Ӳ =CswϹ.I`}D:D{U"pv.xy`F7"AJ*R*RiFgn7mG5DIwͺ q1jRqċ`~T3?\t14j7#Ŝ${!;֛hɋ ޳̈. YH9MR&q;ʲRPh|tZs3"Żc~G3,ZkE3f@$1iI DϝԚBzb-MR)׌#yCL"WJAU!/A|phI*Ŭ F9n!;nb$T~F;v݀1#Yv-ٍ1JR%Q1JR+*٬gs`(,KǞ<%%y)uY2*[N.F@l:`RKf89;;ZG(}2#Rkdglwk}]V EY2KBp4◇# hIҌkNe]] 1@_,4MKGtPeG0`Mg>993 ӚgyZ COYEb:c>24WLʊn`-JKn߻y38=9f2XoD>OR7#KwP IDAT-mlnƞٳnu lJ3 )ǧ\_o0?s<Ìq3!e& Ņ\({~1Wq-]{a_W?|%/^r0e<̍/ ? xkF8|/AE;T?hN|/~͟ASNݑ^^>vY:u*|ڝ ,L+eDwm&Ə$MZ)I&R(ͤ7ʚnd>bF]t#~1; cKe^PN$Lz`4X@waGɦiyƨ$G% ~Pg)wN^$7tk|yͻ̪y GM+zM-gEj۷(0o黎rɮmmxg)!SL@~OL!%Mj,z IHja?&5R + ђQZyjE^e(%q0BƋgIIJJ8hG;b|~)QD+>^>/R舔1 c}>*JCWD2J!}4XjGIs>Nh0ḆSڦn.29&KX42tUu'9sYhͳ!+K@?S۷NryqAU׈Cs~kr]pg$'iYE ٜiYq}dRT`-) 1}>udUI;izd>_p~~rvC(R{o?`:zc8/Wv^\i{npBIy30s U1oa>x?ek'~?2{g7f?s??o9m'_y,_?_Gf|oyW~+y)ϮwOi̿7~k jkc/ >(ѿoG~y)/5Rߨ^'܈a>&x<J ϐDa[ y]"HG(i!|{ ""_ GĉUTO.SC O]ǡ .^u|b{#@Rpy}}Lu|7xa}P%ɔHnwe 2x4g욎s%^m^(,G\טğ([Ǥl2/h;z*Hb6f9]7Ӕz2!)C7l' uUc$Kdi|0H ڞ4ӌCv'~(s )W.|"++ֽb73N%| :=\$>D8;^m{pXonB$9sz /*X.WL'ط=zt ,KخW[pr~m6ܻ{dHϓ'Y-Qe)>dAUR&3=;?pϟO_ 6}O:_?WUG3>;~c9}n\)~Oԣ/u?_?o/e'w__x󻸽2?so:2Y녛/A7|/ݚ|!z{zyس `ZnB@ZBe)^A!띏$v C"/),K)*n煠k@Ҝ|F]qdْfuԓ9H-ZHHٍۆ~x/,W̧8\/qHPIF\qx:cFQ#B|2'p.jR^H}'Ir_^]j5&* UdRж{6MC˂yUP)2'fV2ؙTII}.)դ &K4,1뫃 *^FcCv0x2=1hGC`H|{Ʉ9 `8,ҌI3-5U EkZ_6x۰߭hw#T匽ar6֎|_e6-{;w:i7k͖DJq ISIз\^> R@߳ݬMK>Sx-Rji|R2O/x\r^Ǐyۡ.PI3b_ DbG4@( ̧ `VLCmc~ii=M⣒a0 ֻh>D3]pXAf ߼jF9Mȓ }4!:b^Fwq;Tuy؆L΂rR:j"TT=x:O]'hcVTB۱"0'x72$)!(rٔkќ97\稞| M07? +knG{4Wk(U4 4CnlY[,AۖDB2-XL&h: Ǐ2,ˑ. }((.vyَcÑd)*pނ(펲(H$՚@`'`E}gd-Y$yՊHe@*JE^͹ؑ,F xtqA-Nji*)K0xzqҒwnJd`zIouE6>+_*"Hzmh.wM`:!IJIf?!OCT-y>Q# ~[So-~+>g|vB~nDH.|,x%SHW~p(c>s|ܼ݈ؖv5-!i a e% ]ㄈ{u@,~ Kb3[$ǎX78=LJkNθ~,R0}BglvIFgFF`Z0mK^-\^1@I=)rF}G5SE㌡K>Ur;4fbuEM,޾ՒjxNƱ޵ Êj6XDOuSrq Vh(kx*`o'ֱ{N])g~8O"e|`6w|OܮIceV(%uz]11>xrEY].xp4~!h˼({l^5U*ޱ wm8zL{?>7h7k./8>{o-vQ>>'X=:=qr2cRgP< ҃Ryv5͎`RM " ;zk:3čPؾ'9C3ȩ 4];).>>ݦۚģI{)TՔkm$ݬL*ʑSOkڮ!j^bo:Ŏo8;uYoghFd!P޻tmKً 9=e{0#0lA|1c^=Maq ##\ 臁(Ӓ~L3&G qihD. *zw1o=.H.ѤbngR1)|̄=y,!1q*1xѴalIs$MqMd5fQ抪 (qE1Ż2?iErk)!_tPЭ7eRcF31Zc0s :+LWK*(j-Tum/(&MDv`JGL;r_swo3Ms+ry,ۿurR/F] _ _ogd {YxY bxtk[D!"+*i[4!d$2izmCuoGlO/._O*zruEkFE$AɔGOj8Y4{h!fƆ<3&u"0-H{*3ڮE^qzzJ1>&B2[֫or]N6MDӏ3nʹH8Ōxw<},h ie!c &-Xv+%#TZ˶iPX1"TJwY.7d 4S}GOS%1bz˝#ƾjEQOӴe1 |z0:LÈtծa61c̨ɓ zG% wG?9E-dUIna}'S泒u3) "Y7,&SKkFΦs"Cm;:/YQpttnl)Sy!w f` UU1욞DgBp$wOH@ĸv44ͳ/X,aDM*ѠmBO]]BU3Kuf#Ţq<\vפEF%t=RHg6@kHuӐ&xlxB3/j0i 9YL\ ./$l [NmVD1=-~)#%S$$El<`(-L n/HpCLiBO3ů~zPcg>y3oHk% JSOO̪gQvOn߲o4ģ|J;̰rp$B 0(ZiR2Z["c0^9y6%J%knw$3$CkhGh ET;&e ^PYM'-Ar mx IDAT*׃'[z/Z2"$HV[up)$!WHV:cJE+#" A'[wyzyɇx9^a@EõV)ifߓ%C fdZɲ0/&i"췤fPx-X_#P〵$1{zĤ..o޴twbFtRcYALeMߍH9bňLoכ-W:X x$ٜA6Z,eLa݈|[j4Og"!j,YqvvՆӌ7cZ&,kdf +V@UxYoX8ϘUSWWA;#%Q Cg~4AJJ#%Z,u./{UD4][OҗY ExvxA_nD+y9#|ם)>Oݶ6Yx!Ozxz<Ec--vL )點n&/JdI A L)V͎y1Ԭ Y$dSk=I.c{xq8Ք\j9ӣcܾ}-:e9l輌z)W`i8;=KfuxpgO%Fn:bZVqp&r1`eiuE9$"M1'OŎDj0˚*Id ]8\<قzHUϹ^#Z% H醆o{4;5Brvvvr!228?>[|&⼋lv;vO4n3)k65A#A@*8/P!xZhO.UZWwIۓ={fyʹ(0ZZVkl7Lɦ96+X%դ\$*i,y!UՎ̂i48Ҷ# JHOr.GCQMID'ɳ/^D5ZpCpLts6g|Zr~MrUc>?%0Ε\_Xup\ϾKk~b׬QJSBa|IG"D XK54hw"[\thG 1$:c1ZǾ((5},pؐq :K>`}į) zϣO1>P&(JA(GdvΌ,Fڡmt"cW T*J` qt$i(BLɏҪGCS 'Ixr?=H0˧@?1~ DLJO93iV s _ "YeIWB7g-n^;xbXF_2<LqwLn ZO]i8;ifZ߼C<F&}RHV'h v {yvљasvƛwGiuû̋%"RҬj%ϯ.ٮNx8K\3;`=7 %N(\ªYa݁bi:IW(l-*/Z3؜l9F;luþ&GX,VM]ooRPnNm!"fŸߣb0puְ]0Iv |w2Sl6^W\hm)G,'0E BSvU :=ʢ Mݤ%1yFj(7'pۛ{&p"VK_害ؐpRk^?{F[% SMK25[GedH-9=[9ɩGʴ J&)>F*C`ggJ"d. _\\JadF2U|3BtXݾ }xᮧ}9lG##OA~W?)K>ɏ(s$6zn˚uG<a^Szjy|QLKDLv$U3v=F+"GHI׏hc=/Y5www($f&1Z~P=."w<1.byK^$a۷|Kd, TLׄa̜7\zƻ{z8NCf Nqh`jhͺAˌ8;Ln bt4eaNj/_ќg=êX7%i3:v5Vcϡ)vY)tq){G=c 's Ɇ0Ejf=~˲ͷ7|nf0OLB>]PeBH!DaNҋuUׯ^mV ,ٞnǖ뇖C?Ҭid4 6ܶ;bж !+ce e/麖<7d,1Re)mr fo{8xb& y+XWg_]nwh9thu|#;a6h).qC7ۛ%py ?|__na~gd ?1bPgħn -@t! 7 Tq"sqcqqc*!>O~jhy`\xz~3ÜΓ,1[sl1qadV?GJz~ zSy N H?&(q870SAӘ? # JO+)|fx?|-nx怜=OGgǤ+t3vg+iZR%&Hf̑4, 03.'1 Lz,Vi\ۖ~),J@{V %%]{`Qb\,aD((KL%$`YDYis) N Wgh آL\(N/:~ȲDvpSWuYkLA? Z@,B0-4))2M%aZ0JR9EQb2Me41D#F+~*B2t)bY<2]0O3| EO  JUYAfR<`5J+tP*b2TA@.0i6c?b,mM!;<# (M4*j&Ӛ5)Xo65ˤ3y(y>0#JHG]vB ff-G gBIZYk)qI?ibm{~dۻ{ݼp{qB3:O;.d0qu1u(M0EW(#7w,vaZMaw"vBWkU~̊[W[t)z& Y|dC?k{fkRRU.W,8٬qnIR0- ,1ZB'|f>6aOF?k__LF7tSrmOϘgje-_g5Z9c.wē.x4~?Q2(Sxlj_>="'EG~W;w~kqG/>SK*ϐ>\BIGVxZ t"uYUS#HoZf7#TLEVt2䎑̣۷&'F(+N.Gz~(j]#sy`*@ )4MPpv)Z YI&CY˂Cnyu31:ʢ \?f,M]&I|lUp˴COX&89`q,l c˒84p{)vߍcz&ˎ`<'xG"e>&r:I*8q7XRkN6 >8yA抪XUM&BM6 Kp=k{wl!\bd@'C ?XL0HT튋5kN.Npoo?6tġoٜn-fM͂ AК: xs[)1kAJjafS~ɴԒU]3-3w\4!Sac=@L/e)!Ϩˊ*gsZ#PYnwG7ܰG#nDͻkfY$ LՔ P8)iMv1 -F'xfeQUlJ:QZ# lVxwsݡ#_ieeYR%"gOS8B6+8܄rad^y{OeTUb|Mӈ~8ϳ96bKf2avfjNOD5 0` ~DH \+2M|﫯} IDATʒ4'52%ojqFA]V_/`lyq%lſW|yu UUDDDa,y5h122O#!$߃uHM%1ưZx:Ļ '|dB4Z Đr#QDy1JR熪04*3O&yXp%6yR,X 1^)&YyIi(KL 6uEpɘ;|sP5)dEtRl=>4YWet|LRI7aZշ0Д%Dϴԛ #YG]YV_ m}U`VyqY1)ZhEv]L)Efƞ,לdD)Tužo)/"!Z3Z8Ӎ3w)򊲬PZ3͖n{LT*Pq=1S̡H!UY_\\rj8tC5@Y䜬2SQFfUPn!ݮe9,JOn)ґ}Ŕ\DL.waTzyb^#_W|{r\Gdq=f~N3(\|,H6%2I2CVda :uvϾ>8Z2?!ReÌJT͚Î"ȋym3.#uj]QՉ>L[կѶ''+.N(3Q%4v^ȴdԬV+rm㜧d4JW/?9~dg:3@JȊ}0%XQRg\]?0=mr}#ȵZsz};O "Ji|sR,Ǝ}ײk;aHH!A1Jw#yQv23lsEJþqft099+dZfCgI.D MSsh_Z&CH)0ƐeYfX%Q$GN7 ۚ(-i=׷w=ϟ=g}ہx/^%HfkYgq 0&r%iP"GVL>! 9H9;=A)X5΃L4OL$UMQڎvX" 3l: X5%:yWVZ JsnJaѳSt#2^|]?(gUp!}vieihD2"*i4A*a$(E4ӒRfpue|]?-3uQW_{Qz_d曷 !`/P2B78Bpea]/ÞSNgeF@02i Hd%`vA#OqO?G1YytR|ȏiƱE~9XN c=~kHߑ#t)WQgsNds鑎ǃ4)M}IHS̈~'m,ӹ*hNmPQ)Y񛂈,Ci( A*6-:3h9;;aGLawfY^ۏasR3eзsr˜apD]9ٮ91ҰLɣ(%hmXnn(e4ÒL7duRGGG1Eawl)$YV$m3@|\s-8݈`(d2 C-Ը˜L0 y.4ZkL#2/{/ m2LGJlLg"EKʌQDQB3M3RjDWIZ憩Yek-M.r?G׿Z*gu2VLiV eAiw"BCĹYrpֲY‡ݞQ6'Dgggxpv.1DYmcU ɡYB2YU]qqe^4uvɋu]Ǟ*֛_Wgy믾dUQ9",R [?fNd&t*JiGPw]Q5o ONcx(:'# y;1*|q=Jsxߏ)qG) ]$Xߑ< #Dd=`M|yOY㣌w({+|/S>N1ıXOpOퟢ> 1sYF=dBJ~LcGcJa1`FekX?tzM&˙\$*MT&IbÂ/Y5,YpyKáMr˫3.681O=~(|tBc|DeS"DEe4(8tʪ`Y#Le*,uHdxbQĔ:i,KnGrr4P'S|~Q"E^7<;}66upS4~꒬,y̴8|pQqFzʲ`vL b- o~KDfڠdilˌӊ|yŏtD=4`!MaEJ? ܾC%x/^<ΎC9e`"@-ysz0cM&|oAk *r0&0#K7pRW6+i"xdH<֜kMOя e!%Ǝޡ%0`}@kMYAKtԄ!'*| 8Ax:Gdc$ n TRZW&ZK@IIYb=&Äpk뙭c- tή?L ' nFnݵҎ6@ߏԫ2x;S~OY!VԴ|p(%)-2S jҚPT$%ؚ?6%ahCQCGP5k;((sEl𼽽W|wxuqzɦȊӋg{9w#<{C?1AeAed{ ~g?9ϟ?OafZs9^cг?,aʜf1CߢWU? Ӝ(xѥbi8;iJDh't#V&j H)&·Q8;\Y9ie,s@,~$$ZJԵi gۊ&ג 7ļڬ"8KQa]U[BcOQeg-HJ7Z$q1iHQ$:K!usLq 4u;P&iеuèOKHb}%'|ߕY'uSc3SD7$~:=5<0''ee~Z:6:kYLGYAyTi2BCX B0#ΦfҲ GPYdHgK7.ۖa*rr4vPSd0/k$FIBpZkNOOȍfnaLFGiL((HM#$ZK7tdy RS,z 5ݴf3UUq{wM*ٞd#qXPT1btS#-YQѶuSc$UU]sz~FQz,oF9=AI|36HSA'%>< O3sNNR(ɴ&8ӊ϶Uh*C \]ns֫upv (|pԩikoށwծ] R*Uծ-Z߻}GKG4:݀P.84<''',uQDkthY=nǪ(ɵWۆR]vlv-u2NO醉i,G\zp7cm/+6/Z$20{Xo}b6Қ4mSpDX%y*ɔ@.^h%ԋE$8*JRnPȆsH9^V,sM.F\_w C$NuL3QztC- rRk\n㺛h{iD*M"SoHMN ɀ#cQ&ar^.)ʽB$.k}ze ϳB`Al']0>}TaPRD@zK:Ǽ )c i.fw>g4Mwn1 &^IM!x;ƾ#x2 GOX$INRH3WQ ή7lhRuTy'2wMK(PILX&KY$]R9wNY/cMC$fT=1iع85&Œ8>>ٓH`)!."|-:Mhr|m04mk=(i ƾlێ]? #gW 5Ajyfq6 +R@^5& +^Hs- -ͺ1<2exmD:(uLWҰc 4­CWt2vu!z kn1y6\ |hܬ9xTx e !%I3yi$1 7[ bݥ73Mc=aQ$Z1O<3 #WL]%e|E33E0te$A8麖"OXIsW{s]&Y98a-iJQd\\M ICHh. CZp΢ITYqu^'\Z^srҬ#na򎬮fYQ4p`gljMLm],gg)t.P%y^ry~Ab3=}0LPQsvKNV;8N=]s6MBp^1v EYq~yI^T ggYFk?LuSM|~ ޥ+gMrv~q8kڈJ٢*o g }oIïɝ7 ^J^R^5{) '" X/pGrs_ W E?ГC&èDFIY5ZjV% %QҠg$yJEBiV:bӛ)GG GfQX\]]!~X=RC#f|0Za(4c CVdYJLvM{/y܏sppȮݱE:?YU ˌ]eE C֫R:R!zȖ6ӧ(HJ h11,ɋوZd(S%A]ίI(ꔴHQ&e EU`Ì ~LV !sp$TySt}ˢJ5;b\e1(IӴ>Ftҹj@)1hlہ"Q{/ZP%03 i 4M@sW!b$,݀Vz< 0c!yi$GbRo-F+#p@Ţ8XXfs$X.jjC͑Te9nr?;6u,3'CRD 5&)}e͛HH 4()(ӔUU' Iȇ.0ZO?{yKߵ0%P w+N+VUAi2)ȴ IyISM6z9BI͛)SIj1#rE&sg@\,8lxyylxL&&8=6\.+ev^k''O #*MQFERe) ֎I!Mel]D}b"l5e7t->-٧o-Ij,v^5^Dd=eUkH]Њq~Sb7ZIAh!Gd弥rl!U&&!8O J;f;s}umpe EUȲR31p'Tf,K!iv }7GYK,i^q>޽v-/1YrQ Wk=R'tĮm<'h)iӌbLRE]dH]G >a"5lvY2/Ɍ2`c8<|'+p3뺤rݖ4!N 5f֒H q"NE0MbŬ\*c/7AC;?ѯ*NLGL+^x{ۆ疯¯|ޅysw5W{!@?~۾o?7}?7ѻ|k  +L}("FŪ{0ć-/r>^<̈́M|/>q]|e+r@!^ 9Үa=(PcᙜSB}!QBd?KEkq$MSfagq"H13nhdZ%$E-kܠexYPeQCho'ݻ4qdG)R$%Kwޓ:dhfoE^!e4H>N;Ls4DԐhF m32JhځnFvC*=VB0J'"XJJNNrqqjoɲ49cOi>&úykwYѰitd֫w-ێm ꪤ;԰mn꒦m]`vkŒwx8;zczcP)}GuPt6)wN:=% xrv,Oxp3D *2O}fՖ~#G|4x9<Ӵ=mrR9Z*D4] vӛn4M%1 }?0ϖ~ɍ! ig2nT/$X7wZp+p+_lWk J2[%"o% S.jRiu&7@gEP$H).Rc݆k#M tjLK r,c ePVE*g=I!A)8Ogyz>{Q ;4B(;{1O3cRv$*$$I6 ]7bt1yGR,%5m?!i4IT:Yu=^ eC<6, \ɷrxz]@IV˂Ɏd0[faLA?8!NyM*#HI%eHb`W79<>o}i:D X.˂ijPZR,*zA7Mx!di%de !MeMIG)kgyz9毵KF9>nز7LfeMP*~_LTD9pԠEnB>!1ۮEJ ɓ`nCzf3gl./~)X 6H)L-8>X!E K7L w`rjUQUY>\>XяAY,dڑ2 #nˆ(U6QEpR jgykgi0»<QUd!MR T2N1jr^7̽C'ON)O~ͧx)>zLF0“(g?i/8<#)4: ԋ,"ު_?Kf޽Ý<ǼmvP<==LD8\2ͳK*'؉$,%݆fqa!+m\lxo8>ï`0 {m6u2M#9\Hb!m#E7,3{IՄQ4-eifSfkhd)f)rh-EMaipk| :D;PΑ8!E$|eEEigG*cZ`43ORi6lq@(5IF6YBۏԙ蓟ݻ h2_V\sxv496$g-ZHٍ,KҌ$rrtHDPAjp{Ƣݴi(:bYP/La///zk>lB8@_ɯ#/ _-p3?S}?g֏'~-<o`sgN޺c8{WOƯYw_y{uoq|1xO7% _o?B!6Ͼ,3Oi~;jm~R~RuCۯ2O/p%eNjb%QIXK_Y!w+rFczi]&rK#i0"!$i=I`(wj )uQ)a/)C}hB(jK]Gb ewv yU)#+r!ʿ.x] ՒdEo*E`eł-EY@Iva' .3Ҍs/LNB<d-B*cc(nv$Ouf v ’eaHd%0spp;·w&NR0)u{+޽1Q>`xPtzaY$|4{iz8! (\@ uKY.j9R+l;ē:ھc^"`mfs|pwv!ITDEEvA"BE]c=t9iBNqPyeԉHSɓE]HL,l9Hrr|K!1J#L@*ne 0؏44q?LdbUAdId`QyI5s?Q|)8Ȋ\\^-eq]?yF,44D?̜-w,|,늧ϞNn_ar)~~DT1Ţd+x_; + $%-Klא:iXN)ڰuh)>b%Sip)Ո[Ĉޘ׃crbqW}7FǾ+c!C?ٿ_Gwk)~<KS7ix~O_o^>o]8M}=V~ u!ۈu]dxK/o?o}_1wWa{_ɷ>z~?x+CF҄kAqkd"nʅo9<‡XX7mm`x3UxV|2KG&$&66Y31N܌s[ ;2cgv.t LadI9co`X^u3!8Lĝ(W2Vgr4KchCɘ\ݏ-IDn㹝ul9JeAA7duJIM#ءhqiSD<əLSyd)gWLGd\^ `f+`4!b&L!LXv׼./ϸ\$YFj,z]n4$i*N+GSET I-XG7,,bE(-P**O2#|44)B%/ `gΟ^1J2{ddQ)q0`R{.Q8d#Ev ɔ8KyQRf%/ȢdhVm3pմW%=7{ dn0y1FaZi@iMx籓')^qҶ;d,ek{uDTTafmO;a*)rN W YGHԚayc;l4&cZ&oƧϞ3>UT)eH'`yP15)Y"c`{劫CUM4MC^YBZ4닁0|TeBOYʽ7_j'\5="M̌_׸:G(Ѻ*7C>x,˜gy:/`'7 1w|?Ư;YlgP?{XNk=TuUwTm;NO$AP"(7G\7D!a" AxSNWUwk8>{oZߚމw})D1 L^wJoSK*[]̨w[*^ ~scWk5aF ws_xy͗_r?B|b(~?%e, <-B_g_wne 7놃?ρʚ7^?_qe􉚇i2D.11 v`-ZgM]P"[na`ґ6UNہ6YF[cR4$C}8&+(ʒf3 j]CݪIh%9>8fbyqtpbCyYR7of?4˜ݚ{x1z(uY-GnޤG-îUh51ClΨs֫ % W"7yRk3)%[8x;h#լ fn 80VTKFenϓSEnΓbtLIv͆:jאU%|16 tØvN!)ٌq95R *hv6M\X&Ey=C{e 󃜓Ӝņ}@QAYVd::E!5.0|@2S #JÇt -{P9MkhQpx2$m)ƀ(ujOVt(]ϲ7_g^,oGOa q@a=xQEE>r1cv (͚7_bX=}HlxX3;a Gq0gq&9h (mO?xl{!"ZhQ@ɜRnsD[S1SRd2zJؐRMZ0ܸqLYh.lux2T˒RیYͰx{g:g}bg(;_xm@H!D*a⠢6T DG6Mit33ЉuFYfЕFGԒтã}ra"+?9(3,MƑ#`;vXg<]9Z`d@RKP̖ rLq}?[48\.9/yw䫯0#{=zH*ʜ(\l<=&~d%9<9ISƧ-Q7^>bWwys ,ff91y??.6buYۑr ` ]Cfi#)Qg1Ngb!;}}b݂D#ɉ3~o|Iq˶M'so}=wD&/QP$|HfOUNFpo_??&[wW`sUx,w+2Ab`dݿ߽# <[bwӏ?[%R/ T }<LJu=Waū0?fZ!s5yīiʳ#b&S}1ld6y 8_S%Q$nV;,5`LcCn<^'2-2O>G;bgdEN)36+jn˓5NǛ}w[ n!]"ЛdzfْJ<|4'1 ?B\a,:ó$2]=e]Vh le R8xk,ˈQU8\Pa*/e=q!߯hځ4,vX.fh1Jp !е͆v - R QOkHͮk heLikj8DCdشEbMkl(۷"VOu{ӜE!A%vAZw1jd_ַ?dj?O}o}<9{¾k*'䫟ʸ{󄷿|gdFPg*M)Gܼ},+x|qɃ<8J5E}]ԽkCE]b(WL\Tڄ@.u[G ( rQaW61s<h!P2OAަQ#E2%5v='O7p6cݠ!xrd#+ f G`ȸ}{ナe~2 VtS$cyw-~JW9Bd^4ռiR,@֛-yUpxrL۵lvTeiYIQ,OZqcђD!)+_jPcsdASE)SZ*9+,fTU&D1YJ.&#I MD@H)%UU%DSJ$\peMP['ԅfӓBvd\pmTW+Je$"AmӐ )”VyJ|di8ZRܹ]ҏ?z $:0~`!}[08\sO̪mr]-*^}PQ[6{'C}'{/|k Awr`yGT[mNU~-RoU}?eڷ~ S_!o|!vlO9_wY-:/|<7?0{/=3?Ӓc$W qn~/:z_zE^dgy "dDC1Q%=Mc}{$$[<>: 6mP"brɂzn@GpuN7Sl͆(RRQn(L6;(#,32-!xDL g-Z%h<a$LJX7MC)B'2C?1FdSѮkXm0yI *s:'萦mGTDhv͔b(C^L^DL%/Jq HPBSf1t z ,O'2uty)5H`go0UF$Q06|xAд#!Xlt,OeFYW 'H!dlWz?웎k9>\L*`:9yY/|V-AK<#Jm4JsTu c64H]4R֒Ĺ`{BXW5mTEjͮ{ţ^^)vo{lPꊓc{auz}bf?1*BR_DQjсTbVdZ"IĎi2"0I_ zفx/r>#*'F̪!ZEx`!xI|b)yK]$]#l ϒMSq#(/gx75LNiq>Ҷs5⽦#J2Ŭ)sэCLPApRԝ.k4>'?>*9]r0QW%=fvh9\T:^ݻZmq~ rjrMɍ(];>Dv>^Z7XqPDRQZgyIlK:ѥb/fJ%"u(KbD$bePb=Z 12iӂ)3`b x B`t ]r+wne6Ӎ+ȭ;wxٌ}$o99Y0 y.)sEQ!4اXvdt#[Ʊ9O$- d9ށV(XkYNguhgmʜA)* @i7hmRo;0(t3,,JƧ{zӢ䓟xn1R(VK2,KDJk3OiL^!#Y&e)!u3@k D2 ]˾QRL3f3u/ z>b 045v@):;baZ=~6Y6z:7nd08GUoQ\nF|bYp!2s`ԥ2 1ybVen{E=uSYs`m?uyQPC2т2(s 1+5-΁< N]|!K x/Y_.dQꍛa@XO ٦˟[ͭu6Vr!x% Mi"uaPI 6A0EI5DPDYɾi*i$35ˆݶe^P-1(.ηt0Ѧ 6Ցlw?=zo~<||57[^{nqq>5#1C<9{+/ݡl@) :1y2C\`Q|wߥCFgI'=&/خ.~ $Mu7Sxn~A{QʔEOӺ+3V՘вɵ令(% ES[ 73?+zh$K׀ ~]a%bJP"ȄEaJe\W+\F%">S]G5^dR|'q]+T$MZq;K3+ >8 b]2G+ĕQёk e6 Y%z$& 2MDk2aMY_YD\fj@j^Chchi֒wor;4t~t}.v<^=MTh݃ {R%P2[KHݾg^# qM!ˬ.<6XT,sig&)2RJ "-dZ}ۧ鸑D޶t8FHA]sDpF fݲo"~`i:È@A2>]R璾߳64P>Fp!nRaP)ZeۑUDĥ}bH!R ~daVTuU]3aZm.s9Б2TAD bLr ;|bgt4ͦ%ӆ7oo} Q*En89އHf{}tO!r֌Oܻq̎\⃧|ba ݎBDJ-xmf5ٱiG1qF2 G "%aD bqH7:YV_"c @NsӴTZ\@C?b]"eGO!f1+(C)"!#1ZQd"Yq֒i=ubk$RjvCqÀ!E^bF^~>?b'aN9332 na$/]s6yTBsϨA$&RfJ2 "d /QFt?S%UG"VԳuUB2 )86&INeSmqnzI],Hn R2>\o9$Ms\02ZiG;2ZIӆU| h֦9Dvz}M5ȯsf/r=81:C v˭u\#hɌ ;>1daP= dun q' iX7"H2[. >->hz&yv솆˦I֦FkEY"eLYnyV`TzTUɾiRN}zGK I2]7 $8 27c,*9)w1.ݳ'VQ1$ xlFhĘJcw$ޣbpQrFEr##zy"6:GH;8.VM|4%/Ɋ -#aVf0ZG88Ss9GQ,I.LA]i#*)$JL0YEOf4%ˬ(ڶME% AY䥠,&f Y=Ʀ{8M;o{mKY(0HǑHYΦɥO|7e.CH8 HVe%]˃Ⱥx7_{ ߌ잮xq4##o3-2Dnb<9Jqzp'g=N +o[3>OYP7m փu1-O)I[ݔk1 |G!Bڑ+6 #KLaxtbV9Qptu MLMSd-þI$:((9(tqqW̘-4(f6|mֻ(5|A1ѧ1Y'蚠{B (C*ĘҰʪ$+LH:Bc4ʤ{SLK&4GIe4DOn zM&J7pELғH:0AutÈ4ki` (H,΍뚢,hf Z(K8]0=W^ 痗@e Mbhn1eËsHG7wcעc4O,ˉ1Jn?/HďWqm"^@>/8Wk?# {dYi y 9ɏ"h&m8$sh$ϲԪѦ޼Rw6Kf6=MJ0W͸9<՗_ݬn.hO|3|sor( 0՟YΞ>Scqt@Fη[,z泂۷oϽGg#KS[kI'C °<:9OM#,JʲdL/ cTFY6骕d#,Pԙ%jJp.LLv)o}Hqط-8p|`y0gyIw캖`Fg{,@]h2 Ix;H:4ڷQEtx+N6ɋ}h=M!I|1TSʋi6Ndeg-u`zL 5.8ut Ӆ+HTh8vMCu)2u.B J2Ec}sL](13:YiReC 1LOd4BHD>ѱݶh3c"eO\1U9݌Cۮ`IYa@ R6f`ξkSȘh8JL(-8s8g%Vֻe֥~ޡIE_Hg~`?$PG&?΄,xC\bīSquxZ5_L+UB۵k/LWx^?}&d1EئBkIiaNj%ѹydmS>xF7Lܦ"Lrt@ߍEԚvK?F\oSG+*Id#zJLDH)65YVoW).8|HSs2vvt%U^cݎ~O{wS쫊cG=Q/s6:!ʌqh6kc>Wns(XG\"y6|HQm7pе#EU3ϑBC␧+ۆ%KbHN}?PU5 QRQ3ʲd^M gA0to%/l=ۦe0:jcH醎ݾm@44% ]:F+h-89=AiM8bdJB۵R\D6ɊadD{)g%wݙmqĔ}O(gYVJZ0F3-yz~ yɍ[wx䜶8u9J22nO]=8iݬӄ{|V2UdL{a2+2c膖ãcfO]0!`qtm:.zm*Jq6).SF]_īUATԄO E⚒TXhTc}ǘΠgYdx`Z4%BxBt)tb(L.xdEJk]=]giw{f3ϧd%Yf{jǶ6 ?/۷mZm}~wbޱ5oW|x툅s{#9A%Kw88{rA׵L'&D(+h)l$ĻɋBHH=1<3a1⬣4=F")i)cbLԱTFn% ^mߥw)SDvmKÀzCYdp9L8XTˌyE]d8:y޻ښ]\mcccID(B%Hq YHL1C  1@Q2`NB` ;mwWwW{>TCDTj/}}4gBQ\/@eQ5%rx/0lEմX;ޱĸd;Ut:seMoX6tb!w'$Uqn,+\Q \P U.1p?QkHI?Wĸّ\ 9}5yCbV+8_Ud9C,KZKߏTp֣|w(1.r缬2W/̘2D.B.д{Z?uYCцnquًgܜO|żj/:# !'vlHs [j`ZFbXxpFBIv+rjƃW1'\u uJ̔MnU:-F6ZϼdbVlV#j2Zpޣ223 sXq &ڶY⑳&0 58 _o͗]KHe Tp>N,ʮ7!Hh_o[ck-J ~XU"T\w;vmɥf!LNE%)aʧLL WmBJoLAi /ĚV2elR[W~C0́q^㉋k^<Ro5Xg9gL䂫+㈫kB6\o w߼(*v_~Ka$BS5|W|śj4,oމ<_2wcX\~`G+̃qCW~pQw+/hyz?WJZG Ln?BGAvkP W͟N$ې?K|^aqN|OmcYԇhcgb3M!NpZއmK:)S{8<=6UBc(y oR k-󤴊bqn2[Y]a]0G?M'f/vԴb76|wźFjJx ^e*h䀖@x{5!-W5N1"dY"Nľa%#,ԩ vgXT)̣ k8gߵbGyT:dYMݠ2Ę!)"m`(!̅533!$ 4,3zpv|kqh#uo]dk`e(!0P4E'g-GB\t侦ie]2E.@,mE*Tsu4MHu4cY'fK¼8],]!Ϯ78sFk5l4dA3~+ܞ;'ĺ ~IM[ -tŪU a'Q,K "m^+DqϾ_?/ J;v 4cdx2#EלƀRf]"uC) 2Ma\F0,kdMei8# Q [+}*Q039J}ι #>wbQpnSt˨(%, kXQ7rQT@."O W0;޽2e{P~ϺZ^7[,u[4eqIlIZ_)/^=yBh̸Xhƙ2GZyY!}XUxBc [~'E=o޾x:1 _79#EY>zrv'HV\%*HIZvx9CΏݬ$W~ብfS[~hmxJca*_cQC2J?ȣb{x?ڞ>=|<*"sR~'tC@Wf#.Ђq .E~\xu2(%-MCx:$Csf (ҿ.N*x_b8LK$)?~Eueó~R LTTUKUI%2Oӆ$b\)ӗ|m4331Gy`q9 E̅?gWxKB(Wq{|]?l8pZ޾{CS\TZ\a T׮nkJ c\Kr'7obmj$Byy9#Ffzvo޿!)2N,"%qfox⚗/3+W[Ae#.ߠدvkC֊Kr|obsO?N}{~ȚqM0X4,K."߯5]{ISyaYqP׵,=ĕu5ϣZ~8s:81F=<ږmXRxVm,4Rŋ產Ǒf{'bFY'Oڍc-G!N3aB$:;4@%|{_2LBش^u%RmCۼ:*X@.i>< gWϸ<4|9]Gʒ9{ORB\Fe*.;].[RWFFYXǙîaYbU?Wy *A7mqe]=yph74OB[9v /qD^JH3Lbӂ74hpFaJ *źD0U'S) 1e(IJ],lj7e|SƘIkqFfhGL b5yJ;O<ѫ뚺%0qy^(!Ӳ.ƮAW9 bY 2䔨lE)p:_0(ò$x{xs3p?Lk5oN$żi5f${H6r!k5D :si6[WY5U`SRN(#(44 F1myE,|B{{/[ e4% mͧ`xM xqxWO#ӼR{|xK,o%s@9ɰ%LXмèoF㈼a鸿#Vq`Xo߃6\?ŴD֜*' qZó t>$)񙓯x$2?'B,)嫃bꎽK̑2 E)>x?@3FRi3(VE^V"ȴ,[ ,pfXЈH?aY 4^ vmEJk |WV4s{RݻNga #DL]6z9J!tަ;'.,a۷.`a`ڊ>BHD+_=ڊ]BK3uL.(0ȩcƢi6qr8'b\9t LQE,cΐJbϲvtuvxTqQp1k3,kx偫g8/U] jVh U6þ0Z+C㽥k[AX<{4:YżJAFqw,B+l)Y:K(|qm2s_٬ѥYxpNHVTNxcɹq#?/^ gmþmu1!@])Tj>ٍ6RH垮kXW)I|ab\g)ZJ۵\^(EIAKK7ss:0}ZV`!]+[A!$0ΈMQQII=I?!FrRĔ#ܼ?]8yYgq=LL<.x#󺩶כ=qiۆkXRS2qB{:ӵfg%L*Ng k^(sXEP#9B xo8\^4\_W/_ t]h{qbM~dW+vV}bZ&)./:ÖlVᬥ28Z :YaW㌔ŝm"F[t.R44Yxk)B~6u834Ɋ*"b m+RcαU zmM*J8x,Z#,i?.ĜfMe U[1dY Pصџ{lL>cXHx:SDX#+c+ IDATV܄R &̅-~ڮaq`]wgr<2Hd9PDm ވl|1O2׍cg..m[bÞ?g4o/3EB)(1oϼ{wVƠ ՚gϞ1o*" ٵ;TxKbi hEc qMSK|X!7s)#^SiCɒ1UЮ܇Q86kB{B+*z5@?r@2{kѱH`_YW,aBԄr{sKx9fVi*cQΰDE4x_gR^-E.XM,Sߣ Ӯq .p:\|yٙ9<^7_r{wh@;š)z+\3C:X]x ^1}<? ?t-ب>tNX >Q_>=ǿ(H%4e#X7ri+K\| f`i?q~7/oBePp~)esT0GGRδ! K O3Q~XHyy,}x|X} }9'hz:8|@姟I 0#]ǘ肮+⦆vm#ZZkiBW([Gg%"cXc IeQJA!ľ_1/ַ6{+Q B߾nl9N_#A5Lx*Z. VҪ6ze=FYAN0⼧G5߉[ JN4]4N얰C`fJ)"4t]҆^=htnװ,Q>bk(]B{"k*okJʬ袘LЉnƑ;L!FM?E41ݮ,#/]+citFew-% 긱Е4r8ginGθJSU5o߾% `K]V\ZN,ˈ3cCG/_p<ݠfnwPŮ#/L+ynX޷oz~g~4wĂXwLXgXӄ?q&a 4́0MOz<\=D++J@DZ#'NKXT\/ Qkѽ_Ӵ]"TpEa]~@iPVhqU혦k Zח5i UhjK1ZJeƞX%+W<6bu;*|xeC$RXekǡ9H^VE(۶%@Y<Ɓ1,)ZԏX]*CD<㼣E%ϮQ7q {@Ve]1p{`ʫ1Zs<Xk?5ph/_M7[(:\7?';{.j˚ 5Dɑ_rL/^>pwKJN^2)uuԓltRRJeho-1 9440QU-:)ReP$a&iCm (hچ{ + ar^ 4k8%K֌N!a Vk+x"\}]FҪל "/_2N9LX-rrM5]0L 9syCU-le[$y۴T(ڊqd֓ 5ઊ8rmD A`JyPRxbl$Qʰu>w_n>:_0o~u~SgO_e~ _f>Ϳ8oң9TvZ?g?3\ԉ_w/?s7ƕa|_T ? ?Q=E,L1>e=?^~%ǿP7YO9,T>*T,T]J}RUk>|}s#Nԕ'VrH8kpFH{JA]7)A4HI#^)*gw;Ma$n90u]煸HRg21NA:ihrqɱB7ɵꒂF[K'8BBLjFB?e;Kp>L=h1ka'Ȯd he;ҶYeTU3N6_Ѷd[!JF(M]5R0gBrҖ J,SIF;^x87h_)=`8* 8DGvm:,?HP{\2g`ϔ9ޜPG)XYQAC+˾uH%rwa"NYڮjtj,1@88/ҵ;TLyK&S55RPqk>/ן=g\μcLmrDJY1R =}/ҳ©4ڊu|v5:18*_??W?;_O,|I?c_ϱ?#?SsD 9}ww_}g~s%? o_><_+ ?g_ ~w3W/M|s_|1Jpl-~͖|sOC%G<旼 'knuGU lQsVu$`3Xۙbf׶5 ҂4hW 9vTMK2́}ss8@? #uˣG~zJ21XSZ9R`hFzB\^_blCገ(mƙqu5UlaXy2iF.S)%$UYٶ˴^d{<,D3Z[)ep(A9SYw}ͱ(Bz<1+>L^X.se9^hI9%&TVוz@ X%Ļ1 #eeiW%1#>q4Op? F:HDCVT4a! 8F 48k)KzhF]bfq-fIXk) k5v<ŘHQR }/ 7חrhDm|˼ۼ=XRZ~r!dLj 2 [X'd(I(4cҽ5"Xrv8SJEڊXmݰ.^9==x%)R[fYZd&<}敳5Ub0g./.'ObٖӓG82 GN6+y҆i8? ĺi6Be։J+ify1'O&P9N *@H)RgÈ)+g1+•14H\zbd?'nBpf!am\]]b^1)d!98ԫF'S~gzzeJJg^c~a"qZK= %bX7k1S8ɃP ;O|\#mY# ʬ3K_>ط!HNP*c4dKٔ [YQB`bÌnB ]7Ro73eapGqt-R8^p)%^ZKrQ`uAYXvBK]!rF9Cz1k|y4.r6dxG\)8QC$L7d-EB[욖ʒ‰C6uu=; ޢQh/"7/w4U\+_g'2jW~gO}[?CEy1ye.39$}_gQ96'x'7g@)ړ?]|x1OhS(yN|#~4\Q~"XaCE7Y|{ݏ;|=B߃|/}J6^*ߑN-M00f϶T-k1@+GTpU%]mEJH#s(,JbM{7{|Wancb*TUCGgXKx4iꚶsN+WCڶ> rʓѽliV\n=>xJ$~adGqn(3 Vq_#a9~ǁW?[ s3~!PFqbчTw`g⓿Ua_\s IDAT@?nQ2JibL.1qnV%i759Z0Z^HYVwy!k>2pIN4z7L Kyi&434冔#^-ӕ2'tqKDcBh Lbb0ςkUJC2ǂ4VhE TcGbYfHD4m#MY;aWһo0eA?t-N~"ҫc4lS?aT*j]1eLz rQ??Q;j,G~O'h[пo_yrZ-~ >x&J8ȴV`gPK#)ei~2 ko7ĩR72֓?5%t/$d!$ڇK~ V0l0miㅾ%kKrm7;^R/>|Z$+ey||Cm4UϏ3q\( >2!x5*S>;è.,W\__nZʠ)UQ\< ⲑ(+&ϔeETZmN.)P2OwaE`sXKY"nw*Vf4 &m[* a"Bp䥧w:4rJi&ECRlzG[y"DMeMV s&́q|ݧ\sz~j̘B\!ɔNs}y )q~Vb8O#:DžT(]Ci W65OݮǶ|*k Ae>]Hwso|)>{F-)K ^ƫS9fW>D-+ηQL`9J)}ĚMcJMN> Bp\<xO((Jկp}s"1c \b,4u\!LSTLI`:eG.P(ͷ z+8 Vaw1E[[dYn8uMQƞ* Eҧ/F}bi)KwZQ%!NhI~Юj|ڝ\6X3XDAk?GGj-\Q*ֱl|&~1d_z]mN q @]Lb?6u%gCY%1 =JQ-Qen0{H9Q16aLf=x~)TIi:?8y0Rd#gv 1 e +q`V.dL $[Ġl+ՔuKNS 8䁸jW՞ĪbL 0P=q&LVigqT*2Տn<|5}!<>G-E8(mPVgJRӓ4-rF]Zrigϟ_2YKR-~pEM{0Z IX%nSm49Τ0pvGmedPn{.oM7f" oք9ru}ęBrh k%ei6Ǹ"л($aU-{v릡,J70N mPoP, JV}7eUEaX_~eje%cu1fpl܂Q)a1AkEY9U@rLUR% ccXFoY6 "(Cʙl-F%Oxzu!%Vp}1Nrv\ Vnz-$EY;~L380_PCU%;KJ~__~Ksw"_z%Ɓ??,FŃA>{+Xw}_7C9sw4C~?Wz@Ǚ0G>#ߏ}k;WXrn|g|WDw}morxl@/ޝ]~uz1ޫ^ڨ^d^l`=/z钑?y߾a]Ll T*&?Q0Ld*%fvu]puU1_שK˱;PhR.*e> I:e鎢vdDBK533<✣*=/Z\<T6b !az.S -Nqy]XW6 , <7"乻\ qW$liZy K6>^8(]S7) ͳ`]˪hCw{/D,i)R\\*Q ry *I)Z<|,%oo(˺&BH5upuu;$&5F;t||1fշg{>яCHI0J3N8nJ(b\u@J1>Z!)ƘQ|X$zsd4ש}wV^dɆݶaK?V^ `HWW$!e1rsՉ}1ijRT>Jb*9^)-l-_Y{hZEQ*mC~<0)x 02FbL ܦdi9Q@~ڂәCqzi±?X(A)K*R4S~paZ.dБ>7> "NB癛}0p8>Od zELaLLS? (M5%0bLiXi '晄gmIdVTʌ'W䤰U1Ϟ1Ma IB3g̃g&%MUU\]g';7uM3UU5I#jqҙC 래- Iqu8Cqdgȣ'.b=/ӝEv  rt@V*8_4H ojњQ±_R vpnCՖr"`tBU]s\2i !`b,'(OJR\W\^^dr)ӄL9}xJ[o$DŽS8RZG\܀UQ5XV8rOg\y7$WE=?V\qwwUu?-&ۂrV(BH U h9IJk12NKiKOYQla"3`T"t疸c0fHH3(6BQKHdK9˶-Ov~OjBAbR&~r/ێ%ϡ@P/_,^j J^ގ{5u)MzK=)h/G?iWk~+7~X5>~Y0h8CQ*CY ģ^:!΢22ЇŜ]R a->ʦ|i> ^)nlDie,syy+ "pGTE;ȡJݑ(hA9}G)9ԔQ^rΒO4:_~1֒2ל7Ғu`'Ĕm(=g%&(#%y k3UCi135ZwY@[aU=ϋpw•V138G 5(kY`Hdd 90[=F%E B<0Oh㰮F~R`z 4mMaKn541 eY10z0y򋼷Z _t;w)m例DTajr^ ɦq"G)eha< x%x$dEN0a`lfSrysTl)* h!fIz!rzz;=JѬ>S^I߽ƆGvgZB nM$VanAω㱣(1_2C?P-4/pqx>Rtf;Z%iZiiqhk M+1=iiX7y,i+Ȍ(C8:fZa9tI*k= Ʈgz65 Nzۚiid7+*JҝpYpg]7<~?v?ym臞f%7AYJr75)V2ڀr&bͼxq&Tuͪm{h2ee9? s}}E[)g c k"mb ^8Wkz$}qZO|cX{WZ1b)hM?B A#k2V )DUdM71\&9b P1ˁ>B]sJ"R2YEw?9%GbZe!a̳<M=FfU|`u(UKL4KY])h牺^aGѥy߃L?!:E8;@8wt"ﻸ)~kD1&%7:xRu_y긷>#{/k/VMXꎌuB|'+ uL79r;'}>J8ԫ9x,Y!4uy"NPKd\2h%SYr&y0ڠju3UҴ-EqOeb*J9b Gj1R65>!U*XŔJu`녊qeI ƉytH6SW0}\zE!(r)p}bjL&yJiI0B=҃<9g #[KGYhyp>vN]|Jӷ0VQTBG3J'Qz up:KO *X ~Z䏑~.g9,N (%o^ "3V5Fv*-yLOV[PRU4 leCr{* IjBL4uK}{6 R50p8qzOӬ!DYwUDGlqf=NI -kښ^{#M+ ӽ \mEipSҮ7qdZ=)8n EXmJ"Nq%! *,y%5@&' ɜlk"]<|aՔq{-NVlO*Oa* D#&$a;_ml5_lζ9ơ*+ɓS`hCB P1F~qN7́'BVuq0q&ZZ8{p<{R,Ua~bF4q;ϙ,+>1+xR<8?CpN> 3O=ϯӬJ’sXd]WH)]&@M\zB[``]j vfD4q8᪒5EYX#/ 22y/"Y%)QWXS4uMΑ<kms^&K" N)|I!d4Ei 'ʔ]D QUE)9Hw cIK=tw REd#n˴UYS>.d(. IV\\]ݞrpLN(LiH:x.CRV6q/%>&UF--|(Ҥ{@ IDAT}{LzO g^"RRujK}wIз{uwwU[tɶ|o)ۘ>K){׌wܱ3ygWg$eVl7;byBxNGrT5MLZC%ZS"%E?zP4ӔTAnng~HYSfL>puuDŽaآiW 'g0Pllkl!n&-(RRY)km9ccMFb ZA882MA^?J<&Y`Ǯ8[Jv'{]5Te ,4Ms WmWWPb-V"&<f%l ! uBXZI>,g.pN-E\^[~PSfޠr Bx]!}k!͜lY: Grʤ seei 8/E :!3OE I+XI)s=u%Hc 1(]s~vVjMQB:^U̜uUM۬l֤%7Ej07#4e{f}rnEA>ga ( M#T/2}YEp)1Kǁcd2yTI1}>h%Pc 16 L1QBSs\.FOJapNJ~FT\XZ=Fk S3D/yʒYL0 3وA^bP'ou1v';li)Bl2t@֊0r=s9ʂ9Dy}Bm5s M-q%mht)Vz[{y-aiP]&xQVw{L|]߻u]9'aՋ?wE[j+!o~~EJ}hr\d{l,P܃ u}; {.4f03ΙY%N՞fp8Ǜny@83t3>QXQůM]JC7"EMʚQu]g& !DL!@VLG)`ǯ⧙8r8e uUr0Zǎ.0o9nZ{/1@g'nd<GeM8g{<=7ͼP XPj Vl[ >@~>߀-4l@j UUY7 g|GqY+;B07s7;vxSV%$!s uuPt] 9 f]eY2Mǧ..0EB2M.,n~&2UiEKy VE ̋x, ZiK<[J%u5&Aq"Q*_e) h7WF/R/(Y`TLĴ,x@b ~(>pU,j6{O!lPsqy9uz.2tI1Dp:Xim[r<Bb P䓂:ρBdtgG^Q`1@Qd*ZJzmŔ%:aPڬ\2Dj5tѯ&8@|q1p\h-M\UV]M 󌐒$ݦJH)ְ+4,!\&b,Wu)MϳדgzjA|ipeR/ۋ_BJZgXsIDzAI1~cygYjNRՏ|"I93"9=_M>|`<iGDZ_Ⱦ%ϲBi'lf[{~3[b,zJUؐBakhUeg4fpYR<8 ۡ26uRc|yND$ؐ@\垦 kB!bvqM~& ̘s?0B+vf4\!Fˌy2Nӄ֚''JSq>OծH\Sc;$[Iz L ø0Ni\0Y Bp<2(`lpn7@jsk=vX!am6*)iۖs9('@L cJ&眨L& >b} QU5!:6fϩSTuJ3B Yi#vo?s~{hAdaL2o{#<\]mV* ] \E.GUE]`v2LHmJe^HY a\80F% j `f""EzJD~ !P%MU66mAhEU7TM6X;FrInT  |3( .!R! ZZךvɝ1Dex:,%&Onr;F?׸?1LSUaO1}~ud$R@,z<WDZX: >RJHsȈ;ͳΓl"A#R k6:)_3+MSnhq1ǯt+iGH hJJm 8I'idBP>2[TBJ s~}L="lqbf_ksgf=כzWR%/6/MˆF|`B< _d`_~1vʆyކ$|6/gRȟ{ulͬx-"})ct3M,Bm[BSe)kfCajkv͆Mmte7w$yH۴{ Ѵu]3,#)TiHk!&7R5YvR%Mݬ,4F\dqŹ4ϹARq?`2o `=IQq'K&bIBR2-31EHig'duEJy H-y:>DPMլӬ}/#Zj6e+efKU0cDi i+zlm7ǚaF>#_Yr'~I6K2HݔTe˄_1dRePWmkmסV41 CO[Uj/:ocl6X>taP0nidFɜ|u{sOk@ PgG9Q(˴*aBJ2s&EOa`mǞ-8UDʒith]Q芾>!­ 84J,6@y*uR"QCX,mÙ0s}m 톮k ]Zѵ&x9G|Ħk~ç'q QtM~lRCWWg:4MIהn'29!JQR$O5>ӿXwRk>cAME ǧi8XlO\"MD-RiD IT(y{wjAնm+ȁ6r\qs}C5tmnK]WL4|JɻGRQbC=>0b|󥧮+B,D&˹JDIyFDS5 s<MMuEZҦ2xzlbHkA^PZ ԫ8gXlN_10-#s~u V䋍'wk9YFC^60$u +;f#j}"Ñ2[SB<3> !vq2_D O9;9T$ Ee@d[1ҶmF,*ô87?1 \u1%dӸRCZ/ cJ;|6K\H8[h65IѢ ŮH@Ew@hUDQ  g|Z/%X[^2Bx@gmp|Wk69^x/x ;!xA?0/6/ |||VWW-u^_gy\b"^s=z |}|/mx ~؞o՟bh_.H0 =82=/9sG^ vm.S`\G0:LGS$.w# -Ei2R$@ݮ&GA  ,}zBl[eBHeM!"H<>2(]fRy$s9{]8L4MÇ\]m 1RKeDm|~Mv1u&EuØI`H#h)5m`$wwsTzpQh2srVkg*m7k@㌝˶;yqK`)`ҔuR^bjv2qط2Aֲ@IM]/ $ނY$UUe0J)&q}Bg5xB1Eɚwy4 ! a eɦ|W,+ ,2`Y<私&pC}Ge2iUT6;.OOOB DO > gzei?r'!W,LY (IZK?΄px"ʒ*"%y~MKY>E~/4Fg$O9/]J 1DyF$r*b#8]2 Y{s yf=FaŴIvٌ|0p>71&urɲ rx k[bL׷Q,:Gq\Uo+J+DŹLu"̍Tu1 WA$/_)%BJY[(Y$)Jj!>4ҔBץOR4vac2 y""HUut< T"K^ZP,ȍH? xypeYI!F3Qqk)s&3)fgjQ,yVG%HĺBuZņdJgWEWaw7'KDvf kK値u(e+Iz1?]}+g?Azy!Pk®L8FQj1ey۫7o)|~Bk0]8Ol-W;%@Yb18,X') ij)sR|I)H]死6(Ufx9궢%,a5$$1~8hCn3p1nk6 J*dW?c| 虦Z?/Q$UYeGUMK]bxo*giq}lݯ21qs**{ڢe`gmzư\hOk+BʁmE%݇3 4 LmK\/i)e .@L0L&w&o}b fKٰX|jSP?PUKXDf6tFٴ-UiPJ7ƿ) O'~@{`80ryLĻG2gxM" =9XOx*#n4}7_q>=R(dw|xtBҟϘt9gsMY .p:H)d~clhMu mn/'nf(2ژqa !F:`He(e &I(+xz@fiQ?9)!7'>|zĮi8Gtm""SDž@YiE}Cꀩ%̋E S5|x9x3M m2/9i FgoQ1_- IDATCĆ`9@`68QV 8gu-MSmϗT8/ϵJ694dY"(ʶCG8|xdZ׵"r_+&5笆\| e5SG>G״톧 La8[YBR8Ĕqur s6K%ד˜BW̓.~sz.Y0O#XfHs?2}<,Ǚ{)4yF|iz ( ).ie4Jj 6LQ6 >^Y1ִ2Ob2;gu]\PB3N99$47ZfG 1>$^ea|~qM̘ZOzOA19JB&y%p, !ɬ]L0j, 2gm3v4mü,y+ܚ;)Y6BCn^̚y隆msTUm6@ǜVyfgɍRËEBW+R>&㬿?W<6^{+s_`Ue]B|A4Pp) 4%XGxѫKړ>f/\U\ CŲ5O~T&&܈L ~DMODg1*C:JƑ-ۮez`XL?tۆ|V%BG|;]Iw |H_,!';'O0<Ӈ,qEΏs4 BYYR5Б3ij5RpDρ)%ckzɷ~ۯXr̫A-1L¦2x}#1=JVg 4rrfFb uk8'e0ln:b wTE<9k*?O9v6h%l;׻܄ I1QUm8By̛:L# 1<<L_\wP,2gΧ'> &*_!^@5/%R;fKOc΋p60͖yO=1xnZ*# LhIѓBĭL+<`LXU)n)J06t۰? Gpx*a2|D?8X; !.0<qeӶc*(wM. ߇wcJOsOL!LV]1)ѲȹÙ.OKH*MDQB|l&{"ꪡ( ~d&~'%iwD"Ux| ƔxGvR=.1MD钧 ,8IntYޞFLYSS|̌3I(.zq\l3e&$_|JHl6) [(MFŅa$L(B0E]3 >pF$i:ʥ@h%naYFHB Bh>oOۜ5];{n 1S7sY %zKY6-vILi ͦasձ658btALiALݾډGAi}ĹH4l.IP(M]xgn[BEV9&ǐc eM+`=8Y)h7-M0LRM}Hp88#u4Bkia!x+1d*>4fY:IgbF6-u]`혯9J`>!UF_g+9yzۯl7x]3@Y*х  ]ILSf6Мdr>h] ,s`Yj'@!Bh1EovM!&o0Ev*Srw{MӔoef6tM[Fx;Ӷ%}xXix)e9[rf\?-n%*[Cqӧ{N i\TuHrH_U ɾ΢(RKS˷nVhl7 mKT8d¬R"QTeVHBx[kamUe 3[P5Z 2{=C2sp"8O~]g'02mיxbO(f>'`X緟|QB~ݮnJ=l^x cnUŶ6Q߼૯o ~w4Zלa@<>k6B+H4YOyոXn7iMtۖ|?-iJΗyt݆,EHdf{2}7Ob/<>=]`绿8cNDV239]ݑ"ˉk1Ek5Zçp]LsDe +,dç{d2b'DV8(0:O۪ƇG[FT%0wϩ~_z~ӟ+-xB,Oy$S- >pd=#ׇ+Zlk,%B'ND Sر:TBS݉bAARWgssSH?33v8\Sܼ߳iއ ѺUB ʶA In=1O"D?>=di8? I.gtsRNJ|Kb/25{sBBHHQP~͏]QsrWi})+2:HIfW#K O{ϑF!H-kO\96!~^1R$Ұ9XI$2ӫ!}C|HO|^^6NTKDxF-uj/DƼ 8ez]Į0EMSJ?L#Z\-.qaYb!FEAE]t$uTO+)pU46&tX/x<]DF~l! vrT>,+S@ShrVK4<]F h@8%qX$3IӴ$e i T,Z0x ˔x=*>QwU8qmFv)N%_ߠ4H3WLc~Ke4UFK8DmJd욚~qLwwTHّJ$?"Bt\_@]ÉްSaQ%+1_,Hn臉s| P/Ֆe$0g tm K7a]@)vY=B>~3޼´L4zF(q?‡:DlȦ pG[ O? m!$nB@i@| qOMyՑ4 QdHϲx&>_ՁCxB6 ,˂% 7I(~o޽9;3 3M{O,fw_}fK! 64~d[lF3c?h ,I='x:$z&@C]PyG F 8L,6=)搿€ߧK-;7-: tzS!ӌ]bRSbÈW-Y8]>oh 0#ۛn?GijBߟsv1pׂpD7]_2mP1]?Oyw1w\m*>|xbw2Y@1D%.'S#Wm^y8F1;d<S $o1R*m6@Dnox||yAp BkI!4 7WɁ|jCUi.sؕLHY$7yo#Y}sz}%g3ሄ Y@MȖ l0x`Y&IICrF}}52rnVUVćʇDf͌Q(Zҿn/Ȑ8~4H9׳HvJ5Aty% ;X|~oWk$-8:SגWs!^}AsĮz|=xS@tl8wV&+ H^aGxLg=2)X%KN@UxakluEN-Ф"+HDFRXM *k'o5,%R>1aZYgh[hµ qU]8^{f#qF(fqckpt4Sac4$ɖ8,$E#{"og1T+=2N&5L`]: YnI>2Y%kYCMhm4ldmu"J<7d.h MxaYMslOP(cqrИ/2 p:dluU BqY/s&k4є7ͪ2A ((rU !yk\}CS\׃j=?@uPKE?%X2NGܢȊp]^x}˘Oi: t$j %'E`{t<X %I\`sEFܼ}QddZS5M-dئ?|P ES6aXkKī?fr|ŭKMmF Ŝ+8XS^*ΈWӹza t(jA-%G?`:"wZM\s:9EU i"Mc\0;Yg1RPū9LX&mг-SXK7U#to-J`J  2Nf"V Z IDAT( atA6cb KTYcUUrekhl$KK ݨ5iʺ KWNk9A3-HiX b HҔ"Q :ASZi،#vw.0i/~joo': "`m~-J+˜Czmg=ΩՋ.gJJ#ϕSҕxRg3/ʟ=}l%m_Ĺ5nd,gS4<=%l60]<+xF.Az0j2PlY-W ] gL1Ktc jȪs}^a=[`W7~~-89<Ӌ쎘/+,3]VqlILo/zaW>>~$x1ܣ +4=ƶm !G;qZ4 YxN#EKZҌViu- JY3NMC}ƳP4;+KtaJHKj%]7),JQh>>j;@h}\+0 T_e>N5Ƀooj|.3lZB=;t]O5{}e@90#n u~_^OopC)0݀37M^ڋ@ 6B9@K,+^HF=q,qFk9~8uE9~πJ!Q|h-q,>O$OҒ˛[-,&yݐ \&IAwa7o?ﱵ:M99rt0=<ϡ,K0r `\~5nߺrCbp8Bru{;NQ 2uFɚ4c-ӄ,͘5vN9aQe#EW*m2Ҥ.n>C7p E:%'|>Ƴl ! /Z56IˊY'w(G.lLkZQ Ic 鄤ih脶dB' CtY ES ]5|#Vth̦k?6ؽMeRVȴtFzW6W VLOqu%NI:-Sx6Gw\letWMض MS,ˤi>Y"EHЍZKak8W^o3]$N7mXG14EIۅL*Zc4piE\%q|,Nh-B40M-~6U#*I蚉L`^K'ZLtnS%'G$qc;Xεkhɒ"RC0cdUk‘dyNt2Khʔ^ihLV3LK譔0_-1mUBS5}eC6qXg% |.^w[WJvvhdB6Ae"p6@q\.҈ AbwgVL{&gr?rv[;L s㵗;ۤ˄00LUw<9Ps\$ٮ"RCM^UԆF`\|e̎aBӡnZE%\F W^2-e:@iHlcpr:%+6˭魌0h )jJ 3S[85+ELA(jYIF)3ѓI ju\~f+OO-OD^\s*zito|񖂶|M~z[?W[_ۇZyRsٕU7]Z] o:71Θu!??e~(/"==z?VE`= 7*٩:ڹBzv>ڹR8w,; ճ8Xi"̖bL9Ap><244!Rrpxȿ׸'IEBӴFi(2X,c4Dk;x&]l@G IE')ɓ5RH:Qth*ϰ52DTt؆&M#! IXFϏ > lllcY.QUu#k w{yR|E{%a>;i5M}YS`sq،Gd͍VۃQ+7lf%EQ^Dkc4gP62fE$+?zH2-^Rxa@$qJuˊA'0p\Y9Y\:/s=O8~D*Lh:>MqtxJ5Kܻy`@<_5;!JQl #Ղ2&8tlYf9UՔEʕ Ilz]{r4L)v2ل(t=av,ߵ83._ѓy[ЁA,$qL `sG3&p\$O lͭN9賷 Sٰ S5]1yHrFCS8<.Ld/ﰽg0 lvCG{&')rar0]a.t4[.iъ|۠KnW%i;?zW.!aǦnJcz!lL2\LE<˶ V4l&Zo]De,W[CdzsM)LELj&2 J8a6 k{;њ ]XTe:̦ǔuƀ*+y\`G>ˬ cL͠ % 7\"LݱDhѕ ;THG-Ql처Nq%$f6 2kaQ4 .N}d<0OCt;,Av*oD mj( ) 0t|So|4YuXWWdEn:((9deF!ﶹCuJiXǨ?sBrpK7.2U"DC۾t-L4mtaʚm7L<ϘebFY'6EhFqVZ Ln熠L)ȊQnXt:Q˽5 <Ūj Z$PuUW2cks,Ki@W_비Kv  Et qmVvF.4%ns.4 y1Ӂ`bn=zQ]wxMJf5Y{ 1O.r\<ʥm6]<'G.W/\ \\c<<&Obn=e9b>9bo#+:4\{:# a\wefwo liQq#~#'kz(89:aLf9qXF\A+JEIt睻'-RVYC^<||*)/2Әxdjq]dZAn6ʗȵW98rxalQ v?e>\,B|?[N!WuHߌ/|WeD -6_Å~5w5A7Zj^?ݛXs,>(4Em$_.ԗ? ?qc_:6!v90OAηEw΋. {P<j7ex`=_b/]ç|tI֖E^BkE0Leu)Tv˂,W M eQf%ْeɲUUjj#F4$YԕҾ\@V%8:9Q x=.^#^MoO4 e?:>*k!29*l0tװ c( ,C\ M[&*u,L44c4!d5_h:/ A]>nKlol2+W鏾N^Pa(89=jZj"[njz.tuvzJGsɳb,MLVB C$Mnt<ɒ5E#tC.J6$q%a`je/ŲbzB ~H%k4@:Wv3dg{d$8N8FUnXlo2 1ۛllDz=V5O̧s^~Glu1-Ucr`ç7pl6|͡O74Dl ;t.N (N3<.l-hps:a&]7hv,4d|B9t łu^p2] 4 00i#J1M9HLO4T趆n Lۤ7vDj%)k=\Ϡ,x.2<_2tM9E]ftB4'- &v5wXD)<0jt[k%g4n/Bʢ*(XzPW5/˚u1 2v;|:2W."^Eфd<#YĄ eEd .oD:6oҋ|Bǡۋ4EUV&3v.t #CMqII, [2ɥī*pNY5M0 %,w"l ؾ0dzze \66s$Bj_`UZy{?fAR\ήK=ʩ̰^tò1Kєx:] -4֕dk08iīeэ"yaa%P%iBU W-1,H["l Q4sL%g􊍍Q&mEt2Iװijmڌ=^yXAv{8EQL'X2?Y3R~Hٖګ$ L´4T]!\8 .(DH\g˺%t$/V}-H6O}/9/s_+7og/_)^6rqr%~%o#Fp ?ϧwg_#A/L{//,i IDAT~O\5w0]$Kg?Sܿl'\ ?Eo~/ l/ğ93hCgpΣpŹxxz?KU[>S%oc޽^0~UWXBR9Apuǧغo\B9 ~yЯ=ʲ"\P5 BHu)V MVrLOl,."?'XcӠc[TU{R7N ViE6 T%#ˊ^YSLk.j_ T'gfp ~kbm,'1K[lzL'8F;x'tC9/z|䥗ЫKT\Cج҄w?`d|^/0=ApD^5xfGncɆ&]8VXj-9UͰ-ӥ.J8 :+ozpL]I.^@d1ro|6IiRԒOLo󅏽a민7]F^ {;Ԫf6s]6 (idew<+\͋{67I߷@Dt YxД5F4Mk²t2'^-^Q 60 /ܶ*( Ighb7r2nr,;`JAI rp\ Q7DM)µmt55YnPv˸ERBCC;un=Eоz8<>p\?h,yG@3q\~.^ާ#ufC?OOl=kgBOٺWvO`)^)xYo\ Zٽ#ΕşO)ש*^|گhς`gQ,ֹᖟ> >Ɯ?EhTF+钍b؉8=Sn Y eb=?²l֫e z}ݝ :PWeJEqp<(huJJʲu-nǏ dޅ]1e9.k i4x2)c Sxa1$mlYJr3n,W̦sNOO[э|b>[D],9tiA]9:gsO\xl(ZCtx|8h46#5V'+<űL Y1x`^%P58#|lJDibA'lO8r^"ɰQwt:ln98Gh:ԸHiUƅaBIY4 ꫯoDp4>a0쑭~2&_>TUw=2iQbȔ|uf''4>|eڠRg9r.'G\v$Ug?I}Ǽw.ͭ!Sv*k0Bکea |}ŻZ+44 \fdsMb;KAyfh9c{.1:xUmLsZ|vA$DZQuנ 6,eeaEɚUU96g0Mz!eb:0MWTJ,aTaHSVeaټ<=Aip4"+ z>yFDaH$Et1g%hCy>iZ:>g XaM;Pd2=ҲlPJX4pt~a̗ N9mb:6$0N.>`ޣlnmJ>Nlonя-pp^=$)װ_S(@IW4#/ӧŌt|1b0%%u#Y-4MNjt9>6.R !FУ&Ϗ@$/Lp9X>G3I& EWiG4 q[opvqƓg8Lx9}1X+,CD.mTײ]Eh ߺNXܹTbzhcW1 {-i}M_b-v*q?|k7D $\\\ Y,yq2u,a ݚ<v ͎"Klz|z69l"ΦS[{hAt(tCFi R80b4HS,m._pzg->F/b<sƇVǓ^aH?Q M GMW6ΐ{?>Q"烛8?×OgG_,ompx:aZ1C;y)q捻|S. >')e?&mĥ/SG!ͯBQi5| H6z9@%E^q}w y)q4$I+(si~pc84Z88qDaXq"A*Ȫ΀F՜(Q,e |E1=`o5Kuc6APUuj0n jiXln CV45$&)qrb:r"HNܼ~ӰSʢ!*B1g:bIh9N #Fq'3 O[U( Eqt:eVd y)j*RP5Uˮ/?crzNyL+dQf-eZI-$!;BZt*cR&ZdDB;er~s"&g|;6\,۱ }( c\"pm]ݥ+1]%QNOhk|z2ɠ;?Ý- +%3E6 ZYd)uR5lE4I,(q'nѽ~nɗ/iko}~7|뛟96ۃw1n}uWIӜh2ڒN::%C(@՛W1}Zxa@Tduţю2M놽k'\,خU<<Χ3l/:%%q`{6i2s >wl8E4r8bW)UNH&3e5oRs .;eZ5U[F K͌Jnįx.%;x5_?1JYkyFdu/qiyg%._7M᥶O{3 /_wQ\jd=}=eїa |aZ,3E*EvHh[ o ;ehb8&ncESG8km'/'7 ZQh Zy#66piG`6+bǠuqm *)u[c8e`62V(JF>!1Hj)çd,az,q4*O\)5NhҢdkJ)(ñV,Ҋ))#~glmp'o~㗧et:Gv%lzGO\$[[ͯ%[rF2G,EV*)ɋp@^5dYl2[?_w|}n2]\;Du&/^wqɽ7(-XUO'+=|" 񂈢qO8 67gl36{[ ;ۛb:9!yz!{,&3"ϧ %t&eF͝1=Ow13_8¤_=]Gt%uGGzwn]%r~>awwWF >*~cNY}磻w8=| 5J6cXHA^6}7w6Rf޿B*Fsjh_@66lӋ#1 ð6e7??{gN8l ]l*Èئh,#ϋW!.mSc F qF8%UձXeeı-LC"GISUM<7|r*1f6[bUYEQC+zmXMV3bݫl89?%kr '.N V F!09o.C^I^KhĪjī"0Souט.C ;ڧKw}{/BWG_Í߫9SBއˆ}d˲7}+]W˗"'&o(Dmm@ˎYD&dicP68M[TDA R%Rؾ , [l$gӶ Ȗ?c>2DlL_<l6?g,{w 2zqΘϿ;`} IDAT`!@lF5p!Uɋ0) NLa:+7sDG;",8LQmM׶8wuMo7#v9|i{!+EA'v>_>|׹8?õm^}>>bllmws睲'OfL9OQ7A7LͺE  ⸇4M,CsE4MӱXYXْ$]\C( цl,0;\:"`k5Ws}gogd*zM岤.(%{}LaB%!{f UE(\2]qA[dP /))lڤn\s) _DE h̖鄨ߣnUYaZ|@&%rhh%- 0ȫ+AՌ1e`Ba MSc*a ZC]cU6U'dg{( Ͼ|_mB1@ 1E^a>nQ Q,, VW5di[\qw>DF1UՑ5EȋE%x9[0IVʂ_={lγ)ҙ\?hV^?Q5J^R&E#VIKQksY& AMiy2Ȋ`28:RM+L[beh,cL;88Gw}7r:7FwGc`8! uLRoVj37ސWVƻ&*U\JҗVɅ\>qk}.l;\Nk%:q9MA|齮EMx|+3{ cxReTW۾n\&/}(w0^iޛ)ْ*q=vp\IEѠҒj4B X,Z%pl\sEīÊj&aH\b&ANI$m I ưM ±,򲠬*lAi־,E4ڀ)ik(,*a>uHʊU>n uDGz 6EFѨDZƭ}B)Eƾ0:UT\٢j #4as{;lnG$Ex{=EsҜf̫Eّ+MiZedZp8]1Ok:$%Ϗ,JF2*<|Pcp2T-^65˄Iq>˩MZҵEKb&Jv [PQL^xO=ccc#3lb tK]>4MWqv|15. ))X'٦CU7TUKi0ۖ𣘧' VdԄ!Vu cɊhXU^KL? W$IJ#p=ڰ991ܾ}i|}fGfIJ"+h~׿sN3d$mϞs+?@uڸC#<4#9IZqHz2 qgg~<[P_>xi:,6]5 } CX+ @Ӵ:M^,-gM6"1Ø"46vCC]%xngg!RvtHZ)]GڄC|qB ܨh<-jn#={zU.IUpc勯c9N $GUؽ퀪ժ ƦMYI:W6cP%;#C5yӴme؜aGX_<4yo%.˷+1}HxîA}\ sZo&r}ʢ^ q~#d,]kB.AL )Fj1MK8;;1;‘h!1 heih, æuR:u]Bߧ$i"ֲI0Y,؎1 C?(4]a[ B NxjCXZ liv\(]3K4u֚^/İL!M| 5 ۲rukY6Yي AkVQTaأij @e [MWX$y}4Mh Di;E׋2;%Q 666I*\6Ex߲ɓ KHdUqǴZ R96s~|Qs)(ۖhhwnexcFBogk8>e\1EPԒ*#r>qc1E+|,!7o? Ump1K56yH1 }qK4|Imr-i@ZI2҂M%D {}SkAѝv\9aRw-Ec( 1-lx0p)׵⽏q|>!<]2[H'`Um7p,|w_rpm̙MV\ϋEl`KoKр"O?#J1RDG@q쐶.|a6h.e^Xl uݥ(+~%s~zoncy1uIkYQ$$b̓ЖYh$[W?i>XoľKp5N!Ȳl(|ijlx3\01GNDePz$ENUWTUI &Ћ=d2#cs6,< rȻ2tcܺy %5El41Ķ,LIȋl0PO18 5JH~<|_30-ŕc/]߀+{{Hf:.[$I2(<̦:ŊwnQ:y`uLnϸs*;[\Gu`AĴ%%EA^e( {>qez\obX9]W>%Q eLNtFuIQ5ںav2EwmU2H%7ɂG-"JDE rQ6 t9k:$}yj[obfS%i?=ﻌ=Ҷ!9;E\*Lˣ5 ~U|.`[$ZG?#v,~ŀRӣ+Ւ "lܸF],gܹ}S<~䜟?ylUcp 2e<ג CItעoSS(gǧ'8p`og? ?gTmݶ78[fLWrY-uC4h7P 65EBl—ϟq1_ ,sG'^Fp{hf"~/bUXE -F+˔Y*A^"-"ozC)0;iEz&Xua? кa6] 4 t;Tje d{k^σ\ȓRz _mom`.?&!?@%̋6pLtI4tB i^=|:B,9.p]E`)A`osuo_'ha9y6'UQO`zْV F?()1?ٔa?4Mf k5yӴ mg;uXMˣcfL9xA@QgLedq(|EFI,%/aa6UP5e#)mݑ5.R  )FLRnA%1J>$LLV dWBi+Jzhgsg\)׮p}7=lnml^lNϏȳw`@|㣛|rE ] ];7 9=Pt&g 7ɫe^2늞ko1[.K^mȓ~qhV|UXD B`bAS6=n\ t81RXx]JIZC1K ??d{w)hn//?B%>g+LۡS4qlϴ(W+ 4W\ы,>;jώ"++ʪ,[#IrVTe9Ye:ڤ:ZjpAuHaд Z ʢ4 UwUY5eK&+%3 ⃃m6UK#.Qɕ{>㏯?`ط@dh#dss ={R0XqsM%另xȀ!Ӌ8~5ʳ%&?×$9LWn^ j%S9o ߯%&Z&oSx~gxøa^qH'^^ pدr~zׇ]7v-x'^~{=_?/_^6IM\oS;\ͷQê0ڜk(ʂj0E^TXO+5c.Ҍ76q]~x!Jvuc ;<Ƿ7`il0 1Lӳ *((0 kג4(-,ZaR k)0-( IaAlǦZl"qa ʲ\ıLTah aXke#uCuY Jv4E#lSӠ 2hdeab%e٢ Bǡm[a,ϑJFz#5J mk# mq=?t{1 }Ӳ*cCgդي0"Z 4W8b{Dqi YBldzΓCj):Qz&Ƕ )Erp cNi0t$iA+,j𘗧4Mahm9LR6UI|-iF ~bC/e`,vwȯ8ՊuJ#+ ;nw( V5-c{qKv[DaLZ>o=|HJX+deϟ$/5VȪ+v $ \X/3:밻jMVT>嫓S$!z&4Ft!BWFn;myxS:԰ aX,p-<5Ts\(pm-R+e ">Zk0DᇄA0-yrQHiwG 泔ZDaCV,bJ-r7R\W" Z{Qt3-I)VzU+ 4?쒃[CrYR518^Dyw'6x锳dUQV^^ k$GʲJ+wh\%_в`ieIcUdtUʻDJZjycj/y0osrrt:iL[;`H3@8G->O>m i!y~rJ&+>(pyo9ێcX'3\39& =c69Bvw]%)~>?$ؠfq.WD|bFpO(\Z!"j e<q>a4]q6|8PbN'??mz|<5W%FpAXA]WX%A*sm,IE5MGnypkY!%K״ІvҢGHYa1/6$'zm||) h'0yr>{̳痴ښjL'cQ/`Ó/9:[\񽄗/.XNVܻu? xb9YҌ!'gcZv]E[qZۡ荩Xq390x}4zMc雯cf66~͹f7ؾo7@}i^>flazuc7knv3~^UyϾ1~]׽*[>W8xD~<k^jl`X^I4E%. - iVzj) IDATJs۔ 0XԦmQ CߡZZ"יMCN͠?h|5yUw}n'X"ZȺ&,"+* Jq ӠcۘI@QEN."BYu FX.[}$ۉEkIS/ IƫH^ edU`=e!cݽx2/7TQ{z=%,sTί&\M朌F)UZUhCYNVuź(Pp1r: egL&3>xnPf+{x3~WY¸轇-or,-HA7f5=`60O8>: I"ܡRh%iŬ 2 P::dhgϟŝ[[I1 Hsݧss Vs?t}ڽ> NHW[C혽!pH-5CYk?fkآP9;Rxg;oS3<Jde|V!鄖nuz]EV uMa^6uŚdu]z.8hmEep=YpBLqxnCFYՒ ZkM) \?DFk,q)k"ܦ.ֳ,s>)UVq\"TuÙ/Xc(%ptDqL;mGXf #^m ,]71TJM#(b/ƍ|zCڎukuUQhC4(7,F{>eYaChXDHI5Af u0~MQAJy$ъ H(q?>Պ۷hQrnwx2adgO2ZVHaѬӔP7?d0 O~K"g{oKz.N献\]\rh:щc|Sc>|O?zoou`VӫK|ߧwF;!5uBK_\%w<.w6pu+~V̗KrC($a%y`;+S+<.NGgQ*^^v-=j^VZ ҥӍ0JC;qQ^ XK^3Brx0hAMz 2pN8lrj1`2|W: ѼJ )@*wx i-vz6a1y ])dQ;ل#>y6@/ˇ!~ӳ3ñ5wȲ $U㆜-'{XrvdPLA3쵘O.=MQ.y-J=X]QVa]N3&Y&sj!Bv.g#咸3lSגdL.3:*܈0)P9g+rv2ְ%՜Gn3w2ÏBeb;<)/VHW"sVTȋ49yg_0,X9i(,Kef{cwK>e`AMBVKFh[;L&SNO'VQF3ۉ;9я,O$>㓧 99=j'c<vD1[ÐbBY+ x /?mNk헜^Nnr)^{{[˵KsҼqH7Mkv@m7X1S}׾ǚg͆3Hyܚ㛯l[^7a5c,efL4c3|oU1a̍k3k_fs}cl૱|^{\W)Bh>($#FN<;NM Z0v[j 51 B? 0N3i$wp 0qX@vA6כ,ҍRyVTeM'T$hqTUu2!0Jo4jZMᣵ#(5^PZiDQ@e\Um ʚR2U. RRJC%5)k#m?,Y%Ea6I!<p]|o/rFxMkMC.̖sҬD;i^"!L$i |2Y!Fx筇@ = e N \,¡TJA%%eUQYAa{gkO;0n݈OQ+Fjw^hSQȔG@^4Yϋ8=JbXvOkkvmήF(mF ^<6t.A(^.*ֹZ$|x>t!gɤG=~A*Bgm u:p|#DS5VQr51,Egk;o2uUЍ=v(:lONX ^r~5#v=_Fٓ'Y>yƓO s5K8^@4O,3|`wb=Qw>.z%v|DF\`9~~;anՆVw|SZvwHwpV{Hr ospmКgg圷nm ~w{bC1ģ vt.h!4O^k5Fs|Qяbɜv;C80iE^b'ZX;ﳜdċzԥ#bYop{袠$|'auAY@3h<7\S=g9;{]y球.q|>Rwpo 5/'V9w1?3V-O(y%n[0˯8xxu)eNn!`s?`E/I˒%pn/76Ed|Q'9uO ~!lܽM=Cv#LUR”t>/8qz򒋋+֥&L:F9V,c݄A'BS;CVhbrtmyx;l0_B`2Xf?9:Xݏ9~fcf >~}v\I];88־pC 4%k|{j8דW,5lq kUjrCMk߰_nZ+ZlM ڜq=&7pm3AI{n$o t!7M x18.;C1Whx`Qh4Q+ C$UYcܔDMc0F:si2t5a^GTe:]juA6L#8wBWlƳMsG8PUUVx: )k,#c RJ,qMY4[ xRYc4m<,0|yh/njF:ԊZ? n'~jHvܹ>T0yvqί`kwG U!˿ lMw8KY"LRf=?2? =lIx p9BXN1TJ :/!런ϿdkV A蒄f[ WfjE)h'AcBjYMN;&MS8.1`rYr5_b@m3]aوm9|bm%KI[<\Ϟ'}z8:G6;Klqv1XUԵ&{SgBvywcв;҉v(O~Ry8yw>y;\2Y } ׉C|w8;{N~˯v~hz.g_=EnݿW'/θΈ#HM||.L3͗S>zJ'iՉpW_`{W/OXdKvw۬ku~['TEIt[ UMt=5#˥!u7JްO{nS7'kVܤ:4th0ck'ި ro.vxL,[M nFfF9S^+ٷoáߋ|nE EUX,Oƌg .//7do7%Z#1(6GEIy;Cm)5Qb!_Jm{xqvƳKd2] IicM+ Y׸~;I1#q,/VH?ŗk֙d* YIp<+>ɳE1{?⚜,[0.|A+:m<=v8nqz~έ[9ޡ;mc6N%%BCŸ+p#Y7Ƿ%2/X_dӳ uc /P`Ⱥ4MXrv ٘jN&P9d|ll4bZ. Z6'0V3u#UI yʓ Һp` BE{}'}rY0OUϢ,8.Y+l ;c5p0.gkGS+Zq@+A.w G|=e^0ZQ^΃cu|r= HZ8^I[:'ԸCrO?x$,I+O~%}C8 IDATa>p7ӚA%/{g5?'SEXtxQ nV=?hqtOrR1Y-R^^xvzՈ霟׸Ac~ggddy[wG,cxx<$ӊwڤb:΀ġtY%c2@Љ"\2fk{ȭO_"HZ*V' $_;oI_hߤU98\]z nr}oyk5-k;DZre5ox.A9Cה$oArnqx5"of^{Mښs:6qV{x/7׹9N6ȪhMyF{DvUZ1/X9˼kZ#AtZ=0.eJXk EUr{&@ ߔ Thmɲ,\_x8|߈QhƗuvmh2b&\rɺFku-qņd>\ٔ)U ,ZvPR5Ul!yC q0Z7۔8y~e>e \j⨙;p@85qD-+RׂW}^  P4~)JE^SIEzUSZBFsFeQ-ES>󚒵<+̻^SbF7md,fcq&h0N~-* I l*sm{@ZMW~S7}X6)hG׊LVd+]sx0.30 ]1vAVl+0u9Zd$Kˌ<=U5YN5{Q)TXfk Rj2LW)LB+]q +\6^>ˬv ᆔҒUuZX" jyQQ˦͵4ybS+bjJkÀvx$k 8"dʙ%JON/8QԆbӓ 봹0K׬+<Q4FUaE^RQ)CeA;.i^^'iG ['M^6?~ȟ&c.Y뢢i11YɔgGIg/I:(9s)YCfux4! C& ييiӳ_d^qxpp-n̲*b$˨;죬0$]F\w?%g9b["]Q)F!s&ٜbIj$ }V[Gr{{]jTmJ)`Q.8oM; Nke|quӟŌ*ZYc&d|zm|/?cϟ>UE@okЎ {}(c- ֲ![=jʋ9ӥ$NB>=v-w烇)Ե$+rz-?>i騂@\ĉ+g}YN˳N^^1;b=~+1W/OV|⒯^,?GPle8s?WKcd^/B1Ye=c.y{puvJ; ꢫi{DϷm/FknݻGgn1k7DZj{C8.n=_ o:V7Eqc%ULzלϭ} k7*?ǚk7ׂO 5Z׼YڶU7~7kk-랆;kʯW`{ﲯYQ"׈zM-kh h$8R-B YVJ6V*YktM%1hUCRJU3! IU+ Zc°)IF5&jnl&FSUaM6w8`Aկ% >Nò)i&RMvI8J!D׍_Gc\@jV!}i lyԵ!6-hk J+iE!B.K)O㕆Ș8eCX.haB*YSKI]:Q WkTI ܆&kxkR7}) 6+ibʪi[yY6mzy3OF&4;|w]|!"\EJEY51&s"f=}$i&B5䰪Ty֦);k$`ZrvyEZH `]Jϳ%ĨJ8ZQ1y^PЎt},w A ("CVt]nh `ow%cO[%߉Qux8$}TUCXpk5՚!-%|t^WeMU$qBplSB-e!ɚ(:TUI;NeE'wj,j:eIZ-nwhdUE3`UH.kEZڀy^5U]5B!MΖUz]bLP&!UFQhm8?WL\\iue')))N~vÀRV(-uMo`(eEQU:-Q0n!|~?Y1N%'s\'#"#K3>x?|[>`ˆfYfgz{}{]7MrH.=;Qdq`w b0 r 6`ȀxKHh4 Er8ܚWUg}\9 Np Uپw߹ KWowtsyEt}+HY\|* ߙw1EJm`Q q-I ْ [bSAg}+dڰ6R\R~/~ek]ct茺vd+ %o x:w=dh4R0]P,D-kb)e RFU>蘴s Ox>beʯ],3cCz:ǧKLtV? 7׹}*u^SUDXn]j "ѥd31dkN?+ύku=/]r/D|>t2cazEyd݌[/굛L^)F=NKe<~.i L LzN_~{>Kܼ;oucn\ I+:dign_%w,*rKl\~oos@ou~=_0/,';"E^e]Kekm+s::a{}_}Nprtl&[p#J0Ƒu3%LQֲm{3]O qvyD@ Rz-RdU ǵ=+"6gSgE9hx8â^l7ߞ翗xYA\kO)[̱SR)V !|˚)^F-= (iPZ [2'_.1U/hH%( c=zb#:Vs'V kM8RѾQERJ1g:=(ZeJj΂$NM(CCh|0#*CxS(AjGJ"HZgl(w*%5vGUkL/0`X8A+HBE) ^b͈oyijTkR7:HPƨuNc-:Ҿ$EJw-T4mY`Ə h(8B)SPhB$R t S)/ ʪZG'K"N@U9afdƫz~^{}t h誆~{ O+'OILS,yK$n_W'T'p2#FONt"$w vwpOO(kᘪ*ٹt*x RbuB@=x_,s&B>ݡŹYL#<ϣg3J<<'?@G{.Ȥ qS E2- VD9T$HA vP6X'/4.̵['fO  @^6>tIw$NܲMJv{E%$I2΀@JX$ xn:$!IXtYR2j>*J1!j; J,%qv)gp8j%q-Ɠ Ġ"!M1Z%I5+#jSycp5NNkHc*cR KASyg$ 'a8cm|QX3MX'k1buu`\C^,@GYgTMиKQ1AHx:XKvaWi4U:,& Ic8eY.dY:dm3%I1ѷUzI }*t8-=t0[,0ΡӔE8q JbҔe:ˉƂz"JI`da ^`ј++;=.^HykkKnm#.LNsN\ؼwws0n^{y;)Ք !GPxTxwr:o "u\J#O N̖.)rfcƓ}ON6 N `УKYN?pp`}\X+OVV9>]2, 2ar +W;e2.tյ-fdɕkz=Tdɕ\_鑟L9ۇڲRIp>^JE)˥!Iz$hф9<= #*6YX>b6v.tAiC ҈2ؗ.nK"|1ۆ/6#z Ng>s{Gy>wO> HE|x1&Ջi3!Ӽa^y7Wxl$fd>,ŜJ(nڀJ?>q1~;sw?}\r~Φ<;bYVlIU̖ Ɇkwn3=L"_JA.IKώϸԟM:wCx (_3x 0-ў.wJ<?exƫ4{1UE<+;D}!--g} %5yd^䍥TҠDJ c$%Q,nB,#Be#\Ǎd%TgmhF"w4%9CsFI+aj}mɧ2-c$*7ڐ1Q`m`!cpTu)x,IBHH:)Qz0L+rcJy0PY ~g3 ϿpfF+I]7,MG 8,X*jʲ&%nJ\%Ƅk[\]ꪶheQc'RJi1^Hn%H2eAŨ$;yUQ[nK62g.1|Ó=/icyh-uR,fKt= Yu;WF bdE͢9ͨGF`uUdm"5(|C"ǘN(l`>> 8:^F{D +d !%>y k ^AU/! Gsc}{ Mt6'Z=!It{1Q IDATE\۹!/o^WMW7O=<)=zKӒyS Õ$h0MCG*FzÃtcMwFH:<8*8Ce29YJ'puGS˂ n\1>أ3\% ^">I?|OOgQQCW¥Ռ ä"0llՂTjF7otzW{%I,hZQ۷:k$uTvLJߦ2ZyD̦S^q`oy[WؾhNyia 5i |ã#&OW^RZ\&,IAg˜p_;`uC'P+L*3rܿcaCh?)^8W0?c}F-<%S=[bȳF|'3IY"g]!ێ>>:\̗9_c_MoLۢEt?!񟘙]Thp~zYpOXC<}^}wĆD(4ןאHkMM WpBpQDEM𫘚DSwiDIASVt&غA ID6ҍE*IS;oHG)Yiظv6Hmz<$am_01N| c]hOsR_8 l:OY(\McSD-R5JI"JEiT9Jb!=K)XSIuJ\V,PRL<jᩊ!PDJ2 wgNcMӄQuEѩk) JБХ#hcP:pM sD=GeHZʚnCbIhT1MJ5MC^HTVJqUy`t`'8DZ-[-0O.[a1"M43iFh (Ds5ңu1JFx,RX65Xp8 E={FH)H VHQ5l3==i,:ԵC)>]yyѐ5EYhYM1Y):`(TüY9+te}e C3EQRH)٠ƈ]67FÕ8ܺu+ܺɕ h'DF}zi$auuk =._m^|7\U5ܽ%t8M-KƳx| w'tf5r:cr:cl?X0Tsfco!l*9IS{R's<2]zs6ONN*&Kbŵ~Duz%Yd1"JR~o!L0fw_tlF|se>rz:K(˂Ŭ`4Xe4Y֎Y9Q𮡩*)s^2)xA+F+12QK:Q1Ԧbskɴdds"X:1Yh\|!'t4 {9O9:8ࣻLya G1=U%w x[|c?Y^uGw?՗o NN} ɟQ.l];߹Ţbgk͕k>FUO1Q^R|_S/Ƚ>š$H8<9PtpC*èNQy +%iov[v6o^=U1VY}+:c4qlz?7#5\k:|. |o)aNjO xUyo6\g{kIKͫ^Ng y /?qυ~6eMwI|iC{ņ42gr9ar#"JXO;ʰ%QZhId[Rצ~=JjL; )ڰoLhda<%n158zOYUnqP mRKiu.B:di{( } T C*E-"iusahVJ!XK4hՂ CdʈD>u+9!v۶\9 ,jQr,͂Fy{ށ#un)EU{ڂԍq!5i?gu6OBF{ׂ2D#Y Oκ1ʲB)A'бFt޵ {!iF++j λw$2Rx3MRHJ8 QqL˼M uU#u HYM,߸KWsm~D $ˬ4 =~… + :\pikÃ'̦:OtlVDBYyjVW 鄞Ⱥ5[C^z2$-=>jҍ%i /tKLG$Y M7.襊_(C' kAϪ4hXv25r+M \x>Ը._K÷2a+qĿy q:dx5 [PucgI>eYRU5 m-I˪a~3QS~JƟ[߹Ciʪ:RH!a_O0%?qVpO|U6;(u1v^x iᝡicۮ.o0!'eXN c2 \Jn~Gp߿#U|G9 >ZTKҁh3QFI:HL Lcqցk)xJ$GJO#oZ }AD"d2Ƶ !6H`]0(KZ3Q@XA%(6%B,<$; (HQG B*cA)PZQyQ7IPO4 iٶiWiGqZNC H/P& &m!ytci[7 B4V2Y֧6u"7 +*Lc}:,E(ɋ7umR<[0$ZTh8[C )y@sτ6T[YFE2klaYtgo xsv:>KH!N5Q,[ED&gBdàlYזXX id;.?V&X, ĉ0 $Q, ̛ RXoq0wT ;G]F![[38p YHY2 KʪaY6, 4Ե|Mji2rYqmlY`*( - gm+/C5BivU$D6w.qcl+pcYVEY:צP}e,%q(&V  546 HrX֋/0/ɫw? -YMT;/tfP2A!/.I*89;s*r2W\b||ȃ"1br+/`E>棻L17^`ggN%E]}*KF+B*.]E>2e)k& bkxn}8~zK3!$;?. [{akH.~OW?g ?,(y~i#6?*? Ѣ lۄǙ{3ZO5oL?7D껋h_4e⹌[ i3'} E;{<ŗg/qW~o֡A͚֟x+}~W/1LmY6E=~"w co{X6|iDy EVzb%/fĽ'sjӠEDkt.QIJ¶;)0sm} IA:|0 yj/$#0 CaY~jKtJJ"0N!i7yt-CSY Ķ5<[jcy$Dm,,ːR0$48MZ'unpJ':Ǻ֐M{|GJ: E]N-Qxq'Bx(ڻ4۴( > $M]kq<)4|`2b0ZGZpX N Q 1!|+AsCehv&WkLղ"%dX[K'4u0|k>guDD2uvtglC#$K$N"B+Om붤 ƖHcd! Bpwcl0лEU"P(@7Yx洓x<7ՌVzTEI BVXvS|6c{Z@;o|@S8˛CNUw6Zgeu/5sd, +(Q%x"2·uL7M VHOe{pUeGc^b6G\qůu%W8ys~~K_,o&YL3[V(4/98:Wr֗( 7:٥O/XZ݈^665ziç\dh5ֆc?:2B:w)4)Xedr("O8,usxOS>~M@}m ,4< I4ĹY~Bc=i-f1y/g-ꮪަgY!)"MS Qw o0/m0_ڀ@eE.$ICrf鮪5++DdU0+* ٵDF8qηV&A%46 -͒eIĺ:le} V _Ǚ8n IDATԅ|&G]p)$IJQ(C`jUY63?^=6d.P*( ("I Z48oQJal VHaYY7մpqtc}̼g4VO\h86a}ŋ7vjhWAi08+ri(βJxvwT;{DA'I`6ufP*8.+dk Jfeɛd4ޥݎ{EXP"[8O*V02yb )^|&<ɜɵ`suSc jBbB Bpm8Bx$,fnvN2;+fϘN{}) u8axC*?]S%#$(ng Wy5~w"+Z{ĴOFzܻ(8e>?ÇwphDn& Lڱx󭋌f<9nVi*^xMSlnoWx<.nㄤ,kn7"%^s|+/ݺ¥6Gm.^fcG =f!Sp6[Esd?k;DZg|7#(|=ȶ_7woaOi|7eJ/s7;|M^YjZʕ$)CV|uyS^!Ks8߂?^69Os!_[b D<=\f9\ly7Y>H1pr *jGť{.*^Չy7?gyz -IO)%i `bm/U 8C֪&!LkxF>)c-&#-6*}Fn]Isy2/RV>}<  ҭ :#/*"#UA"VuI:Ch<ϻ,& A. 0f^5ٔ"JSZdOBRE!3K H>c uN&XW/CT&\ #8N#m,"X!t8QNJ/48牵4UD8 ZO2swYEcwUAF+EfsD"F  $a6,ϩkJj٠-Y,HBJadj] G`#Mњp4^*$i,EYIhqMuPfYsx0ۖlnoRT%4jg:P*@Q>H HI2!Uf!-I@d* R.{"hSVQԀ;$J+Xjk2[EahǂR .Ҋ5[=lʍl{y1/\['];@8A'<==_'SZ:q!)|-ƥHStT!7"a<e{Gx}^#*S,zmLVRaQN"+rⴇ u^갲rёBa>o}o}VGZn> g_ؤ0b8eA罻Uͅ ;:MF~[7=~29+?ɰ.!mżm0 N ?fp lUiټOe^r00.5 OM泌߹˅}Foyr?x:w>>.Wns:S~$┧WvzqpI)Eĩf89Ojp49xpO}~K?'wwbsg!8MM(ֶ0Wz+Y{|Vqʓӂ˫3;U--3 ~:"_9xun?#&ůcSV !g ٤yM89=C gvB:~<脩6J}*jZ4~&Q[us!JE(YrpTu׉ԟ WQrB>x3e4j 2<M"?WI-gb6!)KٔT]/@esUsd6)S8 &X%Z%Ԧn6Q0w@jT TV.tz\W&ۘoPj)B פ4MCfCC#M>N=y6'[eo i4HȊZ b1Mz53B5|& ҵD5:lF#.u]3ϩjG^hôQJT`5_CX1aja )n Z4͏ .xncף4!9IZ8,~YƳ -4xbV0ۡ9:7ʢ!qȉYY#I4Nx9(j1(|](F)K8Uz)8a0$,WϢY#I$kYЊn eYDQBY8)5xGziن@%DU Q >ds<#nEP=xQ &B(4^4)X)ט%Bə4"dzy4IRVU8^6O! +$q 20+йJa2dV Z/ b($6P֚VeA>h{O8B&Ҵe%GaPau UQSU5ee>A4EiY7HhCbh kLp+Bf M&Aqӏ2D*FkO]Ytf*+*EGQ5 Ȋ)J[hs<B鴹z6^8ɳ 2Sl=G8A"-n^bks ),SD Ak}NoKҚ WpŐ[q*afHYh--Vz]&3>dt{kϨRW^6''C>9)bk  zsK1>TyF$`kKi8Oɲ gp6 f׮W'bwo`Y6y7ѭ.Y~dFY q)g(!xS }(Jh-6W8=^2--*ɨM*XrzD;wyQwNǟ|4#__`i;lmn129A^>9yWX|j?֟2kLE( .1ϬX2mPqYxfbИ`=Sw_ {.|%#ܺyMp:ac{;FֱyI_'sgP7ūw8͛4!|+.k/WSʉ%1I^m֭7@%bhb,631Ł*?:͟y6`9ڢzQ0zy=G?Yw5ָw>Ge1r Mli}'܄Hnp1 א5fiݿ7(a{9MQ6s ܱoZ+<R ZE,6)ZaQJ.FEYPISeȪS@qZ)um "W&e\k /^#BIYl`B!,dh>L3wx{$ۓ$6LlOy1B,ޓ(1v0R5Ε>da D*:y^CPEIx6+Ӝ8ix2o@l^mI/<|V馡QMA[lRo*C+i70iE^](TDBj9B/w67H(QSyFAq,2hLN0_E1t" $1-6SxA+j.BaH\94[2~h5Z'X` i( MC3Bc`κűaӱ 8KZL g s%$n"/Ȋryf/AEϫV AjJbʲ&W`]90Hn㍤ hrph%P_묮2J9$FI iKڣ[\"(V$,uVݡJX_akk-dZS)UU낗/^6OxpweʕsyAӡs^udN;Pp4'1Ӽ61GO a8ytᓚ2slIǠt{̝?מ)"+9>|f$Qg*nu^SJ:(w?1[k\Ya^Ʉ.hɨKլDXs3 =y֓5E^eiNYYʪn;xt2gRL"]d~vZ  .]l>V5iAK>Y%yAL JK6񥷾w=!/aor>;˯>n+rixb&pU"0~g._'ԮҕKTX6/rڰ%ipλ/qեv83gt謬{F<&9g"Lo+7q5~ᗾF6[_'&vx?ϽiVq2(S/~~+w8͟|KcNN7/_~#>< 0zxDﵯ+{3opm|U|ۗ/2o_뜢 |?by|,b4 xK_ {p#͵W_efkg|8fkl>ᣧUY2&JXk{ t՗y>iR"_,c_Kv1!KljJ+h!)KloPJ#/iM&i jā _6ztH D-EZy&q@:A. XrEy yxe:j4m7[!EVTf9f(PR,\ "-i XSedS^PRSWu.a.9*˃YKQTeAB"uDTe"ec)#mKXEkYn{.Zk`kj >$eQd؀ )QJG Vb o"'} $6߀l3t(%֛gSB{i<6R7!L}0 .B@ڐ"+CnU#`8 V+,LU;ȶ: q+!M!в {mRhjղHg$*5N5 E*Z+($$AzkYQT%2vW$e4H+'9QO8|: cTl8b49:>e03W ɘul?9$M[fcL]0ܠ[nѣ 4L9Qc< Ogt:_d2/N <֫lwrBn!:.r Ss"+KgJvh pݪv $X{7{Ε3Kp |_}<`::n̳Aji}kVgr<ƿ)0Bsf("胷fﵷwSwQ79?,3*OTUѠٚS3ӇgA?=6<RE$n}Ω9OBMx~;?>~O3eZ8j~O3gK{)*KgG@4f P-kL(苢 ƀ}LƅHa 7v)'ͶI'vˤ ii&x]Je,UmIǷ .X,[ ?4߄LZp.'yQ]FcmЄ[H'$I 8B \.BESt%q$nN2Uj$ ,Lu#jDf)4xވ%2E J7a!]9:xh)`>ͱ$( Ւt7Vg jB G;ie:I$ ci11I+cnOO6&%YU3 BhUttJ6q7!M%[{~|J2WtW.l1󒭝-WI(qI'_~#4[[bj3OflR%~VDǭ34⋟D(N'%7ImBQU tAvV\gxG[|]9xx`<ݻt@>MV F#.]txGG;_5(7+]ʢ+f$E)t:ڊM<݉al`jMd8C o+V67sllW)n4EiH[6@c[zX4]~8A,Ru%f`eA?Jw%eI)!~yC#B{~~ q|<>gR(;3/MKE`O?9!C??_ICƠ>kX_ՎLF*ZkW3O"_|8{"R-S_cȊj";솆 dؖ4ausAL(5p*.Wa;^8 Mx kPMCUUF" sq,k08:LsqBeHQK钵鴦*=$R]Bb7Y,A£dD7՘d/lqVd`XB[YUo%,^AHGe- 8쭯p$R6^I`, %%vcFsb|^e9IнuU#K MQHH1ˀ1^OR^6ZSKyo砮ٔHGˡK$: 0IG%B PРtWZQh4lpRgkk=L) v5o2ʃ(naL@ eVcpHbyl]RU*H-M7&'QiHI('¦3ԥ--Dle] <^Je/σhVBT|6y_$:69~鱌"oC6^-0j\ M]s.fkAZ("ׂjUW9>;4ih<ؖc46R7+MQC‹`gU K~V* VBe umOZ;mQnuN' }pOoprP1>- ;OVԬVd6EE¼Z^%/<-ȵk{p`#+33Mh(zA]g'ˊ8m㥧vIGUXE)EU"cg{+UPiU.\DQ8NOr"?ln+ܻs1wW=e80䵗opAq29sx:#muP gS%;8 Sbw{ {GD>s/]a{֖n7egJ+ac*ݵ;lR~'~V$dӌ?l^z&Y1uT ^/MI5$cvvI+[fcEE^$_=b0st|٬@ݽp8 Z'\|v;k_"UYnS5O2L^NۜMT2вsVWvWۿ1do}6` x/2ṫt:1ǧ}x Zu0/*YFV6icOGg%#I;tmf6Y[b?#QNXk4!M*ҢrU>gxvs%Iؠ9G)Mg H‘KhaϦM8N8ZG<}1J~dhbOy^j~?!y Y3]b+ <hΝf:,9a>ˆ L{H#j%6ʝPNoVx Z t$c`Ck%)Uv H! U3YoeC&ɒt5Ue 03zNJn߽| }w2.?;( 5jZ'{$x| dR d殲uV7_W4{/JK?`gy'Fj|믢$i$mWBmi\a{upJC5Zz-X#!kkv 7HNN\95(Ng9Pc!~=4T͝&_|I$C8M R șHvE& DR(Bʺ ?R Lm!yæT0{@ 1qQtI*  kl4ErYIUMLБDH`%B@hLքD-`rBk ܚڄV35,ϙa_ 1E <$9OKUe9"ʺZKts(n 2$ykܼu [ha92xpxn c {CI!h$Q)*ƪ"yrPω{X.g6= g"%YBѲ#ѶdG[q#NA'! 1H0lCQb'RdY$ѤDqp8K]k?ۻ!)q1@߹UVsnFOdt1%gN\Y@M0kU1yh^' >i%(Z$\S+9< l퓓_(ZEIQdI)[!7ߠ9>`Yu`YZ lYIyu9 rkzrnE2+Qvt]K:~!m MNi E^N֠#mvx󑗶>+-'4]Cwwu.3~K_jI0_yق{ZOL (ݧl k~QNYk;F=O)tk"YEn=뷧/hɜ»x3=VZ,.Uyx1xbp\5 =Vɒl^s|vJZ.]޽NgԍcXV-yE?|2u9{3pҘ_xTӪd6> 5ՌQx+en`vDyK^crvvrco箌y6MU劽K8R1#5=w-m1>M0\,k̪e!xCTj_{g|~|#hGztb1g{`MF))D6M4-҉649tIhI6̊HF=ipAm$'6OHH=* _B\j xO? 7Im t:JSPUJ Ӛ\f".Pv(l"2:OOfA$H3o HHF_D^b eT͊J5ȆKGiھUˀ<02 \L*R[L*"6IyT<sNb7Xcÿ!\@c%`ѥзYʌ&Y_2EJ| #:* J^3i" d"Ƥ9[\9j;ޢr XbIb6w:U!^c !4u,r[7B biz)Zkٸ4 Ӝr=9n+4]1kf>HICrM'+/,FI(H:!j%~dt@RP ;!T%>D.:FJZgMKӵ͒J\r`)ggsej^ItWAHdFSZK֌C{h`Hl:2#.5m'A]R7-M򔴅)߶pW/6+FCF)QGCCg~h7wekk@e (x!'ga37SWg<|@kEŊٲu@[(J`hrڥ>gP!lB霮Ѽwƻ+v/qzr gh{!_{m. Vi:ႂ@gI%1?;e<Xpcxg9]"}dgXׯA8~4!wON/lަ~SM_噧np%yGg\|>_M>寣!zF06ENԁE %WUǬj6ڿ\EՔy^&Bn,{[LGl2#w#3>۷uaΰk IDAT_?QĚ^a˒g^|w޽|nAܸq|4ߥj:9Ei >30%Qf+2*U^xcXvfY7VVP*Y-L..y ̓LQ<ZɌMEZ OsA<:l2Ŗ}oq]GV+MgB rN&|ںaRVbUӦ: 0*!*׍ѸaV]-AeRa מfppdE<9u^'Ҿ'e">FfoivO\ޓ̉"޿_+1=oOld8}R}"m:2b"Ձ"mB$nDHk-ma־$ JԚ4|8ѿ[kЊ$=_"O!sk1 qmK]e1O[7>/HY/D;_2X|tz˦?꡼XO_BzelAD{=~sc>Z]Gi%ָF7!MJ`2==t^7hD#>}vuNv07*rzfUp˝i fˊI)C2,M &tiϪv,bd6zW"h\i\4.RŪlnXD*cY%isΧ ,0.\8>@݃~pŒn+o}xΛ_|J ~+o17$)W չY;[, ŐŲsO_B ׮qv6aY5tp{,y˪!/,/>u_sigŌUј`|:u̗KBP h+^~%>g7zhwjIӬM#aJfG.~&½GgVxeisut>usV+Gh'v-sb`Xbg{VPVTˊռZ6=hPfFe{:m%<L\ΰū|osAck0s೓ *h}6WȌL[bIGUg_fwg69BdEM ?`rK6m}!Tܻw좢41,+G?|YѴ2pm -#KaO]seoȕ暢#DuK Y0Zy 1`2jqA G8f%ڂټm#EŤf2̖4^K{Ky9JL7YK >͸oe]@ݒq5`82LExְ) ላe5Q/>ΰtcjBj,quE?|샯7OZt9;`t}e:Vi^{%^x9S] <}m۔178|jt>`MA:+:).K{sj/*VDAZڄ&t UsIX r vQ!B`Vy Y#$k-&Vrɲ@-GtՒ+lF5s!B|!5N&-ɜS(,/R:"MӤcLv/3ں#8*uu0^VHXa^#E$'%5` G' zD}9ȸxRd$/VX|Yo +j#c-&93o_% zίdxȷ<.5KEQ4M&’P2>M5ch'DlW1*ʲܠ`( 4,/$:RfC"hz kxAP4&V :I Dzi V< EtBr <stN](k3`{Ek%DRPL$$b yMH2ne:9%E<*b%Y !h-0mo#t >MS>DJ#+7,j,uFa=F`i6Ƙd2Fދ@# +IN-1D9 :^$ܬ=np۶7w[UZI2N5~ecL&aV/$;DMyS.xɹ qЛwߣ|m)w#.3K;oXL&9tPP`fyi~m257MQlz30F$qv EAyAeAx(uqԭdӅ($t6Gc$j #Pdb(t^s1jV99veZ䚧2y"Q5ΧLιvłKd24slpp 48kbJ]YN:._DKn,[czf1P 2F+QL&+bt,s"K5C|^{ﲨje4-?|c/3~G^-/ՌLG d2=YFu20 A'c! 7oIf]tmjZJZ nmmS[ ͟IN0y`4?V,V B=mlcU(r͠0 ۘCO|('7h:I*U$=ONOrˠp ;[+F[ ʒшgn\L&V);z%֝3-9YtQ0mж,Y,8=yG|^OOq|+LC:RL[+~^,i.1 لS. Up̖5>%O g ]0bNe'hE^ 4]R`=̈( }2kjd&5,81h] FΓixgPf {A.FqzrJ ;i.8'UM#]h[OymZVՊ1hִME6M+1dX 1%h̏o7~W'*Ic<9~֬GpOp/fHԻOagoq|]_?crwɿ]F4Q0x'JA'uPu~:A|ic?D&;9S&-2Bqo̙kͼLJA!>.#iWiyz<'$Z蓏39|rD 1um*ۆEޓf𾦤|k?E^9p4bJʼn{1b$C]d7L#MQuMXd|Hn!D&2rv~A.Rha Sh0 +J!Hͦafvs yV :P\$CoTJ&e6u *!d<ri "iZY%K|_m6$CͻxV*24B&r˜KilYRH¦FcMO-tCKҀw:'ѼHlH8ҤDqbjʝ֞}mA}s_ |"^7*,7^*MIbya׹ uCtiC#`u(U KNc2مQ6صTiw{ִmCp fu ܲG[t1r}<:w0kL=i RL&31] ]}k_G(MF0J2|"5loj,s.&rXԎUtj婖-iQih ͝]+<הe/$feO֡=G9߸ _b J~ZņjrBcgcgPphX)G:lkZ 9B!<ʞLXY(F)ҬmBTƢMLrzt ՊlF_b \>ڵ=5W3y)\Q`wK7%ϙLsV7Ͱh_}Aѽͷ7p|I92qk͜?3?qe|yWW%A8%VE6"GBU&hM^,4 9$J.0 3ݝ15f9+2pa>:=PW5A/fkg<]G4nߧi:=:i;N</!b1feJh1\#jH*sbQ,++p ukYV2+>@)Q1y*~BR͔<BK0~Ev9=_z|H#~LV2xgq2pqrFl-b7DE{y2\SQ=+rEx^byUm@^?>#JY.xE3sѨ'ȚSSde$KJFDY#M\eq隔0NMn3ɡ0~',}b Fp?c M.֦*l1uȣޛnD־Ȅt=_ڛ,W+ZLoF2 YmiMznv$)i}hys4wBsrjG:6XV ajh:1{/5eV:] 187(q }l|`< U兞h%C(╔y``"y?~|m CLJ(0ʶ$Hwr^H< (ulIYV% >H_Gd0H%[c9_gaN9*(B$R|LtLpEBbO&nM5YmF軄NZLzc'8m!fC|eV?q-zyFf5ՔyFKz&2V"K#^X"ŴYT!)&Ho &w&d/ ڶJ'F kmF9NypzJTb[Z$̱QvU-eͲnig=5]ltY=<|H8lz}G'5Y^PW墥:# +\z<7G.cwgDiaw VkbJҸϼxͷ8[4ƒS\ħљ˳sN>'v]SoұZ& օtq#p eyڰYN/m$Id GYLn[}5Q<,-7Iwy,Bٌ'jYӵ҄I>M󢴡kn 1!w%8/>рKG8L )JzJ$2ZT+d#EN\rt& OD hh_XB۩M:C"lB Y+u-YV\mVR\o& :kFgh4d$<4Y4iô)b{SPD4䯒iڶS[yzNsq)m=q)"d4=[#uirL$I( IDAT"~+ 6HcZ"^K&ӘܒN0G}UeVp [8mKY2%q sV4sUYIIJhuUK i{lo/⛖AYB cZ/fXf9;iC4' NU=_K/z5GNA]… ]\37șL ʜӋUŔ}ڪf>3!dh-Df6|S7hLw;S]QxtrN5K;կSyL.xg{k\gqz6wn?*Li4/QG;}~W~~>d/mmvK^8ڦj;CˊQpju][o%# {A7]up{G̫1{LzBGD3N}nJ ֊|NY̪4=wGՂ '''|卷.j jY:WDab6[u.3Ly/ j%wbh ætWxpAq|>yOe"պl^M86x1F$^Б! DiQڢDë3tJJ5AACrGL>68J}/׎sHko-?iQ=w~^I'_?q~g~_ѼO/~ ;O.?6Ѻ[TKjcǿ/?Bˆ_bFS/' _}m9~'#׹_ooO̟ J+H.az_<Ϳ |m1*]j_w__CIl .?>8X7YePvr/~*S/O8}¯~.}XuaM&TIԉf4$QJ RVJkT,8]زeC稫NtfZ$YG, ̂nU)W'l pPx.#y y`)2dw]I)sb*B 3+V)lb+V"sVi{1&<#H:pAd)I6&iUINu>)AŜj!)4:o4UTx ũXZ!TS&4MQ*jn 0_ ʵy^?mʬSyȰLvĻp|1߃WQ&h\ ]ױZԄn*(18"!8wF2%A+ƣuSICQ;6gǼnKF? Ј0(& 8F۬ڥ ұ.$ښfF>u.̘kBQNYZrf(ו&E}yQ55~!RSX.g0cpg|Fg^oO|*KpJcd+lr<(b{glsxĪ18͹yŢtW:&C=0]/1%ղ&9uݲ[G wwjfG`sJ:pp0fU%O=uGeF,<,6b2{ Mj^1}5#RKn=|ĝ)[=ϴD[XtuKa3.HtrAqmM{ vh~W^ U*reo`kc{k'49.c5lw9:ܧ佌'\,[4ݝ1hd;_sә].*LVcX#|'(m,{ܠS0Turb:Z.ѵ5/yC1b4pzzNt\>gyYhCNY.+&s"6b6US;1!se2L}@t>lh\5f4RF9mXU+ kJc-yQ\Um^KR[;ŕ_(LΝ{$ Q~t%|Oqwk?G/#/5Or5MO#O-? ??_Gܚ& V׿?s_;` 972|3 vs__gWO/=~'?2OA^<||s`~ ⿒A2{u7_ƀ*9Z|˟w߾dexÇ/ڗhBz<5漒3;|୷$pCwޞ=̖}>۷Qo K'y1<),3yoR1c E"2LvwȬKt|f/Mٰrʆ9ɐ<=aS|m<~/5T2kDeh4RoC%`4xV;BfKXk7(.cC[7-.6sug1lda⅑<cDoJ3kv"/kRU4#N.x.9!XLs"wi_:#(`/Ɍi[hC@2keA'όA[~ig:*73Oa|;7o/}k3\"f:'G[ʒrtroޤ^kW9g:GY\[qM\۲=f8|zAn J8s|ӋC2&oagg)?hz[=Ng+|(Fbޣ(TUE`fZֻSmSU5Ç\:GGYof6r(W̵}k9ypg^|{*w`? f>VkvGD hѪjL3(sbPZ%H`ݦv-Ofƣ xoGf󎫗rE4CR" Ay}ӕ`f0:=C`Zh[ٔ^_[yе sj¨`Uk<[t1zƣ (UKN`X~omz6,X.`:+0M:q]M~ v/199YP8rmȣ%w*ުn>+熿Ff vs`U_dI*xvF#9]O4Ō7osgT4G#r;y' 5=~Oyj!)"UBYĖ\"HQJ$@NA0p#dʒhY-H˴3szm۞>3J$VlpY{\:i)JЖhgG' Η GR^ IQ%Ae.5計c06h! ea1SN˵F4k6/>$8ϲ(I)Q 'cڶ(,jlWY$/ ]G^$^{{Jk)##tpld ,?3_W<Ÿя5_c_}}'x7~-ywgW~&c2lfy_.J]l!4m"r G/1Vg|s|;{?U\[}i* wPL)WQܝwJh .Mڬf׉'ΦZ)JiL֦׵Qf}~vZОJr)S38 C&`BC.(SZK/&uå7 = EUPBZ7"# (i;h˕X 9$* zl6m{Rټ%i-˚#]Q(ӻSc9BhS¬SI. 1=)JG b$*Ve9PVVI^y5fDT*x.1ǫk{ZBMa$7Y6=S*1/Yu&[c.x#=|+6[48ܞaOÀ R]Q$#i's?ydotƪ]nQR,ZӺHF% l9[wEWmX5=EOY9;]՗_`ٜoc՝s N&^ܾCy!FQ]Rdr`/r;fR)w'Ĕo22v+ ?_ay{ 锺99_a L>?;|~WhyɬiKfu5k5U1'˾e*8}޴dZ'v+޹yi'ΆDQ$$6"[$=|[T}tDhDŽ+W8q#߹O/=\՛;Q׼茟/S&9ylY!j4%͒%B&ĘtY AN"NQHffZ֞:b1QյL#SZw"6:Osmd4ָa JWJ3+% mPڊUۓOhێF/C!o6: Sw3]L`Aټ%vkN->_SF/n`Ɩ%1^lU"'M#^i.Ϙj*AiNC4}Kz yc.:ŨپX1~;/0!9=17|uz+>Nc B{2ќ3>~ۋxxنt1{p4Ikz**YQXBǮsG^711aJK R?ĄMN6ڒwoZb J'V+0* 8"mAULgVmU}sݝ&ږغQno3a\1MSŸ.Tpfmpwq59GmYӃ8z|ݙeq>з[*K4j`6.YV,FV2SJt9#n3tw/98Koܣ*KUdٜ cƻ\GTQ9olӒxĤ2ؐt[P wvzGxVmTy'3tqc| "|*W|G^Έ{s88;ES>e>/~٤׮Sh1⑉2b*ƕ&lE0jezvF%CӲ7ٛ w<::frrCe h=|@] >Mym\ƇAI"e}na#TFt}VbRV3j?xJV H6Ũ0Fu>zJk)CG]{cʲ`,iQ]AWn.m׉!E,և1mpV$U7d 4z&5"MRd[_fy^ּ@i)">>r=G\{_>[&;|ܰSt c|Ǯ8!}A`;-RQ9~~x!}|/`5{//<wos'KAPnxCY!gWWs1o~Nrp_Zrv{q<&1+Mܽ=G|{wj6`!x?e٧4u"cIk${kTRxyn[[3,daSh YVUx6bdBY]9;_1[e4kȍ'JSPu:E._{x$\Mz7cXD)`% 8L&tZ0He0B h>~~p((L3Lr-"YM9_4X(L`(" ͳqqv$]r8]%5!K5T%{&)g\pgpaܾ_u>20L#RV-MuWQUh #V<=b<Ӹ&b+yqyN)x|ޒtg+?S5*y<eUЬS|]SB#cib)V+NNꌪHL/mY:؟nq)8[4<~rGt>Hp>RZKЁҝ{{a\Y>:hEYPMwx#LaY5 ۼp:{ns7o x;̶w'*gW^owxֻͯ>JEGm?|>KK_2z~3'ҿ_ʭぱz?~wOq18~3so/[]MOqSyɌ+_GͿZ_濾+xO?wUVo7~Zo=9ϳK5ΚRy]f ݯߙ]Ɵӧ,DQXǬ>Q?Gӯ^@t +ë<ϻǷcBDB$/}تf`!yT`H SN^i 6ѭDEh5VE."Ac}ap})I!FST%E8h:Q;L}D'^t<% DQ9a ɇzʪI Ec4bЖSƬո&: k@VP@iEkiWTU :1დ, p@ 0|eYdVǘ%2ᣇбJBBCrTRȱb4n!;Wam|VJQX0M!$ذ$,"go raYWh2F|'^ZI#ٝwB{-fZ_Ncc&yM.4*C?$Y"$gN2J}!REҀ);e1|@+%(Q f jB(\yiuyf * >lBђ %FuMY9%'FEa 1R&7Z*UeP\$o#lY\$,6M:,4MeF-D<"E9ElVQT%AjYQKԉw)`]Vs"W/Rd\rhN|YNlmMŲY~V&f# <{۴mC 3M9]) {tz*l ǻd蔽K\yܹi }oXUY1 xG|bNM&I{3BL+x!ׯ qھ%pN|ՊٌYEe͛|/g3|;| 8w !yYǾ)RGu, EY8pIjwz{ܥ,JQ%znʏ;9e9:_qM^.z^{g ~igFAbl cu`{ʨP'Ft:(,maLdF|f= mV*vf3`LisHY[jK^ Vkה1W]ތB%{icĿ_?Iyz]nF"v2/ݼ̬6S|!mHrn?HÊpHh{֔`txWQZEp˳'ܹ󘎌 ٕy6j8[8%X*H}*/L}.\ȫǷxtڣ^wwjz ~CXE3Ӥw=-؝U04<}zFupQdi9>WbsNT;\Uh%9tIP?'O;(e.xRyBD@YMQj\N<t`bS0ee%yAai.kג1,e;uU[VM,eGL6Ji" YZ)2Ut]  1tn̹1]HbK5XUU}@7mW$edx"X0)`S."o.͠!'$Ժ,QB0qSVy'2"5 cDeQJHd$j$"dTsZ20%UVh^^cezQ˝Eϥ+ϲHH&Ed/VfowBYt c=bZaܿk.\{z5LS&E|iZze>~c֛_%@53cNGMW9p`/䌥yW*"4| \POG[` h[rvUhvGWp@K~фxy/S 5Q]Ɛ$qh wUGOd|+k))ud[vric v[(A =*5cAO2>˲p+-(3_\e\f#)@YW}OuM۵9P0Qж 4gsH&#<)HIVMΦ”Oh'y$JZ1>Ѻ^&RF郾<}G߫ϊXR{}*C6o|k~f:w>IEB0kv%,A CPYvtIkR,ޗ UZ\rp"zt& A`uB ,y27(RJM*[2Fu¹3;J K讄Zw y`gEn2]neeOl)EL%ަu( պSEf{Ύ{&Q B.C=}ʥ`CfS94^:ZKfde%~y Ou-̪*QIG7 "E!qi:˵ N,)2k\TF1( *t .XL K$ˇ{ #լږ` 1'&19Q)r6_b˚QxTrz`"u5fDzNN̗-])mEtJVbIp |1)˚y4Kkq3RƲX,&`< b"@][vvۧ<%ib0%y=jf!P Rp̦1#"+LŪ$Urt`RFG"PQ?ᆆ UnhNr٢PQYq! Ŝ5\2e6. b PeA=׮2K槧lMj&V=}49jQw4ږɼtٲC-!cDNPĖWn^绰6=77nrC92L0X5]?/Hw6Pw~lLZz#Pu .OŅ29e6S AVY6:b_' i&?{d59IM C^a uF)dZSfN|pX4j}s&- Y:b蝓מV'vSFf(2A=h:F7UJks3=׾4ҫ_<$دo|~^_߳uֳoW~dO߮V JD,\m >J`jL6`Ǹ|*f50HDn6l<:u^4Q!T IH60UrM2IY % W90fDk%NFVEa(k֜ߤZ낻(%^AJKqas}V\Dl_KRׇ,eZcE$GgH @LmXQ`$_C2ܦ\BhHBYn\S$E-LVK7qޑt!7V 8Dž*ȅfcfa9*)9,a TUA]~@#c !s#F6aAEB%i2rEt2Tʒ|3cYr~HLI6ɱ)ʬu-AR,F>w""E`2:Dpb 1L36&Duh%8gmD植a]KmG< ᢐBiMEktrCYWBCVT 4ʲE/M.F3j#(*X#[eB.Vm|BiCi+֔ }wfLU6J`Rb^* D.6m 7ЮΘLF `w %ĞׯSb\aFオT'Vp^S#k5uDg%MQ )j<1 XE  ޮm\:ܑ8+ьKa+|@yU)kSղ-U%}v-墡8cqrN*n|^}*}bww!8tUsjYtaljv k TPL s/L|x6.5T d} A%!7ׇLb)$mq`G_w~e*؝M8:zLRptt;OvKW'_̗r1I+{|w~/qމCvw DN0VzPiccg{Mg(ʼϓtDd.4D#6 L bPTr +-͍p !l.djCܰc%N>JJրZgX$ZrK요cjC$Yh`lj-ӣ$fH"1f<2mMPMU^{J C] <>}mOfzuo缧n]E[bYukӖC$8t,Y(B/u3cj0sJJqj^UZzٜs8_i>$0$B>KHʲ^ȏFƋbL-#hQgӸFd8E“ɯXBs+\`$^$w1ČNwPl6P@b.GCpgLSdCs" Xifk +!>4!T$'ƫSXEnrђƟCtsc Cg<nΨ)QU5ZTIpB >26C|FΓFE(5:6jɨ)MØRV0m-?s!}E4D(ro 8qd@CTȰZM[ cN"73JAlOe:L'v*[;ϗ2XCpV1 ڳ=eo`6X.(ʂt&a!4K~Rt$wCRՆl)ݟg ei AZ FDix^|2M`ogmlz6&SJxQlZ3Kv N\e6&#p9 ; +go*ʹ+ t:A[j|QT݀O t9J79gMn,;BlM&jիqmC"pwwٝ|&xsoOv0ї1 so?/OK\BG^0zU ʾ=?S>/s*[[e}RE5tmO:J% {㒽QG_zلO~eҜ=%+B|:w=_ْ=*!2_{S'ˣ.x4seX6+J[2 VAa4V%3_X Gu7L_?Z3DZ ڟMIq,ig4B ;|.)eک Au`*77[j]i ls4i%԰~{i郗FiBr#H&(3@(Ԣ(!#1ndeIY>H6+--4ǽ IDAT Rb\&L [S( -,.iYں:H ȦIeRTu Vm%o Xg+(Բ8m$JrУ[ߘeT 5!bm?mLIұ3ZADF^;|'EҚ%Z|PCtшq=$bhC ˊQ=LuQ )HNrք.x0` Ҕc!뚥v>ASUE}Jy"Ǹ"Ih ck:JXSf}Ne38jE!9KN[iXJ+`!r@u9&lc @0T6:7>E Nm66I zYl%C b& -(&zA)ZI}S-FFX+U-0chZيVb{lQa#mC* ɕIZ2]d\sxˣ'O1Ō'!DH 52lOxJ~eW Q3KWry=15>$OYu첵5UǪh۞&}BB1Md4*ٚ]51i&:j%!%UU3?_e}I;%|ْv oˍQ %M[~$7uh<#Xc>C" W|C/ Iܾ%j_yIopS?>x]&:<9}Pp~@HO~EBc\z`dcQˇܹ.[:e9|t{zo.q8[4<|zJ뤨)b{t`֥kJo)xes~|Cʌ ԫ(r,*;'Fa3{2-%`yk$^)lxQUYijnchO6h|MJUʆ6p- p!$wm,aPJgβZ FiLQCh|RLׯaMR3ykBwaޅE%'yJP)buCknGDtQ%Z\ 7ZY .|u,E# c VR3bN^eQPD[ yP12OU%q* GN*jǣ4BJkʪz";q1HU6dhF ڍ[6)1`\B ׯ%L/(ߥ).1歏x1s =+&d>WZ:2RZYJ+&-J1eyKƘޓa!-K] Xn>g}P!BZUVb{J[0> *BqU |Hr5THHL20nHIYeXIR w\rlg c+~:av;JRpk֬"zbbgkO7o^'o1֝Zd9_vUqi蚖hJ=ђ,ہed lOh{Ϫ!݀Nߗ[1/)Y+LQQ#=a\t CV%˕"mHH4.wJdRr<ѣѤ"&'LZ5d}^o -NO$ѲYA9:kS9o;.h$i CJļv&+,-~?=dη͊kw؋l w\fwq]ju*v8_,h;&[3槏m$os]8>A;/h¨p^ I穅.˯6PJhS0ehNrflwrq)4d:$If5NZF,1ʄMNUDìn7HYɪLlGm 1HS#q75aCy!玬E͝)Txkʲ(+X%oF O=/|u7Z:ω :$!<zʗ]7{=^ KӭsHI Q&`;'EWxM)ޓr>sds!\ V\++S,ʶ^%^k{liFid<yMSjqXx)ΉF>Ϙ [PeMwJB ~}3Fc P~peQhUd6қ IŨ*H ZZ I[1{N O,*>o=0 !  B5>ٮ$d7$cx9dUլVJ[z^?_&4 RXd2#3L[{soP$*3nO+)}HBB&Lcl~g;:4,gA QA!̅xsTYg,gufab4ɻ0'֣z!KmOaB @av. dc93F->3o[c^(^>0jR)mHni:= ] &eN_Hc"QeM׽\'b e&"3ǀNw}JbSm8h2m%$5cN#?|؈n>bonC&ٳ`HĆvex Ϝ.~>CQe-)A9mxꍁ3T"9G RNp Y`?ln1L Ô\q2)iV3׫7w`;0!g4y/1LSA2 >`/  -H!b5cu1P"37e U<8 P ^&o?b {(cY?Ĝqqq3ie ðE9ll>G6׸%s)i&p-G8aZ/qz:Cpx*؇=6vbʄ_a hoc\_`?8b|<%\!wxv p~~wR,w/##)OBx܍؏nwݬqqWOv9G '×lgXZ,0E|`G 11N/c-4 PTU F 6+&6` ct҂ $H+I8DO[a|)+bv@iQ 1(@d_ī{""PImjZqpndIPu1/oX?h /y43xfnRJXoν5R ӲO֧Q&& p/S)h4clԉUZ8r1ixuMŸ,"+iĭbS(b["wH^@qb4ǺvFC8A3 C|LFReD&ě2f"9)Ƣ4m]i7\z#!CSa!?u jެ ͺjR$i׹niVMc*I %e!&|^ı-2a [ xB2g8Fp&5C ]ʋ OV㩿bDĩ͜/7q83]CuW$nq,jCdxNY)eO"1F#儒 hf;6( Zk;nT 8 GIK qcQHLAl`@" +RAUV(a昀ydh)VMX ӱd(bTh ~Q捂Ja۳&9ύf&"3(LZoQU:G A#YHYEJgӚqʝb/@NY(f,]- etޡ(H%X&){ho` ߳GR(U zgX,0ňv`3sPJ7D"4e`{ϟ;!qxM*C0k a/H"Vx L! J -̓<"ed.H≐K跛Q8l5`xi;V'pwy ~av^O2}X.{<ڄh`?J";]f+lG`7!Zڍ Z>{) C ~+ X߼yVػC?;G~,pGuXxF'h1&60l{i8U_`Ң,a"¸vG:^opaP0[x: l T7,u&>-1 _ݷo f3?E{ Ξaqz `¿}9@-ΖW)i aG//΁ H쯯RP1h,UCNYxzSPC78P*aW]o WU)lH& A3pvˬ9V1#Ps+?LEC nj̨Lټ;=:жֲ! 0C#}I$3u^8am6Pb\%~Lf ig5'T H⺖ƦHjVi/24v)F~!8פrZp< R<冄r2,!(1L]ߡ;ekaZLMnP{%jfK_ZTŁkz,ɺ40`tN00Aҟ3 Jj/* 1ZaĜiwfnFy(`btd8"|^9b̡FLp+ZsM|/D6reOY gJa/B MgHjI DDZePV@dctg||4iMlٝs,n.4Bkr0 \ZA 1 0C^)"L3F`5#a#]9aB[L[E?(ȉ,j8o5A[)g(iNi) )C[ՌM 1@sf\BƋy?ˑ4XȶERCčpQB[J~+y7pBAu$,BJcؔ-k9rZ@$1 [8c轐a@Rl\-b*pXLHpyNYk~Mn{:1@udIleɎ|F1gδЊWUZa723%1LS@;f)\v(z:HAE r"P5Y h894x8&M21Nen$2]_|GfshEb~9B,ESCKI1 E¦$1[ dQ7d8gN 5()9sJa{ma6z˹pQJ:yƀ9ܽ{,CtIeR&&<MYE>1?/^)6k; נO{l cۍPp0Gi)йc@2v/N,~y_ovx~8?3ӓK="RA7_` Þ5P(CIa8B㔐R"4D ݈a"0#J4%<ܤV3VY2Ey83;g*[`tq,:Z4TjLR"5P-P 4b"u ;whnttD[q)_NI6NZZ /换[^kd% ]T^4"jcCkg`ȁ%ph ~\%(H֒$B!&?75Fs ̧ b9Ff18=cLZD@Q$^a{B,\^j 5#ϠŦJY縸=FadjAM<_/=hjFCkZ2$~pM)ZsNtܕ3ȟu[0[i|qJCeSDҤU51@K: {r4w@)@Cf7 0O(Jx)j94∯ n? <{@CHGO(bbx!gqGЄ_ŧ'՗q'L~G{  S.xM%޽P; 9w8;_qCps7v in>rFxd-3%|ch{̄YbA0|[X0 #Baس&lˋm S"E 4JE ϟوN_<˧P%JiN͇}أu`&R+# Ƿk salgÏ8#>"N{SWȊW;W? .@"!,2XGU 0QyER,<0)EV" b1~'SBOEOG\}#G*ơ?2B5&Lg%fW ,mj-K\<Į_uRIJ&IPtTibTbfs5s$GSBM 6ZXPyYJRԡ$A\=/Uc  SdAΑb@k 5LWp1|k{E IDATiyoňH缼Ը۾i:LCK@<2)Jp777L" ȦTDO$*l܄H~jLia9UoK.GrưjR2NWK̺ctc"$xJ>0%i5!9H:>"UVԲ%T䊴X}U[%C&'SJÒ/P z*װ͢wuRӎ FÊ Lm cj>yu)#Ćf| Y /(&O9EnʑV":v8d: $sC-:65PB1˳#sYTz)Δ,Q 7%9:2-ľMێ:HR`CXFbdiH)rs'ÄSXN펩SBf30-^Ҹ 3g%~AK시 *NNȓe>wʩ5-]>H'5њ-{6A)n4Sft~M'doCẳl L*1ٌ\CNkgm8cKb*x")ug#|}>y&!9٨͵F!brf@Q 8n<Ssz RI&[)[T(3xS:Ϲa]L` }"] 6h@Yu01L0Fc? {0o6G8o$={' P-u1Ai"f77kKl)"J^چ%SE5s!U'OϞ_G}>ObotpJ~M6nV2!1m E0b a.Cۼ/VY-r USX0DvbS:&V[6;!&.i8=~ثOWzsP_s0z |O_<|0뀿{l7X.z3%^=%|pZq&{ S |`B?b_/i<{7n1Z^NLSeq1@ZmV%Y6%V|d.DEQ!y!jGZ$Whա;3 wBEee0Atr |wCi>PiBiD0ҶV"2#{DR& ^PaҍHdɋ6,c2ZHEtx*AVh&"AsUw@'ڈ7AKѩɪw!}h`ga*6XfJyj!A73ȅ KxXRH6 iWmPdj,MFpgRqj}'R A8`(D`kvD&\PT'GyEFk3ďZ|H=ğѤ9w{3)&SU8hn(9{.F2BpT ꆁZ [TX^䜓MRʄ:(ۛ pjt4MD|qFS$H8b$Uk1ZTAK2 gI1"o 7x&C8@1*v7EL)Yf>SB  *,, rs3TgOscibieUsN:m( UJFQs `:eaW_MlPdSo4}f ;\-rdx(8lҚ%S)7Y$Z2R"m bX%ojx3>kDE :y˯yd52aDkQ rh) \V 1fd!2I|7ٌ}YkrAP?}eFL#װZOdM`mqvvq v5jՓSfCpzqr3V8m1?>{zWKk-8==fo߾Cn>Gq;P)aBʄżg,e:)=}0yj=p&_ϖ8q9,Lհblr !M8=9ּReιvg_|f=?;~;pӰ`+9v5lnLp33PbLk|87?ӛk 1b{Dg ~kh)!Lq##G|K\_݇k+ϾD ;\=2)޽/>*8>\d7G}k"XAͿb"g&:g5.N\eJ+5E 0pZ7 OH MQf35= 10o:1pN2OQMEDc1"Nͫ9b6d kIZy*>L":kQRCCb0,ق}) kR"VQ Nυ=,SRWM",#8~>E&9%@Ng6BhJ04Z (!6QRڴ\IӕiE&gcMkV닣(@5jIR`j uO"PFF}l^'dRX<RZIsiRbi ,w, (:if"$e5NV+!",fsxlja70Y :u泙+vjcMd&)eL z+E0=hByg IXPfcfa03J0M5u(U9Sbh& tq/H;Lӄ3)4aXbFI@隘"#ɖHT TTpVA3*Ws Wj'P8lj~_%ZCìcM3w xן>C*BޠGLlaEP{|~(`Ho ߼^`_w=)\Oΰ"AVa3=9Eg-}/i3 :dirX:hD~'3k|3=:t5 Z)?`>1𝕋Omw1g' Dep8_ .̈́9g/G+{13ܬ7\ ?{w7{ X.Om3 :ܭO_^~41SLl=~%sXJA4#'ggs F E:yg`%j媮|#儮#qAf=b◜VVpi -)LTX*E1 m@Uu:Y4!L@.ljuBVM4"%axr>P5jӕ?GL_¢i M9gV3LhuX#q-J̼(.Y Mes.Q4;kb/z6׼GI|&N3?Y|6&,x)o >ZVI`\ :|ccUќ d)}ǛqxZČrV t%]ݬj.N=AYM3 ERX;t{Dž ̺9gLwɣVS+-84VΉ/'i%B~^٪8x)ꪁ77.QC^jbJIS;!IAzdvW{NqeArjtrEіe?{.BaC y깧Pe,r*lƴ)icģe}&n! $s)&l,FI¸[R=gDn<@Q6T)9lJmm5 +bYcYs@L*"!4@d β-c]8_&K:aS(Pмsu+X {:j3ۿ?4%SrGfE62!lP<Sq81tEO+eHi|68E1ް7`tCw9dXqXK={J(Dږ+4 I}jϯ̅ [!Nws4a ¬%31,+ {c7eҹNu%ZaD8qhoPcA dTJ$H2g q4 rXSEgv"jy`<K媎|4U5)g?T>s\qbؿ#wUTjZWP[CbFA'Bv6u>T9(Z:ygްX1!ɿE{1VjcLb& )(0昋[cɜ4\o S9y #h`b-DЩ WHY's qᬅN"8jĿbK-yJBהLEIӠ,۲Ԇ+SbTxŴ-jQ=N6,[BDȉQޅxXLd5!Fe;OW_*) ѨA Rd7mdK5#)& G0j~ai*ӆ:hlmclM`5; k .n`v1(CDP"TKUvyU qy'%h$RwU#OIl!! c#d ^΄:dYET.e㰷B$ YԲ؏anLa9\Lk$F;P>WXEզɵ|\ 974^ADYBqQuc3u q7UYj߳9L2ȨM vہF%~LTDmQC"피C8S\Kg{ܙCV Q5ZBN)F9`ǟ| ''gi2QXJm7΁R99| >sܯ?@{ӳS6x{k&t^ق'sg`0=`"v ӧ~ (i ׷X,W(8;_(EcOpcZ"_I_ ˅F,O<6]D4"ǿ6=|ȔW˫A#$1s0rV)@PWj2S< n\˘t SV hحYBM(70YJ&UT Yy8K&IHR%SFeִ| سpR g1\7 궣TbmE%ȥ@IGȥ\1E.F]SLabl%A V,aIj OU]yHڈ o|E6&6MOEL:HF&|dOE5G#gmZ(sx_&Z~H{967}4Ian"jE97b=f&"9 C0ϫǬ!$U w'KDl&H!t]"v}' ΂rNMBhyLn:u9ڊ$8~`DsTʩy8inpnw EPɠ4rI3&̈́51b1-D?1C[YUbѣ9([C)1Xlw!]a&`Y]j/LJ=qwð v3@gZSNpw;t`{y^*'xA`V0%Іh IDAT9"=B&5*IJu.tR{ deFD!wHF/ҊM^)/Rֵ'H"GЊ͉YN8DJbjQGFr ! Ԍn:6C.iY(_HOL6p+"%6I>A WwdJ]k@LΚ6i" !Y`w=P8A{;F `4˹kq6q{u)4Ǭw -QX@P F6={jq!Ř2ZWMkvQ@Ą |dӵqtmR)#M0k ߁"b1ohgx%7u"0{AE_+ <&_:KPnCCns4I`ݠuQőRݴ5p|S mW*ƅveStՌWKPDbG ƒWɋ2I ijxdԯy4n&Um+njR)iLv͏4 }mT]{i,rA╤u}mpqn4J&."%8c"KRSkmL9޻1̙7x$1c%t&voa;%W- U%AvwG,#F8P$uxؚط CR* }zSBt,G|E?kx/DY|iBG-}m !E - Sb5t&kNt윇3s7"$?lQh+ץX"i;/g]%_#N6V&Ҙ,7!TD/l8NͲK|Diq Y cJM()`7(Jaio޽}NO'8nnZxx\cqˋslS-0Ma!z0FȘ>yLPW@9a?3f #gX-:,' ]w+0&<<0l1Tؓ2pފ'E#߳$q1G}% 1A;`;2،~?lX1wOlb>ACq]w즈n;|% Ͱ7wxwf'ϟ./@S;!A` \X*9oeaJPL@*pg0_xzu8Y=nÛ<} ˓~xwdž=62. XCL@)sBXqzrc 50%A+O_\jjd-w{dv6n ŒȤɥpCeq Cy[a.zg*1"98P7Ym؏ ˣfiZ9M 9#DRMH#p^97?&]3b0H?6jG4k36D Tmr@HǶ"r0Y^h/pڴ1Eh$ҨD TRCZgUɵ[cR].4]CL\i`Jb)uR*n2Bʌ( MʅBly' ^SוP4+ZCd3hږC4%K4>aB bs/5OȜN %}۳R:1R{<>n9ܛ)1O17>7E(XT % y apI6W!p,Kɭi=K)4o7ju8nnRhӧ?6Rd;i|j"g:zj[#,l3W(tƴ[c抩t=G[1Z9F'^ 6`\=C`l(f(IT2BJo+U.Sh0qrքu6E.<⬕rh`j[֍D3ɬmrX0 Y&3b& )v2OsF |[`wFko8}5'F˦V0EXwrIci3XzWO.1xX>JQrDMD2#L mjҲ4 =3ƃz՜>#Ͱ?-'Wd6{d.uqQ) !˻Aֳ2 SX`~v|ղsl:|O{(eۍ8=f>q8(a?lkSddUy0b?F !c;g]l~ bIf?|@~b't^{W<"s(wôqWOOWpJ9lOϰ/߽_݀:L9t@Q?%~O"v'| ]^>9jfXzA;<̀/_=bx'A8[.)20 xvԡS޽_c; =8p`F]F埿7Fo#7 1SlB1Kz|龚ڵC)P:rc3JFӒR[c2 .Y %Urdj"ű@Qȉ$* LCY0Ru!4?G!jHbW25E:EL̏ !J^ˇ>6~6H,x$j~[V@ʟEBjVMa ᗃQRnj_6ǣSږ|.E.PDf[1u\ %,!@ ˽NY'tiÌaK6D_c@6D|D/)J@\lC 8ИΤ}GaQIZNhƹR@,ZW5Z-e.-#?OX@U( 샄"VlN[J j/5"Fiڄě$D4fp0YV^м)8. Pt}/ W0}=.~V,H&LLpWn.io"B*Yg>'f#(G m\2752NVv怸#1h~տ?8 b1'ΚvvD^^tqG2L\CY X$YrKXJds>!H3gD/MA甄 &5gpAm9#c8=.r$N0_]#Gr]Ϭwl3#34,[ +ow/j!@eKCjH^YFdgL ++"3|)|E,to*RcOrgaA9 ysՄPD *a@'bI"#suX8¡l|NUJ _*c0Mq<qwG4ǧ M8'2m>&OK€~RSL*FKd? {@J#goOP6$@Xw.V++4өBw|@r uQ#W |X.ϰݶkfj9GJb^>i)\,ph_^y{lvN$&UznU`¡m и}lZ2gg+7_j0 rDdbS TfC@ b8b#޼uo)֫ A5RwWgPR c+]ٗX.'6X,3p>|ıh{mcP!b[{bTlϞ}#C[ flJB}qW_J5;X{ 3c״Z!N𸹹7== (P7l7Klb Hdm>')cx!P8 /'&$ٌVReV,9]f1ucKA]NL*􌴵ڞ٤H1#y}β(r,Dz'^I(̤d%ye"b"/r'$bLRlx=htNFL2*~"X"&$k3v!w H8"i,\-5$=V%YeAĐi_;0EF`+L&毞O܊HJ -cG?w`!88N׊`ʐb(02>IT ;#O6 t^w#cЇ)SCpCS~(Q}Ɓ,W}nޏI.++m+"Ti&c7I9DjŌٍrm@t9ܰFSqN&wó5k:Xm-4Iwz?|Zf!pPJ/%ub"{N& 0B"}!fͱ`rgGañsǃw4Jp(񠑮U%D*tRTCKMI@ε}D;-҆#*PZ"<{<sxKar5yY}/'4#XxR*i,r"wU:\ EVN@o<扜/)@)͐!Vc`~8>TS&i]^3%B)qΙ.BA@F - YHIlVRBTJ دAHYD`RJ>#BXs!a  @45fr@BKB1_%ˇdȧpՁ!&KI^67bya ib8&\B@PNC9+&J* >uᄀ}'EТmx/4J2ടGOQ\(Q>66$˞ yF~FX@V J'+9 L @7Ңxv“ !zmvhZ`# gg Tv(o>"@$>@) JCBcb5vdb7M86v==7- tmcBv|j:pDuOVaݠ, ^?yDl577 n8>npзƒCCG}6ps'g3`a>Y/|dԸg/(NIw[<;(iA]yJq.Rig֣>:n5sa{!-?#|` &96f m:-GE1P#`{b=P-n~d9/.aLj@=m'COҬ߿R롪 ࣄ2BMm+jB+ f/uV5PBòt튽J?X2(.'* H2't@[qXJÛ\vA4ԧ<1hfs[F L )(L&hSɣ~4I+)1}fs6eS`%sb/B#"E 1L')9{ĽLʾ$ˬ8LEH58U@J )$ɒsHB)1 ONR;D<+>,-Ia*lD'yRӴ64!pƑ,I*"=".r&4=H}ʇH{b\wHt5:q W  qjRĢH|d8"(_9T9T?3u`H9 P°^1|4ƐQuc FSȒ^iSj%*%9K"&>ge` É x@ mU|=פ~I2&N(2U@S\OJQ bQ6@AkGhv2ُ|cmޓ/LLi]2ObB !9XkrCl%G0Cb~@Qhaf ]z=Ox2{I缤sfyi'be-7<749Sk CHŇGDd^#ϧu䆜$:FRVyVq(ellg]!zL%s +j,K{56Gܕ˯b<3:7/h=)}@ - ' j3l6 ",Gn!{]ߡi:~@M'gkH9}Q{7w58;=sw!J Σ]k<../ps~ Sdgp}@pCc{;xl5G];:~ @N&#&١4TB~5޼R 4uW_|LJ;a>_`>0`k! u]͗_Zۻ |L@R>EPS< )ԁ]7;l-z Fc[oAUdpw7y~dzgXϧ8?_7pnvWWĢs$rgIJf FnɆ(P!zR4~+- 'yM0Rg^.LS8<؜>qBfbޒ  !Z+;瓮 5_HRADq'}mW BpAvT)%~*k22 o:M@5Oe8F5>qE0#H=A'OjQSa5} ~0 .~ {GH I7$2ٜ#s*>uG@?: c04-!}>|>֎EgA*S2u.">ʷ!MF@Ge&3q`'{&SLC1E(hɑO1=OyLv|_P+bi+we4V' CT_5Hθ$ -|yJ乤aA3t.ᨕPUU > y.~傅zGb I=[! HY50 ?~/hIENDB`tickr_0.6.4.orig/configure0000775000175000017500000056302612147427510015172 0ustar manutmmanutm#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68 for tickr 0.6.4. # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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 more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= 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 IFS=$as_save_IFS ;; 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 $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: manutm007@gmail.com about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; 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 if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # 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 as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_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 sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # 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'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='tickr' PACKAGE_TARNAME='tickr' PACKAGE_VERSION='0.6.4' PACKAGE_STRING='tickr 0.6.4' PACKAGE_BUGREPORT='manutm007@gmail.com' PACKAGE_URL='' ac_unique_file="config.h.in" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS XML2_LIBS XML2_CFLAGS GTK2_LIBS GTK2_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG LIBOBJS EGREP GREP CPP XMKMF RANLIB am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_dependency_tracking with_x ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS XMKMF CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GTK2_CFLAGS GTK2_LIBS XML2_CFLAGS XML2_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # 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. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= 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 case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -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) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$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 ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$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 ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) 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 ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$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_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=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 ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_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'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" 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 $as_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 ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # 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 the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | 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 test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # 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 tickr 0.6.4 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 \`..'] 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] --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] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/tickr] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _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 X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of tickr 0.6.4:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-x use the X Window System 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 LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory XMKMF Path to xmkmf, Makefile generator for X Window System CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GTK2_CFLAGS C compiler flags for GTK2, overriding pkg-config GTK2_LIBS linker flags for GTK2, overriding pkg-config XML2_CFLAGS C compiler flags for XML2, overriding pkg-config XML2_LIBS linker flags for XML2, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested 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 else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF tickr configure 0.6.4 generated by GNU Autoconf 2.68 Copyright (C) 2010 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 fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ---------------------------------- ## ## Report this to manutm007@gmail.com ## ## ---------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* 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_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by tickr $as_me 0.6.4, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { 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` /usr/bin/hostinfo = `(/usr/bin/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=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&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_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append 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 as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset 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: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > 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 cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } 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. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_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 $ac_precious_vars; 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,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_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 # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_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. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## 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 am__api_version='1.11' 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 as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # 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. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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 rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir 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. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$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' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # 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" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $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". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "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 $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='tickr' VERSION='0.6.4' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' ac_config_headers="$ac_config_headers config.h" # Checks for programs. 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM 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. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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 | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 -std 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 -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 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 for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : 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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test "x$CC" != xcc; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 $as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Checks for libraries. # Checks for header files. 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i 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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #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)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # 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=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in arpa/inet.h fcntl.h netdb.h stdlib.h string.h sys/socket.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define ssize_t int _ACEOF fi # Checks for library functions. for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_malloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { return ! malloc (0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then : $as_echo "#define HAVE_MALLOC 1" >>confdefs.h else $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac $as_echo "#define malloc rpl_malloc" >>confdefs.h fi for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 $as_echo_n "checking for GNU libc compatible realloc... " >&6; } if ${ac_cv_func_realloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_realloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *realloc (); #endif int main () { return ! realloc (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_realloc_0_nonnull=yes else ac_cv_func_realloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 $as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } if test $ac_cv_func_realloc_0_nonnull = yes; then : $as_echo "#define HAVE_REALLOC 1" >>confdefs.h else $as_echo "#define HAVE_REALLOC 0" >>confdefs.h case " $LIBOBJS " in *" realloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS realloc.$ac_objext" ;; esac $as_echo "#define realloc rpl_realloc" >>confdefs.h fi for ac_func in memset select socket strerror strncasecmp strtoul do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK2" >&5 $as_echo_n "checking for GTK2... " >&6; } if test -n "$GTK2_CFLAGS"; then pkg_cv_GTK2_CFLAGS="$GTK2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK2_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK2_LIBS"; then pkg_cv_GTK2_LIBS="$GTK2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK2_LIBS=`$PKG_CONFIG --libs "gtk+-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0" 2>&1` else GTK2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk+-2.0) were not met: $GTK2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK2_CFLAGS and GTK2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK2_CFLAGS and GTK2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTK2_CFLAGS=$pkg_cv_GTK2_CFLAGS GTK2_LIBS=$pkg_cv_GTK2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML2" >&5 $as_echo_n "checking for XML2... " >&6; } if test -n "$XML2_CFLAGS"; then pkg_cv_XML2_CFLAGS="$XML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_XML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$XML2_LIBS"; then pkg_cv_XML2_LIBS="$XML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_XML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then XML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0" 2>&1` else XML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$XML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0) were not met: $XML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables XML2_CFLAGS and XML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables XML2_CFLAGS and XML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else XML2_CFLAGS=$pkg_cv_XML2_CFLAGS XML2_LIBS=$pkg_cv_XML2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi ac_config_files="$ac_config_files Makefile src/Makefile src/tickr/Makefile src/libetm-0.4.4/Makefile" 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, we kill variables containing newlines. # 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. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}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 "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} 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}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $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} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= 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 IFS=$as_save_IFS ;; 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 $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; 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 if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # 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 ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # 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'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by tickr $as_me 0.6.4, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent 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_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ tickr config.status 0.6.4 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. 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=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; 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 || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/tickr/Makefile") CONFIG_FILES="$CONFIG_FILES src/tickr/Makefile" ;; "src/libetm-0.4.4/Makefile") CONFIG_FILES="$CONFIG_FILES src/libetm-0.4.4/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; 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 against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #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. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # 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. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;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&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # 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 || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi tickr_0.6.4.orig/install-sh0000755000175000017500000003253712147427510015263 0ustar manutmmanutm#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: tickr_0.6.4.orig/Makefile.am0000755000175000017500000000001612147427510015301 0ustar manutmmanutmSUBDIRS = src tickr_0.6.4.orig/win32_install_stuff/0000755000175000017500000000000012147427510017144 5ustar manutmmanutmtickr_0.6.4.orig/win32_install_stuff/Makefile-libetm-win320000751000175000017500000000105212147427510023013 0ustar manutmmanutm# Makefile for libetm-0.4.4 - win32 version src = str_mem.c error.c misc.c win32_specific.c obj = $(src:.c=.o) headers = libetm.h $(src:.c=.h) CC = gcc CFLAGS = -O2 -Wall -Wextra -Wunused-parameter -Wshadow -Wpointer-arith\ -ffast-math -pedantic -DWIN32_V all: libetm.a $(obj): $(src) $(headers) Makefile $(CC) $(CFLAGS) -c $(src) libetm.a: $(obj) ar -r libetm.a $(obj) .PHONY: install install: mkdir -p /usr/local/include/libetm cp $(headers) /usr/local/include/libetm/ cp libetm.a /usr/local/lib/ .PHONY: clean clean: rm $(obj) libetm.a tickr_0.6.4.orig/win32_install_stuff/build-win32-installer0000640000175000017500000000176112147427510023122 0ustar manutmmanutm#! /bin/bash # This script copy stuff and build TICKR win32 installer (by calling # installer.iss) BIN_DIR="tickr-win32-bin" IMAGES_DIR="../../images" WIN32_INSTALL_STUFF_DIR="../../win32_install_stuff" DLLS_DIR=$WIN32_INSTALL_STUFF_DIR"/dlls" TXT_FILES_DIR="../.." GTK_RUNTIME_DIR="../../gtk2-win32-full-runtime" cp $IMAGES_DIR/tickr-icon.ico ./ /usr/local/reshack/reshacker.exe -add tickr.exe, tickr.exe, tickr-icon.ico, ICONGROUP, TICKRICON, rm tickr-icon.ico mkdir -p $BIN_DIR cp -r $GTK_RUNTIME_DIR/* $BIN_DIR/ cp -r $GTK_RUNTIME_DIR/*.* $BIN_DIR/ cp tickr.exe $BIN_DIR/ cp $IMAGES_DIR/tickr-*.png $BIN_DIR/ cp $DLLS_DIR/*.dll $BIN_DIR/ cp $DLLS_DIR/*.dll.a $BIN_DIR/ cp $WIN32_INSTALL_STUFF_DIR/LICENSE $BIN_DIR/ cp $TXT_FILES_DIR/COPYING $BIN_DIR/ cp $TXT_FILES_DIR/README $BIN_DIR/ cp $TXT_FILES_DIR/tickr-url-list $BIN_DIR/ mkdir -p c:/documents\ and\ settings/manutm/bureau/binaries c:/program\ files/inno\ setup\ 5/iscc.exe $TXT_FILES_DIR/installer.iss rm -r $BIN_DIR tickr_0.6.4.orig/win32_install_stuff/required_dlls0000644000175000017500000000003712147427510021725 0ustar manutmmanutmlibxml2-2.dll.a version 2.7.8 tickr_0.6.4.orig/win32_install_stuff/installer.iss0000640000175000017500000000664712147427510021672 0ustar manutmmanutm; === This inno_setup script 'compiles' TICKR win32 installer === [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) ; previous app id (for News): AppId={{4C30F291-1B7B-4E53-AB2E-8F515B8F99E5} AppId={{A3E7BF61-5796-451F-8DC4-753E4BA6B048} AppName=Tickr AppVersion=0.6.4 ;AppVerName=Tickr 0.6.4 AppPublisher=ETMSoftware AppPublisherURL=http://www.newsrssticker.com AppSupportURL=http://www.newsrssticker.com AppUpdatesURL=http://www.newsrssticker.com DefaultDirName={pf}\Tickr DisableDirPage=no DefaultGroupName=Tickr DisableProgramGroupPage=no LicenseFile=C:\MinGW\msys\1.0\home\manutm\src\tickr-0.6.4\win32_install_stuff\LICENSE OutputDir=C:\Documents and Settings\manutm\Bureau\binaries OutputBaseFilename=Tickr-0.6.4-Setup SetupIconFile=C:\MinGW\msys\1.0\home\manutm\src\tickr-0.6.4\images\tickr-icon.ico Compression=lzma SolidCompression=yes [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" Name: "basque"; MessagesFile: "compiler:Languages\Basque.isl" Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl" Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl" Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl" Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl" Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl" Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl" Name: "french"; MessagesFile: "compiler:Languages\French.isl" Name: "german"; MessagesFile: "compiler:Languages\German.isl" Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl" Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl" Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl" Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl" Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl" Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl" Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" Name: "slovak"; MessagesFile: "compiler:Languages\Slovak.isl" Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl" Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1 [Files] Source: "C:\MinGW\msys\1.0\home\manutm\src\tickr-0.6.4\src\tickr\tickr-win32-bin\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}\Tickr"; Filename: "{app}\tickr.exe" Name: "{group}\{cm:ProgramOnTheWeb,Tickr}"; Filename: "http://www.newsrssticker.com" Name: "{group}\{cm:UninstallProgram,Tickr}"; Filename: "{uninstallexe}" Name: "{commondesktop}\Tickr"; Filename: "{app}\tickr.exe"; Tasks: desktopicon Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Tickr"; Filename: "{app}\tickr.exe"; Tasks: quicklaunchicon [Run] Filename: "{app}\tickr.exe"; Description: "{cm:LaunchProgram,Tickr}"; Flags: nowait postinstall skipifsilent tickr_0.6.4.orig/win32_install_stuff/Makefile-tickr-win320000751000175000017500000000170512147427510022660 0ustar manutmmanutm# Makefile for TICKR - GTK-based Feed Reader - win32 version src = tickr_main.c tickr_resource.c tickr_render.c tickr_params.c\ tickr_clock.c tickr_feedparser.c tickr_list.c tickr_feedpicker.c\ tickr_prefwin.c tickr_otherwins.c tickr_misc.c tickr_helptext.c\ tickr_opml.c tickr_http.c tickr_socket.c tickr_connectwin.c\ tickr_quickfeedpicker.c tickr_quicksetup.c tickr_check4updates.c obj = $(src:.c=.o) CC = gcc CFLAGS = -O2 -Wall -Wextra -Wunused-parameter -Wshadow -Wpointer-arith\ -ffast-math -pedantic `pkg-config --cflags gtk+-2.0`\ -I/usr/local/include/libxml2 -DWIN32_V LIBS = --mms-bitfields -mwindows -lwinmm -lrpcrt4 -liphlpapi -lws2_32\ ../libetm-0.4.4/libetm.a `pkg-config --libs gtk+-2.0`\ -static ../../win32_install_stuff/dlls/libxml2.dll.a all: tickr $(obj): $(src) tickr.h Makefile $(CC) $(CFLAGS) -c $(src) tickr: $(obj) $(CC) -o tickr $(obj) $(LIBS) .PHONY: clean clean: rm -f $(obj) tickr.exe tickr_0.6.4.orig/win32_install_stuff/README_gui_font0000640000175000017500000000023312147427510021710 0ustar manutmmanutmTo change Tickr user interface font on Window (and also all GTK apps that you may use), edit and copy .gtkrc-2.0 in 'C:\Documents and Settings\USER_NAME tickr_0.6.4.orig/win32_install_stuff/.gtkrc-2.00000751000175000017500000000012212147427510020546 0ustar manutmmanutmstyle "win32-font" { font_name = "papyrus 10" } class "*" style "win32-font" tickr_0.6.4.orig/win32_install_stuff/LICENSE0000640000175000017500000000127112147427510020146 0ustar manutmmanutm====== TICKR LICENSE ====== Tickr version 0.6.4 - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 Tickr 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 3 of the License, or (at your option) any later version. Tickr is distributed in the hope that 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, see . tickr_0.6.4.orig/aclocal.m40000664000175000017500000012156312147427510015117 0ustar manutmmanutm# generated automatically by aclocal 1.11.3 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # 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. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, [m4_warning([this file was generated for autoconf 2.68. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # 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. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.3], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.3])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # 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. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_PROG_CC_C_O # -------------- # Like AC_PROG_CC_C_O, but changed for automake. AC_DEFUN([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC_C_O])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi dnl Make sure AC_PROG_CC is never called again, or it will override our dnl setting of CC. m4_define([AC_PROG_CC], [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # 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" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $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]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR tickr_0.6.4.orig/compile0000755000175000017500000000727112147427510014632 0ustar manutmmanutm#! /bin/sh # Wrapper for compilers which do not understand `-c -o'. scriptversion=2009-10-06.20; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software # Foundation, Inc. # Written by Tom Tromey . # # 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, see . # 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. # This file is maintained in Automake, please report # bugs to or send patches to # . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand `-c -o'. Remove `-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file `INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; esac ofile= cfile= eat= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as `compile cc -o foo foo.c'. # So we strip `-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no `-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # `.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use `[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: tickr_0.6.4.orig/Makefile.in0000664000175000017500000005412212147427510015320 0ustar manutmmanutm# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ TODO compile depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XML2_CFLAGS = @XML2_CFLAGS@ XML2_LIBS = @XML2_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_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 case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: tickr_0.6.4.orig/tickr.10000644000175000017500000001360612147427510014451 0ustar manutmmanutm.TH TICKR 1 "May 23, 2013" .SH NAME .B Tickr - GTK-based highly graphically-customizable Feed Ticker. .SH SYNOPSIS .B tickr [\-help/\-version/\-license/\-instance\-id=n/\-no\-ui/\-dumpfontlist] .br [options (\-name[=value])...] [resource (file name or URL)] .SH DESCRIPTION .B Tickr is a GTK-based RSS/Atom Reader that displays feeds as a smooth scrolling line on your Desktop, as known from TV stations. Open feed links in your favourite Browser. Graphics are highly customizable. .SH OPTIONS .TP .B help Get help page .TP .B version Print out version number .TP .B license Print out license .TP .B instance\-id=n n = 1 to 99 - Use this when launching several instances simultaneously, each instance using its own config and dump files (to be effective, instance\-id must be the 1st argument) .TP .B no\-ui Disable opening of UI elements which can modify settings and/or URL list/selection .TP .B dumpfontlist Send list of available fonts to stdout .TP .B delay=n Delay in milliseconds .TP .B shiftsize=n Shift size in pixels .TP .B fgcolor=#rrggbbaa Foreground 32-bit hexa color .TP .B bgcolor=#rrggbbaa Background 32-bit hexa color .TP .B setgradientbg=[y/n] Set gradient background .TP .B bgcolor2=#rrggbbaa Background 32-bit hexa color2 .TP .B fontname='fontname' Font name .TP .B fontsize=n Font size (can't be > 200) .TP .B disablescreenlimits=[y/n] Allow win_y and win_w to be greater than screen dimensions .TP .B win_x=n Window position - x .TP .B win_y=n Window position - y .TP .B win_w=n Window width .TP .B win_h=n Window height (compute font size if > 0) .TP .B windec=[y/n] Window decoration .TP .B alwaysontop=[y/n] Window always-on-top .TP .B wintransparency=n Actually window opacity from 1 to 10 (0 = none -> 10 = full) .TP .B iconintaskbar=[y/n] Icon in taskbar .TP .B winsticky=[y/n] Visible on all user desktops .TP .B shadow=[y/n] Apply shadow to text .TP .B shadowoffset_x=n Shadow x offset in pixels .TP .B shadowoffset_y=n Shadow y offset in pixels .TP .B shadowfx=n Shadow effect (0 = none -> 10 = full) .TP .B linedelimiter='str' String to be appended at end of line .TP .B cutlinedelimiter='str' String to be appended after a cut line .TP .B specialchars=[y/n] Enable or disable special characters. This is only useful when resource is a file, not an URL .TP .B newpgchar=c \'New page' special character .TP .B tabchar=c \'Tab' (8 spaces) special character .TP .B rssrefresh=n Refresh rate in minutes (if no TTL inside feed / always applies for files) .TP .B feedtitle=[y/n] Show or hide feed title .TP .B feedtitledelimiter='str' String to be appended after feed title .TP .B itemtitle=[y/n] Show or hide item title .TP .B itemtitledelimiter='str' String to be appended after item title .TP .B itemdescription=[y/n] Show or hide item description .TP .B itemdescriptiondelimiter='str' String to be appended after item description .TP .B nitemsperfeed=n Read N items max per feed .TP .B rmtags=[y/n] Strip html tags .TP .B uppercasetext=[y/n] Set all text to upper case .TP .B homefeed='str' Set URL as 'homefeed' = homepage (from command line, not automatically saved, so a little bit useless...) .TP .B openlinkcmd='str' \'Open in Browser' command line: Application that will open active link (may require path.) Most likely will invoke your favourite browser .TP .B openlinkargs='str' \'Open in Browser' optional arguments .TP .B clock=[l/r/n] Clock location: left / right / none .TP .B clockfontname='fontname' Clock font name .TP .B clockfontsize=n Clock font size (can't be > ticker height) .TP .B clockfgcolor=#rrggbbaa Clock foreground 32-bit hexa color .TP .B clockbgcolor=#rrggbbaa Clock background 32-bit hexa color .TP .B setclockgradientbg=[y/n] Set clock gradient background .TP .B clockbgcolor2=#rrggbbaa Clock background 32-bit hexa color2 .TP .B disablepopups=[y/n] Disable error/warning popup windows .TP .B pauseonmouseover=[y/n] Pause ticker on mouseover .TP .B disableleftclick=[y/n] Disable left-click .TP .B mousewheelscroll=[s/f/n] Mouse wheel scrolling applies to: (ticker\-)speed / feed(\-in\-list) / none .br (if set, Ctrl + mouse wheel scrolling applies to other value) .TP .B sfpickercloseswhenpointerleaves=[y/n] Selected feed picker closes when pointer leaves .TP .B enablefeedordering=[y/n] Enable feed re-ordering (by user) .TP .B useauth=[y/n] Use HTTP basic authentication .TP .B user='str' User .TP .B psw='str' Password (never saved) .TP .B useproxy=[y/n] Connect through proxy .TP .B proxyhost='str' Proxy host .TP .B proxyport='str' Proxy port .TP .B useproxyauth=[y/n] Use proxy authentication .TP .B proxyuser='str' Proxy user .TP .B proxypsw='str' Proxy password (never saved) .SH NOTES Mouse usage: .PP - To open the main menu, right-click inside ticker area. .PP - You can import feed subscriptions from another feed reader with .br \'File > Import Feed List (OPML)'. .PP - To open a link in your browser, left-click on text. .PP - Use mouse wheel to either adjust ticker scrolling speed or open the \'Selected Feed Picker' window to quickly move between selected feeds (and use Ctrl + mouse wheel for the other option.) .PP The default browser is Firefox. You may change this setting to your favourite one in the Preferences window. .PP Tickr parses command line arguments and looks for option(s) then for one resource, the rest of the line is ignored. It reads too configuration file \'tickr-conf' located in /home//.tickr/ if it exists (or \'tickr-conf' if an instance id has been set to n.) See FILES. .PP Command line options override configuration file ones which override default ones. .SH FILES ~/.tickr/tickr-conf .br ~/.tickr/tickr-conf .br ~/.tickr/tickr-url-list .br ~/.tickr/tickr-url-list .SH REPORTING BUGS Please, report tickr bugs to either Emmanuel Thomas-Maurin or Debian. .SH AUTHOR .B Tickr was written by Emmanuel Thomas-Maurin . .PP This manual page was written by Emmanuel Thomas-Maurin , for the Debian project (and may be used by others). tickr_0.6.4.orig/build-on-win320000664000175000017500000000161712147427510015650 0ustar manutmmanutm#! /bin/bash # This script compile TICKR on win32 then build the installer # (by calling build-win32-installer) runtime="gtk2-win32-full-runtime" dlls="dlls" if [ ! -e "$runtime" ]; then echo "You must copy "$runtime" under tickr-0.6.x/" exit 1 elif [ ! -e "win32_install_stuff/$dlls" ]; then echo "You must copy "$dlls" under tickr-0.6.x/win32_install_stuff/" exit 2 else cp win32_install_stuff/Makefile-libetm-win32 src/libetm-0.4.4/Makefile cp win32_install_stuff/Makefile-tickr-win32 src/tickr/Makefile cp win32_install_stuff/build-win32-installer src/tickr/ cp win32_install_stuff/installer.iss ./ cd src/libetm-0.4.4 make cd ../tickr make ./build-win32-installer make clean cd ../libetm-0.4.4 make clean cd ../.. rm src/libetm-0.4.4/Makefile rm src/tickr/Makefile rm src/tickr/build-win32-installer rm installer.iss exit 0 fi tickr_0.6.4.orig/NEWS0000644000175000017500000000000012147427510013732 0ustar manutmmanutmtickr_0.6.4.orig/TODO0000640000175000017500000000375412147427510013742 0ustar manutmmanutmbug list -------- - remaining 1 pixel wide line when enabling then disabling left clock -> WTF ? - item title and description both uncheked -> do sth ? - how to prevent libxml2 segfaults ? - previous/next feed - already-first/last-feed warning seems buggy stuff to implement and requests for new features ------------------------------------------------ - add things to quicksetup: keyboard and mouse things, ? - new options: - pause scrolling for n seconds for each item -> -pauseeach=n - remove clicked items from feed -> -rmclickeditems=[y/n] - read from stdin -> -text="" - sound alerts -> -allowsoundalerts=[y/n] - read n times then exit -> -nread=n - read all then show all -> -readallthenshowall=[y/n] this is a better alternative to feed delimiter setting -> make a new feed from all selected feeds (kind of new reading mode) - https support (ssl/tls) - can gdk/cairo frame drawing be synced with vsync ? - split tickr_main.c (too big now) in 2 or more modules ? - check/setup default answer for question_win() - add 'open feed picker' after getting sample list - run socket code in a separate thread (asynchronously) ? or use g_timeout_add() and g_idle_add() when loading a feed, to avoid gui blocking ? - translations (finnish, french, german, spanish, russian, chinese, japanese, ?) - update this: question at program start-up about new feed list format conversion: if version = 0.6.2 and feed list exists and feed list backup doesn't exist, create backup and convert to new format. - could some arrays be replaced by linked lists (which eat much less memory ?) - search/filter feature (option to filter out feed items on str, publication date, ...) (nothing decided yet) - is it worth switching to gtk3 ? - color-coded feeds - implement digest access authentication - upload translation templates on launchpad - improve file i/o code consistency - 'detachable control win' - handles to drag window - backward scrolling - time format settings tickr_0.6.4.orig/ChangeLog0000644000175000017500000003574112147427510015031 0ustar manutmmanutmtickr version 0.6.4 ------------------- - In pref windows, some setting changes (like 'read n items per feed') need the stream to be reloaded, so now we use: current_feed(); instead of: update_pixmap_from_opened_stream(); (May 23 2013) - Fix 'quick feed picker (selected feeds) closes when pointer leaves win area' and implement it as a setting. (May 22 2013) - In pref window, disabling screen limits updates win_y and win_w limits on the fly. (May 22 2013) - Max options number now set to 128. (May 21 2013) - Pref win changes: - remove 'system' colors buttons - increase gtk table row spacings (May 14 2013) - If gradient bg set, compute text shadow color no longer from bg_color but from gradient. (May 14 2013) - Quick feed picker (selected feeds) closes when pointer leaves win area. Plus: quick feed picker opened *also* by Ctrl + mouse right-click. (May 4 2013) - Complete RSS 1.0 support (Closes: #688099) and fix/rewrite a few things in feed parser code. (May 3 2013) - In tickr_feedparser.c: ending '\n' removed when adding string to XML_DUMP (left when adding string to XML_DUMP_EXTRA). (May 1 2013) - Replace update_win_dims() with update_win_dims_and_loc() so that if ticker location happens to be wrong, it's always and quickly reset. (Apr 30 2103) - Add RSS 1.0 (RDF) support. (Apr 30 2013) - In tickr_main.c / main(), change: gtk_widget_show_all(env->win); update_win_dims(); gtk_main(); to: gtk_widget_show_all(env->win); gtk_widget_set_size_request(env->win, 1, 1); gtk_window_resize(GTK_WINDOW(env->win), 1, 1); gtk_main(); to try to get rid of "ghost" square window at startup (but is this fully effective ?) Also change: gtk_widget_set_size_request(env->win, 0, 0) to: gtk_widget_set_size_request(env->win, 1, 1) in update_win_dims(). (Apr 29 2013) - In feed picker - multiple selection mode: start reading selection with highlighted feed - more exactly url in entry (if any) / first one otherwise. (Apr 29 2013) - Remove (useless ?) app version number from exported OPML feed list title. (Apr 25 2013) - Only a little editor issue - some editors get confused (geany colors get confused) by things like: THIS_IS_A_#DEFINE"____string____" so now we put a space in between, like this: THIS_IS_A_#DEFINE "____string____" (Apr 25 2013) - If win_w = 0, win_w = detected screen width (same as 'full width' but from command line). (Apr 24 2013) - Fix xml namespaces issue in tickr_feedparser.c, when, for instance, 'media:title' exists along with 'title' and we then get 'title' twice. Now, we make sure no extra namespace is used before comparing strings with 'title', 'description', etc. (April 22 2013) - Fix stupid bug in format_resource() 'translate html entities' when '&' alone is detected (ie without a following ';'). Also fix 'translating' numerical entities with leading '0' in value string. (Apr 21 2013) - New option 'disablescreenlimits' which allows win_y and win_w to be greater than screen dimensions. (Apr 13 2013) - A few default settings changed. (Apr 13 2013) - Gradient bg. (Apr 13 2013) tickr version 0.6.3 ------------------- - Fix messy update_everything() function and add new update_pixmap_from_opened_stream() function, used in tickr_mainc.c and tickr_prefwin.c. (Feb 4 2013) - All *string* values are now saved inclosed in a pair of " or '. (This avoid getting trailing whitespaces removed by some editors, and other weird things like that.) When read, enclosing " or ' are removed, so backward compatibility is preserved. (Feb 3 2013) - install-on-win32 script renamed build-on-win32 (for accuracy sake.) (Oct 30 2012) - Fix some confusion about win_transparency in tickr_param.c. Actually, double value from 0.1 to 1.0 inside program / int value from 1 to 10 inside config file or as command line argument. (? 2012) - Fix settings import doing nothing (regression bug). (Sep 20 2012) - In show_resource_info(), fix URL link and GTK label. (Sep 20 2012) - Move and set: #define N_STR_MAX 8 #define STR_MAXLEN FILE_NAME_MAXLEN (128 previously) and remove duplicates. (Sep 19 2012) - In tickr_feedpicker.c, add: if (IS_FLIST(flist_bak)) ( f_list_free_all(flist_bak); ) to fix: list crash (f_list_free_all(): Invalid node in list) after adding a feed to an empty list (when clicking OK). (Sep 18 2012) - Rename (#define RESOURCE_DUMP) APP_CMD"-resrc-dump" -> APP_CMD"-resrc-dump.xml" (because it *is* an XML file.) (Sep 15 2012) - Little changes in big_error() text. (Aug 14 212) tickr version 0.6.2 ------------------- - Non standard feed rank support in OPML file. (Jul 15 2012) - Add new optional 'feed re-ordering by user' feature. (Jul 15 2012) - Add in libetm-0.4.4/str_mem.c/h: (int) str_is_num(const char *) and (int) str_is_blank(const char *). (Jul 15 2012) - In feed picker win, 'enter' in (rank_/url_)entry launches 'add/upd' (GTK_RESPONSE_ADD) instead of 'ok (single)' (GTK_RESPONSE_SINGLE). (Jul 3 2012) - Question at program start-up about new feed list format conversion: if version = 0.6.2 and feed list exists and feed list backup doesn't exist, create backup and convert to new format. (Jul 2 2012) - In tickr_feedpicker.c: fix 'cancel' action. (Jun 29 2012) - New func FList *f_list_clone(FList *) in tickr_list/c/h. (Jun 29 2012) - Use GTK_RESPONSE_CANCEL_CLOSE only. (Jun 29 2012) - In compute_surface_and_win(), remove: if (prm->icon_in_taskbar == 'n') gtk_window_deiconify(GTK_WINDOW(env->win)); from update_win_dims() (why was it there?) to fix 'tickr keeps stealing focus' bug. Also replace params_have_been_changed() with win_params_have_been_changed(). (LP: #900759, #951452, #1017107) (Jun 28 2012) - Fix (regression bug) segfault which occurs when opening text file and attempting to 'format_resource()' 'not-generated-if-resource is-file' XML_DUMP_EXTRA file. (Jun 20 2012) - Libetm version 0.4.3 -> 0.4.4 (see below.) (Jun 19 2012) - Add get_appdata-dir_w() in libetm-0.4.4:win32_specific.c and get_appdata_dir_utf8() in tickr_resource.c to fix non-ascii (for instance cyrillic) user name in app data dir issue on win32. Also remove seemingly useless g_win32_locale_filename_from_utf8() stuff on win32. (Jun 19 2012) - If 'item title' and 'item description' both unchecked in pref win, warn about 'pointless' setup and ask for confirmation before saving config. (Jun 18 2012) - Add new TickerEnv member (int) mouse_x_in_drwa used to continuously tracks (guess what?) mouse x position. Now we have: - tooltips with descriptions when ticker displays only titles and - tooltips with titles when ticker displays only descriptions. (Jun 14 2012) - Add fp_extra stuff in tickr_feedparser.c to get item titles / descriptions (in tooltips and others) when they are no displayed. (Jun 12 2012) - Remove tmp files when exiting tickr_resource.c:format_resource(). (Jun 12 2012) - Add env->c_surf test in shift2left_callback(). (LP: #1011316) (Jun 11 2012) tickr version 0.6.1 ------------------- - Add: 'quick setup' thing (in tickr_quicksetup.c) which is launched at program startup if config file doesn't exist. (Jun 4 2012) - Little improvements in layout of 'feed picker win' and 'preferences win'. (Jun 3 2012) - Fix a segfault that happens when trying to export params and no config file exists yet. (Jun 3 2012) - Make several windows that should not be resized by user, unresizable. (Jun 3 2012) - Fix Launchpad bug #1007346: When 'window always-on-top' is disabled, 'visible on all user desktops' stops working. (Jun 1 2012) - If mouse wheel scrolling applies to speed (or feed), then Ctrl + mouse wheel scrolling applies to feed (or speed.) (May 31 2012) - No real code changes in libetm, only in comments, so no need for a new version number. (May 31 2012) - Update tickr_helptext.c and tickr.1 (man page.) (May 30 2012) - Add new cli option 'no-ui' (similar to 'instance-id') used by new IF_UI_ALLOWED macro and remove all #if USE_GUI occurences. (May 28 2012) - In tickr_list.c, free listfname before using it. Fixed by swapping 2 lines: warning(FALSE, 4, "Can't save URL list ", listfname, ...); l_str_free(listfname); (May 28 2012) - Use/add #define FONT_MAXLEN 68 ARBITRARY_TASKBAR_HEIGHT 25 to replace a few 'magic' numeric values. (May 21 2012) - Rename: rss_title/description(_delimiter) -> item_title/description(_delimiter) then add new param: feed_title(_delimiter). Now we have: feed title / item title / item description. (May 20 2012) - Use table in resource properties window. (May 2O 2012) - Fix a bug in f_list_load_from_file() in tickr_list.c which uncorrectly retrieves any feed title string containing TITLE_TAG_CHAR when TITLE_TAG_CHAR has not been removed from string first, for instance: 'NYT > World' -> ' World'. (May 2O 2012) - New param: disable left-click. (May 2O 2012) - Add 'check for updates' feature. (May 19 2012) - Launch 'import OPML file' if feed list doesn't exist. (May 18 2012) - Remove code changing get_params()->disable_popups value in START/END_PAUSE_TICKER_WHILE_OPENING macros which prevents this setting to be saved and add START/END_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING new macros. Which ones to use depends on context. (May 10 2012) - Move: #ifdef G_OS_WIN32 extern FILE *stdout_fp, *stderr_fp; #endif from *.c into tickr.h. (May 9 2012) - Default always-on-top setting changed to 'n' (so that tickr is not intrusive by default.) (May 5 2012) tickr version 0.6.0 ------------------- - Complete quick_feed_picker() stuff in tickr_quickfeedpicker.c. (March 7 2012) - Swap win32 log files every hour to prevent generating huge ones. Finally fix an old bug on win32. (March 5 2012) - Several little improvements/fixes in tickr_feedpicker.c. (March 5 2012) - New type FList (feed doubly-linked list) and associated functions f_list_*() in tickr_list.c. Will replace confusing: char url_array[] / char *p_url[] / char **p_url stuff in: tickr_main.c, tickr_feedpicker.c, tickr_opml.c and tickr_resource.c. (March 5 2012) - Renaming 2 src files: - tickr_rss.c -> tickr_feedparser.c - tickr_rsswin.c -> tickr_feedpicker.c (Feb 16 2012) - Add new func: win_with_progress_bar() (in tickr_otherwins.c) and use it in feed list import thing (in tickr_opml.c) instead of not-spinning-as-expected win_with_spinner(). (Feb 15 2012) - When opening the feed picker dialog, highlight and scroll to current feed, plus several extra fixes and tweaks (in tickr_rsswin.c.) (Feb 14 2012) - Add new func: highlight_and_go_to_row() (in tickr_quickfeedpicker.c.) (Feb 14 2012) - Add new func: get_feed_index_in_selection() (in tickr_resource.c.) (Feb 14 2012) - Add new module and func: tickr_quickfeedpicker.c: quick_feed_picker(). (Feb 13 2012) - Add new func: question_win_at(). (Feb 13 2012) - Move 'Import/Export Preferences' from 'File' to 'Edit' in menu layout. (Feb 13 2012) - Check/improve tickr_socket.c code and move typedefs, prototypes, error codes, ... for tickr_socket.c into tickr_socket.h for modularity sake. (Feb 12 2012) - Pause tickr (on mouse-over AND) when popup menu is opened. (Feb 12 2012) - Change big_error() function (and prototype in libetm-0-4.3) to handle variable number of args / change warning() the same way. (Feb 12 2012) - Add new func: try_str_to_utf8() in tickr_rss.c -> try to fix string when utf-8 validation fails. (Feb 9 2012) - Add new func: remove_trailing_whitespaces_from_str(char *) in libetm-0.4.3/str_mem.c. (Feb 5 2012) - Change SEND_RECV_TIMEOUT to SEND_RECV_TIMEOUT_SEC and SEND_RECV_TIMEOUT_USEC. (Feb 3 2012) - Change main window title: 'app name and version num | feed title / file name' -> 'feed title / file name | app name and version num' (Jan 21 2012) - In libetm-0.4.3: - Compile with win32_specific.c only on win32 (fix empty unit warning.) - get_libetm_version() (function name modified.) (Jan 19 2012) - Fix a typo in debian/control Build-Depends: 'debhelper (>= 7.O.50~)' instead of 'debhelper (>= 7.0.50~)' which only shows up when trying to build for Lucid. (Dec 30 2011) - Split tickr_http.c into tickr_http.c and tickr_socket.c. (Dec 19 2011) - libetm-0.4.2 -> libetm-0.4.3: Replace KB, MB, GB, TB with KiB, MiB, GiB, TiB. (Dec 18 2011) tickr version 0.5.5 ------------------- - Implement new parameter: . - Set as optional. - Select/highlight and scroll to added URL in the list window. (Dec 17 2011) - Split compute_surface_and_win() code into compute_surface and compute_win, because the later is not always necessary. When window-always-on-top is disabled, compute_win needs to be run only twice at program startup (ie once after gtk_widget_show_all() has been called), then whenever params are changed, but not every time a new feed is loaded. - Add preferences (settings) importing/exporting feature. - 'file' scheme support added in tickr_http.c -> enables reading *and* xml-processing of (local) text files (wheras 'open text file' *only* read them.) (Dec 16 2011) - 'HTTPS not supported' handling/warning added in tickr_http.c (fix bug: program freezes with HTTP redirects to HTTPS.) (Dec 14 2011) - xml 'quick check' in tickr_http.c:format_quick_check() don't reject anymore valid (?) feeds not starting with ' libetm-0.4.2. (Dec 12 2011) - Use mouse wheel to go to previous/next feed. (Dec 11 2011) - Hide passwords in connection settings window. (Dec 8 2011) - Pause ticker and show feed title in tooltip on mouse-over. (Dec 3 2011) - Renaming all source files: news_*.c/h -> tickr_*/c/h. (Nov 30 2011) tickr version 0.5.4 - Nov 8 2011 -------------------------------- - Fix sort_url_list(EMPTY_LIST) falsly returning one element list (in news_list.c.) Now, program doesn't hang anymore if lauched with no feed URLs selected. - Add in news_main.c: shift2left_callback(): env->suspend_rq = TRUE / (cairo drawing code) / env->suspend_rq = FALSE - Tickr fails to build with ld --as-needed (recently-set-as-default linker flag) because libraries must be placed after objects needing theirs symbols. To fix that, we use autoconf macro PKG_CHECK_MODULES(GTK2, gtk+-2.0, ,) and PKG_CHECK_MODULES(XML2, libxml-2.0, ,) in configure.ac, and we may so remove `pkg-config --libs GTK+-2.0' and `xml-config --libs' from src/tickr/Makefile.am. ======================================================================== - NEWS has been renamed TICKR as it is now in Debian Sid (unstable) Last stable version number for News is 0.5.2 First stable version number for Tickr is 0.5.3 - changes in news v0.5.3~beta1: prevent connection settings window from showing when popups are disabled - tickr v0.5.3 doesn't bring many changes/fixes besides program renaming and ======================================================================== tickr_0.6.4.orig/xlib_stuff/0000755000175000017500000000000012147427510015412 5ustar manutmmanutmtickr_0.6.4.orig/xlib_stuff/win-config.c0000644000175000017500000000153412147427510017621 0ustar manutmmanutm/* (Re)Configure xwin * Compile with: gcc -o win-config win-config.c -lX11 */ #include #include #include #include int main(int argc, char *argv[]) { Display *displ; int screen_num; Window win; unsigned int displ_w; unsigned int displ_h; unsigned int win_x; unsigned int win_y; unsigned int win_w; unsigned int win_h; unsigned int win_border_w; char *displ_name = getenv("DISPLAY"); if ((displ = XOpenDisplay(displ_name)) != NULL) { /* TODO: Use XConfigureWindow() / XReconfigureWMWindow() */ screen_num = DefaultScreen(displ); displ_w = DisplayWidth(displ, screen_num); displ_h = DisplayHeight(displ, screen_num); XSync(displ, False); XCloseDisplay(displ); return 0; } else { fprintf(stderr, "%s: Can't connect to X server '%s'\n", argv[0], displ_name); return 1; } } tickr_0.6.4.orig/xlib_stuff/UNUSED_SO_FAR0000644000175000017500000000000012147427510017417 0ustar manutmmanutmtickr_0.6.4.orig/xlib_stuff/xlib-prog.c0000644000175000017500000000224612147427510017465 0ustar manutmmanutm/* Very basic xlib prog * Compile with: gcc -o xlib-prog xlib-prog.c -lX11 */ #include #include #include #include int main(int argc, char *argv[]) { Display *displ; int screen_num; Window win; unsigned int displ_w; unsigned int displ_h; unsigned int win_x; unsigned int win_y; unsigned int win_w; unsigned int win_h; unsigned int win_border_w; char *displ_name = getenv("DISPLAY"); if ((displ = XOpenDisplay(displ_name)) != NULL) { fprintf(stdout, "This window will stay for 5 sec\n"); screen_num = DefaultScreen(displ); displ_w = DisplayWidth(displ, screen_num); displ_h = DisplayHeight(displ, screen_num); win_w = displ_w / 2; win_h = displ_h / 2; win_x = displ_w / 4; win_y = displ_h / 4; win_border_w = 2; win = XCreateSimpleWindow( displ, RootWindow(displ, screen_num), win_x, win_y, win_w, win_h, win_border_w, BlackPixel(displ, screen_num), WhitePixel(displ, screen_num)); XMapWindow(displ, win); XSync(displ, False); sleep(5); XCloseDisplay(displ); return 0; } else { fprintf(stderr, "%s: Can't connect to X server '%s'\n", argv[0], displ_name); return 1; } } tickr_0.6.4.orig/glib-2.26.0-win32-patch/0000755000175000017500000000000012147427510016742 5ustar manutmmanutmtickr_0.6.4.orig/glib-2.26.0-win32-patch/glib-2.26.0-win32-mmtimer.diff0000644000175000017500000000577712147427510023664 0ustar manutmmanutmdiff -u -r glib-2.26.0/glib/gmain.c glib-2.26.0-win32-mmtimer/glib/gmain.c --- glib-2.26.0/glib/gmain.c 2010-09-13 15:57:51 +0000 +++ glib-2.26.0-win32-mmtimer/glib/gmain.c 2010-12-04 16:21:25 +0000 @@ -108,6 +108,53 @@ #include "gtimer.h" #endif +#ifdef G_OS_WIN32 +/* starting_time = time from Unix epoch to system start + * in nanoseconds + */ +static guint64 init_win32_mmtimer () +{ + TIMECAPS tc; + MMRESULT mmr; + unsigned int highest_res; + guint64 starting_time; + + mmr = timeGetDevCaps (&tc, sizeof (TIMECAPS)); + highest_res = tc.wPeriodMin; + if (timeBeginPeriod (highest_res) == TIMERR_NOERROR) + { + /* Returns 100s of nanoseconds since start of 1601 */ + GetSystemTimeAsFileTime ((FILETIME *)&starting_time); + /* Offset to Unix epoch */ + starting_time -= G_GINT64_CONSTANT (116444736000000000); + /* Convert to nanoseconds */ + starting_time *= 100; + /* Substract uptime */ + return (starting_time -= timeGetTime () * 1000000); + } + else + { + g_error ("init_win32_mmtimer() error"); + return 0; + } +} + +/* Time since Unix epoch - Will init timer on 1st call */ +guint64 get_time_nanosec_from_win32_mmtimer () +{ + static guint64 starting_time; + static int i = 0; + + if (i == 0) + { + i++; + /* Call only once */ + starting_time = init_win32_mmtimer (); + } + return (guint64)(timeGetTime () * 1000000 + starting_time); +} +#endif + /** * SECTION:main * @title: The Main Event Loop @@ -1793,22 +1840,14 @@ result->tv_sec = r.tv_sec; result->tv_usec = r.tv_usec; #else - FILETIME ft; guint64 time64; g_return_if_fail (result != NULL); - GetSystemTimeAsFileTime (&ft); - memmove (&time64, &ft, sizeof (FILETIME)); - - /* Convert from 100s of nanoseconds since 1601-01-01 - * to Unix epoch. Yes, this is Y2038 unsafe. - */ - time64 -= G_GINT64_CONSTANT (116444736000000000); - time64 /= 10; - + time64 = get_time_nanosec_from_win32_mmtimer () / 1000; /* in usec */ result->tv_sec = time64 / 1000000; result->tv_usec = time64 % 1000000; + return; #endif } diff -u -r glib-2.26.0/glib/gmain.h glib-2.26.0-win32-mmtimer/glib/gmain.h --- glib-2.26.0/glib/gmain.h 2010-08-09 13:34:46 +0000 +++ glib-2.26.0-win32-mmtimer/glib/gmain.h 2010-12-04 15:54:25 +0000 @@ -28,6 +28,8 @@ #include #include +guint64 get_time_nanosec_from_win32_mmtimer (); + G_BEGIN_DECLS /** diff -u -r glib-2.26.0/glib/gthread.c glib-2.26.0-win32-mmtimer/glib/gthread.c --- glib-2.26.0/glib/gthread.c 2010-09-21 18:10:13 +0000 +++ glib-2.26.0-win32-mmtimer/glib/gthread.c 2010-12-04 15:54:25 +0000 @@ -1859,17 +1859,7 @@ gettime (void) { #ifdef G_OS_WIN32 - guint64 v; - - /* Returns 100s of nanoseconds since start of 1601 */ - GetSystemTimeAsFileTime ((FILETIME *)&v); - - /* Offset to Unix epoch */ - v -= G_GINT64_CONSTANT (116444736000000000); - /* Convert to nanoseconds */ - v *= 100; - - return v; + return get_time_nanosec_from_win32_mmtimer (); #else struct timeval tv; tickr_0.6.4.orig/glib-2.26.0-win32-patch/test/0000755000175000017500000000000012147427510017721 5ustar manutmmanutmtickr_0.6.4.orig/glib-2.26.0-win32-patch/test/Makefile0000755000175000017500000000042512147427510021365 0ustar manutmmanutmsrc = test.c obj = $(src:.c=.o) CC = gcc CFLAGS = -O2 -Wall -Wextra `pkg-config --cflags glib-2.0` LIBS = --mms-bitfields `pkg-config --libs glib-2.0` all: test $(obj): $(src) Makefile $(CC) $(CFLAGS) -c $(src) test: $(obj) $(CC) -o test $(obj) $(LIBS) tickr_0.6.4.orig/glib-2.26.0-win32-patch/test/test.c0000644000175000017500000000204112147427510021041 0ustar manutmmanutm#include #include #include #include GMainLoop *main_loop; int delay = 50, counter = 0; time_t time0 = 0, time1 = 0; static gint callback() { if (counter == 0) time0 = time(NULL); else if (counter == 1000 - 1) time1 = time(NULL); if (counter++ < 1000 - 1) return TRUE; else { printf("%4d ms\n", (int)difftime(time1, time0)); if (delay > 30) delay -= 10; else { if (delay > 15) delay -= 5; else delay--; } if (delay > 0) { counter = 0; printf("%4d ms - ", delay); g_timeout_add_full(G_PRIORITY_HIGH, delay, callback, NULL, NULL); } else g_main_loop_quit(main_loop); return FALSE; } } int main() { printf( "=== Testing glib with 1000 calls to callback function ===\n" "Requested g_timeout interval - real interval\n"); printf("%4d ms - ", delay); g_timeout_add_full(G_PRIORITY_HIGH, delay, callback, NULL, NULL); main_loop = g_main_loop_new(NULL, TRUE); g_main_loop_run(main_loop); return 0; } tickr_0.6.4.orig/glib-2.26.0-win32-patch/run_patch0000755000175000017500000000011212147427510020645 0ustar manutmmanutm#! /bin/bash cd glib-2.26.0 patch -p1 < ../glib-2.26.0-win32-mmtimer.diff tickr_0.6.4.orig/glib-2.26.0-win32-patch/README-glib-patch.txt0000644000175000017500000000125012147427510022446 0ustar manutmmanutmhacking glib-win32 ------------------ replace GetSystemTimeAsFileTime() -> resolution = 15 ms with timeGetTime() and some extra stuff in gmain.c (also in gmain.h and gthread.c) the patch is also in bugzilla at: where yo may check for updates building glib from src ---------------------- download glib-2.26.0 src from gtk.org apply patch ./configure --prefix=/usr/local/glib --with-threads=win32 add "-lwinmm" to G_LIBS_EXTRA in config.status replace "windres" with "windres --use-temp-file" in config.status make make install compile test.c and run it in /usr/local/glib/bin g_timeout_add_full() -> higher resolution? tickr_0.6.4.orig/glib-2.26.0-win32-patch/run_diff0000755000175000017500000000013712147427510020465 0ustar manutmmanutm#! /bin/bash diff -u -r glib-2.26.0 glib-2.26.0-win32-mmtimer > glib-2.26.0-win32-mmtimer.diff tickr_0.6.4.orig/configure.ac0000755000175000017500000000170312147427510015537 0ustar manutmmanutm# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.67]) AC_INIT([tickr], [0.6.4], [manutm007@gmail.com]) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([config.h.in]) AC_CONFIG_HEADERS([config.h]) # Checks for programs. AC_PROG_CC AC_PROG_INSTALL AM_PROG_CC_C_O AC_PROG_RANLIB # Checks for libraries. # Checks for header files. AC_PATH_X AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h stdlib.h string.h sys/socket.h unistd.h]) # Checks for typedefs, structures, and compiler characteristics. AC_TYPE_SIZE_T AC_TYPE_SSIZE_T # Checks for library functions. AC_FUNC_MALLOC AC_FUNC_REALLOC AC_CHECK_FUNCS([memset select socket strerror strncasecmp strtoul]) PKG_CHECK_MODULES(GTK2, gtk+-2.0, ,) PKG_CHECK_MODULES(XML2, libxml-2.0, ,) AC_CONFIG_FILES([Makefile src/Makefile src/tickr/Makefile src/libetm-0.4.4/Makefile]) AC_OUTPUT tickr_0.6.4.orig/README0000644000175000017500000000326212147427510014130 0ustar manutmmanutm1 - BUILDING TICKR FROM SOURCES on Linux -------- Required packages are GTK+ and Libxml2 (development ones.) Then do: ./configure make (sudo) make install (make clean) on Windows ---------- You will have to install MinGW and GTK development stuff (headers and libs.) You will also need inno setup and reshacker (reshacker.exe must be installed in /usr/local/ResHack/.) If you want to use autotools, you will have to hack a little bit and re-create your own Makefile.am and configure.ac. Those provided are ok for ***Linux only*** at the moment. So, instead of autotools, I use a script (build-on-win32) which works fine for me on XP. You will have to adapt it to your build system, at least replacing "manutm" by your user name (I'm working on improving this script.) You must also download gtk2-win32-runtime-bin.tar.gz (from www.newsrssticker.com), the GTK stack runtime which includes a patched version of glib. (Of course, you may too get glib-2.26.0 sources, apply the patch, compile it yourself then add it to the GTK runtime stack you will have to build. Visit www.gtk.org for more info.) Copy gtk-win32-full-runtime under tickr- and run: ./build-on-win32 (it will build the win32 installer.) 2 - INSTALL DIRS DEFINED IN - tickr.desktop - debian/install - debian/menu - src/tickr/tickr.h - src/tickr/Makefile.am 3 - APPLICATION NAME source/binary package name and command previous name: news last stable version: 0.5.2 new name: tickr first released version: 0.5.3 in src/tickr: all source files have now been renamed: news_*.c/h -> tickr_*/c/h app name and dirs are all (?) defined in tickr.h (at least they should be) 4 - WIDGETS PACKING see: doc/widgets_packing tickr_0.6.4.orig/COPYING0000644000175000017500000010451312147427510014304 0ustar manutmmanutm GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state 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 3 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, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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 Lesser General Public License instead of this License. But first, please read . tickr_0.6.4.orig/src/0000755000175000017500000000000012147427510014034 5ustar manutmmanutmtickr_0.6.4.orig/src/tickr/0000755000175000017500000000000012147427510015150 5ustar manutmmanutmtickr_0.6.4.orig/src/tickr/tickr_feedpicker.c0000640000175000017500000005153212147427510020613 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" #define URL_ENTRY_LENGTH 100 #define RANK_ENTRY_LENGTH FLIST_RANK_STR_LEN /* Predefined GTK_RESPONSE_ are < 0, those ones are app level defined and >= 0. */ enum { GTK_RESPONSE_SELECT_ALL, GTK_RESPONSE_UNSELECT_ALL, GTK_RESPONSE_CLEAR_RANKING, GTK_RESPONSE_TOP, GTK_RESPONSE_HOME, GTK_RESPONSE_REMOVE, GTK_RESPONSE_ADD, GTK_RESPONSE_SINGLE, GTK_RESPONSE_SELECTION }; enum {COLUMN_INT, COLUMN_BOOLEAN_CHECKED, COLUMN_STRING_RANK, COLUMN_STRING_TITLE, COLUMN_STRING_URL, N_COLUMNS}; static GtkWidget *dialog, *url_entry, *rank_entry; static FList *flist; static int f_index; /* Starting at 0 (row starts at 1) */ static gchar home_feed[FILE_NAME_MAXLEN + 1]; /* Tree selection callback - update f_index and copy selected url to url_entry (override) */ static gint tree_selection_changed(GtkTreeSelection *selection) { GtkTreeModel *tree_model = NULL; GtkTreeIter iter; gchar *url_str, *rank_str; if (gtk_tree_selection_get_selected(selection, &tree_model, &iter)) { gtk_tree_model_get(tree_model, &iter, COLUMN_INT, &f_index, COLUMN_STRING_URL, &url_str, COLUMN_STRING_RANK, &rank_str, -1); gtk_entry_set_text(GTK_ENTRY(url_entry), url_str); if (get_params()->enable_feed_ordering == 'y') gtk_entry_set_text(GTK_ENTRY(rank_entry), itoa2(atoi(rank_str))); if (IS_FLIST(flist)) if ((f_index = f_list_search(flist, url_str)) > -1) flist = f_list_nth(flist, f_index + 1); g_free(url_str); g_free(rank_str); } return TRUE; } /* Catch double-click on tree view */ static gint double_click_on_tree_view(GtkTreeView *tree_view, GtkTreePath *tree_path) { GtkTreeModel *tree_model = NULL; GtkTreeIter iter; gchar *url_str, *rank_str; tree_model = gtk_tree_view_get_model(tree_view); if (gtk_tree_model_get_iter(tree_model, &iter, tree_path)) { gtk_tree_model_get(tree_model, &iter, COLUMN_INT, &f_index, COLUMN_STRING_URL, &url_str, COLUMN_STRING_RANK, &rank_str, -1); gtk_entry_set_text(GTK_ENTRY(url_entry), url_str); if (get_params()->enable_feed_ordering == 'y') gtk_entry_set_text(GTK_ENTRY(rank_entry), rank_str); if (IS_FLIST(flist)) if ((f_index = f_list_search(flist, url_str)) > -1) flist = f_list_nth(flist, f_index + 1); g_free(url_str); g_free(rank_str); } gtk_dialog_response(GTK_DIALOG(dialog), GTK_RESPONSE_SINGLE); return TRUE; } static gint enter_key_pressed_in_entry(GtkWidget *widget) { widget = widget; gtk_dialog_response(GTK_DIALOG(dialog), GTK_RESPONSE_ADD); return TRUE; } static gint clear_entry(GtkWidget *widget) { widget = widget; gtk_entry_set_text(GTK_ENTRY(url_entry), ""); if (get_params()->enable_feed_ordering == 'y') gtk_entry_set_text(GTK_ENTRY(rank_entry), ""); gtk_widget_grab_focus(GTK_WIDGET(url_entry)); return TRUE; } static gint checkbox_toggled(GtkCellRendererToggle *renderer, gchar *path_str, gpointer tree_view) { GtkTreeModel *tree_model; GtkTreeIter iter; FList *flist2; gboolean checked; renderer = renderer; tree_model = gtk_tree_view_get_model(GTK_TREE_VIEW(tree_view)); if (gtk_tree_model_get_iter_from_string(tree_model, &iter, path_str)) { gtk_tree_model_get(tree_model, &iter, COLUMN_INT, &f_index, COLUMN_BOOLEAN_CHECKED, &checked, -1); checked = !checked; gtk_list_store_set(GTK_LIST_STORE(tree_model), &iter, COLUMN_BOOLEAN_CHECKED, checked, -1); if (IS_FLIST(flist)) { flist2 = f_list_nth(flist, f_index + 1); if (IS_FLIST(flist2)) flist2->selected = checked; } } return TRUE; } static void select_all(GtkTreeView *tree_view) { GtkTreeModel *tree_model; GtkTreeIter iter; FList *flist2; tree_model = gtk_tree_view_get_model(tree_view); if (gtk_tree_model_get_iter_first(tree_model, &iter)) { do gtk_list_store_set(GTK_LIST_STORE(tree_model), &iter, COLUMN_BOOLEAN_CHECKED, TRUE, -1); while (gtk_tree_model_iter_next(tree_model, &iter)); if (IS_FLIST(flist)) for (flist2 = f_list_first(flist); IS_FLIST(flist2); flist2 = flist2->next) flist2->selected = TRUE; } } static void unselect_all(GtkTreeView *tree_view) { GtkTreeModel *tree_model; GtkTreeIter iter; FList *flist2; tree_model = gtk_tree_view_get_model(tree_view); if (gtk_tree_model_get_iter_first(tree_model, &iter)) { do gtk_list_store_set(GTK_LIST_STORE(tree_model), &iter, COLUMN_BOOLEAN_CHECKED, FALSE, -1); while (gtk_tree_model_iter_next(tree_model, &iter)); if (IS_FLIST(flist)) for (flist2 = f_list_first(flist); IS_FLIST(flist2); flist2 = flist2->next) flist2->selected = FALSE; } } static void clear_ranking(GtkTreeView *tree_view) { GtkTreeModel *tree_model; GtkTreeIter iter; FList *flist2; char rank[FLIST_RANK_STR_LEN + 1]; tree_model = gtk_tree_view_get_model(tree_view); str_n_cpy(rank, BLANK_STR_16, FLIST_RANK_STR_LEN); /*snprintf(rank, FLIST_RANK_STR_LEN + 1, FLIST_RANK_FORMAT, 0);*/ if (gtk_tree_model_get_iter_first(tree_model, &iter)) { do gtk_list_store_set(GTK_LIST_STORE(tree_model), &iter, COLUMN_STRING_RANK, rank, -1); while (gtk_tree_model_iter_next(tree_model, &iter)); if (IS_FLIST(flist)) for (flist2 = f_list_first(flist); IS_FLIST(flist2); flist2 = flist2->next) str_n_cpy(flist2->rank, rank, FLIST_RANK_STR_LEN); } } /* Select and scroll to row */ void highlight_and_go_to_row(GtkTreeView *tree_view, GtkTreeSelection *selection, int row) { GtkTreeModel *tree_model; GtkTreePath *tree_path; GtkTreeIter iter; int i = 0; if (row > 0) { tree_model = gtk_tree_view_get_model(tree_view); tree_path = gtk_tree_path_new_first(); if (gtk_tree_model_get_iter_first(tree_model, &iter)) { while (gtk_tree_model_iter_next(tree_model, &iter) && i++ < row - 1) gtk_tree_path_next(tree_path); gtk_tree_selection_select_path(selection, tree_path); gtk_tree_view_set_cursor_on_cell(tree_view, tree_path, NULL, NULL, FALSE); gtk_tree_view_scroll_to_cell(tree_view, tree_path, NULL, FALSE, 0.5, 0); } } } /* Clear the list before filling it */ static void fill_list_store_from_flnode(GtkListStore *list_store) { FList *flist2; GtkTreeIter iter; int i = 0; gtk_list_store_clear(list_store); if (IS_FLIST(flist)) for (flist2 = f_list_first(flist); IS_FLIST(flist2); flist2 = flist2->next) { gtk_list_store_append(list_store, &iter); gtk_list_store_set(list_store, &iter, COLUMN_INT, i, COLUMN_BOOLEAN_CHECKED, flist2->selected, COLUMN_STRING_RANK, flist2->rank, COLUMN_STRING_TITLE, flist2->title, COLUMN_STRING_URL, flist2->url, -1); i++; } } static int add_feed_to_flnode_and_list_store(Resource *resrc, GtkListStore *list_store) { FList *flist2; int rss_status; char rss_feed_title[FEED_TITLE_MAXLEN + 1]; char rss_feed_link[FILE_NAME_MAXLEN + 1]; char rss_feed_ttl[32]; char rank[FLIST_RANK_STR_LEN + 1]; int unused; str_n_cpy(resrc->id, (char *)gtk_entry_get_text(GTK_ENTRY(url_entry)), FILE_NAME_MAXLEN); if (get_params()->enable_feed_ordering != 'y') if ((flist2 = f_list_nth(flist, f_list_search(flist, resrc->id) + 1)) != NULL) str_n_cpy(rank, flist2->rank, FLIST_RANK_STR_LEN); else str_n_cpy(rank, BLANK_STR_16, FLIST_RANK_STR_LEN); else str_n_cpy(rank, (char *)gtk_entry_get_text(GTK_ENTRY(rank_entry)), FLIST_RANK_STR_LEN); if ((rss_status = get_feed(resrc, get_params())) == OK) { if (IS_FLIST(flist)) flist = f_list_last(flist); if (get_feed_info(&unused, resrc->id, rss_feed_title, rss_feed_link, rss_feed_ttl) == OK) /* Added url is set unselected. Is that OK ? */ flist = f_list_add_at_end(flist, resrc->id, rss_feed_title, FALSE, rank); else flist = f_list_add_at_end(flist, resrc->id, "", FALSE, rank); flist = f_list_sort(flist); fill_list_store_from_flnode(list_store); } /*else { // Should something be done here ? if (question_win("URL is unreachable. Keep it anyways ?") == YES) { } }*/ return rss_status; } /* * Open a dialog with a list of urls to choose from and an url entry. * * Entry format in url list file: * ['*' (selected) or '-' (unselected) + "000" (3 chars rank) + url [+ '>' + title] + '\n'] * * Entry max length = FILE_NAME_MAXLEN * See also: (UN)SELECTED_URL_CHAR/STR and TITLE_TAG_CHAR/STR in tickr.h * FLIST_RANK_FORMAT and FLIST_RANK_STR_LEN in tickr_list.h */ void get_new_url(Resource *resrc) { TickerEnv *env; GtkWidget *sc_win, *hbox; GtkWidget *cancel_but, *selectall_but, *unselectall_but; GtkWidget *clear_ranking_but, *top_but, *home_but, *remove_but; GtkWidget *add_but, *single_but, *selection_but, *clear_but; GtkTreeView *tree_view = NULL; GtkListStore *list_store = NULL; GtkTreeModel *tree_model = NULL; GtkTreeIter iter; GtkCellRenderer *renderer1 = NULL, *renderer2 = NULL, *renderer3 = NULL, *renderer4 = NULL; GtkTreeViewColumn *column1 = NULL, *column2 = NULL, *column3 = NULL, *column4 = NULL; GtkTreeSelection *selection = NULL; FList *flist_bak = NULL, *flist2 = NULL; Resource resrc_bak; gint response; gint cursor_position; env = get_ticker_env(); env->suspend_rq = TRUE; gtk_window_set_keep_above(GTK_WINDOW(env->win), FALSE); dialog = gtk_dialog_new_with_buttons( "Feed Picker (RSS/Atom)", GTK_WINDOW(env->win), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, NULL); cancel_but = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL_CLOSE); selectall_but = gtk_dialog_add_button(GTK_DIALOG(dialog), "Select All", GTK_RESPONSE_SELECT_ALL); unselectall_but = gtk_dialog_add_button(GTK_DIALOG(dialog), "Unsel All", GTK_RESPONSE_UNSELECT_ALL); if (get_params()->enable_feed_ordering == 'y') clear_ranking_but = gtk_dialog_add_button(GTK_DIALOG(dialog), "Clear Rank", GTK_RESPONSE_CLEAR_RANKING); top_but = gtk_dialog_add_button(GTK_DIALOG(dialog), "Top", GTK_RESPONSE_TOP); home_but = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_HOME, GTK_RESPONSE_HOME); remove_but = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_REMOVE, GTK_RESPONSE_REMOVE); add_but = gtk_dialog_add_button(GTK_DIALOG(dialog), "Add/Upd", GTK_RESPONSE_ADD); single_but = gtk_dialog_add_button(GTK_DIALOG(dialog), "OK (Single)", GTK_RESPONSE_SINGLE); selection_but = gtk_dialog_add_button(GTK_DIALOG(dialog), "OK (Selec)", GTK_RESPONSE_SELECTION); clear_but = gtk_button_new_with_label("Clear"); cancel_but = cancel_but; /* To get rid of some annoying compiler warnings */ selectall_but = selectall_but; unselectall_but = unselectall_but; clear_ranking_but = clear_ranking_but; top_but = top_but; home_but = home_but; remove_but = remove_but; add_but = add_but; single_but = single_but; selection_but = selection_but; clear_but = clear_but; /* Until here */ set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER_ALWAYS); sc_win = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sc_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_set_border_width(GTK_CONTAINER(sc_win), 5); /* Whole window must be visible on netbooks as well */ gtk_widget_set_size_request(sc_win, 1000, 450); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), sc_win, TRUE, FALSE, 0); str_n_cpy(home_feed, get_params()->homefeed, FILE_NAME_MAXLEN); list_store = gtk_list_store_new(N_COLUMNS, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); if (IS_FLIST(get_feed_list())) f_list_free_all(get_feed_list()); if (f_list_load_from_file(&flist, NULL) == OK) { flist = f_list_sort(flist); fill_list_store_from_flnode(list_store); flist_bak = f_list_clone(flist); } else flist = NULL; set_feed_list(flist); tree_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store))); renderer1 = gtk_cell_renderer_toggle_new(); gtk_cell_renderer_toggle_set_radio(GTK_CELL_RENDERER_TOGGLE(renderer1), FALSE); column1 = gtk_tree_view_column_new_with_attributes(NULL, renderer1, "active", COLUMN_BOOLEAN_CHECKED, NULL); gtk_tree_view_append_column(tree_view, column1); if (get_params()->enable_feed_ordering == 'y') { renderer2 = gtk_cell_renderer_text_new(); #ifndef G_OS_WIN32 /* Doesn't compile on win32 because of older GTK version. */ gtk_cell_renderer_set_alignment(renderer2, 1.0, 0.5); #endif column2 = gtk_tree_view_column_new_with_attributes(NULL/*"Rank"*/, renderer2, "text", COLUMN_STRING_RANK, NULL); gtk_tree_view_append_column(tree_view, column2); } renderer3 = gtk_cell_renderer_text_new(); column3 = gtk_tree_view_column_new_with_attributes("Feed Title", renderer3, "text", COLUMN_STRING_TITLE, NULL); gtk_tree_view_append_column(tree_view, column3); renderer4 = gtk_cell_renderer_text_new(); column4 = gtk_tree_view_column_new_with_attributes("Feed URL", renderer4, "text", COLUMN_STRING_URL, NULL); gtk_tree_view_append_column(tree_view, column4); gtk_container_add(GTK_CONTAINER(sc_win), GTK_WIDGET(tree_view)); selection = gtk_tree_view_get_selection(tree_view); gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(tree_selection_changed), NULL); g_signal_connect(G_OBJECT(tree_view), "row_activated", G_CALLBACK(double_click_on_tree_view), NULL); g_signal_connect(G_OBJECT(renderer1), "toggled", G_CALLBACK(checkbox_toggled), tree_view); hbox = gtk_hbox_new(FALSE, 0); if (get_params()->enable_feed_ordering != 'y') gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("Enter new URL:"), FALSE, FALSE, 0); else gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new("Enter rank and new URL:"), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(" "), TRUE, FALSE, 0); if (get_params()->enable_feed_ordering == 'y') { rank_entry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(rank_entry), FLIST_RANK_STR_LEN); gtk_entry_set_width_chars(GTK_ENTRY(rank_entry), FLIST_RANK_STR_LEN); gtk_box_pack_start(GTK_BOX(hbox), rank_entry, FALSE, FALSE, 0); } url_entry = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(url_entry), FILE_NAME_MAXLEN); if (get_params()->enable_feed_ordering != 'y') gtk_entry_set_width_chars(GTK_ENTRY(url_entry), URL_ENTRY_LENGTH); else gtk_entry_set_width_chars(GTK_ENTRY(url_entry), URL_ENTRY_LENGTH - 10); /* about... */ gtk_box_pack_start(GTK_BOX(hbox), url_entry, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox), clear_but, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox), 5); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(url_entry), "activate", G_CALLBACK(enter_key_pressed_in_entry), NULL); if (get_params()->enable_feed_ordering == 'y') g_signal_connect(G_OBJECT(rank_entry), "activate", G_CALLBACK(enter_key_pressed_in_entry), NULL); g_signal_connect(G_OBJECT(clear_but), "clicked", G_CALLBACK(clear_entry), NULL); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); gtk_widget_show_all(dialog); /* Backup last valid opened resource (if any) */ str_n_cpy(resrc_bak.id, resrc->id, FILE_NAME_MAXLEN); /* Is it better like that ? */ if (IS_FLIST(flist) && resrc->id[0] != '\0') if ((f_index = f_list_search(flist, resrc->id)) > -1) highlight_and_go_to_row(tree_view, selection, f_index + 1); gtk_widget_grab_focus(GTK_WIDGET(tree_view)); while ((response = gtk_dialog_run(GTK_DIALOG(dialog))) != GTK_RESPONSE_CANCEL_CLOSE) { if (response == GTK_RESPONSE_SELECT_ALL) { if (question_win("Select all URLs ?") == YES) select_all(tree_view); } else if (response == GTK_RESPONSE_UNSELECT_ALL) { if (question_win("Unselect all URLs ?") == YES) unselect_all(tree_view); } else if (response == GTK_RESPONSE_CLEAR_RANKING) { if (question_win("Clear all URLs ranking ?") == YES) clear_ranking(tree_view); } else if (response == GTK_RESPONSE_TOP) { highlight_and_go_to_row(tree_view, selection, 1); } else if (response == GTK_RESPONSE_HOME) { gtk_entry_set_text(GTK_ENTRY(url_entry), (const gchar *)home_feed); if (IS_FLIST(flist)) { if ((f_index = f_list_search(flist, gtk_entry_get_text(GTK_ENTRY(url_entry)))) > -1) highlight_and_go_to_row(tree_view, selection, f_index + 1); } } else if (response == GTK_RESPONSE_REMOVE) { if (IS_FLIST(flist) && f_index > -1) { if (gtk_tree_selection_get_selected(selection, &tree_model, &iter) && question_win("Remove selected URL from list ?") == YES) { gtk_list_store_remove(list_store, &iter); flist = f_list_remove(flist); if (f_list_count(flist) > 0) set_feed_list(f_list_first(flist)); else set_feed_list(NULL); f_index = -1; gtk_entry_set_text(GTK_ENTRY(url_entry), ""); } } else warning(FALSE, 1, "You must select an URL first"); } else if (response == GTK_RESPONSE_ADD) { /* Actually add/update */ if (get_params()->enable_feed_ordering == 'y') { if (!(str_is_num(gtk_entry_get_text(GTK_ENTRY(rank_entry))) &&\ atoi(gtk_entry_get_text(GTK_ENTRY(rank_entry))) >= 0) &&\ !str_is_blank(gtk_entry_get_text(GTK_ENTRY(rank_entry)))) { warning(FALSE, 1, "You must enter a numerical (>= 0 integer) value"); gtk_widget_grab_focus(GTK_WIDGET(rank_entry)); continue; } } if (gtk_entry_get_text(GTK_ENTRY(url_entry))[0] != '\0') { cursor_position = gtk_editable_get_position(GTK_EDITABLE(url_entry)); str_n_cpy(resrc->id, gtk_entry_get_text(GTK_ENTRY(url_entry)), FILE_NAME_MAXLEN); if (add_feed_to_flnode_and_list_store(resrc, list_store) == OK) { if ((f_index = f_list_search(flist, gtk_entry_get_text(GTK_ENTRY(url_entry)))) > -1) highlight_and_go_to_row(tree_view, selection, f_index + 1); /* Backup last valid opened resource (if any) */ str_n_cpy(resrc_bak.id, resrc->id, FILE_NAME_MAXLEN); } else { /* Restore last valid opened resource (if any) */ str_n_cpy(resrc->id, resrc_bak.id, FILE_NAME_MAXLEN); gtk_widget_grab_focus(GTK_WIDGET(url_entry)); gtk_editable_set_position(GTK_EDITABLE(url_entry), cursor_position); continue; } } else { warning(FALSE, 1, "You must enter an URL first"); gtk_widget_grab_focus(GTK_WIDGET(url_entry)); continue; } } else if (response == GTK_RESPONSE_SINGLE) { if (f_index > -1 && gtk_entry_get_text(GTK_ENTRY(url_entry))[0] == '\0') tree_selection_changed(selection); if (gtk_entry_get_text(GTK_ENTRY(url_entry))[0] != '\0') { if (add_feed_to_flnode_and_list_store(resrc, list_store) == OK) { env->selection_mode = SINGLE; env->reload_rq = TRUE; break; } else /* Restore last valid opened resource (if any) */ str_n_cpy(resrc->id, resrc_bak.id, FILE_NAME_MAXLEN); } else warning(FALSE, 1, "You must enter or select an URL first"); } else if (response == GTK_RESPONSE_SELECTION) { if (IS_FLIST(flist)) { for (flist2 = f_list_first(flist); IS_FLIST(flist2); flist2 = flist2->next) if (flist2->selected) break; if (IS_FLIST(flist2)) { if (flist2->selected) { env->selection_mode = MULTIPLE; env->reload_rq = TRUE; break; } } warning(FALSE, 1, "Selection is empty"); } else warning(FALSE, 1, "URL list is empty"); } gtk_widget_grab_focus(GTK_WIDGET(tree_view)); } if (list_store != NULL) g_object_unref(list_store); if (response != GTK_RESPONSE_CANCEL_CLOSE) { if (IS_FLIST(flist)) { flist = f_list_first(flist); f_list_save_to_file(flist, NULL); set_feed_list(flist); build_feed_selection_from_feed_list(); if (IS_FLIST(get_feed_selection()) && response == GTK_RESPONSE_SELECTION) { /* * NEW: Multiple selection mode: start reading selection with highlighted feed * - more exactly url in entry (if any) / first one otherwise. */ if ((f_index = f_list_search(get_feed_selection(), gtk_entry_get_text(GTK_ENTRY(url_entry)))) > -1) set_feed_selection(f_list_nth(get_feed_selection(), f_index + 1)); else first_feed(); } if (IS_FLIST(flist_bak)) f_list_free_all(flist_bak); } else { info_win("", "Invalid new feed list", INFO_ERROR, TRUE); fprintf(STD_ERR, "Invalid new feed list\n"); flist = flist_bak; } } else { /* If cancelled, we only restore feed list. */ if (IS_FLIST(flist)) f_list_free_all(flist); flist = flist_bak; set_feed_list(flist); } gtk_widget_destroy(dialog); check_main_win_always_on_top(); env->suspend_rq = FALSE; } tickr_0.6.4.orig/src/tickr/tickr_params.c0000644000175000017500000006402412147427510020001 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" void set_default_options(Params *prm) { char tmp_font[FONT_MAXLEN + 1]; prm->delay = DELAY; prm->shift_size = SHIFTSIZE; compact_font(tmp_font, FONTNAME, FONTSIZE); str_n_cpy(prm->font_n_s, tmp_font, FONT_MAXLEN); get_gdk_color_from_hexstr(FGCOLOR, &prm->fg_color, &prm->fg_color_alpha); get_gdk_color_from_hexstr(BGCOLOR, &prm->bg_color, &prm->bg_color_alpha); prm->set_gradient_bg = SETGRADIENTBG; get_gdk_color_from_hexstr(BGCOLOR2, &prm->bg_color2, &prm->bg_color2_alpha); prm->disable_screen_limits = DISABLESCREENLIMITS; prm->win_x = WIN_X; prm->win_y = WIN_Y; prm->win_w = get_ticker_env()->screen_w; /* Instead of WIN_W; */ prm->win_h = WIN_H; prm->windec = WINDEC; prm->always_on_top = ALWAYSONTOP; prm->win_transparency = WINTRANSPARENCY; prm->shadow = SHADOW; prm->shadow_offset_x = SHADOWOFFSET_X; prm->shadow_offset_y = SHADOWOFFSET_Y; prm->shadow_fx = SHADOWFX; prm->icon_in_taskbar = ICONINTASKBAR; prm->win_sticky = WINSTICKY; str_n_cpy(prm->line_delimiter, LINEDELIMITER, DELIMITER_MAXLEN); str_n_cpy(prm->cutline_delimiter, CUTLINEDELIMITER, DELIMITER_MAXLEN); prm->special_chars = SPECIALCHARS; prm->new_page_char = NEWPG; prm->tab_char = TABCH; prm->rss_refresh = RSSREFRESH; prm->feed_title = FEEDTITLE; str_n_cpy(prm->feed_title_delimiter, FEEDTITLEDELIMITER, DELIMITER_MAXLEN); prm->item_title = ITEMTITLE; str_n_cpy(prm->item_title_delimiter, ITEMTITLEDELIMITER, DELIMITER_MAXLEN); prm->item_description = ITEMDESCRIPTION; str_n_cpy(prm->item_description_delimiter, ITEMDESCRIPTIONDELIMITER, DELIMITER_MAXLEN); prm->n_items_per_feed = NITEMSPERFEED; prm->strip_html_tags = STRIPHTMLTAGS; prm->upper_case_text = UPPERCASETEXT; str_n_cpy(prm->homefeed, HOMEFEED, FILE_NAME_MAXLEN); str_n_cpy(prm->open_link_cmd, OPENLINKCMD, FILE_NAME_MAXLEN); str_n_cpy(prm->open_link_args, OPENLINKARGS, FILE_NAME_MAXLEN); prm->clock = CLOCK; get_gdk_color_from_hexstr(CFGCOLOR, &prm->clock_fg_color, &prm->clock_fg_color_alpha); get_gdk_color_from_hexstr(CBGCOLOR, &prm->clock_bg_color, &prm->clock_bg_color_alpha); prm->set_clock_gradient_bg = SETCLOCKGRADIENTBG; get_gdk_color_from_hexstr(CBGCOLOR2, &prm->clock_bg_color2, &prm->clock_bg_color2_alpha); compact_font(tmp_font, CFONTNAME, CFONTSIZE); str_n_cpy(prm->clock_font_n_s, tmp_font, FONT_MAXLEN); prm->disable_popups = DISABLEPOPUPS; prm->pause_on_mouseover = PAUSEONMOUSEOVER; prm->disable_leftclick = DISABLELEFTCLICK; prm->mouse_wheel_scroll = MOUSEWHEELSCROLL; prm->sfpicker_closes_when_pointer_leaves = SFPICKERCLOSESWHENPOINTERLEAVES; prm->enable_feed_ordering = ENABLEFEEDORDERING; prm->use_authentication = USEAUTHENTICATION; str_n_cpy(prm->user, USER, USER_MAXLEN); prm->use_proxy = USEPROXY; str_n_cpy(prm->proxy_host, PROXYHOST, PROXY_HOST_MAXLEN); str_n_cpy(prm->proxy_port, PROXYPORT, PROXY_PORT_MAXLEN); prm->use_proxy_authentication = USEPROXYAUTHENTICATION; str_n_cpy(prm->proxy_user, PROXYUSER, PROXY_USER_MAXLEN); } /* * Load config file if any & set up - returns 0 if OK. * Store options in a string array and initialize a ptr arrays that matches strings. * We assume we have up to N_OPTION_MAX options, OPTION_MAXLEN char long max each. */ int get_config_file_options(Params *prm) { FILE *conf_fp; char options_array[N_OPTION_MAX][OPTION_MAXLEN + 2]; char *ptr[N_OPTION_MAX + 1]; int i, j = 0; if ((conf_fp = g_fopen(get_datafile_full_name_from_name(CONFIG_FILE), "rb")) != NULL) { /* * Parse config file */ for (i = 0; ; i++) { /* * Here fgets() read OPTION_MAXLEN + 1 char max including * '\n' then add '\0' (if I'm right...) */ if (i >= N_OPTION_MAX) { ptr[i] = NULL; warning(FALSE, 5, "Too many lines in configuration file: ", get_datafile_full_name_from_name(CONFIG_FILE), "(max = ", itoa2(N_OPTION_MAX), ")" "\nWon't parse further than limit\n"); break; } if (fgets(options_array[i], OPTION_MAXLEN + 2, conf_fp) == NULL) { ptr[i] = NULL; break; } else { j = strlen(options_array[i]); options_array[i][j - 1] = '\0'; /* We remove trailing '\n' */ ptr[i] = options_array[i]; /* so now options max length = OPTION_MAXLEN. */ } } if (i > 0) j = parse_options_array(prm, i - 1, (const char **)ptr); else j = 0; fclose(conf_fp); } else fprintf(STD_ERR, "Can't read configuration file: %s - %s\n", get_datafile_full_name_from_name(CONFIG_FILE), strerror(errno)); return j; } /* * Options array parser (NULL terminated ptrs array). * We assume we have up to N_OPTION_MAX options, OPTION_MAXLEN char long max each. */ int parse_options_array(Params *prm, int n_options, const char *option[]) { int i, exit_status = OK; if (n_options > N_OPTION_MAX) { n_options = N_OPTION_MAX; fprintf(STD_ERR, "Too many options (max = %d) - Won't parse further than limit\n", N_OPTION_MAX); exit_status = OPTION_TOO_MANY; } for (i = 0; i < n_options && option[i] != NULL; i++) if (get_name_value_from_option(prm, option[i]) != OK) exit_status = OPTION_ERROR; return exit_status; } int get_name_value_from_option(Params *prm, const char *option) { /* * Options are splitted into name and value. * font -> fname is FONT_NAME_MAXLEN char max long, fsize FONT_SIZE_MAXLEN, * plus 1 extra space so font_n_s (font name size) is up to * FONT_MAXLEN = FONT_NAME_MAXLEN + 1 + FONT_SIZE_MAXLEN char long. * OPTION_MAXLEN = OPTION_NAME_MAXLEN + OPTION_VALUE_MAXLEN + 4 (-name="value"). * * === If unsure, check this in tickr.h === */ char name[OPTION_NAME_MAXLEN + 1], value[OPTION_VALUE_MAXLEN + 1]; char fname[FONT_NAME_MAXLEN + 1], fsize[FONT_SIZE_MAXLEN + 1]; char cfname[FONT_NAME_MAXLEN + 1], cfsize[FONT_SIZE_MAXLEN + 1]; char tmp[OPTION_MAXLEN + 1]; char tmp_font[FONT_MAXLEN + 1]; int i, exit_status = OK; split_font(prm->font_n_s, fname, fsize); split_font(prm->clock_font_n_s, cfname, cfsize); /* * Split option into name & value if any */ name[0] = '\0'; value[0] = '\0'; if (option[0] == '-') { str_n_cpy(tmp, option + 1, OPTION_MAXLEN); for (i = 0; i < OPTION_MAXLEN - 1; i++) if (tmp[i] == '=') { tmp[i] = '\0'; str_n_cpy(name, tmp, OPTION_NAME_MAXLEN); str_n_cpy(value, tmp + i + 1, OPTION_VALUE_MAXLEN); break; } } else if (option[0] != '\0') { fprintf(STD_ERR, "Invalid option: %s\n", option); return (exit_status = OPTION_INVALID); } /* * All *string* values are saved inclosed in a pair of ". When read, enclosing " (or ') * are removed. (This also ensure backward compatibility with previous versions.) */ str_n_cpy(tmp, value, OPTION_MAXLEN); if ((i = strlen(tmp) >= 2) && ((tmp[0] == '\"' && tmp[i - 1] == '\"') || (tmp[0] == '\'' && tmp[i - 1] == '\''))) { str_n_cpy(value, tmp + 1, OPTION_VALUE_MAXLEN); value[strlen(value) - 1] = '\0'; } /* * Check option name and get value if any */ if (strcmp(name, "delay") == 0) prm->delay = atoi(value); else if (strcmp(name, "shiftsize") == 0) prm->shift_size = atoi(value); else if (strcmp(name, "fontname") == 0) str_n_cpy(fname, value, FONT_NAME_MAXLEN); else if (strcmp(name, "fontsize") == 0) { str_n_cpy(fsize, value, FONT_SIZE_MAXLEN); if (atoi(fsize) > FONT_MAXSIZE) { snprintf(fsize, FONT_SIZE_MAXLEN + 1, "%3d", FONT_MAXSIZE); fprintf(STD_ERR, "Font size set to %d (can't be above)\n", FONT_MAXSIZE); } } else if (strcmp(name, "fgcolor") == 0) { if (!get_gdk_color_from_hexstr(value, &prm->fg_color, &prm->fg_color_alpha)) { get_gdk_color_from_hexstr(FGCOLOR, &prm->fg_color, &prm->fg_color_alpha); exit_status = OPTION_VALUE_INVALID; } } else if (strcmp(name, "bgcolor") == 0) { if (!get_gdk_color_from_hexstr(value, &prm->bg_color, &prm->bg_color_alpha)) { get_gdk_color_from_hexstr(BGCOLOR, &prm->bg_color, &prm->bg_color_alpha); exit_status = OPTION_VALUE_INVALID; } } else if (strcmp(name, "setgradientbg") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->set_gradient_bg = value[0]; } else if (strcmp(name, "bgcolor2") == 0) { if (!get_gdk_color_from_hexstr(value, &prm->bg_color2, &prm->bg_color2_alpha)) { get_gdk_color_from_hexstr(BGCOLOR, &prm->bg_color2, &prm->bg_color2_alpha); exit_status = OPTION_VALUE_INVALID; } } else if (strcmp(name, "disablescreenlimits") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->disable_screen_limits = value[0]; } else if (strcmp(name, "win_x") == 0) prm->win_x = atoi(value); else if (strcmp(name, "win_y") == 0) prm->win_y = atoi(value); else if (strcmp(name, "win_w") == 0) { prm->win_w = atoi(value); /* Same as 'full width' but from command line */ if (prm->win_w == 0) prm->win_w = get_ticker_env()->screen_w; } else if (strcmp(name, "win_h") == 0) { prm->win_h = atoi(value); /* * If win_h is set and > 0, it will override requested font size * with computed one. */ if (prm->win_h > 0 && prm->win_h < DRWA_HEIGHT_MIN) prm->win_h = DRWA_HEIGHT_MIN; } else if (strcmp(name, "windec") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->windec = value[0]; } else if (strcmp(name, "alwaysontop") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->always_on_top = value[0]; } else if (strcmp(name, "wintransparency") == 0) { /* Compare as integers (because less bug-prone) then set as gdouble. * Saved to / retrieved from config file as [transparency x 10]. */ prm->win_transparency = atoi(value); if ((int)prm->win_transparency < 1) { fprintf(STD_ERR, "Invalid value: %s - will be set to 1\n", option); prm->win_transparency = 1.0; exit_status = OPTION_VALUE_INVALID; } else if ((int)prm->win_transparency > 10) { fprintf(STD_ERR, "Invalid value: %s - will be set to 10\n", option); prm->win_transparency = 10.0; exit_status = OPTION_VALUE_INVALID; } prm->win_transparency /= 10; } else if (strcmp(name, "iconintaskbar") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->icon_in_taskbar = value[0]; } else if (strcmp(name, "winsticky") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->win_sticky = value[0]; } else if (strcmp(name, "shadow") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->shadow = value[0]; } /* Should check value here */ else if (strcmp(name, "shadowoffset_x") == 0) prm->shadow_offset_x = atoi(value); /* Should check value here */ else if (strcmp(name, "shadowoffset_y") == 0) prm->shadow_offset_y = atoi(value); else if (strcmp(name, "shadowfx") == 0) prm->shadow_fx = atoi(value); else if (strcmp(name, "linedelimiter") == 0) str_n_cpy(prm->line_delimiter, value, DELIMITER_MAXLEN); else if (strcmp(name, "cutlinedelimiter") == 0) str_n_cpy(prm->cutline_delimiter, value, DELIMITER_MAXLEN); else if (strcmp(name, "specialchars") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->special_chars = value[0]; } else if (strcmp(name, "newpgchar") == 0) prm->new_page_char = value[0]; else if (strcmp(name, "tabchar") == 0) prm->tab_char = value[0]; else if (strcmp(name, "rssrefresh") == 0) prm->rss_refresh = atoi(value); else if (strcmp(name, "feedtitle") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->feed_title = value[0]; } else if (strcmp(name, "feedtitledelimiter") == 0) str_n_cpy(prm->feed_title_delimiter, value, DELIMITER_MAXLEN); else if (strcmp(name, "itemtitle") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->item_title = value[0]; } else if (strcmp(name, "itemtitledelimiter") == 0) str_n_cpy(prm->item_title_delimiter, value, DELIMITER_MAXLEN); else if (strcmp(name, "itemdescription") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->item_description = value[0]; } else if (strcmp(name, "itemdescriptiondelimiter") == 0) str_n_cpy(prm->item_description_delimiter, value, DELIMITER_MAXLEN); else if (strcmp(name, "nitemsperfeed") == 0) prm->n_items_per_feed = atoi(value); else if (strcmp(name, "rmtags") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->strip_html_tags = value[0]; } else if (strcmp(name, "uppercasetext") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->upper_case_text = value[0]; } else if (strcmp(name, "homefeed") == 0) str_n_cpy(prm->homefeed, value, FILE_NAME_MAXLEN); else if (strcmp(name, "openlinkcmd") == 0) str_n_cpy(prm->open_link_cmd, value, FILE_NAME_MAXLEN); else if (strcmp(name, "openlinkargs") == 0) str_n_cpy(prm->open_link_args, value, FILE_NAME_MAXLEN); else if (strcmp(name, "clock") == 0) { if (strcmp(value, "l") != 0 && strcmp(value, "r") != 0 \ && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->clock = value[0]; } else if (strcmp(name, "clockfontname") == 0) str_n_cpy(cfname, value, FONT_NAME_MAXLEN); else if (strcmp(name, "clockfontsize") == 0) str_n_cpy(cfsize, value, FONT_SIZE_MAXLEN); else if (strcmp(name, "clockfgcolor") == 0) { if (!get_gdk_color_from_hexstr(value, &prm->clock_fg_color, &prm->clock_fg_color_alpha)) { get_gdk_color_from_hexstr(CFGCOLOR, &prm->clock_fg_color, &prm->clock_fg_color_alpha); exit_status = OPTION_VALUE_INVALID; } } else if (strcmp(name, "clockbgcolor") == 0) { if (!get_gdk_color_from_hexstr(value, &prm->clock_bg_color, &prm->clock_bg_color_alpha)) { get_gdk_color_from_hexstr(CBGCOLOR, &prm->clock_bg_color, &prm->clock_bg_color_alpha); exit_status = OPTION_VALUE_INVALID; } } else if (strcmp(name, "setclockgradientbg") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->set_clock_gradient_bg = value[0]; } else if (strcmp(name, "clockbgcolor2") == 0) { if (!get_gdk_color_from_hexstr(value, &prm->clock_bg_color2, &prm->clock_bg_color2_alpha)) { get_gdk_color_from_hexstr(BGCOLOR, &prm->clock_bg_color2, &prm->clock_bg_color2_alpha); exit_status = OPTION_VALUE_INVALID; } } else if (strcmp(name, "disablepopups") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->disable_popups = value[0]; } else if (strcmp(name, "pauseonmouseover") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->pause_on_mouseover = value[0]; } else if (strcmp(name, "disableleftclick") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->disable_leftclick = value[0]; } else if (strcmp(name, "mousewheelscroll") == 0) { if (strcmp(value, "s") != 0 && strcmp(value, "f") != 0 \ && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->mouse_wheel_scroll = value[0]; } else if (strcmp(name, "sfpickercloseswhenpointerleaves") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->sfpicker_closes_when_pointer_leaves = value[0]; } else if (strcmp(name, "enablefeedordering") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else prm->enable_feed_ordering = value[0]; /* Params in connection settings win */ } else if (strcmp(name, "useauth") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else { prm->use_authentication = value[0]; set_use_authentication(value[0] == 'y' ? TRUE : FALSE); } } else if (strcmp(name, "user") == 0) { str_n_cpy(prm->user, value, USER_MAXLEN); str_n_cpy(get_http_auth_user(), value, USER_MAXLEN); /* This option is never saved */ } else if (strcmp(name, "psw") == 0) str_n_cpy(get_http_auth_psw(), value, PSW_MAXLEN); else if (strcmp(name, "useproxy") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else { prm->use_proxy = value[0]; set_use_proxy(value[0] == 'y' ? TRUE : FALSE); } } else if (strcmp(name, "proxyhost") == 0) { str_n_cpy(prm->proxy_host, value, PROXY_HOST_MAXLEN); str_n_cpy(get_proxy_host(), value, PROXY_HOST_MAXLEN); } else if (strcmp(name, "proxyport") == 0) { str_n_cpy(prm->proxy_port, value, PROXY_PORT_MAXLEN); str_n_cpy(get_proxy_port(), value, PROXY_PORT_MAXLEN); } else if (strcmp(name, "useproxyauth") == 0) { if (strcmp(value, "y") != 0 && strcmp(value, "n") != 0) { fprintf(STD_ERR, "Invalid value: %s\n", option); exit_status = OPTION_VALUE_INVALID; } else { prm->use_proxy_authentication = value[0]; set_use_proxy_auth(value[0] == 'y' ? TRUE : FALSE); } } else if (strcmp(name, "proxyuser") == 0) { str_n_cpy(prm->proxy_user, value, PROXY_USER_MAXLEN); str_n_cpy(get_proxy_auth_user(), value, PROXY_USER_MAXLEN); /* This option is never saved */ } else if (strcmp(name, "proxypsw") == 0) str_n_cpy(get_proxy_auth_psw(), value, PROXY_PSW_MAXLEN); /* Connect params until here */ /* This option is only set from command line */ else if (strcmp(name, "instance-id") == 0) ;/* Does nothing but avoid an 'unknown option' warning/error */ /* This option is only set from command line */ else if (strcmp(name, "no-ui") == 0) ;/* Does nothing but avoid an 'unknown option' warning/error */ else { fprintf(STD_ERR, "Unknown option: %s\n", option); exit_status = OPTION_UNKNOWN; } compact_font(tmp_font, fname, fsize); str_n_cpy(prm->font_n_s, tmp_font, FONT_MAXLEN); compact_font(tmp_font, cfname, cfsize); str_n_cpy(prm->clock_font_n_s, tmp_font, FONT_MAXLEN); return exit_status; } void save_to_config_file(const Params *prm) { FILE *conf_fp; char fname[FONT_NAME_MAXLEN + 1], fsize[FONT_SIZE_MAXLEN + 1]; char cfname[FONT_NAME_MAXLEN + 1], cfsize[FONT_SIZE_MAXLEN + 1]; char tmp[4 * 1024]; if ((conf_fp = g_fopen(get_datafile_full_name_from_name(CONFIG_FILE), "wb")) != NULL) { split_font(prm->font_n_s, fname, fsize); split_font(prm->clock_font_n_s, cfname, cfsize); snprintf(tmp, 4 * 1024, "%s%s%s", /* All *string* values are saved inclosed in a pair of ". */ "-delay=%d\n" "-shiftsize=%d\n" "-fontname=\"%s\"\n" "-fontsize=%d\n" "-fgcolor=\"%s\"\n" "-bgcolor=\"%s\"\n" "-setgradientbg=%c\n" "-bgcolor2=\"%s\"\n" "-disablescreenlimits=%c\n" "-win_x=%d\n" "-win_y=%d\n" "-win_w=%d\n" "-win_h=%d\n" "-windec=%c\n" "-alwaysontop=%c\n" "-wintransparency=%d\n" "-iconintaskbar=%c\n" "-winsticky=%c\n" "-shadow=%c\n" "-shadowoffset_x=%d\n", "-shadowoffset_y=%d\n" "-shadowfx=%d\n" "-linedelimiter=\"%s\"\n" "-cutlinedelimiter=\"%s\"\n" "-specialchars=%c\n" "-newpgchar=%c\n" "-tabchar=%c\n" "-rssrefresh=%d\n" "-feedtitle=%c\n" "-feedtitledelimiter=\"%s\"\n" "-itemtitle=%c\n" "-itemtitledelimiter=\"%s\"\n" "-itemdescription=%c\n" "-itemdescriptiondelimiter=\"%s\"\n" "-nitemsperfeed=%d\n" "-rmtags=%c\n" "-uppercasetext=%c\n" "-homefeed=\"%s\"\n" "-openlinkcmd=\"%s\"\n" "-openlinkargs=\"%s\"\n", "-clock=%c\n" "-clockfontname=\"%s\"\n" "-clockfontsize=%d\n" "-clockfgcolor=\"%s\"\n" "-clockbgcolor=\"%s\"\n" "-setclockgradientbg=%c\n" "-clockbgcolor2=\"%s\"\n" "-disablepopups=%c\n" "-pauseonmouseover=%c\n" "-disableleftclick=%c\n" "-mousewheelscroll=%c\n" "-sfpickercloseswhenpointerleaves=%c\n" "-enablefeedordering=%c\n" "-useauth=%c\n" "-user=\"%s\"\n" "-useproxy=%c\n" "-proxyhost=\"%s\"\n" "-proxyport=\"%s\"\n" "-useproxyauth=%c\n" "-proxyuser=\"%s\"\n" ); fprintf(conf_fp, tmp, prm->delay, prm->shift_size, fname, atoi(fsize), get_hexstr_from_gdk_color(&prm->fg_color, &prm->fg_color_alpha), get_hexstr_from_gdk_color(&prm->bg_color, &prm->bg_color_alpha), prm->set_gradient_bg, get_hexstr_from_gdk_color(&prm->bg_color2, &prm->bg_color2_alpha), prm->disable_screen_limits, prm->win_x, prm->win_y, prm->win_w, prm->win_h, prm->windec, prm->always_on_top, (int)(prm->win_transparency * 10), prm->icon_in_taskbar, prm->win_sticky, prm->shadow, prm->shadow_offset_x, prm->shadow_offset_y, prm->shadow_fx, prm->line_delimiter, prm->cutline_delimiter, prm->special_chars, prm->new_page_char, prm->tab_char, prm->rss_refresh, prm->feed_title, prm->feed_title_delimiter, prm->item_title, prm->item_title_delimiter, prm->item_description, prm->item_description_delimiter, prm->n_items_per_feed, prm->strip_html_tags, prm->upper_case_text, prm->homefeed, prm->open_link_cmd, prm->open_link_args, prm->clock, cfname, atoi(cfsize), get_hexstr_from_gdk_color(&prm->clock_fg_color, &prm->clock_fg_color_alpha), get_hexstr_from_gdk_color(&prm->clock_bg_color, &prm->clock_bg_color_alpha), prm->set_clock_gradient_bg, get_hexstr_from_gdk_color(&prm->clock_bg_color2, &prm->clock_bg_color2_alpha), prm->disable_popups, prm->pause_on_mouseover, prm->disable_leftclick, prm->mouse_wheel_scroll, prm->sfpicker_closes_when_pointer_leaves, prm->enable_feed_ordering, prm->use_authentication, prm->user, prm->use_proxy, prm->proxy_host, prm->proxy_port, prm->use_proxy_authentication, prm->proxy_user ); fclose(conf_fp); } else warning(FALSE, 4, "Can't save configuration file ", get_datafile_full_name_from_name(CONFIG_FILE), ": ", strerror(errno)); } /* * Options colors are coded as 4 hexa values -> #rrggbbaa */ int get_gdk_color_from_hexstr(const char *str, GdkColor *color, guint16 *color_alpha) { char tmp[3], *tailptr; int errflag = 0; if (strlen(str) != 9 && str[0] != '#') errflag = 1; else { str_n_cpy(tmp, str + 1, 2); color->red = strtoul(tmp, &tailptr, 16) * 0x100; if (tailptr == tmp) errflag = 1; str_n_cpy(tmp, str + 3, 2); color->green = strtoul(tmp, &tailptr, 16) * 0x100; if (tailptr == tmp) errflag = 1; str_n_cpy(tmp, str + 5, 2); color->blue = strtoul(tmp, &tailptr, 16) * 0x100; if (tailptr == tmp) errflag = 1; str_n_cpy(tmp, str + 7, 2); *color_alpha = strtoul(tmp, &tailptr, 16) * 0x100; if (tailptr == tmp) errflag = 1; } if (errflag != 0) { fprintf(STD_ERR, "Invalid color: %s\n", str); return FALSE; } else return TRUE; } /* * Options colors are coded as 4 hexa values -> #rrggbbaa * *** allow up to 64 simultaneous calls *** */ const char *get_hexstr_from_gdk_color(const GdkColor *color, const guint16 *color_alpha) { static char str[64][10]; static int count = -1; count++; count &= 63; snprintf(str[count], 10, "#%02x%02x%02x%02x", color->red / 256, color->green / 256, color->blue / 256, *color_alpha / 256); if (strlen(str[count]) != 9) return NULL; else return (const char *)str[count]; } /* * Space needed for font_name: FONT_NAME_MAXLEN + 1 bytes / font_size: FONT_SIZE_MAXLEN + 1 bytes */ void split_font(const char *font_name_size, char *font_name, char *font_size) { char tmp[FONT_MAXLEN + 1]; int i; if (font_name_size[0] == '\0') { font_name[0] = '\0'; font_size[0] = '\0'; } else { str_n_cpy(tmp, font_name_size, FONT_MAXLEN); for (i = strlen(tmp) - 1; i > 0 ; i--) if (tmp[i] == ' ') { tmp[i] = '\0'; break; } str_n_cpy(font_name, tmp, FONT_NAME_MAXLEN); str_n_cpy(font_size, tmp + strlen(font_name) + 1, FONT_SIZE_MAXLEN); } } /* * Space needed for font_name_size: FONT_NAME_MAXLEN + 1 space + FONTSIZENMAXLEN + 1 bytes */ void compact_font(char *font_name_size, const char *font_name, const char *font_size) { if (font_name[0] == '\0' && font_size[0] == '\0') { font_name_size[0] = '\0'; } else { str_n_cpy(font_name_size, font_name, FONT_NAME_MAXLEN); str_n_cat(font_name_size, " ", 1); str_n_cat(font_name_size, font_size, FONT_SIZE_MAXLEN); } } tickr_0.6.4.orig/src/tickr/tickr_helptext.c0000644000175000017500000003110412147427510020344 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" static const char *help_str0[] = { "USER INTERFACE MAIN FEATURES:\n\n", "- To open the main menu, right-click inside ticker area.\n\n", "- You can import feed subscriptions with 'File > Import Feed List (OPML)',\n", "for instance your Google Reader subscriptions.\n\n", "- To open a link in your browser, left-click on text.\n\n", "- Use mouse wheel to either adjust the ticker scrolling speed or open the\n", "'Selected Feed Picker' window to quickly move between selected feeds (if set,\n", "Ctrl + mouse wheel scrolling applies to other value.)\n", "This behaviour is set in the 'Preferences' window as 'Mouse wheel scrolling\n", "applies to'.\n\n", "- Basically, you will use 'File > Open RSS Feed' to choose a feed from a\n", "list, subscribe to a new one, manage your feed list, and 'Edit > Preferences'\n", "to tweak the ticker appearance as well as other settings.\n\n", "- 'Window - always on top' -> check this if you want the ticker to always\n", "stay above your browser (and any other windows.)\n\n", "- 'Window - decorated' -> if you want a 'draggable' ticker.\n\n", "There is a sample list of already subscribed feeds that you can use.\n\n", "***ONLY*** in case you're using the ticker inside a ***decorated*** window,\n", "you can use these keyboard shortcuts:\n\n", "- R to open the 'RSS Feed Picker' window (to choose a feed or to\n", "subscribe to a new one.)\n\n", "- T to open a text file.\n\n", "- I to import (and merge) an URL list from an OPML file.\n\n", "- E to export the URL list to an OPML file.\n\n", "- P to open the 'Resource Properties' window.\n\n", "- Q to quit.\n\n", "- S to open the 'Preferences' (Settings) window.\n\n", "- B to open the link displayed inside the ticker (in the middle.)\n\n", "- J to play the feed / K to pause / L to reload.\n\n", "- U (speed Up) / D (speed Down) to adjust tscrolling speed on\n", "the fly.\n\n", "- F1 to open the 'Quick Help' window.\n\n", "- H to launch the 'Online Help' (this very page.)\n\n", "- A to open the 'About' window and the License window.\n\n\n", "COMMAND LINE REFERENCE:\n\n", NULL}; static const char *help_str1[] = { APP_NAME "-" APP_VERSION_NUMBER " - GTK-based highly graphically-customizable Feed Ticker\n", "Copyright (C) 2009-2013 Emmanuel Thomas-Maurin \n\n", APP_NAME " is a GTK-based RSS/Atom Reader that displays feeds as a smooth\n" "scrolling line on your Desktop, as known from TV stations. Open feed\n" "links in your favourite Browser. Graphics are highly customizable.\n\n" "Usage:\n", " " APP_CMD " [-help/-version/-license/-instance-id=n/-no-ui/-dumpfontlist]\n", " [options (-name[=value])...] [resource (file name or URL)]\n\n", " help Get this help page\n\n", " version Print out version number\n\n", " license Print out license\n\n", " instance-id=n n = 1 to 99 - Use this when launching\n", " several instances simultaneously, each\n", " instance using its own config and dump\n", " files (to be effective, instance-id must\n", " be the 1st argument)\n\n", " no-ui Disable opening of UI elements which can\n", " modify settings and/or URL list/\n", " selection\n\n", " dumpfontlist Send list of available fonts to stdout\n\n", "Options:\n", " delay=n Delay in milliseconds\n\n", " shiftsize=n Shift size in pixels\n\n", " fgcolor=#rrggbbaa Foreground 32-bit hexa color\n\n", " bgcolor=#rrggbbaa Background 32-bit hexa color\n\n", " setgradientbg=[y/n] Set gradient background\n\n", " bgcolor2=#rrggbbaa Background 32-bit hexa color2\n\n", " fontname='str' Font name\n\n", " fontsize=n Font size (can't be > 200)\n\n", /* check this is up to date */ " disablescreenlimits=[y/n] Allow win_y and win_w to be greater than\n" " screen dimensions\n\n", " win_x=n Window position - x\n\n", " win_y=n Window position - y\n\n", " win_w=n Window width\n\n", " win_h=n Window height (compute font size if > 0)\n\n", " windec=[y/n] Window decoration\n\n", " alwaysontop=[y/n] Window always-on-top\n\n", " wintransparency=n Actually window opacity from 1 to 10\n", " (0 = none -> 10 = full)\n\n", " iconintaskbar=[y/n] Icon in taskbar\n\n", " winsticky=[y/n] Visible on all user desktops\n\n", " shadow=[y/n] Apply shadow to text\n\n", " shadowoffset_x=n Shadow x offset in pixels\n\n", " shadowoffset_y=n Shadow y offset in pixels\n\n", " shadowfx=n Shadow effect (0 = none -> 10 = full)\n\n", " linedelimiter='str' String to be appended at end of line\n\n", " cutlinedelimiter='str' String to be appended after a cut line\n\n", " specialchars=[y/n] Enable or disable special characters.\n", " This is only useful when resource is a\n", " file, not an URL\n\n", " newpgchar=c 'New page' special character\n\n", " tabchar=c 'Tab' (8 spaces) special character\n\n", " rssrefresh=n Refresh rate in minutes (if no TTL\n", " inside feed / always applies for files)\n\n", " feedtitle=[y/n] Show or hide feed title\n\n", " feedtitledelimiter='str' String to be appended after feed title\n\n", " itemtitle=[y/n] Show or hide item title\n\n", " itemtitledelimiter='str' String to be appended after item title\n\n", " itemdescription=[y/n] Show or hide item description\n\n", " itemdescriptiondelimiter='str' String to be appended after item\n", " description\n\n", " nitemsperfeed=n Read N items max per feed\n\n", " rmtags=[y/n] Strip html tags\n\n", " uppercasetext=[y/n] Set all text to upper case\n\n", " homefeed='str' Set URL as 'homefeed' = homepage\n", " (from command line, not automatically\n", " saved, so a little bit useless...)\n\n", " openlinkcmd='str' 'Open in Browser' command line:\n", " Application that will open active link\n", " (may require path.) Most likely will\n", " invoke your favourite browser\n\n", " openlinkargs='str' 'Open in Browser' optional arguments\n\n", " clock=[l/r/n] Clock location: left / right / none\n\n", " clockfontname='str' Clock font name\n\n", " clockfontsize=n Clock font size (can't be > ticker\n", " height)\n\n", " clockfgcolor=#rrggbbaa Clock foreground 32-bit hexa color\n\n", " clockbgcolor=#rrggbbaa Clock background 32-bit hexa color\n\n", " setclockgradientbg=[y/n] Set clock gradient background\n\n", " clockbgcolor2=#rrggbbaa Clock background 32-bit hexa color2\n\n", " disablepopups=[y/n] Disable error/warning popup windows\n\n", " pauseonmouseover=[y/n] Pause ticker on mouseover\n\n", " disableleftclick=[y/n] Disable left-click\n\n", " mousewheelscroll=[s/f/n] Mouse wheel scrolling applies to:\n", " (ticker-)speed / feed(-in-list) / none\n", " (if set, Ctrl + mouse wheel scrolling\n", " applies to other value)\n\n", " sfpickercloseswhenpointerleaves=[y/n]\n", " Selected feed picker closes when pointer\n", " leaves\n\n", " enablefeedordering=[y/n] Enable feed re-ordering (by user)\n\n", " useauth=[y/n] Use HTTP basic authentication\n\n", " user='str' User\n\n", " psw='str' Password (never saved)\n\n", " useproxy=[y/n] Connect through proxy\n\n", " proxyhost='str' Proxy host\n\n", " proxyport='str' Proxy port\n\n", " useproxyauth=[y/n] Use proxy authentication\n\n", " proxyuser='str' Proxy user\n\n", " proxypsw='str' Proxy password (never saved)\n\n", "Mouse usage:\n" " To open the main menu, right-click inside ticker area.\n\n", " You can import feed subscriptions from another feed reader with\n", " 'File > Import Feed List (OPML)'.\n\n", " To open a link in your browser, left-click on text.\n\n", " Use mouse wheel to either adjust ticker scrolling speed or open the\n", " 'Selected Feed Picker' window to quickly move between selected feeds\n", " (and use Ctrl + mouse wheel for the other option.)\n\n", "The default browser is Firefox on Linux. You may change this setting to your\n", "favourite one in the Preferences window.\n\n", APP_NAME " parses command line arguments and looks for option(s) then for one\n", "resource, the rest of the line is ignored. It reads too configuration file\n", #ifndef G_OS_WIN32 "'" APP_CMD "-conf' located in /home//" TICKR_DIR_NAME "/ if it exists (or\n", "'" APP_CMD "-conf' if an instance id has been set to n.)\n\n", #else "'" APP_CMD "-conf' located in " TICKR_DIR_NAME "/ if it exists (or\n", "'" APP_CMD "-conf' if an instance id has been set to n.)\n\n", #endif "Command line options override configuration file ones which override default\n", "ones.\n\n", "Compiled with GTK+ and Libxml2 on " __DATE__ " - " __TIME__ "\n", "\nVisit " WEBSITE_URL " for more info.\n", NULL}; static const char *license_str1[] = { APP_NAME " version " APP_VERSION_NUMBER " - Copyright (C) Emmanuel Thomas-Maurin 2009-2013\n\n", APP_NAME " is free software: you can redistribute it and/or modify\n", "it under the terms of the GNU General Public License as published by\n", "the Free Software Foundation, either version 3 of the License, or\n", "(at your option) any later version.\n\n", APP_NAME " is distributed in the hope that it will be useful,\n", "but WITHOUT ANY WARRANTY; without even the implied warranty of\n", "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n", "GNU General Public License for more details.\n\n", "You should have received a copy of the GNU General Public License\n", "along with this program. If not, see ", NULL}; static const char *license_str2 = "http://www.gnu.org/licenses/\n"; const char** get_help_str0() { return help_str0; } const char** get_help_str1() { return help_str1; } const char** get_license_str1() { return license_str1; } const char* get_license_str2() { return license_str2; } tickr_0.6.4.orig/src/tickr/Makefile-tickr-linux0000751000175000017500000000213712147427510021061 0ustar manutmmanutm# Makefile for TICKR - GTK-based Feed Reader - Linux version src = tickr_main.c tickr_resource.c tickr_render.c tickr_params.c\ tickr_clock.c tickr_feedparser.c tickr_list.c tickr_feedpicker.c\ tickr_prefwin.c tickr_otherwins.c tickr_misc.c tickr_helptext.c\ tickr_opml.c tickr_http.c tickr_socket.c tickr_connectwin.c\ tickr_quickfeedpicker.c tickr_quicksetup.c tickr_check4updates.c obj = $(src:.c=.o) CC = gcc CFLAGS = -O2 -Wall -Wextra -Wunused-parameter -Wshadow -Wpointer-arith\ -ffast-math -pedantic `pkg-config --cflags gtk+-2.0`\ xml2-config --cflags` -I/usr/local/include LIBS = ../libetm-0.4.4/libetm.a `pkg-config --libs gtk+-2.0`\ `xml2-config --libs` all: tickr $(obj): $(src) news.h Makefile $(CC) $(CFLAGS) -c $(src) tickr: $(obj) $(CC) -o tickr $(obj) $(LIBS) .PHONY: install install: sudo cp tickr /usr/bin/ sudo mkdir -p /usr/share/tickr sudo mkdir -p /usr/share/tickr/pixmaps sudo cp ../../images/tickr-*.png /usr/share/tickr/pixmaps/ .PHONY: uninstall uninstall: sudo rm /usr/bin/tickr sudo rm /usr/share/tickr/pixmaps/tickr-*.png .PHONY: clean clean: rm -f $(obj) tickr tickr_0.6.4.orig/src/tickr/tickr_prefwin.c0000640000175000017500000015066412147427510020172 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" #define BLANK_STR_1 " " #define BLANK_STR_2 " " #define LABEL1(str) str ":" BLANK_STR_1 #define LABEL2(str1, str2) str1 " (" str2 "):" BLANK_STR_1 /* These variables and widgets are all set as static global for convenience. */ static TickerEnv *env; static gchar current_url[FILE_NAME_MAXLEN + 1]; static GtkWidget *dialog, *sc_win, *entry_homefeed; static GtkWidget *table, *label[128], *hbox1, *hbox2, *hbox3; /* This should be enough but check anyways */ static GtkWidget *cancel_but, *reset_but, *apply_but, *ok_but; static GtkWidget *top_but, *bottom_but, *fullwidth_but, *curfeed_but; static GtkWidget *spinbut_delay, *spinbut_shiftsize; static GtkWidget *spinbut_winx, *spinbut_winy, *spinbut_winw, *spinbut_winh; static GtkWidget *checkbut_disablescreenlimits; static GtkWidget *checkbut_setgradientbg, *checkbut_setclockgradientbg; static GtkWidget *checkbut_windec, *checkbut_iconintaskbar, *checkbut_winsticky; static GtkWidget *spinbut_shadowoffsetx, *spinbut_shadowoffsety; static GtkWidget *spinbut_shadowfx, *spinbut_rssrefresh; static GtkWidget *spinbut_wintransparency, *spinbut_nitemsperfeed; static GtkWidget *checkbut_shadow, *checkbut_alwaysontop, *checkbut_windec; static GtkWidget *checkbut_spchars; static GtkWidget *checkbut_feedtitle, *checkbut_itemtitle, *checkbut_itemdes; /*static GtkWidget *checkbut_; ALPHA */ static GtkWidget *checkbut_striptags, *checkbut_uppercase, *checkbut_nopopups; static GtkWidget *checkbut_mouseover, *checkbut_noleftclick; static GtkWidget *checkbut_sfpickercloseswhenpointerleaves, *checkbut_feedordering; static GtkWidget *font_but, *clock_font_but; static GtkWidget *fg_color_but, *bg_color_but, *bg_color2_but; static GtkWidget *clock_fg_color_but, *clock_bg_color_but, *clock_bg_color2_but; static GtkWidget *rbut_box1, *radio_but1_1, *radio_but1_2, *radio_but1_3; static GtkWidget *rbut_box2, *radio_but2_1, *radio_but2_2, *radio_but2_3; static GtkWidget *entry_linedel, *entry_cutlinedel, *entry_newpagech, *entry_tabch; static GtkWidget *entry_feedtitledel, *entry_itemtitledel, *entry_itemdesdel; static GtkWidget *entry_openlinkcmd, *entry_openlinkargs; static GtkObject *adj_delay, *adj_shiftsize, *adj_winx, *adj_winy; static GtkObject *adj_winw, *adj_winh, *adj_shadowoffsetx, *adj_shadowfx; static GtkObject *adj_shadowoffsety, *adj_rssrefresh; static GtkObject *adj_wintransparency, *adj_nitemsperfeed; static gint update_win_y_w_adj(GtkWidget *widget) { int disable_screen_limits; widget = widget; if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_disablescreenlimits))) disable_screen_limits = TRUE; else disable_screen_limits = FALSE; gtk_adjustment_set_upper(GTK_ADJUSTMENT(adj_winy), disable_screen_limits ? WIN_MAX_Y : env->screen_h); gtk_adjustment_set_upper(GTK_ADJUSTMENT(adj_winw), disable_screen_limits ? WIN_MAX_W : env->screen_w); gtk_adjustment_changed(GTK_ADJUSTMENT(adj_winy)); gtk_adjustment_changed(GTK_ADJUSTMENT(adj_winw)); gtk_spin_button_update(GTK_SPIN_BUTTON(spinbut_winy)); gtk_spin_button_update(GTK_SPIN_BUTTON(spinbut_winw)); return TRUE; } static gint move_to_top(GtkWidget *widget) { widget = widget; gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbut_winy), 0); return TRUE; } static gint move_to_bottom(GtkWidget *widget) { char font_n_s[FONT_MAXLEN + 1]; char fname[FONT_NAME_MAXLEN + 1], fsize[FONT_SIZE_MAXLEN + 1]; gint requested_font_size, requested_h, y_bottom; /* We backup this param first because... */ char disable_popups_bak = get_params()->disable_popups; /* ...we want this window to always popup */ get_params()->disable_popups = 'n'; widget = widget; /* We need to know requested ticker height */ requested_h = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_winh)); if (requested_h > 0 && requested_h < DRWA_HEIGHT_MIN) requested_h = DRWA_HEIGHT_MIN; else if (requested_h == 0) { /* Compute ticker height from requested font size */ str_n_cpy(font_n_s, (char *)gtk_font_button_get_font_name(GTK_FONT_BUTTON(font_but)), FONT_MAXLEN); split_font(font_n_s, fname, fsize); /* In all cases, font size can't be > FONT_MAXSIZE */ requested_font_size = MIN(atoi(fsize), FONT_MAXSIZE); snprintf(fsize, FONT_SIZE_MAXLEN + 1, "%3d", requested_font_size); compact_font(font_n_s, fname, fsize); requested_h = get_layout_height_from_fnamesize(font_n_s); } y_bottom = env->screen_h - requested_h; #ifndef G_OS_WIN32 /* How to get taskbar height on Linux ? */ warning(FALSE, 3, "Taskbar height: Will use ", itoa2(ARBITRARY_TASKBAR_HEIGHT), " pixels arbitrary value - Please adjust as necessary afterwards"); y_bottom -= ARBITRARY_TASKBAR_HEIGHT; #else if (get_win32_taskbar_height() != -1) y_bottom -= get_win32_taskbar_height(); else { warning(FALSE, 3, "Couldn't compute Taskbar height: Will use ", itoa2(ARBITRARY_TASKBAR_HEIGHT), " pixels arbitrary value - Please adjust as necessary afterwards"); y_bottom -= ARBITRARY_TASKBAR_HEIGHT; } #endif gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbut_winy), y_bottom); get_params()->disable_popups = disable_popups_bak; return TRUE; } static gint set_full_width(GtkWidget *widget) { widget = widget; gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbut_winw), env->screen_w); /* Will also push ticker in left corner */ gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbut_winx), 0); return TRUE; } static gint get_current_url(GtkWidget *widget) { widget = widget; gtk_entry_set_text(GTK_ENTRY(entry_homefeed), current_url); return TRUE; } /* * Open a dialog to edit all params. * Return 0 or 1 if we want to immediately reopen the dialog. */ int modify_params(Params *prm) { char c[2]= "c"; gint response; int changes_have_been_applied, exit_status = 0, i; Params *prm_bak; env = get_ticker_env(); str_n_cpy(current_url, get_resource()->id, FILE_NAME_MAXLEN); gtk_window_set_keep_above(GTK_WINDOW(env->win), FALSE); dialog = gtk_dialog_new_with_buttons( "Preferences", GTK_WINDOW(env->win), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, NULL); set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); sc_win = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sc_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), sc_win); cancel_but = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL_CLOSE); reset_but = gtk_dialog_add_button(GTK_DIALOG(dialog), "Reset", GTK_RESPONSE_NO); /* Strange... */ /* We only have 'OK', which apply ***and*** save settings. */ ok_but = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_OK, GTK_RESPONSE_OK); apply_but = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_APPLY, GTK_RESPONSE_APPLY); table = gtk_table_new(17, 5, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 5); gtk_table_set_col_spacings(GTK_TABLE(table), 0); gtk_container_set_border_width(GTK_CONTAINER(table), 15); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sc_win), table); /* Whole window must be visible on netbooks as well */ gtk_widget_set_size_request(sc_win, 1000, 450); i = 0; #define COLUMN1 0, 1 #define COLUMN2 1, 2 #define COLUMN3 2, 3 /* * Delay */ label[i] = gtk_label_new(LABEL2("Delay", "Milliseconds")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); adj_delay = gtk_adjustment_new(prm->delay, 1, 50, 1, 5, 0); spinbut_delay = gtk_spin_button_new(GTK_ADJUSTMENT(adj_delay), 0.0, 0); gtk_table_attach_defaults(GTK_TABLE(table), spinbut_delay, COLUMN2, i, i + 1); i++; /* * Shift size */ label[i] = gtk_label_new(LABEL2("Shift size", "Pixels")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); adj_shiftsize = gtk_adjustment_new(prm->shift_size, 1, 200, 1, 5, 0); spinbut_shiftsize = gtk_spin_button_new(GTK_ADJUSTMENT(adj_shiftsize), 0.0, 0); gtk_table_attach_defaults(GTK_TABLE(table), spinbut_shiftsize, COLUMN2, i, i + 1); i++; /* * Font */ label[i] = gtk_label_new(LABEL2("Font", "Size can't be > 200")); /* Check this is up to date */ gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); font_but = gtk_font_button_new_with_font(prm->font_n_s); gtk_table_attach_defaults(GTK_TABLE(table), font_but, COLUMN2, i, i + 1); i++; /* * fg color */ label[i] = gtk_label_new(LABEL1("Foreground color")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); fg_color_but = gtk_color_button_new_with_color(&prm->fg_color); gtk_color_button_set_use_alpha(GTK_COLOR_BUTTON(fg_color_but), TRUE); gtk_color_button_set_alpha(GTK_COLOR_BUTTON(fg_color_but), prm->fg_color_alpha); gtk_table_attach_defaults(GTK_TABLE(table), fg_color_but, COLUMN2, i, i + 1); i++; /* * bg color */ label[i] = gtk_label_new(LABEL1("Background color")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); bg_color_but = gtk_color_button_new_with_color(&prm->bg_color); gtk_color_button_set_use_alpha(GTK_COLOR_BUTTON(bg_color_but), TRUE); gtk_color_button_set_alpha(GTK_COLOR_BUTTON(bg_color_but), prm->bg_color_alpha); gtk_table_attach_defaults(GTK_TABLE(table), bg_color_but, COLUMN2, i, i + 1); i++; /* * Set gradient bg */ label[i] = gtk_label_new(LABEL1("Set gradient background")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_setgradientbg = gtk_check_button_new(); if (prm->set_gradient_bg == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_setgradientbg), TRUE); else if (prm->set_gradient_bg == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_setgradientbg), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_setgradientbg, COLUMN2, i, i + 1); i++; /* * bg color2 */ label[i] = gtk_label_new(LABEL1("Background color2")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); bg_color2_but = gtk_color_button_new_with_color(&prm->bg_color2); gtk_color_button_set_use_alpha(GTK_COLOR_BUTTON(bg_color2_but), TRUE); gtk_color_button_set_alpha(GTK_COLOR_BUTTON(bg_color2_but), prm->bg_color2_alpha); gtk_table_attach_defaults(GTK_TABLE(table), bg_color2_but, COLUMN2, i, i + 1); i++; /* * Disable screen limits */ label[i] = gtk_label_new(LABEL2("Disable screen limits", "Y position / Width")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_disablescreenlimits = gtk_check_button_new(); if (prm->disable_screen_limits == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_disablescreenlimits), TRUE); else if (prm->disable_screen_limits == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_disablescreenlimits), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_disablescreenlimits, COLUMN2, i, i + 1); i++; /* * win_x */ label[i] = gtk_label_new(LABEL2("X position", "Pixels")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); adj_winx = gtk_adjustment_new(prm->win_x, 0, env->screen_w - 20, 1, 5, 0); spinbut_winx = gtk_spin_button_new(GTK_ADJUSTMENT(adj_winx), 0.0, 0); gtk_table_attach_defaults(GTK_TABLE(table), spinbut_winx, COLUMN2, i, i + 1); i++; /* * win_y */ hbox1 = gtk_hbox_new(FALSE, 0); label[i] = gtk_label_new(LABEL2("Y position", "Pixels")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox1), label[i], FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox1), gtk_label_new(NULL), TRUE, FALSE, 0); top_but = gtk_button_new_with_label("Top"); gtk_box_pack_start(GTK_BOX(hbox1), top_but, FALSE, FALSE, 0); bottom_but = gtk_button_new_with_label("Bottom"); gtk_box_pack_start(GTK_BOX(hbox1), bottom_but, FALSE, FALSE, 0); gtk_table_attach_defaults(GTK_TABLE(table), hbox1, COLUMN1, i, i + 1); adj_winy = gtk_adjustment_new(prm->win_y, 0, (prm->disable_screen_limits == 'y' ? WIN_MAX_Y : env->screen_h), 1, 5, 0); spinbut_winy = gtk_spin_button_new(GTK_ADJUSTMENT(adj_winy), 0.0, 0); gtk_table_attach_defaults(GTK_TABLE(table), spinbut_winy, COLUMN2, i, i + 1); i++; /* * win_w */ hbox2 = gtk_hbox_new(FALSE, 0); label[i] = gtk_label_new(LABEL2("Width", "Pixels")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox2), label[i], FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox2), gtk_label_new(NULL), TRUE, FALSE, 0); fullwidth_but = gtk_button_new_with_label("Full width"); gtk_box_pack_start(GTK_BOX(hbox2), fullwidth_but, FALSE, FALSE, 0); gtk_table_attach_defaults(GTK_TABLE(table), hbox2, COLUMN1, i, i + 1); adj_winw = gtk_adjustment_new(prm->win_w, DRWA_WIDTH_MIN, (prm->disable_screen_limits == 'y' ? WIN_MAX_W : env->screen_w), 1, 5, 0); spinbut_winw = gtk_spin_button_new(GTK_ADJUSTMENT(adj_winw), 0.0, 0); gtk_table_attach_defaults(GTK_TABLE(table), spinbut_winw, COLUMN2, i, i + 1); i++; /* * win_h */ label[i] = gtk_label_new(LABEL2("Height", "Pixels - Override font size if > 0")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); adj_winh = gtk_adjustment_new(prm->win_h, 0, env->screen_h, 1, 5, 0); spinbut_winh = gtk_spin_button_new(GTK_ADJUSTMENT(adj_winh), 0.0, 0); gtk_table_attach_defaults(GTK_TABLE(table), spinbut_winh, COLUMN2, i, i + 1); i++; /* * windec */ label[i] = gtk_label_new(LABEL1("Window decoration")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_windec = gtk_check_button_new(); if (prm->windec == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_windec), TRUE); else if (prm->windec == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_windec), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_windec, COLUMN2, i, i + 1); i++; /* * Window always-on-top */ label[i] = gtk_label_new(LABEL1("Window Always-On-Top")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_alwaysontop = gtk_check_button_new(); if (prm->always_on_top == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_alwaysontop), TRUE); else if (prm->always_on_top == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_alwaysontop), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_alwaysontop, COLUMN2, i, i + 1); i++; /* * Window transparency */ label[i] = gtk_label_new(LABEL2("Window opacity", "x 10")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); /* transparency set from gui ranges from 1 (0.1) to 10 (1.0) / 0.0 (invisible!) is kind of "useless" */ adj_wintransparency = gtk_adjustment_new(prm->win_transparency * 10, 1, 10, 1, 2, 0); spinbut_wintransparency = gtk_spin_button_new(GTK_ADJUSTMENT(adj_wintransparency), 0.0, 0); gtk_table_attach_defaults(GTK_TABLE(table), spinbut_wintransparency, COLUMN2, i, i + 1); i++; /* * Icon in taskbar */ label[i] = gtk_label_new(LABEL1("Icon in Taskbar")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_iconintaskbar = gtk_check_button_new(); if (prm->icon_in_taskbar == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_iconintaskbar), TRUE); else if (prm->icon_in_taskbar == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_iconintaskbar), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_iconintaskbar, COLUMN2, i, i + 1); i++; /* * Window sticky */ label[i] = gtk_label_new(LABEL1("Visible on all User Desktops")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_winsticky = gtk_check_button_new(); if (prm->win_sticky == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_winsticky), TRUE); else if (prm->win_sticky == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_winsticky), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_winsticky, COLUMN2, i, i + 1); i++; /* * Shadow */ label[i] = gtk_label_new(LABEL1("Shadow")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_shadow = gtk_check_button_new(); if (prm->shadow == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_shadow), TRUE); else if (prm->shadow == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_shadow), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_shadow, COLUMN2, i, i + 1); i++; /* * shadow_offset_x */ label[i] = gtk_label_new(LABEL2("Shadow x offset", "Pixels")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); adj_shadowoffsetx = gtk_adjustment_new(prm->shadow_offset_x, -20, 20, 1, 5, 0); spinbut_shadowoffsetx = gtk_spin_button_new(GTK_ADJUSTMENT(adj_shadowoffsetx), 0.0, 0); gtk_table_attach_defaults(GTK_TABLE(table), spinbut_shadowoffsetx, COLUMN2, i, i + 1); i++; /* * shadow_offset_y */ label[i] = gtk_label_new(LABEL2("Shadow y offset", "Pixels")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); adj_shadowoffsety = gtk_adjustment_new(prm->shadow_offset_y, -20, 20, 1, 5, 0); spinbut_shadowoffsety = gtk_spin_button_new(GTK_ADJUSTMENT(adj_shadowoffsety), 0.0, 0); gtk_table_attach_defaults(GTK_TABLE(table), spinbut_shadowoffsety, COLUMN2, i, i + 1); i++; /* * shadow_fx */ label[i] = gtk_label_new(LABEL2("Shadow fx", "0 = none -> 10 = full")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); adj_shadowfx = gtk_adjustment_new(prm->shadow_fx, 0, 10, 1, 5, 0); spinbut_shadowfx = gtk_spin_button_new(GTK_ADJUSTMENT(adj_shadowfx), 0.0, 0); gtk_table_attach_defaults(GTK_TABLE(table), spinbut_shadowfx, COLUMN2, i, i + 1); i++; /* * Line delimiter */ label[i] = gtk_label_new(LABEL1("Line delimiter")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); entry_linedel = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_linedel), DELIMITER_MAXLEN); gtk_entry_set_text(GTK_ENTRY(entry_linedel), prm->line_delimiter); gtk_table_attach_defaults(GTK_TABLE(table), entry_linedel, COLUMN2, i, i + 1); i++; /* * Cut line delimiter */ label[i] = gtk_label_new(LABEL1("Cut line delimiter")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); entry_cutlinedel = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_cutlinedel), DELIMITER_MAXLEN); gtk_entry_set_text(GTK_ENTRY(entry_cutlinedel), prm->cutline_delimiter); gtk_table_attach_defaults(GTK_TABLE(table), entry_cutlinedel, COLUMN2, i, i + 1); i++; /* * Enable special chars */ label[i] = gtk_label_new(LABEL2("Special characters enabled", "Text files only")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_spchars = gtk_check_button_new(); if (prm->special_chars == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_spchars), TRUE); else if (prm->special_chars == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_spchars), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_spchars, COLUMN2, i, i + 1); i++; /* * 'new page' special char */ label[i] = gtk_label_new(LABEL1("'New page' special character")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); entry_newpagech = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_newpagech), 1); /* This does nothing - gtk_entry_set_width_chars(GTK_ENTRY(entry_newpagech), 1);*/ c[0] = prm->new_page_char; gtk_entry_set_text(GTK_ENTRY(entry_newpagech), c); gtk_table_attach_defaults(GTK_TABLE(table), entry_newpagech, COLUMN2, i, i + 1); i++; /* * 'tab' special char */ label[i] = gtk_label_new(LABEL1("'Tab' (8 spaces) special character")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); entry_tabch = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_tabch), 1); /* This does nothing - gtk_entry_set_width_chars(GTK_ENTRY(entry_tabch), 1);*/ c[0] = prm->tab_char; gtk_entry_set_text(GTK_ENTRY(entry_tabch), c); gtk_table_attach_defaults(GTK_TABLE(table), entry_tabch, COLUMN2, i, i + 1); i++; /* Commenting this block would change from 2 columns to 1 single column window */ label[i] = gtk_label_new(BLANK_STR_2); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN3, 0, 1); i = 0; #undef COLUMN1 #define COLUMN1 3, 4 #undef COLUMN2 #define COLUMN2 4, 5 /* (commenting until here) */ /* * Reload delay (rss refresh) */ label[i] = gtk_label_new(LABEL2("Reload delay", "Minutes - If no TTL or if text file")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); adj_rssrefresh = gtk_adjustment_new(prm->rss_refresh, 1, 60, 1, 5, 0); spinbut_rssrefresh= gtk_spin_button_new(GTK_ADJUSTMENT(adj_rssrefresh), 0.0, 0); gtk_table_attach_defaults(GTK_TABLE(table), spinbut_rssrefresh, COLUMN2, i, i + 1); i++; /* * ALPHA - Read all then show all */ /*label[i] = gtk_label_new(LABEL1("(ALPHA) Read all then show all")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_ = gtk_check_button_new(); if (prm-> == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_), TRUE); else if (prm-> == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_, COLUMN2, i, i + 1); i++;*/ /* * Feed title */ label[i] = gtk_label_new(LABEL1("Feed title")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_feedtitle = gtk_check_button_new(); if (prm->feed_title == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_feedtitle), TRUE); else if (prm->feed_title == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_feedtitle), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_feedtitle, COLUMN2, i, i + 1); i++; /* * Feed title delimiter */ label[i] = gtk_label_new(LABEL1("Feed title delimiter")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); entry_feedtitledel = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_feedtitledel), DELIMITER_MAXLEN); gtk_entry_set_text(GTK_ENTRY(entry_feedtitledel), prm->feed_title_delimiter); gtk_table_attach_defaults(GTK_TABLE(table), entry_feedtitledel, COLUMN2, i, i + 1); i++; /* * Item title */ label[i] = gtk_label_new(LABEL1("Item title")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_itemtitle = gtk_check_button_new(); if (prm->item_title == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_itemtitle), TRUE); else if (prm->item_title == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_itemtitle), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_itemtitle, COLUMN2, i, i + 1); i++; /* * Item title delimiter */ label[i] = gtk_label_new(LABEL1("Item title delimiter")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); entry_itemtitledel = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_itemtitledel), DELIMITER_MAXLEN); gtk_entry_set_text(GTK_ENTRY(entry_itemtitledel), prm->item_title_delimiter); gtk_table_attach_defaults(GTK_TABLE(table), entry_itemtitledel, COLUMN2, i, i + 1); i++; /* * Item description */ label[i] = gtk_label_new(LABEL1("Item description")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_itemdes = gtk_check_button_new(); if (prm->item_description == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_itemdes), TRUE); else if (prm->item_description == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_itemdes), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_itemdes, COLUMN2, i, i + 1); i++; /* * Item description delimiter */ label[i] = gtk_label_new(LABEL1("Item description delimiter")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); entry_itemdesdel = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_itemdesdel), DELIMITER_MAXLEN); gtk_entry_set_text(GTK_ENTRY(entry_itemdesdel), prm->item_description_delimiter); gtk_table_attach_defaults(GTK_TABLE(table), entry_itemdesdel, COLUMN2, i, i + 1); i++; /* * Read n items max per feed */ label[i] = gtk_label_new(LABEL2("Read N items max per feed", "0 = no limit")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); adj_nitemsperfeed = gtk_adjustment_new(prm->n_items_per_feed, 0, 500, 1, 5, 0); spinbut_nitemsperfeed = gtk_spin_button_new(GTK_ADJUSTMENT(adj_nitemsperfeed), 0.0, 0); gtk_table_attach_defaults(GTK_TABLE(table), spinbut_nitemsperfeed, COLUMN2, i, i + 1); i++; /* * Remove html tags */ label[i] = gtk_label_new(LABEL1("Strip html tags")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_striptags = gtk_check_button_new(); if (prm->strip_html_tags == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_striptags), TRUE); else if (prm->strip_html_tags == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_striptags), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_striptags, COLUMN2, i, i + 1); i++; /* * Upper case text */ label[i] = gtk_label_new(LABEL1("Set all text to upper case")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_uppercase = gtk_check_button_new(); if (prm->upper_case_text == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_uppercase), TRUE); else if (prm->upper_case_text == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_uppercase), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_uppercase, COLUMN2, i, i + 1); i++; /* * Homefeed / set current feed as homefeed */ hbox3 = gtk_hbox_new(FALSE, 0); label[i] = gtk_label_new(LABEL2("Default feed", "'Homefeed'")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox3), label[i], FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox3), gtk_label_new(NULL), TRUE, FALSE, 0); curfeed_but = gtk_button_new_with_label("Current feed"); gtk_box_pack_start(GTK_BOX(hbox3), curfeed_but, FALSE, FALSE, 0); gtk_table_attach_defaults(GTK_TABLE(table), hbox3, COLUMN1, i, i + 1); entry_homefeed = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_homefeed), FILE_NAME_MAXLEN); gtk_entry_set_text(GTK_ENTRY(entry_homefeed), prm->homefeed); gtk_table_attach_defaults(GTK_TABLE(table), entry_homefeed, COLUMN2, i, i + 1); i++; /* * "Open in browser" command line */ label[i] = gtk_label_new(LABEL1("'Open in Browser' command line")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); entry_openlinkcmd = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_openlinkcmd), FILE_NAME_MAXLEN); gtk_entry_set_text(GTK_ENTRY(entry_openlinkcmd), prm->open_link_cmd); gtk_table_attach_defaults(GTK_TABLE(table), entry_openlinkcmd, COLUMN2, i, i + 1); i++; /* * "Open in browser" args */ label[i] = gtk_label_new(LABEL1("'Open in Browser' optional arguments")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); entry_openlinkargs = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_openlinkargs), FILE_NAME_MAXLEN); gtk_entry_set_text(GTK_ENTRY(entry_openlinkargs), prm->open_link_args); gtk_table_attach_defaults(GTK_TABLE(table), entry_openlinkargs, COLUMN2, i, i + 1); i++; /* * Clock */ label[i] = gtk_label_new(LABEL1("Clock")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); radio_but1_1 = gtk_radio_button_new_with_label(NULL, "Left"); radio_but1_2 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio_but1_1), "Right"); radio_but1_3 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio_but1_1), "None"); rbut_box1 = gtk_hbox_new(TRUE, 2); gtk_box_pack_start(GTK_BOX(rbut_box1), radio_but1_1, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(rbut_box1), radio_but1_2, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(rbut_box1), radio_but1_3, TRUE, TRUE, 0); if (prm->clock == 'l') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_but1_1), TRUE); else if (prm->clock == 'r') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_but1_2), TRUE); else gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_but1_3), TRUE); gtk_table_attach_defaults(GTK_TABLE(table), rbut_box1, COLUMN2, i, i + 1); i++; /* * Clock font */ label[i] = gtk_label_new(LABEL2("Clock font", "Size can't be > ticker height")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); clock_font_but = gtk_font_button_new_with_font(prm->clock_font_n_s); gtk_table_attach_defaults(GTK_TABLE(table), clock_font_but, COLUMN2, i, i + 1); i++; /* * Clock fg color */ label[i] = gtk_label_new(LABEL1("Clock foreground color")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); clock_fg_color_but = gtk_color_button_new_with_color(&prm->clock_fg_color); gtk_color_button_set_use_alpha(GTK_COLOR_BUTTON(clock_fg_color_but), TRUE); gtk_color_button_set_alpha(GTK_COLOR_BUTTON(clock_fg_color_but), prm->clock_fg_color_alpha); gtk_table_attach_defaults(GTK_TABLE(table), clock_fg_color_but, COLUMN2, i, i + 1); i++; /* * Clock bg color */ label[i] = gtk_label_new(LABEL1("Clock background color")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); clock_bg_color_but = gtk_color_button_new_with_color(&prm->clock_bg_color); gtk_color_button_set_use_alpha(GTK_COLOR_BUTTON(clock_bg_color_but), TRUE); gtk_color_button_set_alpha(GTK_COLOR_BUTTON(clock_bg_color_but), prm->clock_bg_color_alpha); gtk_table_attach_defaults(GTK_TABLE(table), clock_bg_color_but, COLUMN2, i, i + 1); i++; /* * Set clock gradient bg */ label[i] = gtk_label_new(LABEL1("Set clock gradient background")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_setclockgradientbg = gtk_check_button_new(); if (prm->set_clock_gradient_bg == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_setclockgradientbg), TRUE); else if (prm->set_clock_gradient_bg == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_setclockgradientbg), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_setclockgradientbg, COLUMN2, i, i + 1); i++; /* * Clock bg color2 */ label[i] = gtk_label_new(LABEL1("Clock background color2")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); clock_bg_color2_but = gtk_color_button_new_with_color(&prm->clock_bg_color2); gtk_color_button_set_use_alpha(GTK_COLOR_BUTTON(clock_bg_color2_but), TRUE); gtk_color_button_set_alpha(GTK_COLOR_BUTTON(clock_bg_color2_but), prm->clock_bg_color2_alpha); gtk_table_attach_defaults(GTK_TABLE(table), clock_bg_color2_but, COLUMN2, i, i + 1); i++; /* * Disable popups */ label[i] = gtk_label_new(LABEL1("Disable error/warning popup windows")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_nopopups = gtk_check_button_new(); if (prm->disable_popups == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_nopopups), TRUE); else if (prm->disable_popups == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_nopopups), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_nopopups, COLUMN2, i, i + 1); i++; /* * Pause on mouse-over */ label[i] = gtk_label_new(LABEL1("Pause ticker on mouse-over")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_mouseover = gtk_check_button_new(); if (prm->pause_on_mouseover == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_mouseover), TRUE); else if (prm->pause_on_mouseover == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_mouseover), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_mouseover, COLUMN2, i, i + 1); i++; /* * Disable left-ckick */ label[i] = gtk_label_new(LABEL1("Disable left-click")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_noleftclick = gtk_check_button_new(); if (prm->disable_leftclick == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_noleftclick), TRUE); else if (prm->disable_leftclick == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_noleftclick), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_noleftclick, COLUMN2, i, i + 1); i++; /* * Mouse wheel scrolling behaviour */ label[i] = gtk_label_new(LABEL2("Mouse wheel acts on", "+ Ctrl = other value")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); radio_but2_1 = gtk_radio_button_new_with_label(NULL, "Speed"); radio_but2_2 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio_but2_1), "Feed"); radio_but2_3 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio_but2_1), "None"); rbut_box2 = gtk_hbox_new(TRUE, 2); gtk_box_pack_start(GTK_BOX(rbut_box2), radio_but2_1, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(rbut_box2), radio_but2_2, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(rbut_box2), radio_but2_3, TRUE, TRUE, 0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_but2_1), TRUE); if (prm->mouse_wheel_scroll == 's') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_but2_1), TRUE); else if (prm->mouse_wheel_scroll == 'f') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_but2_2), TRUE); else gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_but2_3), TRUE); gtk_table_attach_defaults(GTK_TABLE(table), rbut_box2, COLUMN2, i, i + 1); i++; /* * Quick feed picker (selected feeds) closes when pointer leaves */ label[i] = gtk_label_new(LABEL1("S Feed Picker closes when pointer leaves")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_sfpickercloseswhenpointerleaves = gtk_check_button_new(); if (prm->sfpicker_closes_when_pointer_leaves == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_sfpickercloseswhenpointerleaves), TRUE); else if (prm->sfpicker_closes_when_pointer_leaves == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_sfpickercloseswhenpointerleaves), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_sfpickercloseswhenpointerleaves, COLUMN2, i, i + 1); i++; /* * Enable feed re-ordering (by user) */ label[i] = gtk_label_new(LABEL2("Enable feed re-ordering", "by User")); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[i], COLUMN1, i, i + 1); checkbut_feedordering = gtk_check_button_new(); if (prm->enable_feed_ordering == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_feedordering), TRUE); else if (prm->enable_feed_ordering == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_feedordering), FALSE); gtk_table_attach_defaults(GTK_TABLE(table), checkbut_feedordering, COLUMN2, i, i + 1); /* Connect buttons / widgets to callbacks */ g_signal_connect(G_OBJECT(top_but), "clicked", G_CALLBACK(move_to_top), NULL); g_signal_connect(G_OBJECT(bottom_but), "clicked", G_CALLBACK(move_to_bottom), NULL); g_signal_connect(G_OBJECT(fullwidth_but), "clicked", G_CALLBACK(set_full_width), NULL); g_signal_connect(G_OBJECT(curfeed_but), "clicked", G_CALLBACK(get_current_url), NULL); g_signal_connect(G_OBJECT(checkbut_disablescreenlimits), "clicked", G_CALLBACK(update_win_y_w_adj), NULL); /* This will let us know if changes have been made / applied / must be applied */ prm_bak = malloc2(sizeof(Params)); memcpy((void *)prm_bak, (const void *)prm, sizeof(Params)); changes_have_been_applied = FALSE; gtk_widget_show_all(dialog); while (TRUE) { response = gtk_dialog_run(GTK_DIALOG(dialog)); env->suspend_rq = TRUE; if (response == GTK_RESPONSE_NO) { /* Reset */ if (question_win("Reset all settings to default values ?\n" "(Your current settings will be lost)") == YES) { /* OK like that ? */ set_default_options(prm); current_feed(); env->reload_rq = TRUE; exit_status = 1; break; } else continue; } else if (response == GTK_RESPONSE_APPLY || response == GTK_RESPONSE_OK) { /* Delay */ prm->delay = (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_delay)); /* Shift size */ prm->shift_size = (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_shiftsize)); /* Colors - fg and bg */ gtk_color_button_get_color(GTK_COLOR_BUTTON(fg_color_but), &prm->fg_color); prm->fg_color_alpha = gtk_color_button_get_alpha(GTK_COLOR_BUTTON(fg_color_but)); gtk_color_button_get_color(GTK_COLOR_BUTTON(bg_color_but), &prm->bg_color); prm->bg_color_alpha = gtk_color_button_get_alpha(GTK_COLOR_BUTTON(bg_color_but)); if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_setgradientbg))) prm->set_gradient_bg = 'y'; else prm->set_gradient_bg = 'n'; gtk_color_button_get_color(GTK_COLOR_BUTTON(bg_color2_but), &prm->bg_color2); prm->bg_color2_alpha = gtk_color_button_get_alpha(GTK_COLOR_BUTTON(bg_color2_but)); /* Font */ str_n_cpy(prm->font_n_s, (char *)gtk_font_button_get_font_name( GTK_FONT_BUTTON(font_but)), FONT_MAXLEN); /* Disable screen limits */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_disablescreenlimits))) prm->disable_screen_limits = 'y'; else prm->disable_screen_limits = 'n'; /* Window x, y, w, h */ prm->win_x = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_winx)); prm->win_y = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_winy)); prm->win_w = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_winw)); /* If win_h is != 0, it will override requested font size with computed one. */ prm->win_h = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_winh)); if (prm->win_h > 0 && prm->win_h < DRWA_HEIGHT_MIN) prm->win_h = DRWA_HEIGHT_MIN; /* Window decoration */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_windec))) prm->windec = 'y'; else prm->windec = 'n'; /* Window always-on-top */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_alwaysontop))) prm->always_on_top = 'y'; else prm->always_on_top = 'n'; /* Window transparency */ prm->win_transparency = gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_wintransparency)) / 10; /* Icon in taskbar */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_iconintaskbar))) prm->icon_in_taskbar = 'y'; else prm->icon_in_taskbar = 'n'; /* Window sticky */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_winsticky))) prm->win_sticky = 'y'; else prm->win_sticky = 'n'; /* Shadow */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_shadow))) prm->shadow = 'y'; else prm->shadow = 'n'; prm->shadow_offset_x = (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_shadowoffsetx)); prm->shadow_offset_y = (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_shadowoffsety)); prm->shadow_fx = (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_shadowfx)); /* Line and cut line delimiters */ str_n_cpy(prm->line_delimiter, (char *)gtk_entry_get_text(GTK_ENTRY(entry_linedel)), DELIMITER_MAXLEN); str_n_cpy(prm->cutline_delimiter, (char *)gtk_entry_get_text(GTK_ENTRY(entry_cutlinedel)), DELIMITER_MAXLEN); /* Enable special chars */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_spchars))) prm->special_chars = 'y'; else prm->special_chars = 'n'; prm->new_page_char = gtk_entry_get_text(GTK_ENTRY(entry_newpagech))[0]; prm->tab_char = gtk_entry_get_text(GTK_ENTRY(entry_tabch))[0]; /* Reload delay (rss refresh) */ prm->rss_refresh = (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_rssrefresh)); /* Feed title */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_feedtitle))) prm->feed_title = 'y'; else prm->feed_title = 'n'; str_n_cpy(prm->feed_title_delimiter, (char *)gtk_entry_get_text(GTK_ENTRY(entry_feedtitledel)), DELIMITER_MAXLEN); /* Item title */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_itemtitle))) prm->item_title = 'y'; else prm->item_title = 'n'; str_n_cpy(prm->item_title_delimiter, (char *)gtk_entry_get_text(GTK_ENTRY(entry_itemtitledel)), DELIMITER_MAXLEN); /* Item decription */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_itemdes))) prm->item_description = 'y'; else prm->item_description = 'n'; str_n_cpy(prm->item_description_delimiter, (char *)gtk_entry_get_text(GTK_ENTRY(entry_itemdesdel)), DELIMITER_MAXLEN); /* Read n items max per feed */ prm->n_items_per_feed = (int)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_nitemsperfeed)); /* Strip html tags */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_striptags))) prm->strip_html_tags = 'y'; else prm->strip_html_tags = 'n'; /* Upper case text */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_uppercase))) prm->upper_case_text = 'y'; else prm->upper_case_text = 'n'; /* Homefeed */ str_n_cpy(prm->homefeed, (char *)gtk_entry_get_text(GTK_ENTRY(entry_homefeed)), FILE_NAME_MAXLEN); /* Open link cmd */ str_n_cpy(prm->open_link_cmd, (char *)gtk_entry_get_text(GTK_ENTRY(entry_openlinkcmd)), FILE_NAME_MAXLEN); /* Open link args */ str_n_cpy(prm->open_link_args, (char *)gtk_entry_get_text(GTK_ENTRY(entry_openlinkargs)), FILE_NAME_MAXLEN); /* Clock */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio_but1_1))) prm->clock = 'l'; else if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio_but1_2))) prm->clock = 'r'; else prm->clock = 'n'; str_n_cpy(prm->clock_font_n_s, (char *)gtk_font_button_get_font_name(GTK_FONT_BUTTON(clock_font_but)), FONT_MAXLEN); gtk_color_button_get_color(GTK_COLOR_BUTTON(clock_fg_color_but), &prm->clock_fg_color); prm->clock_fg_color_alpha = gtk_color_button_get_alpha( GTK_COLOR_BUTTON(clock_fg_color_but)); gtk_color_button_get_color(GTK_COLOR_BUTTON(clock_bg_color_but), &prm->clock_bg_color); prm->clock_bg_color_alpha = gtk_color_button_get_alpha(GTK_COLOR_BUTTON(clock_bg_color_but)); if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_setclockgradientbg))) prm->set_clock_gradient_bg = 'y'; else prm->set_clock_gradient_bg = 'n'; gtk_color_button_get_color(GTK_COLOR_BUTTON(clock_bg_color2_but), &prm->clock_bg_color2); prm->clock_bg_color2_alpha = gtk_color_button_get_alpha(GTK_COLOR_BUTTON(clock_bg_color2_but)); /* Disable popups */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_nopopups))) prm->disable_popups = 'y'; else prm->disable_popups = 'n'; /* Pause on mouse-over */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_mouseover))) prm->pause_on_mouseover = 'y'; else prm->pause_on_mouseover = 'n'; /* Disable left-click */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_noleftclick))) prm->disable_leftclick = 'y'; else prm->disable_leftclick = 'n'; /* Mouse wheel scrolling behaviour */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio_but2_1))) prm->mouse_wheel_scroll = 's'; else if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio_but2_2))) prm->mouse_wheel_scroll = 'f'; else prm->mouse_wheel_scroll = 'n'; /* Quick feed picker (selected feeds) closes when pointer leaves */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( checkbut_sfpickercloseswhenpointerleaves))) prm->sfpicker_closes_when_pointer_leaves = 'y'; else prm->sfpicker_closes_when_pointer_leaves = 'n'; /* Enable feed re-ordering (by user) */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_feedordering))) prm->enable_feed_ordering = 'y'; else prm->enable_feed_ordering = 'n'; } /* We want a new pixmap so that changes will be effective... now! */ if (response == GTK_RESPONSE_APPLY) { /* Force apply */ /* Some setting changes (like 'read n items per feed') need the stream * to be reloaded, so now we use: */ current_feed(); /* instead of: update_pixmap_from_opened_stream(); - OK like that ? */ changes_have_been_applied = TRUE; env->suspend_rq = FALSE; } else if (response == GTK_RESPONSE_OK) { if (prm->item_title == 'n' && prm->item_description == 'n') if (question_win("You have unchecked both 'Item title' and 'Item description'.\n" "No much useful information will be displayed. Continue ?") == NO) continue; /* Apply and save when necessary */ if (memcmp((const void *)prm, (const void *)prm_bak, sizeof(Params)) != 0 || \ changes_have_been_applied) { /* Some setting changes (like 'read n items per feed') need the stream * to be reloaded, so now we use: */ current_feed(); /* instead of: update_pixmap_from_opened_stream(); - OK like that ? */ save_to_config_file(prm); } break; } else { /* Restore and apply when necessary */ if (memcmp((const void *)prm, (const void *)prm_bak, sizeof(Params)) != 0 || \ changes_have_been_applied) { memcpy((void *)prm, (const void *)prm_bak, sizeof(Params)); /* Some setting changes (like 'read n items per feed') need the stream * to be reloaded, so now we use: */ current_feed(); /* instead of: update_pixmap_from_opened_stream(); - OK like that ? */ } break; } } free2(prm_bak); gtk_widget_destroy(dialog); check_main_win_always_on_top(); env->suspend_rq = FALSE; return exit_status; } tickr_0.6.4.orig/src/tickr/tickr_render.c0000640000175000017500000004150412147427510017767 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" /* * Render n lines of a stream (opened text file) into an image (cairo surface) * of one long single line of text. * - One single stream is likely to be splitted into several text parts. * - n is limited because surface width must be <= (XPIXMAP_MAXWIDTH = 32 K - 1) * (DO THIS STILL APPLY TO CAIRO IMAGE SURFACES ?) * - Return addr of newly created surface. * If returned surface is NULL then render_exit_status is set accordingly and * should be checked to know which error occured * (otherwise render_exit_status = OK or RENDER_NO_RESOURCE or * RENDER_LINE_TOO_LONG). * LINE_MAXLEN should be set to ensure that we won't have too-long lines. */ cairo_surface_t *render_stream_to_surface(FILE *fp, FeedLinkAndOffset *link_and_offset, const Params *prm, \ int *render_exit_status) { TickerEnv *env = get_ticker_env(); char *txt_str; PangoLayout *p_layout; PangoFontDescription *f_des; int layout_width, layout_height; cairo_t *cr; cairo_pattern_t *cr_p; float shadow_k; char tmp[4]; int i, j; *render_exit_status = OK; env->stream_fully_read = FALSE; /* * Create layout */ p_layout = pango_layout_new(gtk_widget_get_pango_context(env->win)); pango_layout_set_attributes(p_layout, NULL); pango_layout_set_single_paragraph_mode(p_layout, TRUE); f_des = pango_font_description_from_string((const char *)prm->font_n_s); pango_layout_set_font_description(p_layout, f_des); pango_font_description_free(f_des); pango_layout_context_changed(p_layout); /* * Get text string from stream */ txt_str = l_str_new(NULL); if (fp != NULL) { txt_str = stream_to_htext(fp, txt_str, p_layout, prm, render_exit_status); if (*render_exit_status != OK && *render_exit_status != RENDER_LINE_TOO_LONG) { l_str_free(txt_str); return NULL; } } else { txt_str = void_stream_to_htext(txt_str, p_layout); *render_exit_status = RENDER_NO_RESOURCE; } /* * Translate link ranks inside (eventually splitted) text into offsets in surface. * * Scan text for "00n" and get * offset = layout_width(< text from start to tag >), * for every rss item found * then remove tags and fill an array of FeedLinkAndOffset's * with offsets (rank and url variables are already filled). */ link_and_offset->offset_in_surface = env->drwa_width; /* First offset (000) = env->drwa_width */ for (i = 1; i < NFEEDLINKANDOFFSETMAX; i++) /* Then we reset all other offsets to 0 */ (link_and_offset + i)->offset_in_surface = 0; for (i = 0; txt_str[i] != '\0'; i++) { if (txt_str[i] == LINK_TAG_CHAR) { str_n_cpy(tmp ,txt_str + i + 1, 3); j = atoi(tmp); txt_str[i] = '\0'; if (j > 0 && j < NFEEDLINKANDOFFSETMAX) (link_and_offset + j)->offset_in_surface = get_layout_width(p_layout, txt_str); txt_str = l_str_cat(txt_str, txt_str + i + 4); } } /* * Fill layout */ pango_layout_set_text(p_layout, txt_str, -1); l_str_free(txt_str); pango_layout_context_changed(p_layout); pango_layout_get_pixel_size2(p_layout, &layout_width, &layout_height); env->surf_width = (gint)layout_width; env->surf_height = (gint)layout_height; if (env->surf_width > XPIXMAP_MAXWIDTH) { g_object_unref(p_layout); *render_exit_status = RENDER_CAIRO_IMAGE_SURFACE_TOO_WIDE; return NULL; } /* * Create cairo image surface onto which layout will be rendered */ env->c_surf = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, env->surf_width, env->surf_height); if (cairo_surface_status(env->c_surf) != CAIRO_STATUS_SUCCESS) { cairo_surface_destroy(env->c_surf); *render_exit_status = RENDER_CREATE_CAIRO_IMAGE_SURFACE_ERROR; return (env->c_surf = NULL); } cr = cairo_create(env->c_surf); /* * Render layout */ /* Draw background */ if (get_params()->set_gradient_bg == 'y') { cr_p = cairo_pattern_create_linear(0.0, 0.0, 0.0, (float)env->surf_height); if (cairo_pattern_status(cr_p) == CAIRO_STATUS_SUCCESS) { if (cairo_pattern_get_type(cr_p) == CAIRO_PATTERN_TYPE_LINEAR) { cairo_pattern_add_color_stop_rgba(cr_p, 0.0, (float)prm->bg_color.red / G_MAXUINT16, (float)prm->bg_color.green / G_MAXUINT16, (float)prm->bg_color.blue / G_MAXUINT16, (float)prm->bg_color_alpha / G_MAXUINT16); cairo_pattern_add_color_stop_rgba(cr_p, 1.0, (float)prm->bg_color2.red / (G_MAXUINT16), (float)prm->bg_color2.green / (G_MAXUINT16), (float)prm->bg_color2.blue / (G_MAXUINT16), (float)prm->bg_color_alpha / G_MAXUINT16); cairo_set_source(cr, cr_p); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_paint(cr); } else fprintf(STD_ERR, "render_stream_to_surface(): " "Cairo pattern type != linear (gradient)\n"); } else fprintf(STD_ERR, "render_stream_to_surface(): " "Cairo_pattern_create_linear() error\n"); cairo_pattern_destroy(cr_p); } else { cairo_set_source_rgba(cr, (float)prm->bg_color.red / G_MAXUINT16, (float)prm->bg_color.green / G_MAXUINT16, (float)prm->bg_color.blue / G_MAXUINT16, (float)prm->bg_color_alpha / G_MAXUINT16); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_paint(cr); } /* Draw foreground */ if (prm->shadow == 'y') { /* Draw shadow */ if (prm->shadow_fx < 0) shadow_k = 1.0; else if (prm->shadow_fx > 10) shadow_k = 0.0; else shadow_k = 1.0 - (float)prm->shadow_fx / 10.0; if (get_params()->set_gradient_bg == 'y') { cr_p = cairo_pattern_create_linear(0.0, 0.0, 0.0, (float)env->surf_height); if (cairo_pattern_status(cr_p) == CAIRO_STATUS_SUCCESS) { if (cairo_pattern_get_type(cr_p) == CAIRO_PATTERN_TYPE_LINEAR) { cairo_pattern_add_color_stop_rgba(cr_p, 0.0, (float)prm->bg_color.red * shadow_k / G_MAXUINT16, (float)prm->bg_color.green * shadow_k / G_MAXUINT16, (float)prm->bg_color.blue * shadow_k / G_MAXUINT16, (float)prm->bg_color_alpha / G_MAXUINT16); cairo_pattern_add_color_stop_rgba(cr_p, 1.0, (float)prm->bg_color2.red * shadow_k / (G_MAXUINT16), (float)prm->bg_color2.green * shadow_k / (G_MAXUINT16), (float)prm->bg_color2.blue * shadow_k / (G_MAXUINT16), (float)prm->bg_color_alpha / G_MAXUINT16); cairo_set_source(cr, cr_p); pango_cairo_update_layout(cr, p_layout); cairo_move_to(cr, prm->shadow_offset_x, prm->shadow_offset_y); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); pango_cairo_show_layout(cr, p_layout); } else fprintf(STD_ERR, "render_stream_to_surface(): " "Cairo pattern type != linear (gradient)\n"); } else fprintf(STD_ERR, "render_stream_to_surface(): " "Cairo_pattern_create_linear() error\n"); cairo_pattern_destroy(cr_p); } else { cairo_set_source_rgba(cr, (float)prm->bg_color.red * shadow_k / G_MAXUINT16, (float)prm->bg_color.green * shadow_k / G_MAXUINT16, (float)prm->bg_color.blue * shadow_k / G_MAXUINT16, (float)prm->bg_color_alpha / G_MAXUINT16); pango_cairo_update_layout(cr, p_layout); cairo_move_to(cr, prm->shadow_offset_x, prm->shadow_offset_y); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); pango_cairo_show_layout(cr, p_layout); } } /* Draw text */ cairo_set_source_rgba(cr, (float)prm->fg_color.red / G_MAXUINT16, (float)prm->fg_color.green / G_MAXUINT16, (float)prm->fg_color.blue / G_MAXUINT16, (float)prm->fg_color_alpha / G_MAXUINT16); pango_cairo_update_layout(cr, p_layout); cairo_move_to(cr, 0, 0); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); pango_cairo_show_layout(cr, p_layout); /* * Drawing done - return surface */ if (p_layout != NULL) g_object_unref(p_layout); cairo_destroy(cr); return env->c_surf; } /* * Split stream into a a set of long lines so that, after rendering of each one, * we get a cairo image surface whose width is <= (XPIXMAP_MAXWIDTH = 32 K - 1). * If one line is longer than tmp2_size, it will get truncated and CUTLINE_DELIMITER * will be appended but we should make sure that this will not happen. */ char *stream_to_htext(FILE *fp, char *txt_str, PangoLayout *p_layout, const Params *prm, int *render_exit_status) { TickerEnv *env = get_ticker_env(); static int text_splitted = FALSE; static char *ending_str = NULL; long int file_pos; char *tmp1, *tmp2; size_t tmp1_size = LINE_MAXLEN * 4; /* Anyways, this is adjusted by getline() */ size_t tmp2_size = 64 * 1024; /* This should always be enough (hmmm...) */ int c = 0; char *empty_line; int empty_line_length, empty_line_width, txt_str_width;/* Length in chars, width in pixels */ int i, j, k; #ifndef G_OS_WIN32 ssize_t n; #endif *render_exit_status = OK; /* * Creating an "empty line" */ empty_line = l_str_new(NULL); do empty_line = l_str_cat(empty_line, " "); while ((empty_line_width = get_layout_width(p_layout, empty_line)) < env->drwa_width); empty_line_length = strlen(empty_line); if (env->reload_rq) text_splitted = FALSE; /* * We start with an "empty line" but if text has been splitted. */ if (!text_splitted) { txt_str = l_str_cat(txt_str, empty_line); txt_str_width = empty_line_width; } else { if (ending_str != NULL) { txt_str = l_str_cat(txt_str, ending_str); txt_str_width = get_layout_width(p_layout, txt_str); } else { *render_exit_status = RENDER_NULL_ENDINGSTR; return txt_str; } } if (ending_str != NULL) { l_str_free(ending_str); ending_str = NULL; } text_splitted = FALSE; /* * Then we read stream (text file) into txt_str, one line at a time. * Text file has been previously formatted with extra newline's so that * no line is longer than LINE_MAXLEN. * We must make sure that no line needs to be cut (width > (XPIXMAP_MAXWIDTH = 32 K - 1) * after rendering) but how do we set LINE_MAXLEN properly ? * LINE_MAXLEN < (XPIXMAP_MAXWIDTH = 32 K - 1) / FONT_MAXSIZE = about 163 if maxsize = 200 * so 128 should always be OK (see tickr.h) * * (It could be better, for performance reasons, to replace LINE_MAXLEN * by a variable like: line_maxlen = k * XPIXMAP_MAXWIDTH / font_size, * especially when font_size is big.) */ tmp1 = malloc2((tmp1_size + 1) * sizeof(char)); /* tmp1 will get 1 line */ tmp2 = malloc2((tmp2_size + 1) * sizeof(char)); /* tmp2 will get 1 "expanded" line */ /* * txt_str will get all n lines */ while (1) { file_pos = ftell(fp); #ifndef G_OS_WIN32 if ((n = getline(&tmp1, &tmp1_size, fp)) == -1) { #else if (fgets(tmp1, tmp1_size, fp) == NULL) { #endif /* * eof or error ? */ if (feof(fp) == 0) { *render_exit_status = RENDER_GETLINE_ERROR; return txt_str; } /* * Text file fully read * -> reset to beginning in single selection mode * or * -> set flag so that to load next feed in multiple selection mode */ if (env->selection_mode == SINGLE) fseek(fp, 0, SEEK_SET); else env->stream_fully_read = TRUE; break; } else { #ifndef G_OS_WIN32 for (i = 0, j = 0; i < n; i++) { #else for (i = 0, j = 0; i < (int)strlen(tmp1); i++) { #endif /* * This is not supposed to happen but if tmp2_size was wrongly set */ if ((size_t)j >= tmp2_size - strlen(prm->cutline_delimiter) - 1) { str_n_cpy(&tmp2[j], prm->cutline_delimiter, OPTION_VALUE_MAXLEN); j += strlen(prm->cutline_delimiter); warning(FALSE, 1, "stream_to_htext(): Line is too long"); *render_exit_status = RENDER_LINE_TOO_LONG; break; } c = tmp1[i]; k = 1; if (c == '\n') { /* tmp1 last char, because we use getline() / fgets(). */ str_n_cpy(&tmp2[j], prm->line_delimiter, OPTION_VALUE_MAXLEN); j += strlen(prm->line_delimiter); break; } if (prm->special_chars == 'y') { if (c == prm->new_page_char) { c = ' '; k = empty_line_length; } else if (c == prm->tab_char) { c = ' '; k = TAB_SIZE; } } while (k-- > 0) { if (prm->upper_case_text != 'y') tmp2[j++] = c; else tmp2[j++] = toupper(c); } } tmp2[j] = '\0'; } txt_str_width += get_layout_width(p_layout, tmp2); if (txt_str_width > XPIXMAP_MAXWIDTH - 2 * empty_line_width - prm->shadow_offset_x) { /* * Need to split text into several parts. * We don't add this line but will use it in next surface. */ fseek(fp, file_pos, SEEK_SET); text_splitted = TRUE; break; } else txt_str = l_str_cat(txt_str, tmp2); } /* * And we end with an "empty line" but if text has been splitted, */ if (!text_splitted) { txt_str = l_str_cat(txt_str, empty_line); ending_str = NULL; } else { /* * in which case we keep "tail" of txt_str whose width is drwa_width. */ i = strlen(txt_str) - 1; while (get_layout_width(p_layout, txt_str + i--) <= env->drwa_width); ending_str = l_str_new(txt_str + i + 1); } free2(tmp1); free2(tmp2); l_str_free(empty_line); return txt_str; } char *void_stream_to_htext(char *txt_str, PangoLayout *p_layout) { TickerEnv *env = get_ticker_env(); char *empty_line; empty_line = l_str_new(NULL); do empty_line = l_str_cat(empty_line, " "); while (get_layout_width(p_layout, empty_line) < env->drwa_width); txt_str = l_str_cat(txt_str, empty_line); txt_str = l_str_cat(txt_str, "No resource"); txt_str = l_str_cat(txt_str, empty_line); l_str_free(empty_line); return txt_str; } int get_fsize_from_layout_height(gint height, const char *fontname) { PangoLayout *p_layout; PangoFontDescription *f_des; char fnamesize[FONT_MAXLEN + 1]; char fname[FONT_NAME_MAXLEN + 1], fsize[FONT_SIZE_MAXLEN + 1]; char check_str[] = "gjpqyÀÄÅÇÉÖÜ€£$!&({[?|"; /* Should be enough - Is it? */ gint height2; int i = 1; p_layout = pango_layout_new(gtk_widget_get_pango_context(get_ticker_env()->win)); pango_layout_set_attributes(p_layout, NULL); pango_layout_set_single_paragraph_mode(p_layout, TRUE); str_n_cpy(fname, fontname, FONT_NAME_MAXLEN); do { snprintf(fsize, FONT_SIZE_MAXLEN + 1, "%3d", i++); compact_font(fnamesize, fname, fsize); f_des = pango_font_description_from_string((const char *)fnamesize); pango_layout_set_font_description(p_layout, f_des); pango_font_description_free(f_des); height2 = get_layout_height(p_layout, check_str); } while (height2 < height && i < 1000); if (p_layout != NULL) g_object_unref(p_layout); return (i - 1); } gint get_layout_height_from_fnamesize(const char *fnamesize) { PangoLayout *p_layout; PangoFontDescription *f_des; char check_str[] = "gjpqyÀÄÅÇÉÖÜ€£$!&({[?|"; gint height; p_layout = pango_layout_new(gtk_widget_get_pango_context(get_ticker_env()->win)); pango_layout_set_attributes(p_layout, NULL); pango_layout_set_single_paragraph_mode(p_layout, TRUE); f_des = pango_font_description_from_string(fnamesize); pango_layout_set_font_description(p_layout, f_des); pango_font_description_free(f_des); height = get_layout_height(p_layout, check_str); if (p_layout != NULL) g_object_unref(p_layout); return height; } gint get_layout_width(PangoLayout *p_layout, const char *str) { int layout_width, layout_height; pango_layout_set_text(p_layout, str, -1); pango_layout_context_changed(p_layout); pango_layout_get_pixel_size2(p_layout, &layout_width, &layout_height); return (gint)layout_width; } gint get_layout_height(PangoLayout *p_layout, const char *str) { int layout_width, layout_height; pango_layout_set_text(p_layout, str, -1); pango_layout_context_changed(p_layout); pango_layout_get_pixel_size2(p_layout, &layout_width, &layout_height); return (gint)layout_height; } /* To avoid troubles in case of an empty string inside layout */ void pango_layout_get_pixel_size2(PangoLayout *p_layout, int *layout_width, int *layout_height) { if (strlen(pango_layout_get_text(p_layout)) > 0) pango_layout_get_pixel_size(p_layout, layout_width, layout_height); else { *layout_width = 0; *layout_height = 0; fprintf(STD_ERR, "pango_layout_get_pixel_size2(): Text length = 0 - Troubles ahead ?\n"); } return; } tickr_0.6.4.orig/src/tickr/tickr_resource.c0000640000175000017500000003216312147427510020340 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" #include "tickr_html_entities.h" /* * Build selection f_list from full feed f_list. * * Always use get/set_feed_list() and get/set_feed_selection() to access * FList *feed_list and FList *feed_selection defined in tickr_main.c. */ int build_feed_selection_from_feed_list() { FList *new_selection = NULL, *node = get_feed_list(); if (IS_FLIST(node)) { for (node = f_list_first(node); IS_FLIST(node); node = node->next) if (node->selected) new_selection = f_list_add_at_end(new_selection,\ node->url, node->title, TRUE, node->rank); if (IS_FLIST(new_selection)) { new_selection = f_list_first(new_selection); set_feed_selection(new_selection); return OK; } else { set_feed_selection(NULL); return SELECTION_EMPTY; } } else { set_feed_selection(NULL); return SELECTION_ERROR; } } /* * feed_index_in_selection starts at 0 * (these funcs do nothing in single selection mode) */ /* Always reload -> OK like that ? */ void current_feed() { FList *selection = get_feed_selection(); int f_index; if (get_ticker_env()->selection_mode == MULTIPLE) { if ((f_index = f_list_index(selection)) == 0) set_feed_selection(f_list_last(selection)); else if (f_index > 0) set_feed_selection(f_list_nth(selection, f_index /* (rank = f_index + 1) - 1 */)); get_ticker_env()->reload_rq = TRUE; } } /* Always reload -> OK like that ? */ void first_feed() { if (get_ticker_env()->selection_mode == MULTIPLE) { set_feed_selection(f_list_first(get_feed_selection())); get_ticker_env()->reload_rq = TRUE; } } /* Always reload -> OK like that ? */ void last_feed() { if (get_ticker_env()->selection_mode == MULTIPLE) { set_feed_selection(f_list_last(get_feed_selection())); get_ticker_env()->reload_rq = TRUE; } } /* TODO: check that - buggy ???? */ gboolean previous_feed() { FList *selection = get_feed_selection(); int f_index; if (get_ticker_env()->selection_mode == MULTIPLE) { if ((f_index = f_list_index(selection)) > 1 || f_index == 0) { if (f_index > 1) set_feed_selection(f_list_nth(selection, f_index - 1)); else if (f_index == 0) set_feed_selection(f_list_nth(selection, f_list_count(selection) - 1)); get_ticker_env()->reload_rq = TRUE; return TRUE; } else if (f_index == 1) info_win_wait("This is already the first feed", INFO_WIN_WAIT_TIMEOUT); } return FALSE; } /* TODO: check that - buggy ???? */ gboolean next_feed() { FList *selection = get_feed_selection(); int f_index; if (get_ticker_env()->selection_mode == MULTIPLE) { if ((f_index = f_list_index(selection)) > 0) { get_ticker_env()->reload_rq = TRUE; return TRUE; } else info_win_wait("This is already the last feed", INFO_WIN_WAIT_TIMEOUT); } return FALSE; } /* * - Single mode: (re)load resrc->id = text file if it exists or rss feed if valid. * - Multiple mode: load sequentially all selected feeds in feed list. * * In case of url: load_resource() -> get_feed() -> parse_rss20/rss10/atom_xml_file(). */ int load_resource(Resource *resrc, FList *feed_selection) { int rss_status, exit_status; if (resrc->fp != NULL) { fclose(resrc->fp); resrc->fp = NULL; } if (resrc->fp_extra != NULL) { fclose(resrc->fp_extra); resrc->fp_extra = NULL; } resrc->xml_dump[0] = '\0'; resrc->type = RESRC_TYPE_UNDETERMINED; resrc->format = RSS_FORMAT_UNDETERMINED; if (get_ticker_env()->selection_mode == MULTIPLE) { if (IS_FLIST(feed_selection)) { str_n_cpy(resrc->id, feed_selection->url, FILE_NAME_MAXLEN); if (IS_FLIST(feed_selection->next)) feed_selection = feed_selection->next; else if (IS_FLIST(f_list_first(feed_selection))) feed_selection = f_list_first(feed_selection); set_feed_selection(feed_selection); } else { warning(TRUE, 1, "No feed selected - ", "Switching to single selection mode"); get_ticker_env()->selection_mode = SINGLE; resrc->id[0] = '\0'; /*warning(TRUE, 1, "No feed selection available - " "Switching to single selection mode"); get_ticker_env()->selection_mode = SINGLE; resrc->id[0] = '\0';*/ } } if (resrc->id[0] == '\0') { resrc->type = RESRC_UNSPECIFIED; fprintf(STD_ERR, "No resource specified\n"); exit_status = RESOURCE_UNSPECIFIED; } else { /* * Is there an existing file ? */ if ((resrc->fp = g_fopen(resrc->id, "rb")) == NULL) { /* * If not, have we a valid rss url instead ? */ if ((rss_status = get_feed(resrc, get_params())) != OK) { if (rss_status != FEED_UNPARSABLE && rss_status != FEED_EMPTY &&\ rss_status != FEED_NO_ITEM_OR_ENTRY_ELEMENT &&\ rss_status != FEED_DOWNLOAD_ERROR &&\ rss_status != FEED_FORMAT_ERROR &&\ rss_status != CONNECT_TOO_MANY_ERRORS) { warning(get_ticker_env()->selection_mode == MULTIPLE, 2, "get_feed() error ", itoa2(rss_status)); } resrc->id[0] ='\0'; if (rss_status == CONNECT_TOO_MANY_ERRORS) exit_status = CONNECT_TOO_MANY_ERRORS; else exit_status = RESOURCE_INVALID; } else { resrc->type = RESRC_URL; exit_status = OK; } } else { resrc->type = RESRC_FILE; exit_status = OK; } } if (exit_status == OK) { if (format_resource(resrc, XML_DUMP) == RESOURCE_FORMAT_ERROR) { big_error(RESOURCE_FORMAT_ERROR, 1, "format_resource() error"); exit_status = RESOURCE_FORMAT_ERROR; } if (resrc->type == RESRC_URL) if (format_resource(resrc, XML_DUMP_EXTRA) == RESOURCE_FORMAT_ERROR) { big_error(RESOURCE_FORMAT_ERROR, 1, "format_resource() error"); exit_status = RESOURCE_FORMAT_ERROR; } } return exit_status; } /* * Strip html tags, * then 'translate' html entities, * then check for lines longer than LINE_MAXLEN and insert newline's if any, * then resrc->fp refers to a "formatted" file. */ int format_resource(Resource *resrc, const char *file_name) { FILE *fp, *tmp_fp; char *str1, *str2, entity[16]; size_t str1_size = 8 * 1024; int is_inside_tag, entity_found, c, i, j; gchar *p; if (strcmp(file_name, XML_DUMP) == 0) fp = resrc->fp; else if (strcmp(file_name, XML_DUMP_EXTRA) == 0) fp = resrc->fp_extra; else return RESOURCE_FORMAT_ERROR; /* Strip html tags */ tmp_fp = open_new_datafile_with_name(TMP1, "wb+"); is_inside_tag = FALSE; i = 0; while ((c = fgetc(fp)) != (int)EOF) { if (get_params()->strip_html_tags == 'y') { if (c == '<') { is_inside_tag = TRUE; i = 0; } else if (c == '>') is_inside_tag = FALSE; } else is_inside_tag = FALSE; /* A little bit confusing here... */ if (!is_inside_tag && !(get_params()->strip_html_tags == 'y' && c == '>')) fputc((int)c, tmp_fp); else if (i++ < 1) fputc((int)' ', tmp_fp); } fclose(fp); fp = tmp_fp; fseek(fp, 0, SEEK_SET); /* 'Translate' html entities * * Libxml2 html named entities issue (not a Tickr bug): * Libxml2 reads html *numerical* entities, not *named* ones (with a few exceptions) * so, for instance,   is OK but   is not. */ tmp_fp = open_new_datafile_with_name(TMP2, "wb+"); while ((c = fgetc(fp)) != (int)EOF) { entity_found = FALSE; if (c == '&') { i = 0; do { entity[i++] = c; if (c == ';') { entity_found = TRUE; break; } } while ((c = fgetc(fp)) != (int)EOF && i < 15); entity[i] = '\0'; if (entity_found) { /* If entity is numerical, we need to remove any leading '0' in numerical * value before comparing with strings in html_entity array. */ if (entity[1] == '#' && entity[2] == '0') { j = atoi(entity + 2); str_n_cpy(entity + 2, itoa2(j), 14); str_n_cat(entity, ";", 1); } j = 0; while (html_entity[j] != NULL) { if (strcmp(entity, html_entity[j]) == 0 ||\ strcmp(entity, html_entity[j + 1]) == 0) { fputs(html_entity[j + 2], tmp_fp); break; } else j += 3; } } else { fputc((int)'&', tmp_fp); fseek(fp, -i, SEEK_CUR); } } else fputc((int)c, tmp_fp); } fclose(fp); fp = tmp_fp; fseek(fp, 0, SEEK_SET); /* Newline stuff */ tmp_fp = open_new_datafile_with_name(file_name, "wb+"); str1 = malloc2(str1_size * sizeof(char)); str2 = l_str_new(NULL); #ifndef G_OS_WIN32 while (getline(&str1, &str1_size, fp) != -1) #else while (fgets(str1, str1_size, fp) != NULL) #endif str2 = l_str_cat(str2, str1); free2(str1); /* XML_DUMP: Check for lines longer than LINE_MAXLEN and insert newline's if any */ if (strcmp(file_name, XML_DUMP) == 0) { i = 0; for (p = str2; *p != '\0'; p = g_utf8_find_next_char(p, NULL)) { if (*p == '\n') i = 0; /* * If the word we are parsing isn't longer than WORD_MAXLEN * chars, we replace the 1st ' ' found after it with '\n', * otherwise the word is cut off. */ if (i >= LINE_MAXLEN - WORD_MAXLEN) if (i >= LINE_MAXLEN || g_unichar_isspace(*p)) { *p = '\n'; i = 0; continue; } i++; } } else { /* TODO: What should be done for: XML_DUMP_EXTRA ? * Remove '\n' ? Not sure so doing nothing. */ /*for (p = str2; *p != '\0'; p = g_utf8_find_next_char(p, NULL)) if (*p == '\n')*/ } fputs(str2, tmp_fp); l_str_free(str2); fclose(fp); fp = tmp_fp; fseek(fp, 0, SEEK_SET); if (strcmp(file_name, XML_DUMP) == 0) resrc->fp = fp; else if (strcmp(file_name, XML_DUMP_EXTRA) == 0) resrc->fp_extra = fp; /* Remove tmp files */ g_remove(get_datafile_full_name_from_name(TMP1)); g_remove(get_datafile_full_name_from_name(TMP2)); return OK; } /* * *** File names, paths and dirs stuff *** */ void set_tickr_icon_to_dialog(GtkWindow *dialog) { gtk_window_set_icon_from_file(dialog, get_imagefile_full_name_from_name(TICKR_ICON), NULL); } /* Open/create file in data dir from name. * Data dir = config files, not images files. */ FILE *open_new_datafile_with_name(const char *name, const char *mode_str) { char file_name[FILE_NAME_MAXLEN + 1]; FILE *fp; str_n_cpy(file_name, get_datafile_full_name_from_name(name), FILE_NAME_MAXLEN); if ((fp = g_fopen(file_name, mode_str)) == NULL) { if (mode_str[0] == 'w') big_error(CREATE_FILE_ERROR, 4, "Error creating file ", file_name, ": ", strerror(errno)); else if (mode_str[0] == 'r') big_error(OPEN_FILE_ERROR, 4, "Error opening file ", file_name, ": ", strerror(errno)); } return fp; } /* Get full path and name for file in data dir from name. * Data dir = config files, not images files. */ char *get_datafile_full_name_from_name(const char *name) { static char file_name[FILE_NAME_MAXLEN + 1]; snprintf(file_name, FILE_NAME_MAXLEN + 1 - 2, "%s%c%s", get_datadir_full_path(), SEPARATOR_CHAR, name); if (get_instance_id() != 0) str_n_cat(file_name, itoa2(get_instance_id()), 2); return file_name; } /* Now, image files */ char *get_imagefile_full_name_from_name(const char *name) { static char file_name[FILE_NAME_MAXLEN + 1]; #ifndef G_OS_WIN32 snprintf(file_name, FILE_NAME_MAXLEN + 1, "%s%c%s", IMAGES_PATH, SEPARATOR_CHAR, name); #else snprintf(file_name, FILE_NAME_MAXLEN + 1, "%s%c%s%c%s", get_progfiles_dir(), SEPARATOR_CHAR, IMAGES_PATH, SEPARATOR_CHAR, name); #endif return file_name; } /* Data dir = config files, not images files */ char *get_datadir_full_path() { static char full_path[TMPSTR_SIZE + 1]; #ifndef G_OS_WIN32 snprintf(full_path, TMPSTR_SIZE + 1, "%s%c%s", usr_home_dir(), SEPARATOR_CHAR, TICKR_DIR_NAME); #else snprintf(full_path, TMPSTR_SIZE + 1, "%s%c%s", get_appdata_dir_utf8(), SEPARATOR_CHAR, TICKR_DIR_NAME); #endif return full_path; } char *usr_home_dir() { static char str[TMPSTR_SIZE+ 1] = ""; #ifndef G_OS_WIN32 return str_n_cpy(str, getpwuid(getuid())->pw_dir, TMPSTR_SIZE); #endif /* For win32 version, no home dir - See win32 specific funcs in libetm. */ return str; } /* Fix non-ascii (for instance cyrillic) user name in app data dir issue on win32 .*/ #ifdef G_OS_WIN32 const char *get_appdata_dir_utf8() { static char file_name[FILE_NAME_MAXLEN + 1]; gchar *filename_utf8; if ((filename_utf8 = g_utf16_to_utf8((const gunichar2 *)get_appdata_dir_w(), FILE_NAME_MAXLEN, NULL, NULL, NULL)) != NULL) { str_n_cpy(file_name, filename_utf8, FILE_NAME_MAXLEN); g_free(filename_utf8); return (const char *)file_name; } else return NULL; } #endif tickr_0.6.4.orig/src/tickr/tickr.h0000640000175000017500000005245012147427510016437 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #ifndef INC_TICKR_H #define INC_TICKR_H #define APP_NAME "Tickr" #define APP_CMD "tickr" #define APP_VERSION_NUMBER "0.6.4" #define WEBSITE_URL "http://www.newsrssticker.com" #define SUPPORT_URL WEBSITE_URL "/help.php" #define DOWNLOAD_URL WEBSITE_URL "/download.php" #define SUPPORT_EMAIL_ADDR "manu@newsrssticker.com" #define CHECK4UPDATES_URL WEBSITE_URL "/app_version_visible.php" #define CHECK4UPDATES_ID_STR "LSVN=" /* Stands for 'Last Stable Version Number = ' */ #define _GNU_SOURCE #define _ISOC99_SOURCE #define VERBOSE_OUTPUT /*#define DEBUG_OUTPUT*/ /* For info_win_wait(..., timeout) */ /*#define INFO_WIN_WAIT_POS GTK_WIN_POS_CENTER*/ /* Same as for info_win() */ #define INFO_WIN_WAIT_POS GTK_WIN_POS_CENTER_ON_PARENT /*#define INFO_WIN_WAIT_POS GTK_WIN_POS_NONE*/ #define INFO_WIN_WAIT_TIMEOUT 2000 /* in ms */ #define CONNECT_FAIL_MAX 5 #define CONNECT_FAIL_TIMEOUT 1 /* To avoid confusion, we must make sure this value doesn't conflict with * any other user-defined GTK_RESPONSE_STH (at the moment, only one enum * in tickr_feedpicker.c.) */ #define GTK_RESPONSE_CANCEL_CLOSE 100 /* All predefined GTK_RESPONSE_ are < 0 */ #include #include #include #include #include #include #include #include #include #include #include #ifndef G_OS_WIN32 # include # include # include # include # include # include #else /* Win version = XP or higher */ # define WINVER 0x0501 # define _WIN32_WINNT 0x0501 # include # include # include # include # include # include #endif #ifndef G_OS_WIN32 # include #else # include <../glib-2.0/glib/gstdio.h> #endif #include #include #include "../libetm-0.4.4/libetm.h" #include "tickr_socket.h" #include "tickr_list.h" #define RESOURCE_NONE_QUIT FALSE /* To quit or not if no resource is specified */ #define OPTION_ERROR_QUIT FALSE /* To quit or not if unknown or invalid option(s) */ #define DRWA_WIDTH_MIN 100 #define DRWA_HEIGHT_MIN 10 #define TAB_SIZE 8 #define FILE_NAME_MAXLEN (2 * 1024 - 1) /* Apply to both FULL FILE NAMES and ***URLs*** */ #define FONT_NAME_MAXLEN 64 #define FONT_SIZE_MAXLEN 3 #define FONT_MAXLEN FONT_NAME_MAXLEN + 1 + FONT_SIZE_MAXLEN #define DELIMITER_MAXLEN 80 #define OPTION_NAME_MAXLEN 31 #define OPTION_VALUE_MAXLEN MAX(MAX(FILE_NAME_MAXLEN, FONT_MAXLEN), DELIMITER_MAXLEN) #define OPTION_MAXLEN OPTION_NAME_MAXLEN + OPTION_VALUE_MAXLEN + 4 /* -name="value" */ #define N_OPTION_MAX 128 /* Max number of options */ #define N_URL_MAX 1024 /* Max number of url's */ #define NFEEDLINKANDOFFSETMAX 256 /* Max number of "open-able" links per feed */ #define LINK_TAG_CHAR ((char)(1)) /* char (ascii 01) used internally for item links, removed from feed text */ #define ITEM_TITLE_TAG_CHAR ((char)(2)) /* char (ascii 02) used internally for item titles, --- */ #define ITEM_DES_TAG_CHAR ((char)(3)) /* char (ascii 03) used internally for item descriptions, --- */ #define TMPSTR_SIZE (2 * 1024 - 1) /* Used for most tmp strings - must be large enough */ #ifndef G_OS_WIN32 # define SEPARATOR_CHAR '/' #else # define SEPARATOR_CHAR '\\' #endif #define FEED_TITLE_MAXLEN 60 /* 7-bit ascii - of course, the following ones must match */ #define TITLE_TAG_CHAR '>' #define TITLE_TAG_STR ">" #define SELECTED_URL_CHAR '*' #define SELECTED_URL_STR "*" #define UNSELECTED_URL_CHAR '-' #define UNSELECTED_URL_STR "-" /* Make sure this stuff is robust enough */ #define XPIXMAP_MAXWIDTH (32 * 1024 - 1) /* 32 K - 1 = max supported width for xpixmaps * (not 64 k - 1 as sometimes uncorrectly mentioned.) */ #define LINE_MAXLEN 128 /* Max length of a single line (see tickr_render.c) */ #define WORD_MAXLEN 32 /* Max length of a word that won't get cut off */ #if (LINE_MAXLEN <= WORD_MAXLEN) # error "LINE_MAXLEN must be > WORD_MAXLEN" #endif #define FONT_MAXSIZE 200 #define ARBITRARY_TASKBAR_HEIGHT 25 /* * File names, paths and dirs stuff * * Linux version: /usr/bin/ * /usr/share/APP_CMD/ * /usr/share/APP_CMD/pixmpas/ * /home//.APP_CMD/ * * Win32 version: C:\Program files\APP_NAME\ (also location for pixmaps) * C:\...\Application Data\APP_NAME\ */ #ifndef G_OS_WIN32 # define TICKR_DIR_NAME "." APP_CMD #else # define TICKR_DIR_NAME APP_NAME #endif #define CONFIG_FILE APP_CMD "-conf" #define URL_LIST_FILE APP_CMD "-url-list" #define RESOURCE_DUMP APP_CMD "-resrc-dump.xml" #define XML_DUMP APP_CMD "-xml-dump" #define XML_DUMP_EXTRA APP_CMD "-xml-dump-extra" #define TMP1 "tmp1" #define TMP2 "tmp2" #ifndef G_OS_WIN32 # define STD_OUT stdout # define STD_ERR stderr #else # define STD_OUT stdout_fp # define STDOUT_FILENAME1 "stdout1.txt" # define STDOUT_FILENAME2 "stdout2.txt" # define STD_ERR stderr_fp # define STDERR_FILENAME1 "stderr1.txt" # define STDERR_FILENAME2 "stderr2.txt" #endif #ifndef G_OS_WIN32 # define INSTALL_PATH "/usr/share/" APP_CMD # define IMAGES_PATH INSTALL_PATH "/pixmaps" #else # define IMAGES_PATH APP_NAME /* Actually not a path but a dir name */ #endif #define TICKR_ICON APP_CMD "-icon.png" #define TICKR_LOGO APP_CMD "-logo.png" #define RSS_ICON APP_CMD "-rss-icon.png" /* Default config values */ #define DELAY 8 #define SHIFTSIZE 1 #ifndef G_OS_WIN32 # define FONTNAME "Sans" #else # define FONTNAME "Arial Unicode MS" #endif #define FONTSIZE "14" #define FGCOLOR "#ffffffff" #define BGCOLOR "#40404080" #define SETGRADIENTBG 'y' #define BGCOLOR2 "#20202080" #define DISABLESCREENLIMITS 'n' #define WIN_X 0 #define WIN_Y 0 /*#define WIN_W 1024 Unused, we use get_ticker_env()->screen_w instead */ #define WIN_H 0 /* If = 0, determined by font size */ #define WIN_MAX_Y 5000 #define WIN_MAX_W 10000 #define WINDEC 'n' #define ALWAYSONTOP 'n' #ifndef G_OS_WIN32 # define WINTRANSPARENCY 1.0 #else # define WINTRANSPARENCY 0.8 #endif #define ICONINTASKBAR 'y' #define WINSTICKY 'n' #define SHADOW 'y' #define SHADOWOFFSET_X 4 #define SHADOWOFFSET_Y 2 #define SHADOWFX 2 #define LINEDELIMITER " " #define CUTLINEDELIMITER "..." LINEDELIMITER #define SPECIALCHARS 'n' #define NEWPG '`' #define TABCH '~' #define RSSREFRESH 15 #define FEEDTITLE 'n' #define FEEDTITLEDELIMITER " " #define ITEMTITLE 'y' #define ITEMTITLEDELIMITER " | " #define ITEMDESCRIPTION 'n' #define ITEMDESCRIPTIONDELIMITER " *** " #define NITEMSPERFEED 5 #define STRIPHTMLTAGS 'y' #define UPPERCASETEXT 'n' #define HOMEFEED "http://newsrss.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml" #ifndef G_OS_WIN32 # define OPENLINKCMD "firefox" /* Firefox on Linux */ #else # define OPENLINKCMD "" #endif #define OPENLINKARGS "" #define CLOCK 'n' #define CFONTNAME FONTNAME #define CFONTSIZE "12" #define CFGCOLOR FGCOLOR #define CBGCOLOR BGCOLOR #define SETCLOCKGRADIENTBG 'y' #define CBGCOLOR2 BGCOLOR2 #define DISABLEPOPUPS 'n' #define PAUSEONMOUSEOVER 'y' #define DISABLELEFTCLICK 'n' #define MOUSEWHEELSCROLL 'f' #ifndef G_OS_WIN32 # define SFPICKERCLOSESWHENPOINTERLEAVES 'y' #else # define SFPICKERCLOSESWHENPOINTERLEAVES 'n' #endif #define ENABLEFEEDORDERING 'n' #define USEAUTHENTICATION 'n' #define USER "" #define USEPROXY 'n' #define PROXYHOST "" #define PROXYPORT "8080" #define USEPROXYAUTHENTICATION 'n' #define PROXYUSER "" /* Global pseudo stdout and stderr on win32 */ #ifdef G_OS_WIN32 extern FILE *stdout_fp, *stderr_fp; #endif /* typedef enum's */ typedef enum { SINGLE, MULTIPLE } _selection_mode; typedef enum { RESRC_TYPE_UNDETERMINED, RESRC_UNSPECIFIED, RESRC_URL, /* Will be fetched and xml-parsed */ RESRC_FILE /* Will be processed as non-xml text file */ } _resrc_type; typedef enum { RSS_FORMAT_UNDETERMINED, RSS_1_0, /* Should use RDF or RSS_RDF instead ? */ RSS_2_0, RSS_ATOM } _rss_format; typedef enum { TIME_RESET, TIME_CHECK } check_time_mode; typedef enum { INFO, INFO_WARNING, INFO_ERROR } info_type; typedef enum { WIN_WITH_SPINNER_OPEN, WIN_WITH_SPINNER_CLOSE } win_with_spinner_mode; typedef enum { WIN_WITH_PROGRESS_BAR_OPEN, WIN_WITH_PROGRESS_BAR_PULSE, WIN_WITH_PROGRESS_BAR_CLOSE } win_with_progress_bar_mode; typedef enum { AUTH_PAGE, PROXY_PAGE } connection_settings_page; /* typedef struct's */ /* Usefull graphical (and other) ticker 'environment' values */ typedef struct { GdkScreen *screen; /* GDK screen for win */ GdkVisual *visual; gint screen_w, screen_h; /* Screen width & height */ gint depth; /* Screen depth */ GtkWidget *win; /* Top level window */ GtkWidget *drw_a, *drwa_clock; /* Drawing areas (main / clock) */ gint drwa_width, drwa_height; /* Main drawing area dimensions */ gint drwa_clock_width; /* Clock drawing area width */ cairo_surface_t *c_surf; /* Cairo image surface onto which text is rendered */ gint surf_width, surf_height; /* Cairo image surface dimensions */ char active_link[FILE_NAME_MAXLEN + 1]; int mouse_x_in_drwa; /* These flags are checked (mainly) by shift2left_callback() */ gboolean suspend_rq; /* Request for doing nothing */ gboolean compute_rq; /* Request for (re)computing everything (surface and win) */ gboolean reload_rq; /* Request for (re)loading resource */ _selection_mode selection_mode; /* default = MULTIPLE, set to SINGLE internally if selection * is unavalaible/empty or after picking a single feed */ gboolean stream_fully_read; /* Set/checked only in render_stream_to_surface() and * shift2left_callback() */ } TickerEnv; typedef struct { char url[FILE_NAME_MAXLEN + 1]; gint offset_in_surface; } FeedLinkAndOffset; typedef struct { _resrc_type type; /* Text file or url */ _rss_format format; /* RSS 1.0, RSS 2.0, or Atom */ char id[FILE_NAME_MAXLEN + 1]; /* Local = file name or remote = feed url */ /* Apply only to url/rss */ _rss_format rss_format; char feed_title[FEED_TITLE_MAXLEN + 1]; char resrc_dump[FILE_NAME_MAXLEN + 1]; /* Downloaded file/resource */ char xml_dump[FILE_NAME_MAXLEN + 1]; FILE *fp; /* File to be read (from xmldump) after some processing */ FeedLinkAndOffset link_and_offset[NFEEDLINKANDOFFSETMAX]; char xml_dump_extra[FILE_NAME_MAXLEN + 1]; FILE *fp_extra; /* File with extra info: item titles (or des) generated * when ticker displays only des (or titles) */ int rss_ttl; } Resource; #define USER_MAXLEN 63 #define PSW_MAXLEN 63 #define AUTH_STR_MAXLEN 127 /* TODO: Do we need both these auth/proxy structs and auth/proxy params? redundant - check this out */ typedef struct { gboolean use_authentication; char user[USER_MAXLEN + 1]; char psw[PSW_MAXLEN + 1]; char auth_str[AUTH_STR_MAXLEN + 1]; } Authentication; #define PROXY_HOST_MAXLEN 127 #define PROXY_PORT_MAXLEN 15 #define PROXY_USER_MAXLEN 63 #define PROXY_PSW_MAXLEN 63 #define PROXY_AUTH_STR_MAXLEN 127 #define PROXY_STR_MAXLEN 255 typedef struct { gboolean use_proxy; char host[PROXY_HOST_MAXLEN + 1]; char port[PROXY_PORT_MAXLEN + 1]; char proxy_str[PROXY_STR_MAXLEN + 1]; int use_proxy_authentication; char user[PROXY_USER_MAXLEN + 1]; char psw[PROXY_PSW_MAXLEN + 1]; char auth_str[PROXY_AUTH_STR_MAXLEN + 1]; } Proxy; typedef struct { int delay; int shift_size; char font_n_s[FONT_MAXLEN + 1]; GdkColor fg_color; guint16 fg_color_alpha; GdkColor bg_color; guint16 bg_color_alpha; char set_gradient_bg; GdkColor bg_color2; guint16 bg_color2_alpha; char disable_screen_limits; gint win_x; gint win_y; gint win_w; gint win_h; char windec; char always_on_top; gdouble win_transparency; /* 0.1 -> 1.0 */ char icon_in_taskbar; char win_sticky; char shadow; int shadow_offset_x; int shadow_offset_y; int shadow_fx; char line_delimiter[DELIMITER_MAXLEN + 1]; char cutline_delimiter[DELIMITER_MAXLEN + 1]; char special_chars; char new_page_char; char tab_char; int rss_refresh; char feed_title; char feed_title_delimiter[DELIMITER_MAXLEN + 1]; char item_title; char item_title_delimiter[DELIMITER_MAXLEN + 1]; char item_description; char item_description_delimiter[DELIMITER_MAXLEN + 1]; int n_items_per_feed; char strip_html_tags; char upper_case_text; char homefeed[FILE_NAME_MAXLEN + 1]; char open_link_cmd[FILE_NAME_MAXLEN + 1]; char open_link_args[FILE_NAME_MAXLEN + 1]; char clock; char clock_font_n_s[FONT_MAXLEN + 1]; GdkColor clock_fg_color; guint16 clock_fg_color_alpha; GdkColor clock_bg_color; guint16 clock_bg_color_alpha; char set_clock_gradient_bg; GdkColor clock_bg_color2; guint16 clock_bg_color2_alpha; char disable_popups; char pause_on_mouseover; char disable_leftclick; char mouse_wheel_scroll; /* Apply to s (speed) / f (feed) / n (none) */ char sfpicker_closes_when_pointer_leaves; char enable_feed_ordering; /* TODO: Do we need both these auth/proxy structs and auth/proxy params? redundant - check this out */ char use_authentication; char user[USER_MAXLEN + 1]; char use_proxy; char proxy_host[PROXY_HOST_MAXLEN + 1]; char proxy_port[PROXY_PORT_MAXLEN + 1]; char use_proxy_authentication; char proxy_user[PROXY_USER_MAXLEN + 1]; } Params; /* Error codes */ typedef enum { OK = SOCKET_LASTERRORCODE + 1, RESOURCE_ERROR, RESOURCE_UNSPECIFIED, RESOURCE_NOT_FOUND, RESOURCE_INVALID, RESOURCE_FORMAT_ERROR, RESOURCE_NONE, OPTION_ERROR, OPTION_TOO_MANY, OPTION_INVALID, OPTION_UNKNOWN, OPTION_VALUE_INVALID, SELECTION_ERROR, SELECTION_EMPTY, FEED_ERROR, FEED_EMPTY, FEED_UNPARSABLE, FEED_NO_ITEM_OR_ENTRY_ELEMENT, FEED_DOWNLOAD_ERROR, FEED_FORMAT_ERROR, RENDER_ERROR, RENDER_NO_RESOURCE, RENDER_NULL_ENDINGSTR, RENDER_GETLINE_ERROR, RENDER_LINE_TOO_LONG, RENDER_CAIRO_IMAGE_SURFACE_TOO_WIDE, RENDER_CREATE_CAIRO_IMAGE_SURFACE_ERROR, RENDER_OTHER_ERROR, SHIFT2LEFT_NULL_CAIRO_IMAGE_SURFACE, FLIST_ERROR, LOAD_URL_LIST_ERROR, LOAD_URL_LIST_EMPTY_LIST, SAVE_URL_LIST_ERROR, CREATE_FILE_ERROR, OPEN_FILE_ERROR, XML_ERROR, XML_UNPARSABLE, XML_EMPTY, OPML_ERROR, CONNECT_TOO_MANY_ERRORS, HTTP_ERROR, HTTP_UNSUPPORTED_SCHEME, HTTP_NO_AUTH_CREDENTIALS, HTTP_NO_PROXY_AUTH_CREDENTIALS, /* http status codes */ HTTP_CONTINUE, HTTP_SWITCH_PROTO, HTTP_MOVED, HTTP_USE_PROXY, HTTP_UNAUTHORIZED, HTTP_BAD_REQUEST, HTTP_FORBIDDEN, HTTP_NOT_FOUND, HTTP_PROXY_AUTH_REQUIRED, HTTP_INT_SERVER_ERROR, HTTP_NO_STATUS_CODE, HTTP_TOO_MANY_REDIRECTS, WIN32V_ERROR } tickr_error_code; /* tickr_main.c */ TickerEnv *get_ticker_env(); Resource *get_resource(); FList *get_feed_list(); void set_feed_list(FList *); FList *get_feed_selection(); void set_feed_selection(FList *); Params *get_params(); int get_instance_id(); void check_main_win_always_on_top(); char *get_feed_extra_info(int); /*gboolean params_have_been_changed(Params *, int);*/ gboolean win_params_have_been_changed(Params *, int); void update_pixmap_from_opened_stream(); /* tickr_resource.c */ int build_feed_selection_from_feed_list(); void current_feed(); void first_feed(); void last_feed(); gboolean previous_feed(); gboolean next_feed(); int load_resource(Resource *, FList *); int format_resource(Resource *, const char *); void set_tickr_icon_to_dialog(GtkWindow *); FILE *open_new_datafile_with_name(const char *, const char *); char *get_datafile_full_name_from_name(const char *); char *get_imagefile_full_name_from_name(const char *); char *get_datadir_full_path(); char *usr_home_dir(); #ifdef G_OS_WIN32 const char *get_appdata_dir_utf8(); #endif /* tickr_render.c */ cairo_surface_t *render_stream_to_surface(FILE *, FeedLinkAndOffset *, const Params *, int *); char *stream_to_htext(FILE *, char *, PangoLayout *, const Params *, int *); char *void_stream_to_htext(char *, PangoLayout *); int get_fsize_from_layout_height(gint, const char *); gint get_layout_height_from_fnamesize(const char *); gint get_layout_width(PangoLayout *, const char *); gint get_layout_height(PangoLayout *, const char *); void pango_layout_get_pixel_size2(PangoLayout *, int *, int *); /* tickr_params.c */ void set_default_options(Params *); int get_config_file_options(Params *); int parse_options_array(Params *, int, const char *[]); int get_name_value_from_option(Params *, const char*); void save_to_config_file(const Params *); int get_gdk_color_from_hexstr(const char *, GdkColor *, guint16 *); const char *get_hexstr_from_gdk_color(const GdkColor *, const guint16 *); void split_font(const char *, char *, char *); void compact_font(char *, const char *, const char *); /* tickr_clock.c */ void display_time(const Params *); gint get_clock_width(const Params *); /* tickr_feedparser.c */ int get_feed(Resource *, const Params *); int parse_xml_file(int, FILE *, FILE *, const char *, FeedLinkAndOffset *link_and_offset,\ const Params *); void get_rss20_selected_elements1(xmlNode *, xmlDoc *); void get_rss10_selected_elements1(xmlNode *, xmlDoc *); void get_atom_selected_elements1(xmlNode *, xmlDoc *); void get_feed_selected_elements2(int, xmlNode *, xmlDoc *, FILE *, FILE *,\ FeedLinkAndOffset *link_and_offset, const Params *prm); int get_feed_info(int *, const char *, char *, char *, char *); void get_xml_first_element(xmlNode *, xmlDoc *, char *, char *, int); /* tickr_feedpicker.c */ void highlight_and_go_to_row(GtkTreeView *, GtkTreeSelection *, int); void get_new_url(Resource *); /* tickr_prefwin.c */ int modify_params(Params *); /* tickr_otherwins.c */ gint esc_key_pressed(GtkWidget *, GdkEventKey *); void force_quit_dialog(GtkWidget *); void open_new_txt_file(Resource *resrc); void help_win(); void about_win(); void info_win(const char *, const char *, info_type, gboolean); void info_win_wait(const char *, int); int question_win(const char *); int question_win_at(const char *, int); void win_with_spinner(win_with_spinner_mode, const char *); void win_with_progress_bar(win_with_progress_bar_mode, const char *); /* tickr_misc.c */ void import_params(); void export_params(); void online_help(); void warning(gboolean, int, ...); void dump_font_list(); /* tickr_hlptxt.c */ const char **get_help_str0(); const char **get_help_str1(); const char **get_license_str1(); const char *get_license_str2(); /* tickr_ompl.c */ void import_opml_file(); char *pick_opml_file(); int parse_opml_xml_file(const char *); void get_opml_selected_element(xmlNode *, const char *, const char *); void export_opml_file(); char *create_opml_str_from_feed_list_node(FList *); int save_str_as_opml_file(const char *); /* tickr_http.c */ void remove_chunk_info(char **); int connect_with_url(sockt *, char *); int fetch_resource(const char *, const char *, char *); const char *build_http_request(const char *, const char *, const char *,\ const char *); int get_http_response(sockt, const char *, const char *, const char *,\ char **, char **, int *); int get_http_status_code(const char *); const char *get_http_header_value(const char *, const char *); int go_after_next_cr_lf(const char *); int go_after_next_empty_line(const char *); int get_http_chunk_size(const char *); const char *get_scheme_from_url(const char*); const char *get_host_from_url(const char*); const char *get_path_from_url(const char*); /* tickr_socket.c */ /* Proto moved into tickr_socket.h */ /* tickr_connectwin.c */ void init_authentication(); void init_proxy(); void compute_auth_and_proxy_str(); gint connection_settings(connection_settings_page); gboolean get_use_authentication(); void set_use_authentication(gboolean); char *get_http_auth_user(); char *get_http_auth_psw(); char *get_http_auth_str(); gboolean get_use_proxy(); void set_use_proxy(gboolean); char *get_proxy_host(); char *get_proxy_port(); char *get_proxy_str(); gboolean get_use_proxy_auth(); void set_use_proxy_auth(gboolean); char *get_proxy_auth_user(); char *get_proxy_auth_psw(); char *get_proxy_auth_str(); /* tickr_quickfeedpicker.c */ void quick_feed_picker(); /* tickr_quicksetup.c */ void quick_setup(Params *); /* tickr_check4updates.c */ void check_for_updates(); #endif /* INC_TICKR_H */ tickr_0.6.4.orig/src/tickr/tickr_main.c0000664000175000017500000014665412147427510017456 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" #define START_PAUSE_TICKER_WHILE_OPENING\ int suspend_rq_bak = env->suspend_rq;\ env->suspend_rq = TRUE; #define END_PAUSE_TICKER_WHILE_OPENING\ env->suspend_rq = suspend_rq_bak; /* Sometimes, we need to temporarily re-enable popups, just to get error messages. */ #define START_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING\ int suspend_rq_bak;\ char disable_popups_bak;\ suspend_rq_bak = env->suspend_rq;\ env->suspend_rq = TRUE;\ disable_popups_bak = get_params()->disable_popups;\ get_params()->disable_popups = 'n'; #define END_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING\ get_params()->disable_popups = disable_popups_bak;\ env->suspend_rq = suspend_rq_bak; #define IF_UI_ALLOWED if (!no_ui) #ifdef G_OS_WIN32 FILE *stdout_fp, *stderr_fp; #endif static TickerEnv *env; static Resource *resrc; static FList *feed_list; static FList *feed_selection; static Params *prm; static int instance_id = 0; static gboolean no_ui = FALSE; static int shift_counter = 0; static GtkWidget *popup_menu; static GtkAccelGroup *popup_menu_accel_group; static int popup_menu_accel_group_attached; static GtkWidget *main_hbox, *vbox_ticker, *vbox_clock; static int speed_up_flag = FALSE; static int speed_down_flag = FALSE; TickerEnv *get_ticker_env() { return env; } Resource *get_resource() { return resrc; } FList *get_feed_list() { return feed_list; } void set_feed_list(FList *list) { feed_list = list; } FList *get_feed_selection() { return feed_selection; } void set_feed_selection(FList *list) { feed_selection = list; } Params *get_params() { return prm; } int get_instance_id() { return instance_id; } /* Prototypes for a few static funcs */ static void show_resource_info(); static gint shift2left_callback(); static void check_time_load_resource(check_time_mode); void check_main_win_always_on_top() { if (prm->always_on_top == 'y') gtk_window_set_keep_above(GTK_WINDOW(env->win), TRUE); else gtk_window_set_keep_above(GTK_WINDOW(env->win), FALSE); } /* * funct_name2(***NO args***) only used to call funct_name(***args***) */ static void get_new_url2() { START_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING IF_UI_ALLOWED get_new_url(resrc); END_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING } static void open_new_txt_file2() { START_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING IF_UI_ALLOWED open_new_txt_file(resrc); END_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING } static void import_opml_file2() { START_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING IF_UI_ALLOWED import_opml_file(); END_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING } static void export_opml_file2() { START_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING IF_UI_ALLOWED export_opml_file(); END_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING } static void show_resource_info2() { START_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING show_resource_info(); END_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING } void modify_params2() { START_PAUSE_TICKER_WHILE_OPENING IF_UI_ALLOWED if (modify_params(prm) == 1) /* 1 means we want to immediately reopen the dialog */ modify_params2(prm); END_PAUSE_TICKER_WHILE_OPENING } static void connection_settings2() { START_PAUSE_TICKER_WHILE_OPENING IF_UI_ALLOWED if (connection_settings(AUTH_PAGE) == GTK_RESPONSE_OK) current_feed(); END_PAUSE_TICKER_WHILE_OPENING } static void import_params2() { START_PAUSE_TICKER_WHILE_OPENING IF_UI_ALLOWED import_params(); END_PAUSE_TICKER_WHILE_OPENING } static void export_params2() { START_PAUSE_TICKER_WHILE_OPENING IF_UI_ALLOWED export_params(); END_PAUSE_TICKER_WHILE_OPENING } static void pause_on_mouseover_enabled_warning_once() { static int first_run = -1; if (prm->pause_on_mouseover == 'y') { if (first_run == -1) warning(FALSE, 1, "Setting 'Pause ticker on mouse-over' is enabled. When so, playing/pausing\n" "is always controlled by mouse pointer motions as well."); first_run++; first_run &= 1; } } static void ticker_play() { env->suspend_rq = FALSE; pause_on_mouseover_enabled_warning_once(); } static void ticker_pause() { env->suspend_rq = TRUE; pause_on_mouseover_enabled_warning_once(); } static void ticker_reload() { current_feed(); env->reload_rq = TRUE; env->suspend_rq = FALSE; } static void first_feed2() { if (env->selection_mode == MULTIPLE) first_feed(); else info_win_wait("Single selection mode", INFO_WIN_WAIT_TIMEOUT); } static void previous_feed2() { if (env->selection_mode == MULTIPLE) previous_feed(); else info_win_wait("Single selection mode", INFO_WIN_WAIT_TIMEOUT); } static void next_feed2() { if (env->selection_mode == MULTIPLE) next_feed(); else info_win_wait("Single selection mode", INFO_WIN_WAIT_TIMEOUT); } static void last_feed2() { if (env->selection_mode == MULTIPLE) last_feed(); else info_win_wait("Single selection mode", INFO_WIN_WAIT_TIMEOUT); } void toggle_speed_up_flag() { speed_up_flag = TRUE; } void toggle_speed_down_flag() { speed_down_flag = TRUE; } static void help_win2() { START_PAUSE_TICKER_WHILE_OPENING help_win(); END_PAUSE_TICKER_WHILE_OPENING } static void online_help2() { START_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING online_help(); END_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING } static void check_for_updates2() { START_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING check_for_updates(); END_PAUSE_TICKER_ENABLE_POPUPS_WHILE_OPENING } static void about_win2() { START_PAUSE_TICKER_WHILE_OPENING about_win(); END_PAUSE_TICKER_WHILE_OPENING } static void show_resource_info() { GtkWidget *dialog, *table, *label[7], *close_but; char tmp1[256], *tmp2, *tmp3; int i, j; if (resrc->type != RESRC_URL && resrc->type != RESRC_FILE) { info_win("Resource Properties", "\nNo information available\n", INFO_ERROR, FALSE); return; } gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); dialog = gtk_dialog_new_with_buttons( "Resource Properties", GTK_WINDOW(get_ticker_env()->win), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, NULL); close_but = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL_CLOSE); close_but = close_but; /* To get rid of one stupid compiler warning */ set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); table = gtk_table_new(3, 3, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 5); gtk_container_set_border_width(GTK_CONTAINER(table), 15); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), table); label[0] = gtk_label_new(" "); if (resrc->type == RESRC_URL) { label[1] = gtk_label_new("Resource type:"); snprintf(tmp1, 256, "%s Feed", resrc->format == RSS_2_0 ? "RSS 2.0" : \ (resrc->format == RSS_ATOM ? "Atom" : "RSS 1.0")); label[2] = gtk_label_new(tmp1); label[3] = gtk_label_new("Feed title:"); label[4] = gtk_label_new(resrc->feed_title); label[5] = gtk_label_new("Feed URL:"); tmp2 = l_str_new("id[i] != '\0' && j < (FILE_NAME_MAXLEN * 2) - 4; i++, j++) if (resrc->id[i] != '&') tmp3[j] = resrc->id[i]; else { str_n_cpy(tmp3 + j, "&", 5); j += 4; } tmp3[j] = '\0'; tmp2 = l_str_cat(tmp2, tmp3); tmp2 = l_str_cat(tmp2, "\">"); tmp2 = l_str_cat(tmp2, tmp3); tmp2 = l_str_cat(tmp2, ""); label[6] = gtk_label_new(tmp2); l_str_free(tmp2); free2(tmp3); gtk_label_set_use_markup(GTK_LABEL(label[6]), TRUE); for (i = 0; i < 7; i++) gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); #ifdef VERBOSE_OUTPUT fprintf(STD_OUT, "Resource properties:\n" " Resource type: %s\n Feed title: %s\n Feed URL: %s\n", tmp1, resrc->feed_title, resrc->id); #endif } else if (resrc->type == RESRC_FILE) { label[1] = gtk_label_new("Resource type: "); label[2] = gtk_label_new("File"); label[3] = gtk_label_new("File name: "); label[4] = gtk_label_new(resrc->id); gtk_label_set_selectable(GTK_LABEL(label[4]), TRUE); for (i = 0; i < 5; i++) gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); #ifdef VERBOSE_OUTPUT fprintf(STD_OUT, "Resource Properties:\n" " Resource type: File\n File name: %s\n", resrc->id); #endif } gtk_table_attach_defaults(GTK_TABLE(table), label[0], 1, 2, 0, 1); gtk_table_attach_defaults(GTK_TABLE(table), label[1], 0, 1, 0, 1); gtk_table_attach_defaults(GTK_TABLE(table), label[2], 2, 3, 0, 1); gtk_table_attach_defaults(GTK_TABLE(table), label[3], 0, 1, 1, 2); gtk_table_attach_defaults(GTK_TABLE(table), label[4], 2, 3, 1, 2); if (resrc->type == RESRC_URL) { gtk_table_attach_defaults(GTK_TABLE(table), label[5], 0, 1, 2, 3); gtk_table_attach_defaults(GTK_TABLE(table), label[6], 2, 3, 2, 3); } gtk_widget_show_all(dialog); while (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL_CLOSE); gtk_widget_destroy(dialog); check_main_win_always_on_top(); } #ifdef G_OS_WIN32 static int easily_link_with_browser2() { char *browser_cmd_p, browser_cmd[512], tmp[1024]; unsigned int i, count, start = 0, end = 0; int exit_status = NO; if ((browser_cmd_p = (char *)get_default_browser_from_win32registry()) != NULL) { /* Find 1st string in browser_cmd */ str_n_cpy(tmp, browser_cmd_p, 511); for (i = 0, count = 0; i < strlen(tmp); i++) { if (tmp[i] == '"') { count++; if (count == 1) start = i + 1; else if (count == 2) end = i - 1; } } str_n_cpy(browser_cmd, tmp + start, MIN((end - start + 1), 511)); snprintf(tmp, 1024, "\nThis is the Shell command that opens your default Browser:\n\n%s\n\n" "Do you want to use it (recommended) ?\n", browser_cmd); if (question_win(tmp) == YES) { exit_status = YES; str_n_cpy(prm->open_link_cmd, browser_cmd, FILE_NAME_MAXLEN); str_n_cpy(prm->open_link_args, "", FILE_NAME_MAXLEN); if (question_win("Save this parameter ?") == YES) save_to_config_file(prm); } else info_win("", "\nCancelled.\n" "You may too set this parameter manually in the Preferences window.\n", INFO, FALSE); } else info_win("", "\nCan't find Browser shell command." "You will have to set this parameter manually in the Preferences window.\n", INFO_ERROR, FALSE); return exit_status; } static void easily_link_with_browser() { gtk_window_set_keep_above(GTK_WINDOW(env->win), FALSE); easily_link_with_browser2(); check_main_win_always_on_top(); } #endif /* If link found, copy it into env->active_link and return rank (starting at 1), * otherwise, return -1 (with link = "") */ static int get_visible_link_and_rank(int position_x_in_drwa) { int i, location_on_surface; if (position_x_in_drwa > -1) { location_on_surface = shift_counter * prm->shift_size + position_x_in_drwa; for (i = 0; i < NFEEDLINKANDOFFSETMAX; i++) { if (resrc->link_and_offset[i].offset_in_surface > location_on_surface) { str_n_cpy(env->active_link, resrc->link_and_offset[i].url, FILE_NAME_MAXLEN); return i; } } } env->active_link[0] = '\0'; return -1; } static void open_link() { char tmp1[FILE_NAME_MAXLEN + 1], tmp2[FILE_NAME_MAXLEN + 1]; char *argv[32]; /* Up to 32 - 3 (prog name, url, NULL) args */ GPid pid; GError *error = NULL; int i, j; if (prm->open_link_cmd[0] == '\0') { #ifndef G_OS_WIN32 /* TODO: should look for default browser */ warning(FALSE, 2, "Can't launch Browser: no command is defined.\n", "Please set the 'Open in Browser' option in the Preferences window."); return; #else easily_link_with_browser(); if (prm->open_link_cmd[0] == '\0') { warning(FALSE, 2, "Can't launch Browser: no command is defined.\n", "Please set the 'Open in Browser' option in the Preferences window."); return; } #endif } if (env->active_link[0] == '\0') { warning(FALSE, 1, "No link found"); return; } fprintf(STD_OUT, "Spawning: %s %s %s\n", prm->open_link_cmd, prm->open_link_args, env->active_link); str_n_cpy(tmp1, prm->open_link_cmd, FILE_NAME_MAXLEN); str_n_cpy(tmp2, prm->open_link_args, FILE_NAME_MAXLEN); argv[0] = tmp1; for (i = 0, j = 1; tmp2[i] != '\0' && j < 32 + 1 - 3; j++) { argv[j] = &tmp2[i]; while (tmp2[++i] != ' ') if (tmp2[i] == '\0') break; tmp2[i] = '\0'; while (tmp2[++i] == ' '); } argv[j] = env->active_link; argv[j + 1] = NULL; if (!g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &pid, &error)) { warning(FALSE, 3, APP_NAME": Can't create process ", argv[0], " - ", error->message); #ifndef G_OS_WIN32 info_win("", "Please check the 'Open in Browser' option in the Preferences window.", INFO_WARNING, FALSE); #else if (easily_link_with_browser2() == YES) open_link(); #endif } else g_spawn_close_pid(pid); } static void open_link2() { get_visible_link_and_rank(env->drwa_width / 2); open_link(); } /* Continuously get mouse x position inside drawing area. * Do nothing if outside, so must be used only by mouse-over-drawing-area / * click-on-drawing-area funcs. */ static gint track_mouse_position_x(GtkWidget *widget, GdkEventMotion *event) { widget = widget; if (event->type == GDK_MOTION_NOTIFY) /* Means mouse has moved inside widget */ env->mouse_x_in_drwa = (int)(event->x); return FALSE; } static gint left_click_on_drawing_area(GtkWidget *widget, GdkEventButton *event_but) { widget = widget; if (prm->disable_leftclick != 'y' && event_but->type == GDK_BUTTON_PRESS &&\ event_but->button == 1) { /* 1 = mouse left button */ /* NEW */ if (event_but->state & GDK_CONTROL_MASK) { /* Do nothing so far */ return FALSE; } else if (event_but->state & GDK_MOD1_MASK) { /* = alt */ /* Do nothing so far */ return FALSE; } else { get_visible_link_and_rank(env->mouse_x_in_drwa); open_link(); return TRUE; } } else return FALSE; } static gint right_click_on_drawing_area(GtkWidget *widget, GdkEventButton *event_but) { widget = widget; if (event_but->type == GDK_BUTTON_PRESS && event_but->button == 3) { /* 3 = mouse right button */ /* NEW */ if (event_but->state & GDK_CONTROL_MASK) { quick_feed_picker(); /* NEW - OK ? */ return TRUE; } else if (event_but->state & GDK_MOD1_MASK) { /* = alt */ /* Do nothing so far */ return FALSE; } else { /* Popup main menu */ gtk_menu_popup(GTK_MENU(popup_menu), NULL, NULL, NULL, NULL, event_but->button, event_but->time); return TRUE; } } else return FALSE; } static const char *get_win_title_text() { static char tmp1[2][256 + 64], tmp2[2][64]; static int i = -1; /* To allow 2 simultaneous calls */ i++; i &= 1; if (resrc->type == RESRC_URL) str_n_cpy(tmp1[i], resrc->feed_title, 256); else if (resrc->type == RESRC_FILE) str_n_cpy(tmp1[i], resrc->id, 256); else str_n_cpy(tmp1[i], "No resource", 256); snprintf(tmp2[i], 64, " | %s-%s", APP_NAME, APP_VERSION_NUMBER); return (const char *)str_n_cat(tmp1[i], tmp2[i], 63); } char *get_feed_extra_info(int rank) { FILE *fp; char *str1, tmp[4]; size_t str1_size = 8 * 1024; static char *str2 = NULL; int tag_found = FALSE; if (str2 != NULL) l_str_free(str2); str2 = l_str_new(""); str2[0] = '\0'; if (rank == -1) return str2; if ((fp = g_fopen(resrc->xml_dump_extra, "rb")) != NULL) { str1 = malloc2(str1_size * sizeof(char)); #ifndef G_OS_WIN32 while (getline(&str1, &str1_size, fp) != -1) { #else while (fgets(str1, str1_size, fp) != NULL) { #endif if (str1[0] == ITEM_TITLE_TAG_CHAR || str1[0] == ITEM_DES_TAG_CHAR) { if (tag_found) break; if (rank == atoi(str_n_cpy(tmp, str1 + 1, 3))) { tag_found = TRUE; str2 = l_str_cat(str2, str1 + 4); } } else if (tag_found) str2 = l_str_cat(str2, str1); } free2(str1); fclose(fp); } remove_trailing_whitespaces_from_str(str2); return str2; } static const char *get_ticker_tooltip_text(int rank) { static char *tooltip_text = NULL; if (tooltip_text != NULL) { l_str_free(tooltip_text); tooltip_text = NULL; } if ((prm->item_title == 'y' && prm->item_description == 'n') ||\ (prm->item_title == 'n' && prm->item_description == 'y')) { tooltip_text = l_str_new(get_feed_extra_info(rank)); if (tooltip_text[0] != '\0') tooltip_text = l_str_cat(tooltip_text, "\n\n"); tooltip_text = l_str_cat(tooltip_text, get_win_title_text()); return tooltip_text; } else return get_win_title_text(); } /* Pause ticker when mouse pointer is over (opened) popup menu. */ static gint mouse_over_opened_popup_menu(GtkWidget *widget, GdkEvent *event) { widget = widget; if (prm->pause_on_mouseover == 'y') { if (event->type == GDK_EXPOSE) env->suspend_rq = TRUE; else if (event->type == GDK_LEAVE_NOTIFY) env->suspend_rq = FALSE; } return FALSE; } /* Pause ticker on mouseover. */ static gint mouse_over_drawing_area(GtkWidget *widget, GdkEvent *event) { int rank; widget = widget; if (event->type == GDK_ENTER_NOTIFY || event->type == GDK_LEAVE_NOTIFY) { if (prm->pause_on_mouseover == 'y') { if (event->type == GDK_ENTER_NOTIFY) env->suspend_rq = TRUE; else env->suspend_rq = FALSE; } if (event->type == GDK_ENTER_NOTIFY) { while (gdk_events_pending()) /* So that "motion-notify-event" is processed now */ gtk_main_iteration(); rank = get_visible_link_and_rank(env->mouse_x_in_drwa); gtk_widget_set_tooltip_text(widget, get_ticker_tooltip_text(rank)); gtk_tooltip_trigger_tooltip_query(gdk_display_get_default()); return TRUE; } } return FALSE; } static gint mouse_wheel_scroll_on_drawing_area(GtkWidget *widget, GdkEvent *event) { char mouse_wheel_scroll; widget = widget; if (event->type == GDK_SCROLL) { mouse_wheel_scroll = prm->mouse_wheel_scroll; if (event->scroll.state & GDK_CONTROL_MASK) { /* If ctrl pressed, invert mouse_wheel_scroll values */ if (mouse_wheel_scroll == 's') mouse_wheel_scroll = 'f'; else if (mouse_wheel_scroll == 'f') mouse_wheel_scroll = 's'; } if (mouse_wheel_scroll == 's') { if (event->scroll.direction == GDK_SCROLL_UP) toggle_speed_up_flag(); else if (event->scroll.direction == GDK_SCROLL_DOWN) toggle_speed_down_flag(); env->suspend_rq = FALSE; return TRUE; } else if (mouse_wheel_scroll == 'f') { if (env->selection_mode == MULTIPLE) { /* Seems buggy if (event->scroll.direction == GDK_SCROLL_UP) next_feed2(); else if (event->scroll.direction == GDK_SCROLL_DOWN) previous_feed2();*/ quick_feed_picker(); env->suspend_rq = FALSE; } else warning(FALSE, 2, "Single selection mode\n", "(You have set 'Mouse wheel scrolling applies to: Feed')"); return TRUE; } } return FALSE; } /* * Popup menu stuff */ static GtkItemFactoryEntry popup_menu_item[] = { {"/_File", NULL, NULL, 0, "", NULL}, {"/File/Open Feed (_RSS|Atom)", "R", get_new_url2, 0, "", (gconstpointer)RSS_ICON}, {"/File/Open _Text File", "T", open_new_txt_file2, 0, "", (gconstpointer)GTK_STOCK_OPEN}, {"/File/sep", NULL, NULL, 0, "", NULL}, {"/File/_Import Feed List (OPML)", "I", import_opml_file2, 0, NULL, NULL}, {"/File/_Export Feed List (OPML)", "E", export_opml_file2, 0, NULL, NULL}, {"/File/sep", NULL, NULL, 0, "", NULL}, {"/File/Resource _Properties", "P", show_resource_info2, 0, "", (gconstpointer)GTK_STOCK_PROPERTIES}, {"/File/sep", NULL, NULL, 0, "", NULL}, {"/File/_Quit", "Q", gtk_main_quit, 0, "", (gconstpointer)GTK_STOCK_QUIT}, {"/_Edit", NULL, NULL, 0, "", NULL}, {"/Edit/Preference_s", "S", modify_params2, 0, "", (gconstpointer)GTK_STOCK_PREFERENCES}, {"/Edit/Connection Settings", "", connection_settings2, 0, "", (gconstpointer)GTK_STOCK_CONNECT}, {"/Edit/sep", NULL, NULL, 0, "", NULL}, {"/Edit/Import Preferences", "", import_params2, 0, NULL, NULL}, {"/Edit/Export Preferences", "", export_params2, 0, NULL, NULL}, {"/_Control", NULL, NULL, 0, "", NULL}, {"/Control/Open Link in _Browser", "B", open_link2, 0, "", (gconstpointer)GTK_STOCK_JUMP_TO/*GTK_STOCK_REDO*/}, {"/Control/sep", NULL, NULL, 0, "", NULL}, {"/Control/Play", "J", ticker_play, 0, "", (gconstpointer)GTK_STOCK_MEDIA_PLAY}, {"/Control/Pause", "K", ticker_pause, 0, "", (gconstpointer)GTK_STOCK_MEDIA_PAUSE}, {"/Control/Reload", "L", ticker_reload, 0, "", (gconstpointer)GTK_STOCK_REFRESH}, {"/Control/sep", NULL, NULL, 0, "", NULL}, {"/Control/First Feed", "", first_feed2, 0, "", (gconstpointer)GTK_STOCK_GOTO_FIRST}, {"/Control/Previous Feed", "", previous_feed2, 0, "", (gconstpointer)GTK_STOCK_GO_BACK}, {"/Control/Next Feed", "", next_feed2, 0, "", (gconstpointer)GTK_STOCK_GO_FORWARD}, {"/Control/Last Feed", "", last_feed2, 0, "", (gconstpointer)GTK_STOCK_GOTO_LAST}, {"/Control/sep", NULL, NULL, 0, "", NULL}, {"/Control/Speed Up", "U", toggle_speed_up_flag, 0, "", (gconstpointer)GTK_STOCK_GO_UP}, {"/Control/Speed Down", "D", toggle_speed_down_flag, 0, "", (gconstpointer)GTK_STOCK_GO_DOWN}, {"/_Help", NULL, NULL, 0, "", NULL}, {"/Help/Quick Help", "F1", help_win2, 0, "", (gconstpointer)GTK_STOCK_HELP}, {"/Help/Online Help", "H", online_help2, 0, NULL, NULL}, {"/Help/Check for Updates", "", check_for_updates2, 0, NULL, NULL}, {"/Help/sep", NULL, NULL, 0, "", NULL}, {"/Help/_About", "A", about_win2, 0, "", (gconstpointer)GTK_STOCK_ABOUT}, }; static gint n_popup_menu_items = sizeof(popup_menu_item) / sizeof(popup_menu_item[0]); static GtkWidget *get_popup_menu_menu(GtkWidget *win) { GtkItemFactory *item_factory; win = win; popup_menu_accel_group = gtk_accel_group_new(); item_factory = gtk_item_factory_new(GTK_TYPE_MENU, "

", popup_menu_accel_group); gtk_item_factory_create_items(item_factory, n_popup_menu_items, popup_menu_item, NULL); return gtk_item_factory_get_widget(item_factory, "
"); } static gint update_win_dims_and_loc() { /* Dimensions */ gtk_widget_set_size_request(env->drw_a, env->drwa_width, env->drwa_height); gtk_widget_set_size_request(env->drwa_clock, env->drwa_clock_width, env->drwa_height); gtk_widget_set_size_request(env->win, 1, 1); gtk_window_resize(GTK_WINDOW(env->win), env->drwa_width + env->drwa_clock_width, env->drwa_height); gtk_window_unmaximize(GTK_WINDOW(env->win)); /* Location */ gtk_window_move(GTK_WINDOW(env->win), prm->win_x, prm->win_y); return TRUE; } /* Not used anymore gboolean params_have_been_changed(Params *new_prm, int n_required_runs) { static Params prm_bak; static int initial_runs = 0; if (initial_runs++ < n_required_runs) { // 'fake params changes' are required at program startup memcpy((void *)&prm_bak, (const void *)new_prm, sizeof(Params)); return TRUE; } else if (memcmp((const void *)new_prm, (const void *)&prm_bak, sizeof(Params)) != 0) { memcpy((void *)&prm_bak, (const void *)new_prm, sizeof(Params)); return TRUE; } else return FALSE; }*/ gboolean win_params_have_been_changed(Params *new_prm, int n_required_runs) { static Params prm_bak0; Params *prm_bak = &prm_bak0; static int initial_runs = 0; gboolean changes = FALSE; if (initial_runs++ < n_required_runs) { /* 'fake params changes' are required at program startup */ memcpy((void *)prm_bak, (const void *)new_prm, sizeof(Params)); return TRUE; } else if (strcmp(new_prm->font_n_s, prm_bak->font_n_s) != 0) changes = TRUE; else if (new_prm->win_x != prm_bak->win_x) changes = TRUE; else if (new_prm->win_y != prm_bak->win_y) changes = TRUE; else if (new_prm->win_w != prm_bak->win_w) changes = TRUE; else if (new_prm->win_h != prm_bak->win_h) changes = TRUE; else if (new_prm->windec != prm_bak->windec) changes = TRUE; else if (new_prm->always_on_top != prm_bak->always_on_top) changes = TRUE; else if (new_prm->icon_in_taskbar != prm_bak->icon_in_taskbar) changes = TRUE; else if (new_prm->win_sticky != prm_bak->win_sticky) changes = TRUE; else if (new_prm->clock != prm_bak->clock) changes = TRUE; else if (strcmp(new_prm->clock_font_n_s, prm_bak->clock_font_n_s) != 0) changes = TRUE; /* TODO: some other params need to be ckecked too */ if (changes == TRUE) { memcpy((void *)prm_bak, (const void *)new_prm, sizeof(Params)); return TRUE; } else return FALSE; } /* * Create new or next cairo image surface and compute stuff to redraw window. */ static int compute_surface_and_win() { char fname[FONT_NAME_MAXLEN + 1], fsize[FONT_SIZE_MAXLEN + 1]; char cfname[FONT_NAME_MAXLEN + 1], cfsize[FONT_SIZE_MAXLEN + 1]; gint height1, height2; int size, render_exit_status, max_width, i; /* * Compute font size from requested height if > 0 */ split_font(prm->font_n_s, fname, fsize); if (prm->win_h > 0) snprintf(fsize, FONT_SIZE_MAXLEN + 1, "%3d", get_fsize_from_layout_height((gint)prm->win_h, fname)); /* In all cases, font size can't be > FONT_MAXSIZE */ if (atoi(fsize) > FONT_MAXSIZE) snprintf(fsize, FONT_SIZE_MAXLEN + 1, "%3d", FONT_MAXSIZE); compact_font(prm->font_n_s, fname, fsize); /* * Compute clock font size * clock height = ticker height unless clock font size is set * in which case clock height is always <= ticker height */ split_font(prm->clock_font_n_s, cfname, cfsize); if (strcmp(fname, cfname) == 0) { if (atoi(cfsize) > atoi(fsize)) str_n_cpy(cfsize, fsize, FONT_SIZE_MAXLEN); } else { height1 = get_layout_height_from_fnamesize(prm->clock_font_n_s); height2 = get_layout_height_from_fnamesize(prm->font_n_s); if (height1 > height2) { size = get_fsize_from_layout_height(height2, cfname); snprintf(cfsize, FONT_SIZE_MAXLEN + 1, "%3d", size); } } compact_font(prm->clock_font_n_s, cfname, cfsize); /* * Compute ticker width */ max_width = prm->disable_screen_limits == 'y' ? WIN_MAX_W : env->screen_w; if (prm->win_w >= DRWA_WIDTH_MIN && prm->win_w <= max_width) env->drwa_width = prm->win_w; else if (prm->win_w < DRWA_WIDTH_MIN) env->drwa_width = DRWA_WIDTH_MIN; else if (prm->win_w > max_width) env->drwa_width = max_width; env->drwa_width -= (env->drwa_clock_width = get_clock_width(prm)); /* * Reset link_and_offset stuff */ if(resrc->id[0] == '\0' && resrc->fp != NULL) { fclose(resrc->fp); resrc->fp = NULL; for (i = 0; i < NFEEDLINKANDOFFSETMAX; i++) { resrc->link_and_offset[i].url[0] = '\0'; resrc->link_and_offset[i].offset_in_surface = 0; } if(resrc->fp_extra != NULL) { fclose(resrc->fp_extra); resrc->fp_extra = NULL; } } /* * Create cairo image surface of rendered text (one long single line) */ env->c_surf = render_stream_to_surface(resrc->fp, resrc->link_and_offset, prm, &render_exit_status); if (render_exit_status != OK && render_exit_status != RENDER_NO_RESOURCE) { switch(render_exit_status) { case RENDER_NULL_ENDINGSTR: warning(FALSE, 1, "render_stream_to_surface(): ending string = NULL"); break; case RENDER_GETLINE_ERROR: warning(FALSE, 1, "render_stream_to_surface(): getline() error"); break; case RENDER_LINE_TOO_LONG: warning(FALSE, 1, "render_stream_to_surface(): line too long\n"); break; case RENDER_CAIRO_IMAGE_SURFACE_TOO_WIDE: big_error(RENDER_CAIRO_IMAGE_SURFACE_TOO_WIDE, 1, "render_stream_to_surface(): " "cairo image surface too wide (> 32 K pixels)"); break; case RENDER_CREATE_CAIRO_IMAGE_SURFACE_ERROR: big_error(RENDER_CREATE_CAIRO_IMAGE_SURFACE_ERROR, 1, "render_stream_to_surface(): " "can't create cairo image surface"); break; default: warning(FALSE, 2, "render_stream_to_surface(): unknown error ", itoa2(render_exit_status)); break; } } if (env->c_surf == NULL) big_error(render_exit_status, 1, "render_stream_to_surface(): cairo image surface = NULL"); env->surf_width = cairo_image_surface_get_width(env->c_surf); env->surf_height = cairo_image_surface_get_height(env->c_surf); env->drwa_height = (MIN(env->surf_height, env->screen_h)); /* Win title */ gtk_window_set_title(GTK_WINDOW(env->win), get_win_title_text()); /* Whole window transparency */ gtk_window_set_opacity(GTK_WINDOW(env->win), prm->win_transparency); /* Following code needs to be run * - twice at program startup (ie once after gtk_widget_show_all() has been called) * - whenever some window params have been changed * - not everytime a new feed is loaded. */ if (win_params_have_been_changed(prm, 2)) { gtk_window_set_keep_above(GTK_WINDOW(env->win), FALSE); gtk_window_set_skip_taskbar_hint(GTK_WINDOW(env->win), FALSE); gtk_window_unstick(GTK_WINDOW(env->win)); /* Win decoration */ if (prm->windec == 'y') { gtk_window_set_decorated(GTK_WINDOW(env->win), TRUE); if (!popup_menu_accel_group_attached) { gtk_window_add_accel_group(GTK_WINDOW(env->win), popup_menu_accel_group); popup_menu_accel_group_attached = TRUE; } } else if (prm->windec == 'n') { gtk_window_set_decorated(GTK_WINDOW(env->win), FALSE); if (popup_menu_accel_group_attached) { gtk_window_remove_accel_group(GTK_WINDOW(env->win), popup_menu_accel_group); popup_menu_accel_group_attached = FALSE; } } /* Clock */ if (prm->clock == 'l') gtk_box_reorder_child(GTK_BOX(main_hbox), vbox_clock, 0); else if (prm->clock == 'r') gtk_box_reorder_child(GTK_BOX(main_hbox), vbox_clock, 1); /* Move win */ gtk_window_move(GTK_WINDOW(env->win), prm->win_x, prm->win_y); /* Window icon in taskbar? */ if (prm->icon_in_taskbar == 'y') gtk_window_set_skip_taskbar_hint(GTK_WINDOW(env->win), FALSE); else if (prm->icon_in_taskbar == 'n') gtk_window_set_skip_taskbar_hint(GTK_WINDOW(env->win), TRUE); /* Window on all desktops? */ if (prm->win_sticky == 'y') gtk_window_stick(GTK_WINDOW(env->win)); else if (prm->win_sticky == 'n') gtk_window_unstick(GTK_WINDOW(env->win)); check_main_win_always_on_top(); gtk_window_present(GTK_WINDOW(env->win)); } while (gtk_events_pending()) gtk_main_iteration(); return render_exit_status; } /* * Timeout handler to render one part of cairo image surface onto drawing * area - image is shifted to left by pixels * * Handler 'listens' to flags: suspend_rq, reload_rq, compute_rq and * stream_fully_read * * Notes: * - reload_rq may be a misleading name as, in multiple selection mode, * we will load next stream, not reload the same one * - stream_fully_read is only relevant in multiple selection mode because * there is no need to reload each time in single selection mode */ static gint shift2left_callback() { cairo_t *cr; GdkRectangle r; char tmp[256]; int i; if (env->suspend_rq) return TRUE; /* Does nothing - just return */ /* Can't remember where this magical -8 little adjustment comes from... */ else if ((shift_counter * prm->shift_size < env->surf_width - env->drwa_width - 8) &&\ !env->reload_rq && !env->compute_rq) { env->suspend_rq = TRUE; /* * Draw onto ticker area * (we now use cairo instead of deprecated gdk_draw_ stuff) */ /* Checking first can't hurt */ if (env->c_surf == NULL) big_error(SHIFT2LEFT_NULL_CAIRO_IMAGE_SURFACE, 1, "shift2left_callback(): cairo image surface = NULL"); /* Double buffering disabled for drawing area so we need this */ gdk_window_get_geometry(env->drw_a->window, &(r.x), &(r.y), NULL, NULL, NULL); if (prm->clock == 'l') /* We must do that but not quite sure why */ r.x -= env->drwa_clock_width; r.width = env->drwa_width; r.height = env->drwa_height; gdk_window_begin_paint_rect(env->drw_a->window, &r); /* Cairo stuff */ cr = gdk_cairo_create(GDK_DRAWABLE(env->drw_a->window)); /* dest_x - src_x, dest_y - src_y */ cairo_set_source_surface(cr, env->c_surf, - (shift_counter++ * prm->shift_size), 0); /* dest_x, dest_y */ cairo_rectangle(cr, 0, 0, env->drwa_width, env->drwa_height); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_fill(cr); cairo_destroy(cr); /* We're done */ gdk_window_end_paint(env->drw_a->window); env->suspend_rq = FALSE; /* * Speeding up/down on the fly */ if (speed_up_flag == TRUE || speed_down_flag == TRUE) { if (speed_up_flag == TRUE) { speed_up_flag = FALSE; if (prm->delay > 1) prm->delay--; else return TRUE; } else if (speed_down_flag == TRUE) { speed_down_flag = FALSE; if (prm->delay < 50) prm->delay++; else return TRUE; } g_timeout_add_full(G_PRIORITY_DEFAULT, prm->delay, shift2left_callback, NULL, NULL); return FALSE; } else return TRUE; } else { /* * When cairo_image surface scrolling completed or if request to * reload or recompute everything, will create new surface or next one. */ env->suspend_rq = TRUE; if (env->c_surf != NULL) { cairo_surface_destroy(env->c_surf); env->c_surf = NULL; } i = OK; if (env->stream_fully_read || env->reload_rq) { if (env->selection_mode == SINGLE && env->reload_rq) load_resource(resrc, NULL); else { while ((i = load_resource(resrc, feed_selection)) != OK) { if (i == CONNECT_TOO_MANY_ERRORS && env->selection_mode == MULTIPLE) { if (get_params()->disable_popups == 'n') { snprintf(tmp, 256, "\nFailed to connect %d times in a row.\n\n" "Please check your internet connection and/or " "your connection settings.\n\n" "Switch to single selection mode ?\n", CONNECT_FAIL_MAX); if (question_win(tmp) == YES) { env->selection_mode = SINGLE; break; } } else { fprintf(STD_ERR, "Failed to connect %d times in a row\n" "Please check your internet connection and/or " "your connection settings\n", CONNECT_FAIL_MAX); if (gtk_events_pending()) { if (gtk_main_iteration_do(FALSE)) break; } else #ifndef G_OS_WIN32 sleep(CONNECT_FAIL_TIMEOUT); #else Sleep(CONNECT_FAIL_TIMEOUT * 1000); #endif } } } } check_time_load_resource(TIME_RESET); } compute_surface_and_win(); shift_counter = prm->shift_size; /* To avoid displaying twice the same thing */ g_timeout_add_full(G_PRIORITY_DEFAULT, prm->delay, shift2left_callback, NULL, NULL); env->reload_rq = FALSE; env->compute_rq = FALSE; env->suspend_rq = FALSE; return FALSE; } } static gint display_time2() { display_time(prm); return TRUE; } static gint get_win_position() /* Only if win is 'draggable' */ { if (prm->windec == 'y') gtk_window_get_position(GTK_WINDOW(env->win), &prm->win_x, &prm->win_y); return TRUE; } /* * Reload stuff every rss_ttl * 60> seconds */ static void check_time_load_resource(check_time_mode mode) { static unsigned long elapsed_time_in_sec; if (mode == TIME_RESET) elapsed_time_in_sec = 0; else if (mode == TIME_CHECK) { if (resrc->type == RESRC_FILE) resrc->rss_ttl = prm->rss_refresh; if ((++elapsed_time_in_sec) / 60 >= (unsigned long)resrc->rss_ttl) { elapsed_time_in_sec = 0; env->reload_rq = TRUE; } } } static gint check_time_load_resource2() { check_time_load_resource(TIME_CHECK); return TRUE; } static void quit_with_cli_info(tickr_error_code error_code) { if (resrc->fp != NULL) fclose(resrc->fp); xmlCleanupParser(); free2(env); free2(resrc); free2(prm); fprintf(STD_ERR, "Try '" APP_CMD " --help' for more information\n"); exit(error_code); } static void print_help() { int i; for (i = 0; get_help_str1()[i] != NULL; i++) fprintf(STD_OUT, "%s", get_help_str1()[i]); fprintf(STD_OUT, "\n"); } static void print_version() { fprintf(STD_OUT, APP_NAME " version " APP_VERSION_NUMBER "\n"); } static void print_license() { int i; for (i = 0; get_license_str1()[i] != NULL; i++) fprintf(STD_OUT, "%s", get_license_str1()[i]); fprintf(STD_OUT, "%s\n", get_license_str2()); } /* Reset display params as soon as scrolling has started. */ static gint update_everything() { if (shift_counter > 4) { update_pixmap_from_opened_stream(); return FALSE; } else return TRUE; } /* Reset opened stream to begining and recompute pixmap, in order to * update all display params. * (Hmmm... we should find a more informative name.) */ void update_pixmap_from_opened_stream() { gboolean suspend_rq_bak = env->suspend_rq; env->suspend_rq = TRUE; fseek(resrc->fp, 0, SEEK_SET); env->stream_fully_read = FALSE; env->compute_rq = TRUE; env->suspend_rq = suspend_rq_bak; } #ifdef G_OS_WIN32 /* This is meant to be used with the new GTK/GLib-win32 runtime. */ static int init_win32_mmtimer() { TIMECAPS tc; MMRESULT mmr; unsigned int highest_res; mmr = timeGetDevCaps(&tc, sizeof(TIMECAPS)); highest_res = tc.wPeriodMin; if (timeBeginPeriod(highest_res) == TIMERR_NOERROR) return 0; else { fprintf(STD_ERR, "init_win32_mmtimer() error"); return -1; } } static void create_win32_logfiles() { time_t time2 = time(NULL); STD_OUT = open_new_datafile_with_name(STDOUT_FILENAME1, "wb"); STD_ERR = open_new_datafile_with_name(STDERR_FILENAME1, "wb"); fprintf(STD_OUT, "%s", ctime(&time2)); fprintf(STD_ERR, "%s", ctime(&time2)); } /* Swap win32 log files every hour to prevent generating huge ones. */ static gint swap_win32_logfiles() { static unsigned long elapsed_time_in_sec = 0; static int counter = 0; int suspend_rq_bak; time_t time2 = time(NULL); if ((++elapsed_time_in_sec) >= (unsigned long)3600) { elapsed_time_in_sec = 0; counter++; counter &= 1; suspend_rq_bak = env->suspend_rq; env->suspend_rq = TRUE; if (STD_OUT != NULL) { if (fclose(STD_OUT) != 0) big_error(WIN32V_ERROR, 2, "Can't close STD_OUT: ", strerror(errno)); STD_OUT = NULL; } if (STD_ERR != NULL) { if (fclose(STD_ERR) != 0) big_error(WIN32V_ERROR, 2, "Can't close STD_ERR: ", strerror(errno)); STD_ERR = NULL; } if (counter == 0) { STD_OUT = open_new_datafile_with_name(STDOUT_FILENAME1, "wb"); STD_ERR = open_new_datafile_with_name(STDERR_FILENAME1, "wb"); } else { STD_OUT = open_new_datafile_with_name(STDOUT_FILENAME2, "wb"); STD_ERR = open_new_datafile_with_name(STDERR_FILENAME2, "wb"); } fprintf(STD_OUT, "%s", ctime(&time2)); fprintf(STD_ERR, "%s", ctime(&time2)); env->suspend_rq = suspend_rq_bak; } return TRUE; } #endif /* TODO: is this still needed ? */ /* Question at program start-up about new feed list format conversion: * if version >= 0.6.2 and feed list exists and feed list backup doesn't * exist, create backup and convert to new format. */ #define URL_LIST_BAK_FILE URL_LIST_FILE "-bak" static void test_convert_local_feed_list() { FILE *fp1, *fp2; char *str; size_t str_size = 8 * 1024; if (strncmp(APP_VERSION_NUMBER, "0.6.2", 5) >= 0) if (g_file_test(get_datafile_full_name_from_name(URL_LIST_FILE), G_FILE_TEST_EXISTS) &&\ !g_file_test(get_datafile_full_name_from_name(URL_LIST_BAK_FILE), G_FILE_TEST_EXISTS)) if (question_win(APP_NAME " version 0.6.2 or later uses a new feed list format internally.\n" "Do you wish your local feed list to be checked and eventually converted ?\n" "(Doing this ONCE is strongly RECOMMENDED.)") == YES) { fp1 = open_new_datafile_with_name(URL_LIST_FILE, "rb"); fp2 = open_new_datafile_with_name(URL_LIST_BAK_FILE, "wb"); str = malloc2(str_size * sizeof(char)); #ifndef G_OS_WIN32 while (getline(&str, &str_size, fp1) != -1) #else while (fgets(str, str_size, fp1) != NULL) #endif fprintf(fp2, "%s", str); fclose(fp1); fclose(fp2); fp1 = open_new_datafile_with_name(URL_LIST_FILE, "wb"); fp2 = open_new_datafile_with_name(URL_LIST_BAK_FILE, "rb"); #ifndef G_OS_WIN32 while (getline(&str, &str_size, fp2) != -1) #else while (fgets(str, str_size, fp2) != NULL) #endif if (strncmp(str + 1, "http", 4) == 0 || strncmp(str + 1, "file", 4) == 0) fprintf(fp1, "%c %s", str[0], str + 1); else fprintf(fp1, "%s", str); free2(str); fclose(fp1); fclose(fp2); } } int main(int argc, char *argv[]) { GdkPixbuf *pixb = NULL; GtkIconFactory *icon_factory = NULL; GError *error = NULL; #ifndef G_OS_WIN32 GdkColormap *colormap = NULL; #endif int n_options, n_resources, i, j; #ifdef G_OS_WIN32 WSADATA wsadata; #endif gtk_init(&argc, &argv); LIBXML_TEST_VERSION #ifndef LIBXML_TREE_ENABLED # error "Libxml2: tree support not compiled in" #endif xmlInitParser(); env = malloc2(sizeof(TickerEnv)); resrc = malloc2(sizeof(Resource)); prm = malloc2(sizeof(Params)); env->win = env->drw_a = env->drwa_clock = NULL; env->c_surf = NULL, env->screen = NULL; env->visual = NULL; env->screen_w = env->screen_h = env->depth = 0; env->drwa_width = env->drwa_height = env->surf_width = env->surf_height = 0; env->active_link[0] = '\0'; env->mouse_x_in_drwa = -1; env->suspend_rq = env->compute_rq = env->reload_rq = env->stream_fully_read = FALSE; /* env->selection_mode: default = MULTIPLE, set to SINGLE internally if * selection is unavalaible/empty or after picking a single feed. */ env->selection_mode = MULTIPLE; /* * Toplevel window */ env->win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(env->win), APP_NAME "-" APP_VERSION_NUMBER); gtk_container_set_border_width(GTK_CONTAINER(env->win), 0); g_signal_connect(G_OBJECT(env->win), "delete_event", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(env->win), "destroy", G_CALLBACK(gtk_widget_destroy), &(env->win)); #ifdef G_OS_WIN32 if ((i = WSAStartup(MAKEWORD(2, 2), &wsadata)) != 0) big_error(WIN32V_ERROR, 2, "WSAStartup() error ", itoa2(i)); else if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2) { WSACleanup(); big_error(WIN32V_ERROR, 1, "Couldn't find a usable version of Winsock.dll"); } else if (get_progfiles_dir() == NULL) big_error(WIN32V_ERROR, 1, "Can't find Program Files directory"); else if (get_appdata_dir() == NULL) big_error(WIN32V_ERROR, 1, "Can't find Application Data directory"); else if (init_win32_mmtimer() != 0) if (question_win("Can't initialize win32 multimedia timer. " "Scrolling may be very slow. Continue ?") == NO) exit(WIN32V_ERROR); #endif /* * Create dir in user home dir if it doesn't exist. */ g_mkdir(get_datadir_full_path(), S_IRWXU); #ifdef G_OS_WIN32 create_win32_logfiles(); #endif /* * Get help, show license, set instance id, run with no-ui, or check available system fonts. */ if (argc >= 2 && (strcmp(argv[1], "-help") == 0 || strcmp(argv[1], "--help") == 0 ||\ strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "-?") == 0)) { print_help(); return 0; } else if (argc >= 2 && (strcmp(argv[1], "-version") == 0 || strcmp(argv[1], "--version") == 0 ||\ strcmp(argv[1], "-v") == 0)) { print_version(); return 0; } else if (argc >= 2 && (strcmp(argv[1], "-license") == 0 || strcmp(argv[1], "--license") == 0 ||\ strcmp(argv[1], "-l") == 0)) { print_license(); return 0; } else if (argc >= 2 && strncmp(argv[1], "-instance-id=", strlen("-instance-id=")) == 0) { if ((instance_id = atoi(argv[1] + strlen("-instance-id="))) < 1 || instance_id > 99) { fprintf(STD_ERR, "Instance ID invalid value: %d\n", instance_id); instance_id = 0; } } else if (argc >= 2 && strncmp(argv[1], "-no-ui", strlen("-no-ui")) == 0) no_ui = TRUE; else if (argc >= 2 && (strcmp(argv[1], "-dumpfontlist") == 0 || strcmp(argv[1], "--dumpfontlist") == 0)) { dump_font_list(); return 0; } set_tickr_icon_to_dialog(GTK_WINDOW(env->win)); /* * Create rss icon */ pixb = gdk_pixbuf_new_from_file(get_imagefile_full_name_from_name(RSS_ICON), &error); icon_factory = gtk_icon_factory_new(); gtk_icon_factory_add(icon_factory, RSS_ICON, gtk_icon_set_new_from_pixbuf(pixb)); gtk_icon_factory_add_default(icon_factory); if (pixb != NULL) g_object_unref(pixb); /* * Get some system graphical params */ env->screen = gtk_widget_get_screen(env->win); #ifndef G_OS_WIN32 if ((colormap = gdk_screen_get_rgba_colormap(env->screen)) != NULL) { #ifdef VERBOSE_OUTPUT fprintf(STD_OUT, "Composited GDK screen found\n"); #endif } else colormap = gdk_screen_get_rgb_colormap(env->screen); gtk_widget_set_colormap(env->win, colormap); env->visual = gdk_colormap_get_visual(colormap); #else env->visual = gdk_visual_get_best(); #endif env->depth = env->visual->depth; env->screen_w = gdk_screen_get_width(gtk_window_get_screen(GTK_WINDOW(env->win))); env->screen_h = gdk_screen_get_height(gtk_window_get_screen(GTK_WINDOW(env->win))); #ifdef VERBOSE_OUTPUT fprintf(STD_OUT, "GDK visual: screen width = %d, screen height = %d, depth = %d\n", env->screen_w, env->screen_h, env->depth); if (no_ui) warning(FALSE, 2, APP_NAME " will run with the 'no-ui' option.\n", "Opening of UI elements which can modify settings and/or \n" "URL list/selection is disabled."); #endif resrc->type = RESRC_UNSPECIFIED; resrc->format = RSS_FORMAT_UNDETERMINED; resrc->id[0] = '\0'; resrc->xml_dump[0] = '\0'; resrc->fp = NULL; resrc->fp_extra = NULL; for (i = 0; i < NFEEDLINKANDOFFSETMAX; i++) { resrc->link_and_offset[i].url[0] = '\0'; resrc->link_and_offset[i].offset_in_surface = 0; } init_authentication(); init_proxy(); /* * Options and resource stuff */ set_default_options(prm); /* init all params */ if (g_file_test(get_datafile_full_name_from_name(CONFIG_FILE), G_FILE_TEST_EXISTS)) get_config_file_options(prm); else quick_setup(prm); n_options = 0; n_resources = 0; if (argc > 1) { /* Parse args: first -options... then resource - the rest is ignored. */ for (i = 1; i < argc; i++) if (argv[i][0] == '-') n_options ++; else break; if (i < argc) n_resources++; if (n_resources == 0) { fprintf(STD_ERR, "No resource specified\n"); if (RESOURCE_NONE_QUIT) quit_with_cli_info(RESOURCE_NONE); } else { env->selection_mode = SINGLE; /* will open text file or get rss feed */ str_n_cpy(resrc->id, argv[n_options + 1], FILE_NAME_MAXLEN); } if (n_options > 0) if (parse_options_array(prm, n_options, (const char **)(argv + 1)) != OK) if (OPTION_ERROR_QUIT) quit_with_cli_info(OPTION_ERROR); } else { fprintf(STD_ERR, "No resource specified\n"); if (RESOURCE_NONE_QUIT) quit_with_cli_info(RESOURCE_NONE); } compute_auth_and_proxy_str(); /* * Feed list stuff */ test_convert_local_feed_list(); if ((i = f_list_load_from_file(&feed_list, NULL)) == OK) { feed_list = f_list_sort(feed_list); feed_list = f_list_first(feed_list); f_list_save_to_file(feed_list, NULL); } j = build_feed_selection_from_feed_list(); if (n_resources == 0 && env->selection_mode == MULTIPLE && i == OK && j == OK) fprintf(STD_OUT, "Will use feed selection\n"); else { if (env->selection_mode == MULTIPLE && (i != OK || j != OK)) { if (j == SELECTION_EMPTY) warning(TRUE, 1, "No feed selected - " "Switching to single selection mode"); else if (j == SELECTION_ERROR) warning(TRUE, 1, "No feed selection available - " "Switching to single selection mode"); } env->selection_mode = SINGLE; if (n_resources == 0) { if (prm->homefeed[0] != '\0') { str_n_cpy(resrc->id, prm->homefeed, FILE_NAME_MAXLEN); fprintf(STD_OUT, "Will use default resource (Homefeed): %s\n", resrc->id); } else { fprintf(STD_ERR, "No default resource available\n"); if (RESOURCE_NONE_QUIT) quit_with_cli_info(RESOURCE_NONE); } } } first_feed(); if (load_resource(resrc, feed_selection) != OK) if (RESOURCE_NONE_QUIT) quit_with_cli_info(RESOURCE_NONE); resrc->rss_ttl = prm->rss_refresh; first_feed(); /* * Set window layout */ main_hbox = gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(env->win), main_hbox); popup_menu = get_popup_menu_menu(NULL); popup_menu_accel_group_attached = FALSE; /* * Create 2 drawing areas */ env->drw_a = gtk_drawing_area_new(); /* We disable double buffering for drawing area and will use * gdk_window_begin_paint_rect() and gdk_window_end_paint(). */ gtk_widget_set_double_buffered(env->drw_a, FALSE); env->drwa_clock = gtk_drawing_area_new(); gtk_widget_add_events(env->drw_a, GDK_ALL_EVENTS_MASK); /* change mask? */ g_signal_connect(G_OBJECT(env->drw_a), "button-press-event", G_CALLBACK(left_click_on_drawing_area), NULL); g_signal_connect(G_OBJECT(env->drw_a), "button-press-event", G_CALLBACK(right_click_on_drawing_area), NULL); g_signal_connect(G_OBJECT(env->drw_a), "enter-notify-event", G_CALLBACK(mouse_over_drawing_area), NULL); g_signal_connect(G_OBJECT(env->drw_a), "leave-notify-event", G_CALLBACK(mouse_over_drawing_area), NULL); g_signal_connect(G_OBJECT(popup_menu), "expose-event", G_CALLBACK(mouse_over_opened_popup_menu), NULL); g_signal_connect(G_OBJECT(popup_menu), "leave-notify-event", G_CALLBACK(mouse_over_opened_popup_menu), NULL); g_signal_connect(G_OBJECT(env->drw_a), "scroll-event", G_CALLBACK(mouse_wheel_scroll_on_drawing_area), NULL); g_signal_connect(G_OBJECT(env->drw_a), "motion-notify-event", G_CALLBACK(track_mouse_position_x), NULL); vbox_ticker = gtk_vbox_new(FALSE, 0); /* vbox_ticker is only used to have a v-centered ticker */ gtk_box_pack_start(GTK_BOX(vbox_ticker), GTK_WIDGET(env->drw_a), TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(main_hbox), vbox_ticker, FALSE, FALSE, 0); vbox_clock = gtk_vbox_new(FALSE, 0); /* vbox_clock is only used to have a v-centered clock */ gtk_box_pack_start(GTK_BOX(vbox_clock), GTK_WIDGET(env->drwa_clock), TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(main_hbox), vbox_clock, FALSE, FALSE, 0); /* * Create cairo image surface from text file or rss feed and compute stuff to draw window. */ compute_surface_and_win(); /* === Timeout callbacks === */ /* * Refresh the image every milliseconds */ g_timeout_add_full(G_PRIORITY_DEFAULT, prm->delay, shift2left_callback, NULL, NULL); /* * Display clock every 0.5 seconds */ g_timeout_add_full(G_PRIORITY_DEFAULT, 500, display_time2, NULL, NULL); /* * Get current win position (if 'dragged') every 0.5 seconds */ g_timeout_add_full(G_PRIORITY_DEFAULT, 500, get_win_position, NULL, NULL); /* * Check every sec until elapsed time in mn > rss_ttl> mn then reload rss feed (or text file) */ check_time_load_resource(TIME_RESET); g_timeout_add_full(G_PRIORITY_DEFAULT, 1000, check_time_load_resource2, NULL, NULL); g_timeout_add_full(G_PRIORITY_DEFAULT, 500, update_win_dims_and_loc, NULL, NULL); g_timeout_add_full(G_PRIORITY_DEFAULT, 100, update_everything, NULL, NULL); /* * Check every sec until elapsed time >= 1 hour then swap win32 log files to prevent generating huge ones */ #ifdef G_OS_WIN32 g_timeout_add_full(G_PRIORITY_DEFAULT, 1000, swap_win32_logfiles, NULL, NULL); #endif env->suspend_rq = FALSE; env->compute_rq = FALSE; env->reload_rq = TRUE; gtk_widget_show_all(env->win); /* NEW - to get rid of starting 'ghost' square win - but is it effective ? */ gtk_widget_set_size_request(env->win, 1, 1); gtk_window_resize(GTK_WINDOW(env->win), 1, 1); gtk_main(); /* * Cleanup stuff */ if (resrc->fp != NULL) fclose(resrc->fp); if (resrc->fp_extra != NULL) fclose(resrc->fp_extra); xmlCleanupParser(); #ifdef G_OS_WIN32 WSACleanup(); #endif free2(env); free2(resrc); free2(prm); return 0; } tickr_0.6.4.orig/src/tickr/tickr_misc.c0000640000175000017500000002350412147427510017443 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" void import_params() { GtkWidget *dialog; FILE *fp1, *fp2; char *file_name; char tmp[TMPSTR_SIZE + 1]; int c; gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); dialog = gtk_file_chooser_dialog_new("Import Preferences", GTK_WINDOW(get_ticker_env()->win), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL_CLOSE, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); gtk_widget_show_all(dialog); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { if ((file_name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog))) != NULL) { if ((fp1 = g_fopen(file_name, "rb")) != NULL) { snprintf(tmp, TMPSTR_SIZE + 1, "Preferences are about to be imported from file: %s. " "Continue ?", file_name); if (question_win(tmp) == YES) { if ((fp2 = g_fopen(get_datafile_full_name_from_name(CONFIG_FILE), "wb")) != NULL) { while ((c = fgetc(fp1)) != (int)EOF) fputc((int)c, fp2); fclose(fp2); get_config_file_options(get_params()); current_feed(); get_ticker_env()->reload_rq = TRUE; /* ???? modify_params2();*/ } else warning(FALSE, 4, "Can't save Preferences to file ", file_name, ": ", strerror(errno)); } fclose(fp1); } else warning(FALSE, 4, "Can't open ", file_name, ": ", strerror(errno)); g_free(file_name); } } gtk_widget_destroy(dialog); check_main_win_always_on_top(); } void export_params() { GtkWidget *dialog; FILE *fp1, *fp2; char *file_name = NULL; int exit_status = !OK; char tmp[TMPSTR_SIZE + 1]; int c; if ((fp1 = g_fopen(get_datafile_full_name_from_name(CONFIG_FILE), "rb")) == NULL) { save_to_config_file(get_params()); if ((fp1 = g_fopen(get_datafile_full_name_from_name(CONFIG_FILE), "rb")) == NULL) { warning(FALSE, 4, "Can't open file ", get_datafile_full_name_from_name(CONFIG_FILE) , ": ", strerror(errno)); return; } } gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); dialog = gtk_file_chooser_dialog_new("Export Preferences", GTK_WINDOW(get_ticker_env()->win), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL_CLOSE, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); gtk_widget_show_all(dialog); /*gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), "~");*/ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), CONFIG_FILE); gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { if ((file_name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog))) != NULL) { if ((fp2 = g_fopen(file_name, "wb")) != NULL) { while ((c = fgetc(fp1)) != (int)EOF) fputc((int)c, fp2); fclose(fp2); exit_status = OK; } else warning(FALSE, 4, "Can't save Preferences to file ", file_name, ": ", strerror(errno)); } } fclose(fp1); gtk_widget_destroy(dialog); if (exit_status == OK) { snprintf(tmp, TMPSTR_SIZE + 1, "\nPreferences have been exported to file: %s\n", file_name); info_win("", tmp, INFO, FALSE); } if (file_name != NULL) g_free(file_name); check_main_win_always_on_top(); } #ifndef G_OS_WIN32 void online_help() { char tmp1[FILE_NAME_MAXLEN + 1]; char *help_url = SUPPORT_URL; char *argv[3]; GPid pid; GError *error = NULL; if (get_params()->open_link_cmd[0] == '\0') { /* TODO: should look for default browser */ warning(FALSE, 2, "Can't launch Browser: no command is defined.\n", "Please set the 'Open in Browser' option in the Preferences window."); return; } fprintf(STD_OUT, "Spawning: %s %s\n", get_params()->open_link_cmd, help_url); str_n_cpy(tmp1, get_params()->open_link_cmd, FILE_NAME_MAXLEN); argv[0] = tmp1; argv[1] = help_url; argv[2] = NULL; if (!g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &pid, &error)) { warning(FALSE, 4, APP_NAME ": Can't create process ", argv[0], " - ", error->message); info_win("", "Please check the 'Open in Browser' option in the Preferences window.", INFO_WARNING, FALSE); } else g_spawn_close_pid(pid); } #else void online_help() { char *browser_cmd_p, browser_cmd[512], tmp[1024]; unsigned int i, count, start = 0, end = 0; char link[] = SUPPORT_URL; char *argv[3]; GPid pid; GError *error = NULL; if ((browser_cmd_p = (char *)get_default_browser_from_win32registry()) != NULL) { /* Find 1st str in browser_cmd */ str_n_cpy(tmp, browser_cmd_p, 511); for (i = 0, count = 0; i < strlen(tmp); i++) { if (tmp[i] == '"') { count++; if (count == 1) start = i + 1; else if (count == 2) end = i - 1; } } str_n_cpy(browser_cmd, tmp + start, MIN((end - start + 1), 511)); /* Launch browser */ fprintf(STD_OUT, "Spawning: %s %s\n", browser_cmd, link); argv[0] = browser_cmd; argv[1] = link; argv[2] = NULL; if (!g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &pid, &error)) warning(FALSE, 4, APP_NAME ": Can't create process ", argv[0], " - ", error->message); else g_spawn_close_pid(pid); } } #endif /* * This func's prototype is in libetm / error.h. * This func is not defined in libetm but in app and it handles errors * from libetm and app. * * Max number of strings = N_STR_MAX, max string length = STR_MAXLEN. * Outstanding stuff (strings and chars) will be ignored. */ #define N_STR_MAX 8 #define STR_MAXLEN FILE_NAME_MAXLEN int big_error(int big_error_code, int n_str, ...) { char error_str[64 + 32 + (N_STR_MAX * STR_MAXLEN) + 32 + 1]; va_list str; int i; get_ticker_env()->suspend_rq = TRUE; error_str[0] = '\0'; str_n_cpy(error_str, "\nOuch !! Something went wrong...\n\nCritical error in ", 64); if (big_error_code > LIBETM_LASTERRORCODE) str_n_cat(error_str, APP_NAME ": ", 32); n_str = MIN(n_str, N_STR_MAX); va_start(str, n_str); for (i = 0; i < n_str ; i++) str_n_cat(error_str, va_arg(str, char *), STR_MAXLEN); va_end(str); str_n_cat(error_str, " - Will quit now", 32); if (STD_ERR != NULL) { fprintf(STD_ERR, "%s\n", error_str); fflush(NULL); } /* We want this win to always popup */ get_params()->disable_popups = 'n'; info_win(APP_NAME " - Critical error", error_str, INFO_ERROR, FALSE); if (get_resource()->fp != NULL) fclose(get_resource()->fp); free2(get_ticker_env()); free2(get_resource()); free2(get_params()); exit(big_error_code); } /* Will popup and wait for INFO_WIN_WAIT_TIMEOUT ms if wait == TRUE, then close * otherwise, will block until an appropriate keyboard/mouse action happens. */ void warning(gboolean wait, int n_str, ...) { char warning_str[N_STR_MAX * STR_MAXLEN + 1]; va_list str; int i; warning_str[0] = '\0'; n_str = MIN(n_str, N_STR_MAX); va_start(str, n_str); for (i = 0; i < n_str ; i++) str_n_cat(warning_str, va_arg(str, char *), STR_MAXLEN); va_end(str); fprintf(STD_ERR, "%s\n", warning_str); fflush(STD_ERR); if (!wait) info_win("", warning_str, INFO_WARNING, FALSE); else info_win_wait(warning_str, INFO_WIN_WAIT_TIMEOUT); } void dump_font_list() { #define NFAMMAX 1024 #define NFACEMAX 16 PangoFontFamily **font_fam; PangoFontFamily *font_fam2[NFAMMAX]; PangoFontFace **font_face; PangoFontFace *font_face2[NFACEMAX]; PangoFontDescription *font_desc; char *font[NFAMMAX * NFACEMAX + 1], *tmp; int n_fam, n_face, i, j, k, overflow, min; fprintf(STD_OUT, "List of available fonts on this system:\n"); font_fam = font_fam2; font_face = font_face2; overflow = FALSE; k = 0; pango_font_map_list_families(pango_cairo_font_map_get_default(), &font_fam, &n_fam); if (n_fam >= NFAMMAX) overflow = TRUE; for (i = 0; i < n_fam && i < NFAMMAX; i++) { pango_font_family_list_faces(font_fam[i], &font_face, &n_face); if (n_face >= NFACEMAX) overflow = TRUE; for (j = 0; j < n_face && j < NFACEMAX; j++) { font_desc = pango_font_face_describe(font_face[j]); font[k++] = pango_font_description_to_string(font_desc); pango_font_description_free(font_desc); } } font[k] = NULL; /* Not sure if we must g_free() sth ? */ /* Sort array (selection sort) */ for (i = 0; i < k; i++) { min = i; for (j = i + 1; j < k; j++) { if (strcmp(font[min], font[j]) > 0) min = j; } tmp = font[i]; font[i] = font[min]; font[min] = tmp; } for (i = 0; i < k; i++) { if (font[i] != NULL) fprintf(STD_OUT, "%s\n", font[i]); else break; } if (overflow) fprintf(STD_ERR, "In function dump_font_list(): need to allocate more space for array\n" "Can't dump full list (more than %d available fonts)\n", k); else fprintf(STD_OUT, "(%d available fonts)\n", k); } tickr_0.6.4.orig/src/tickr/tickr_socket.h0000644000175000017500000000663612147427510020020 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #ifndef INC_TICKR_SOCKET_H #define INC_TICKR_SOCKET_H #define USE_PROXY_FLAG get_use_proxy() #define WARNING(a1, a2, a3, a4, a5, a6) warning(a1, a2, a3, a4, a5, a6) #define SOCK_OK OK /* Check these 2 values - need more testing (1s / 0.5s / 0.1.s) */ #define SEND_RECV_TIMEOUT_SEC 1 #define SEND_RECV_TIMEOUT_USEC 0 #include #include #include #include #include #include #include #include #ifndef G_OS_WIN32 # include # include # include # include # include # include #else # define _WIN32_WINNT 0x0501 /* Win version = XP or higher */ # include # include # include # include # include # include #endif #include "../libetm-0.4.4/libetm.h" #define CONNECT_TIMEOUT 5 #define RECV_CHUNK_LEN (16 * 1024 - 1) #ifndef G_OS_WIN32 typedef int sockt; # define SOCK_CREATE_ERROR -1 /* socket() */ # define SOCK_FUNC_ERROR -1 /* setsockopt(), bind(), listen(), select(), connect(), * send(), recv(), fnctl(), ioctlsocket() */ # define CLOSE_SOCK(s) close(s) #else typedef SOCKET sockt; # define SOCK_CREATE_ERROR INVALID_SOCKET # define SOCK_FUNC_ERROR SOCKET_ERROR # define CLOSE_SOCK(s) closesocket(s) #endif typedef enum { SOCK_ERROR = LIBETM_LASTERRORCODE + 1, SOCK_CANT_CONNECT, SOCK_SHOULD_BE_CLOSED, SELECT_ERROR, SELECT_TIMED_OUT, SELECT_TRUE, SELECT_FALSE, SEND_ERROR, RECV_ERROR, CONNECTION_CLOSED_BY_SERVER, SOCKET_LASTERRORCODE } socket_error_code; #define FPRINTF_FFLUSH_2(a1, a2); {fprintf(a1, a2); fflush(a1);} #define FPRINTF_FFLUSH_3(a1, a2, a3); {fprintf(a1, a2, a3); fflush(a1);} #define FPRINTF_FFLUSH_4(a1, a2, a3, a4); {fprintf(a1, a2, a3, a4); fflush(a1);} /* * Open stream socket in non-blocking mode and connect to host. * Return socket fd (> 0) / SOCK_CREATE_ERROR (-1 on Linux) if error. */ sockt connect_to_host(const char *, const char *); int writable_data_is_available_on_socket(sockt); int readable_data_is_available_on_socket(sockt); /* * Return n bytes sent or SOCK_FUNC_ERROR (-1 on Linux) if error (connection * closed by server or ?) */ int send_full(sockt, const char *); /* * Return response = recv_full(socket, &bytes_received, &status) or NULL if error. * -> status = SOCK_OK, CONNECTION_CLOSED_BY_SERVER, RECV_ERROR or SOCK_SHOULD_BE_CLOSED. * -> allocate memory for response (must be freed afterwards with free2() if != NULL). */ char *recv_full(sockt, int *, int *); #ifdef G_OS_WIN32 const char *win32_error_msg(int); #endif const char *sock_error_message(); #endif /* INC_TICKR_SOCKET_H */ tickr_0.6.4.orig/src/tickr/tickr_quickfeedpicker.c0000644000175000017500000001473512147427510021660 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" static GtkWidget *dialog, *sc_win; static FList *flist; static int f_index; /* Starting at 0 (row starts at 1) */ static char url[FILE_NAME_MAXLEN + 1]; enum {COLUMN_INT, COLUMN_STRING_TITLE, COLUMN_STRING_URL, N_COLUMNS}; static gint enter_key_pressed(GtkWidget *dialog2, GdkEventKey *event_key) { if (event_key->keyval == GDK_Return) { gtk_dialog_response(GTK_DIALOG(dialog2), GTK_RESPONSE_OK); return TRUE; } else return FALSE; } static gint mouse_over_area(GtkWidget *widget, GdkEvent *event) { static int i = 0; widget = widget; if (get_params()->sfpicker_closes_when_pointer_leaves == 'y' &&\ event->type == GDK_LEAVE_NOTIFY && i == 0) { i = 1; return TRUE; } else if (get_params()->sfpicker_closes_when_pointer_leaves == 'y' &&\ event->type == GDK_LEAVE_NOTIFY && i == 1) { i = 0; force_quit_dialog(dialog); return TRUE; } else return FALSE; } /* Tree selection callback - get url */ static gint tree_selection_changed(GtkTreeSelection *selection) { GtkTreeModel *tree_model; GtkTreeIter iter; gchar *str_url; if (gtk_tree_selection_get_selected(selection, &tree_model, &iter)) { gtk_tree_model_get(tree_model, &iter, COLUMN_INT, &f_index, COLUMN_STRING_URL, &str_url, -1); str_n_cpy(url, (const char *)str_url, FILE_NAME_MAXLEN); g_free(str_url); } gtk_dialog_response(GTK_DIALOG(dialog), GTK_RESPONSE_NONE); return TRUE; } /* Catch double-click on tree view */ static gint double_click_on_tree_view(GtkTreeView *tree_view, GtkTreePath *tree_path) { GtkTreeModel *tree_model; GtkTreeIter iter; gchar *str_url; tree_model = gtk_tree_view_get_model(tree_view); if (gtk_tree_model_get_iter(tree_model, &iter, tree_path)) { gtk_tree_model_get(tree_model, &iter, COLUMN_INT, &f_index, COLUMN_STRING_URL, &str_url, -1); str_n_cpy(url, (const char *)str_url, FILE_NAME_MAXLEN); g_free(str_url); } gtk_dialog_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); return TRUE; } /* Clear the list before filling it */ static void fill_list_store_from_flnode(GtkListStore *list_store) { FList *flist2; GtkTreeIter iter; int i = 0; gtk_list_store_clear(list_store); if (IS_FLIST(flist)) for (flist2 = f_list_first(flist); IS_FLIST(flist2); flist2 = flist2->next) { gtk_list_store_append(list_store, &iter); gtk_list_store_set(list_store, &iter, COLUMN_INT, i, COLUMN_STRING_TITLE, flist2->title, COLUMN_STRING_URL, flist2->url, -1); i++; } } /* Actually ***selected feed*** picker */ void quick_feed_picker() { GtkTreeView *tree_view; GtkListStore *list_store; GtkCellRenderer *renderer1, *renderer2; GtkTreeViewColumn *column1, *column2; GtkTreeSelection *selection; gint response; dialog = gtk_dialog_new_with_buttons( "Selected Feed Picker", GTK_WINDOW(get_ticker_env()->win), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, NULL); set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_container_set_border_width(GTK_CONTAINER(dialog), 0); gtk_widget_set_size_request(dialog, 600, 150); /* NEW - OK ? - previously 450, 200 */ /* Not sure about that: if (get_params()->sfpicker_closes_when_pointer_leaves == 'y') gtk_window_set_decorated(GTK_WINDOW(dialog), FALSE);*/ sc_win = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sc_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), sc_win); list_store = gtk_list_store_new(N_COLUMNS, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING); if (IS_FLIST(get_feed_selection())) { flist = f_list_first(get_feed_selection()); fill_list_store_from_flnode(list_store); } else { warning(FALSE, 2, "No feed selection available\n", "(You have set 'Mouse wheel scrolling applies to: Feed' and\n" "either there is no feed list or no feed has been selected)"); gtk_widget_destroy(dialog); return; } tree_view = GTK_TREE_VIEW(gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store))); renderer1 = gtk_cell_renderer_text_new(); column1 = gtk_tree_view_column_new_with_attributes("Selected Feed Title", renderer1, "text", COLUMN_STRING_TITLE, NULL); gtk_tree_view_append_column(tree_view, column1); renderer2 = gtk_cell_renderer_text_new(); column2 = gtk_tree_view_column_new_with_attributes("Selected Feed URL", renderer2, "text", COLUMN_STRING_URL, NULL); gtk_tree_view_append_column(tree_view, column2); gtk_container_add(GTK_CONTAINER(sc_win), GTK_WIDGET(tree_view)); selection = gtk_tree_view_get_selection(tree_view); gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(enter_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(tree_selection_changed), NULL); g_signal_connect(G_OBJECT(tree_view), "row_activated", G_CALLBACK(double_click_on_tree_view), NULL); g_signal_connect(G_OBJECT(tree_view), "leave-notify-event", G_CALLBACK(mouse_over_area), NULL); gtk_widget_show_all(dialog); if (IS_FLIST(flist) && (get_resource()->id)[0] != '\0') if ((f_index = f_list_search(flist, (get_resource()->id))) > -1) highlight_and_go_to_row(tree_view, selection, f_index + 1); while ((response = gtk_dialog_run(GTK_DIALOG(dialog))) != GTK_RESPONSE_CANCEL_CLOSE) { if (response == GTK_RESPONSE_OK) { if ((f_index = f_list_search(flist, url)) > -1) { set_feed_selection(f_list_nth(flist, f_index + 1)); get_ticker_env()->reload_rq = TRUE; } break; } } gtk_widget_destroy(dialog); } tickr_0.6.4.orig/src/tickr/tickr_http.c0000640000175000017500000005116312147427510017471 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" /* Are these values OK ? */ #define HTTP_REQUEST_MAXLEN (8 * 1024 - 1) #define HTTP_HEADER_FIELD_MAXLEN (2 * 1024 - 1) #define MAX_HTTP_REDIRECT 8 #define DEFAULT_HTTP_PORT_STR "80" #define DEFAULT_HTTPS_PORT_STR "443" #define PORT_STR_MAXLEN PROXY_PORT_MAXLEN #define TAB '\x09' /* S_MOD -> true in multiple selection mode / false otherwise */ #define S_MOD (get_ticker_env()->selection_mode == MULTIPLE) void remove_chunk_info(char **response) { char *response2; int i, j; response2 = l_str_new(*response); response2[0] = '\0'; i = go_after_next_empty_line(*response); while ((j = (int)get_http_chunk_size(*response + i)) > 0) { i += go_after_next_cr_lf(*response + i); str_n_cat(response2, *response + i, j); i += j; i += go_after_next_cr_lf(*response + i); } free2(*response); *response = response2; } /* 'Quickly check feed format' (xml/rss2.0/rss1.0/atom), get shift to begining * and cut off trailing part. */ static int format_quick_check(char *response, int *shift) { int i; /* This may return false positives so disabled if (strcmp(get_http_header_value("Content-Type", response), "text/xml") != 0) return FEED_FORMAT_ERROR;*/ i = 0; while (strncmp(response + i, "", 5) != 0 && response[i] != '\0') i++; if (response[i] != '\0') response[i + 5] = '\0'; else return FEED_FORMAT_ERROR; } else { i = 0; while (strncmp(response + i, "", 9) != 0 && response[i] != '\0') i++; if (response[i] != '\0') response[i + 9] = '\0'; else return FEED_FORMAT_ERROR; } else { i = 0; while (strncmp(response + i, "", 6) != 0 && response[i] != '\0') i++; if (response[i] != '\0') response[i + 6] = '\0'; else return FEED_FORMAT_ERROR; } else return FEED_FORMAT_ERROR; } } i = 0; while (strncmp(response + i, "selection_mode == SINGLE) warning(FALSE, 2, "Can't connect to host: ", host); else { fprintf(STD_ERR, "Can't connect to host: %s\n", host); fflush(STD_ERR); } if (++connect_fail_count >= CONNECT_FAIL_MAX) { connect_fail_count = 0; return CONNECT_TOO_MANY_ERRORS; } else return SOCK_CANT_CONNECT; } } /* *********************************** * TODO: BETTER DOCUMENT THIS FUNC * ***********************************/ /* We replace resrc->id with modified url and file_name = downloaded resource. * Max length of file_name, url, and new_url = FILE_NAME_MAXLEN. */ int fetch_resource(const char *resrc_id, const char *file_name, char *url) { sockt sock; int status, recv_status; char *response; char *new_url; char header_field[HTTP_HEADER_FIELD_MAXLEN + 1]; FILE *fp; int content_length; GError *error = NULL; int i, j; if (strncmp(resrc_id, "file://", strlen("file://")) == 0) { /* 'file' scheme */ str_n_cpy(url, resrc_id + strlen("file://"), FILE_NAME_MAXLEN - strlen("file://")); if (strncmp(url, "localhost/", strlen("localhost/")) == 0) i = strlen("localhost/") - 1; else if (url[0] == '/') i = 0; else return RESOURCE_ERROR; if (g_file_get_contents(url + i, &response, NULL, &error)) { if ((j = format_quick_check(response, &i)) == OK) { if (g_file_set_contents(file_name, response + i, -1, &error)) { g_free(response); return OK; } else { g_free(response); if (error != NULL) { warning(FALSE, 1, error->message); g_error_free(error); } else warning(FALSE, 2, "Can't create file: ", file_name); return CREATE_FILE_ERROR; } } else { g_free(response); return j; } } else { if (error != NULL) { warning(S_MOD, 1, error->message); g_error_free(error); } else warning(S_MOD, 2, "Can't open file: ", url + i); return OPEN_FILE_ERROR; } } else /* 'http' scheme ('https' not supported so far) */ str_n_cpy(url, resrc_id, FILE_NAME_MAXLEN); if ((i = connect_with_url(&sock, url)) == OK) { if ((status = get_http_response(sock, "GET", "", url, &new_url, &response, &recv_status)) == SEND_ERROR || status == RECV_ERROR) { if (recv_status == CONNECTION_CLOSED_BY_SERVER || recv_status == SOCK_SHOULD_BE_CLOSED) CLOSE_SOCK(sock); return i; } } else return i; while (TRUE) { /* Status checked here are those returned by get_http_response() * so we must make sure they all match. */ if (status == HTTP_CONTINUE) { free2(response); status = get_http_response(sock, "GET", "", url, &new_url, &response, &recv_status); continue; } else if (status == HTTP_SWITCH_PROTO) { if (strcmp(get_http_header_value("Upgrade", response), "HTTP") == 0) warning(S_MOD, 2, url, ":\nSwitching to HTTP protocol requested for this connection" " - Request currently not supported"); else if (strcmp(get_http_header_value("Upgrade", response), "HTTPS") == 0) warning(S_MOD, 2, url, ":\nSwitching to HTTPS protocol requested for this connection" " - Request currently not supported"); return status; } else if (status == OK) { if (strcmp(get_http_header_value("Transfer-Encoding", response), "chunked") == 0) { /* Chunked transfer encoding */ remove_chunk_info(&response); } else if ((content_length = atoi(get_http_header_value("Content-Length", response))) > 0) { /* 'Content-Length' = length of entity body is mandatory * but if 'Transfer-Encoding: chunked'. */ /* Do nothing */ } else { #ifdef VERBOSE_OUTPUT /* Only if verbose because notification only, nothing done. */ fprintf(STD_ERR, "No 'Transfer-Encoding' nor 'Content-Length' " "header field in HTTP response\n"); fflush(STD_ERR); #endif } /* Quickly 'check format' (xml and rss2.0/atom stuff), * shift to beginnig and cut off trailing part. */ if ((j = format_quick_check(response, &i)) != OK) { free2(response); return j; } /* If OK, save to dump file. */ if ((fp = g_fopen(file_name, "wb")) != NULL) { fprintf(fp, "%s", response + i); fclose(fp); free2(response); CLOSE_SOCK(sock); return OK; } else { warning(FALSE, 2, "Can't create file: ", file_name); fclose(fp); free2(response); CLOSE_SOCK(sock); return CREATE_FILE_ERROR; } } else if (status == HTTP_MOVED) { i = 0; do { str_n_cpy(url, new_url, FILE_NAME_MAXLEN); if (strcmp(get_http_header_value("Connection", response), "close") == 0 ||\ strcmp(get_scheme_from_url(url), "https") == 0) { free2(response); CLOSE_SOCK(sock); if (strcmp(get_scheme_from_url(url), "https") == 0) { warning(S_MOD, 2, resrc_id, ":\nHTTPS protocol requested for this connection" " (following HTTP moved) - Not currently supported"); return HTTP_ERROR; /* ???? */ } if ((j = connect_with_url(&sock, url)) != OK) return j; } else free2(response); } while ((status = get_http_response(sock, "GET", "", url, &new_url, &response, &recv_status)) == HTTP_MOVED &&\ ++i < MAX_HTTP_REDIRECT); if (status != HTTP_MOVED && i <= MAX_HTTP_REDIRECT) continue; else { warning(S_MOD, 2, resrc_id, ":\nToo many HTTP redirects"); free2(response); CLOSE_SOCK(sock); return HTTP_TOO_MANY_REDIRECTS; } } else if (status == HTTP_USE_PROXY) { warning(FALSE, 4, "Resource: ", url, "\nmust be accessed through proxy.\nProxy host: ", new_url); str_n_cpy(get_proxy_host(), new_url, PROXY_HOST_MAXLEN); free2(response); CLOSE_SOCK(sock); connection_settings(PROXY_PAGE); current_feed(); return status; } else if (status == HTTP_PROXY_AUTH_REQUIRED) { /* Proxy authentication */ free2(response); CLOSE_SOCK(sock); if (get_use_proxy_auth()) { if ((i = connect_with_url(&sock, url)) != OK) return i; snprintf(header_field, HTTP_HEADER_FIELD_MAXLEN + 1, "Proxy-Authorization: Basic %s\r\n\r\n", get_proxy_auth_str()); if ((status = get_http_response(sock, "GET", header_field, url, &new_url, &response, &recv_status)) == HTTP_PROXY_AUTH_REQUIRED) { warning(FALSE, 2, "Proxy authentication failed for: ", get_proxy_host()); free2(response); CLOSE_SOCK(sock); if (connection_settings(PROXY_PAGE) == GTK_RESPONSE_OK) { if ((i = connect_with_url(&sock, url)) != OK) return i; status = get_http_response(sock, "GET", header_field, url, &new_url, &response, &recv_status); } else return HTTP_NO_PROXY_AUTH_CREDENTIALS; } continue; } else { warning(FALSE, 2, "Proxy authentication required for: ", get_proxy_host()); if (connection_settings(PROXY_PAGE) == GTK_RESPONSE_OK &&\ get_use_proxy_auth()) { if ((i = connect_with_url(&sock, url)) != OK) return i; snprintf(header_field, HTTP_HEADER_FIELD_MAXLEN + 1, "Proxy-Authorization: Basic %s\r\n\r\n", get_proxy_auth_str()); status = get_http_response(sock, "GET", header_field, url, &new_url, &response, &recv_status); continue; } else return HTTP_NO_PROXY_AUTH_CREDENTIALS; } } else if (status == HTTP_UNAUTHORIZED) { /* http authentication - only basic so far */ free2(response); CLOSE_SOCK(sock); if (get_use_authentication()) { if ((i = connect_with_url(&sock, url)) != OK) return i; snprintf(header_field, HTTP_HEADER_FIELD_MAXLEN + 1, "Authorization: Basic %s\r\n\r\n", get_http_auth_str()); if ((status = get_http_response(sock, "GET", header_field, url, &new_url, &response, &recv_status)) == HTTP_UNAUTHORIZED) { warning(FALSE, 2, "HTTP authentication failed for: ", url); free2(response); CLOSE_SOCK(sock); if (connection_settings(AUTH_PAGE) == GTK_RESPONSE_OK) { if ((i = connect_with_url(&sock, url)) != OK) return i; status = get_http_response(sock, "GET", header_field, url, &new_url, &response, &recv_status); } else return HTTP_NO_AUTH_CREDENTIALS; } continue; } else { warning(FALSE, 2, "HTTP authentication required for: ", url); if (connection_settings(AUTH_PAGE) == GTK_RESPONSE_OK &&\ get_use_authentication()) { if ((i = connect_with_url(&sock, url)) != OK) return i; snprintf(header_field, HTTP_HEADER_FIELD_MAXLEN + 1, "Authorization: Basic %s\r\n\r\n", get_http_auth_str()); status = get_http_response(sock, "GET", header_field, url, &new_url, &response, &recv_status); continue; } else return HTTP_NO_AUTH_CREDENTIALS; } } else if (status == HTTP_BAD_REQUEST) { warning(S_MOD, 2, url, ":\nBad Request"); free2(response); CLOSE_SOCK(sock); return status; } else if (status == HTTP_FORBIDDEN) { warning(S_MOD, 2, url, ":\nForbidden"); free2(response); CLOSE_SOCK(sock); return status; } else if (status == HTTP_NOT_FOUND) { warning(S_MOD, 2, url, ":\nNot found"); free2(response); CLOSE_SOCK(sock); return status; } else if (status == HTTP_INT_SERVER_ERROR) { warning(S_MOD, 2, url, ":\nInternal server error"); free2(response); CLOSE_SOCK(sock); return status; } else if (status == HTTP_NO_STATUS_CODE) { warning(S_MOD, 2, url, ":\nNo HTTP status code returned"); free2(response); CLOSE_SOCK(sock); return status; } else { warning(S_MOD, 3, url, ":\nHTTP response status code: ", itoa2(status - 1000)); if (response != NULL) free2(response); CLOSE_SOCK(sock); return HTTP_ERROR; } } } /* 'rq_str' may contain header fields(s) separated and ended by "\r\n" */ const char *build_http_request(const char *method, const char *path,\ const char *host, const char* rq_str) { static char str[HTTP_REQUEST_MAXLEN + 1]; snprintf(str, HTTP_REQUEST_MAXLEN, "%s %s HTTP/1.1\r\n" /* Start line with method and path */ "Host: %s\r\n" /* Mandatory host header field */ "User-Agent: " APP_NAME "-" APP_VERSION_NUMBER "\r\n" "%s\r\n", /* optional extra header field(s) */ method, path, host, rq_str); return (const char *)str; } /* * 'rq_str' may contain header field(s) separated and ended by "\r\n". * Must 'free2' response afterwards. */ int get_http_response(sockt sock, const char *rq_method, const char *rq_str, const char *rq_url, char **new_rq_url, char **response, int *recv_status) { char *str; static char location[FILE_NAME_MAXLEN + 1]; int bytes_sent, bytes_received, status_code; location[0] = '\0'; *new_rq_url = (char *)location; *response = NULL; str = (char *)build_http_request( rq_method, (get_use_proxy() ? rq_url : get_path_from_url(rq_url)), /* Path or full (absolute) url if using proxy */ /* is that correct when using proxy? */ get_host_from_url(rq_url), rq_str); if ((bytes_sent = send_full(sock, (const char *)str)) >= 0) { if ((*response = recv_full(sock, &bytes_received, recv_status)) != NULL) { if ((status_code = get_http_status_code(*response)) == 100) return HTTP_CONTINUE; else if (status_code == 101) return HTTP_SWITCH_PROTO; else if (status_code == 200) return OK; else if ( /* 'Multiple choices' */ status_code == 300 ||\ /* 'Moved permanently' */ status_code == 301 ||\ /* 'Found' */ status_code == 302 ||\ /* 'See other' */ status_code == 303 ||\ /* 'Not modified' */ status_code == 304 ||\ /* 'Moved temporarily' */ status_code == 307) { str_n_cpy(location, get_http_header_value("Location", *response), FILE_NAME_MAXLEN); return HTTP_MOVED; /* Must use the new url in 'Location' */ } else if (status_code == 305) return HTTP_USE_PROXY; else if (status_code == 400) return HTTP_BAD_REQUEST; else if (status_code == 401) return HTTP_UNAUTHORIZED; else if (status_code == 403) return HTTP_FORBIDDEN; else if (status_code == 404) return HTTP_NOT_FOUND; else if (status_code == 407) return HTTP_PROXY_AUTH_REQUIRED; else if (status_code == 500) return HTTP_INT_SERVER_ERROR; else if (status_code == -1) return HTTP_NO_STATUS_CODE; else return status_code + 1000; } else return RECV_ERROR; } else return SEND_ERROR; } /* Return -1 if error */ int get_http_status_code(const char *response) { char status_code[4]; int i = 0; while (response[i] != ' ' && response[i] != TAB) { if (response[i] == '\n' || response[i] == '\r' || response[i] == '\0') return -1; else i++; } while (response[i] == ' ' || response[i] == TAB) i++; if (response[i] == '\n' || response[i] == '\r' || response[i] == '\0') status_code[0] = '\0'; else str_n_cpy(status_code, response + i, 3); return atoi(status_code); } /* Get header_value as string (empty one if header name not found) */ const char *get_http_header_value(const char *header_name, const char *response) { static char header_value[1024]; int len = strlen(header_name), i = 0; while (strncasecmp(response + i, header_name, len) != 0 && response[i] != '\0') i++; if (response[i] != '\0') { i += len; if (response[i] != ':') { header_value[0] = '\0'; return (const char *)header_value; } else i++; while (response[i] == ' ' || response[i] == TAB) { if (response[i] == '\n' || response[i] == '\r' ||\ response[i] == '\0') { header_value[0] = '\0'; return (const char *)header_value; } else i++; } str_n_cpy(header_value, response + i, 1023); i = 0; while (header_value[i] != '\0' && header_value[i] != ' ' &&\ header_value[i] != TAB && header_value[i] != '\n' && header_value[i] != '\r' && i < 1023) i++; header_value[i] = '\0'; } else header_value[0] = '\0'; return (const char *)header_value; } /* Return 0 if none found */ int go_after_next_cr_lf(const char *response) { int i = 0; while (strncmp(response + i, "\r\n", 2) != 0 && response[i] != '\0') i++; if (response[i] != '\0') return i + 2; else return 0; } /* Return 0 if none found */ int go_after_next_empty_line(const char *response) { int i = 0; while (strncmp(response + i, "\r\n\r\n", 4) != 0 && response[i] != '\0') i++; if (response[i] != '\0') return i + 4; else return 0; } /* 'response' must point to chunk size hexa str or preceeding space(s). * Return -1 if invalid chunk size format (ie not an hexa str). */ int get_http_chunk_size(const char *response) { char size_str[32], *tailptr; int size, i = 0; while (response[i] == ' ' || response[i] == TAB ||\ response[i] == '\n' || response[i] == '\r') i++; str_n_cpy(size_str, response + i, 31); i = 0; while (size_str[i] != ' ' && size_str[i] != TAB &&\ size_str[i] != '\n' && size_str[i] != '\r' &&\ size_str[i] != ';' && size_str[i] != '\0' &&\ i < 31) i++; size_str[i] = '\0'; size = (int)strtoul(size_str, &tailptr, 16); if (tailptr == size_str) { fprintf(STD_ERR, "Invalid hexadecimal value in HTTP chunk size: %s\n", size_str); fflush(STD_ERR); return -1; } else return size; } /* * 'http://www.sth1.org/sth2/sth2.xml' -> 'http' * (expect one scheme in url, return empty str if none). */ const char *get_scheme_from_url(const char* url) { static char str[16]; int i = 0; while (strncmp(url + i, "://", 3) != 0 && url[i] != '\0') i++; if (url[i] != '\0') str_n_cpy(str, url, MIN(i, 15)); else str[0] = '\0'; return (const char *)str; } /* * 'http://www.sth1.org/sth2/sth2.xml' -> 'www.sth1.org' * (expect one scheme in url, return empty str if none). */ const char *get_host_from_url(const char* url) { static char str[FILE_NAME_MAXLEN + 1]; int i = 0; while (strncmp(url + i, "://", 3) != 0 && url[i] != '\0') i++; if (url[i] != '\0') { str_n_cpy(str, url + i + 3, FILE_NAME_MAXLEN); i = 0; while (str[i] != '\0' && str[i] != '/' && i < FILE_NAME_MAXLEN) i++; str[i] = '\0'; } else str[0] = '\0'; return (const char *)str; } /* * 'http://www.sth1.org/sth2/sth2.xml' -> '/sth2/sth2.xml' * (expect one scheme in url, return empty str if none). */ const char *get_path_from_url(const char* url) { static char str[FILE_NAME_MAXLEN + 1]; int i = 0; while (strncmp(url + i, "://", 3) != 0 && url[i] != '\0') i++; if (url[i] != '\0') { i += 3; while (url[i] != '\0' && url[i] != '/') i++; if (url[i] != '\0') str_n_cpy(str, url + i, FILE_NAME_MAXLEN); else str[0] = '\0'; } else str[0] = '\0'; return (const char *)str; } tickr_0.6.4.orig/src/tickr/tickr_html_entities.h0000644000175000017500000002011012147427510021357 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ char *html_entity[] = { /* * Special entities 1/2 (most common ones) */ """, """, "\"", "&", "&", "&", "'", "'", "'", "<", "<", "<", ">", ">", ">", /* * Latin-1 entities */ " ", " ", " ", "¡", "¡", "¡", "¢", "¢", "¢", "£", "£", "£", "¤", "¤", "¤", "¥", "¥", "¥", "¦", "¦", "¦", "§", "§", "§", "¨", "¨", "¨", "©", "©", "©", "ª", "ª", "ª", "«", "«", "«", "¬", "¬", "¬", "­", "­", "", "®", "®", "®", "¯", "¯", "¯", "°", "°", "°", "±", "±", "±", "²", "²", "²", "³", "³", "³", "´", "´", "´", "µ", "µ", "µ", "¶", "¶", "¶", "·", "·", "·", "¸", "¸", "¸", "¹", "¹", "¹", "º", "º", "º", "»", "»", "»", "¼", "¼", "¼", "½", "½", "½", "¾", "¾", "¾", "¿", "¿", "¿", "À", "À", "À", "Á", "Á", "Á", "Â", "Â", "Â", "Ã", "Ã", "Ã", "Ä", "Ä", "Ä", "Å", "Å", "Å", "Æ", "Æ", "Æ", "Ç", "Ç", "Ç", "È", "È", "È", "É", "É", "É", "Ê", "Ê", "Ê", "Ë", "Ë", "Ë", "Ì", "Ì", "Ì", "Í", "Í", "Í", "Î", "Î", "Î", "Ï", "Ï", "Ï", "Ð", "Ð", "Ð", "Ñ", "Ñ", "Ñ", "Ò", "Ò", "Ò", "Ó", "Ó", "Ó", "Ô", "Ô", "Ô", "Õ", "Õ", "Õ", "Ö", "Ö", "Ö", "×", "×", "×", "Ø", "Ø", "Ø", "Ù", "Ù", "Ù", "Ú", "Ú", "Ú", "Û", "Û", "Û", "Ü", "Ü", "Ü", "Ý", "Ý", "Ý", "Þ", "Þ", "Þ", "ß", "ß", "ß", "à", "à", "à", "á", "á", "á", "â", "â", "â", "ã", "ã", "ã", "ä", "ä", "ä", "å", "å", "å", "æ", "æ", "æ", "ç", "ç", "ç", "è", "è", "è", "é", "é", "é", "ê", "ê", "ê", "ë", "ë", "ë", "ì", "ì", "ì", "í", "í", "í", "î", "î", "î", "ï", "ï", "ï", "ð", "ð", "ð", "ñ", "ñ", "ñ", "ò", "ò", "ò", "ó", "ó", "ó", "ô", "ô", "ô", "õ", "õ", "õ", "ö", "ö", "ö", "÷", "÷", "÷", "ø", "ø", "ø", "ù", "ù", "ù", "ú", "ú", "ú", "û", "û", "û", "ü", "ü", "ü", "ý", "ý", "ý", "þ", "þ", "þ", "ÿ", "ÿ", "ÿ", /* * Special entities 2/2 */ "Œ", "Œ", "Œ", "œ", "œ", "œ", "Š", "Š", "Š", "š", "š", "š", "Ÿ", "Ÿ", "Ÿ", "ˆ", "ˆ", "ˆ", /* ********************************** * 'ˆ' != '^' -> ???? * "&????;", "&#????;", "^", * **********************************/ "˜", "˜", "˜", " ", " ", " ", " ", " ", " ", " ", " ", " ", "‌", "‌", "", "‍", "‍", "", "‎", "‎", "", "‏", "‏", "", "–", "–", "–", "—", "—", "—", "‘", "‘", "‘", "’", "’", "’", "sbquo;", "‚", "‚", "“", "“", "“", "”", "”", "”", "„", "„", "„", "†", "†", "†", "‡", "‡", "‡", "‰", "‰", "‰", "‹", "‹", "‹", "›", "›", "›", "€", "€", "€", /* * Entities for symbols and Greek letters */ "ƒ", "ƒ", "ƒ", "Α", "Α", "Α", "Β", "Β", "Β", "Γ", "Γ", "Γ", "Δ", "Δ", "Δ", "Ε", "Ε", "Ε", "Ζ", "Ζ", "Ζ", "Η", "Η", "Η", "Θ", "Θ", "Θ", "Ι", "Ι", "Ι", "Κ", "Κ", "Κ", "Λ", "Λ", "Λ", "Μ", "Μ", "Μ", "Ν", "Ν", "Ν", "Ξ", "Ξ", "Ξ", "Ο", "Ο", "Ο", "Π", "Π", "Π", "Ρ", "Ρ", "Ρ", "Σ", "Σ", "Σ", "Τ", "Τ", "Τ", "Υ", "Υ", "Υ", "Φ", "Φ", "Φ", "Χ", "Χ", "Χ", "Ψ", "Ψ", "Ψ", "Ω", "Ω", "Ω", "α", "α", "α", "β", "β", "β", "γ", "γ", "γ", "δ", "δ", "δ", "ε", "ε", "ε", "ζ", "ζ", "ζ", "η", "η", "η", "θ", "θ", "θ", "ι", "ι", "ι", "κ", "κ", "κ", "λ", "λ", "λ", "μ", "μ", "μ", "ν", "ν", "ν", "ξ", "ξ", "ξ", "ο", "ο", "ο", "π", "π", "π", "ρ", "ρ", "ρ", "ς", "ς", "ς", "σ", "σ", "σ", "τ", "τ", "τ", "υ", "υ", "υ", "φ", "φ", "φ", "χ", "χ", "χ", "ψ", "ψ", "ψ", "ω", "ω", "ω", "ϑ", "ϑ", "ϑ", "ϒ", "ϒ", "ϒ", "ϖ", "ϖ", "ϖ", "•", "•", "•", "…", "…", "…", "′", "′", "′", "″", "″", "″", "‾", "‾", "‾", "⁄", "⁄", "⁄", "℘", "℘", "℘", "ℑ", "ℑ", "ℑ", "ℜ", "ℜ", "ℜ", "™", "™", "™", "ℵ", "ℵ", "ℵ", "←", "←", "←", "↑", "↑", "↑", "→", "→", "→", "↓", "↓", "↓", "↔", "↔", "↔", "↵", "↵", "↵", "⇐", "⇐", "⇐", "⇑", "⇑", "⇑", "⇒", "⇒", "⇒", "⇓", "⇓", "⇓", "⇔", "⇔", "⇔", "∀", "∀", "∀", "∂", "∂", "∂", "∃", "∃", "∃", "∅", "∅", "∅", "∇", "∇", "∇", "∈", "∈", "∈", "∉", "∉", "∉", "∋", "∋", "∋", "∏", "∏", "∏", "∑", "∑", "∑", "−", "−", "−", "∗", "∗", "∗", "√", "√", "√", "∝", "∝", "∝", "∞", "∞", "∞", "∠", "∠", "∠", "∧", "∧", "∧", "∨", "∨", "∨", "∩", "∩", "∩", "∪", "∪", "∪", "∫", "∫", "∫", "∴", "∴", "∴", "∼", "∼", "∼", "≅", "≅", "≅", "≈", "≈", "≈", "≠", "≠", "≠", "≡", "≡", "≡", "≤", "≤", "≤", "≥", "≥", "≥", "⊂", "⊂", "⊂", "⊃", "⊃", "⊃", "⊄", "⊄", "⊄", "⊆", "⊆", "⊆", "⊇", "⊇", "⊇", "⊕", "⊕", "⊕", "⊗", "⊗", "⊗", "⊥", "⊥", "⊥", "⋅", "⋅", "⋅", "⌈", "⌈", "⌈", "⌉", "⌉", "⌉", "⌊", "⌊", "⌊", "⌋", "⌋", "⌋", "⟨", "〈", "⟨", "⟩", "〉", "⟩", "◊", "◊", "◊", "♠", "♠", "♠", "♣", "♣", "♣", "♥", "♥", "♥", "♦", "♦", "♦", NULL }; tickr_0.6.4.orig/src/tickr/Makefile.am0000755000175000017500000000166312147427510017215 0ustar manutmmanutmprefix = /usr exec_prefix = $(prefix)/bin bindir = $(exec_prefix) datarootdir = $(prefix)/share/tickr datadir = $(datarootdir) tickrdir = $(datadir)/pixmaps bin_PROGRAMS = tickr tickr_SOURCES = tickr_main.c\ tickr_resource.c\ tickr_render.c\ tickr_params.c\ tickr_clock.c \ tickr_feedparser.c\ tickr_list.c\ tickr_feedpicker.c\ tickr_prefwin.c\ tickr_otherwins.c\ tickr_misc.c\ tickr_helptext.c\ tickr_opml.c\ tickr_http.c\ tickr_socket.c\ tickr_connectwin.c\ tickr_quickfeedpicker.c\ tickr_quicksetup.c\ tickr_check4updates.c tickr_CFLAGS = -O2 -Wall -Wextra -Wunused-parameter -Wshadow -Wpointer-arith -ffast-math\ -pedantic $(GTK2_CFLAGS) $(XML2_CFLAGS) tickr_LDFLAGS = -Wl,-z,defs -Wl,--as-needed ../libetm-0.4.4/libetm.a tickr_LDADD = ../libetm-0.4.4/libetm.a $(GTK2_LIBS) $(XML2_LIBS) tickr_DATA = ../../images/tickr-icon.png ../../images/tickr-logo.png\ ../../images/tickr-rss-icon.png ../../images/tickr-icon.xpm tickr_0.6.4.orig/src/tickr/tickr_quicksetup.c0000644000175000017500000004264612147427510020721 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" /* These variables and widgets are all set as static global for convenience. */ static TickerEnv *env; static Params *prm, *prm_bak; static GtkWidget *qsetup; static GtkWidget *top_but, *bottom_but, *spinbut_winy, *checkbut_alwaysontop; static GtkWidget *checkbut_feedtitle, *checkbut_itemtitle, *checkbut_itemdes; static GtkWidget *entry_openlinkcmd, *checkbut_nopopups; static GtkObject* adj_winy; static void qsetup_prepare(GtkWidget *widget, GtkWidget *page, gpointer data) { widget = widget; data = data; gtk_assistant_set_page_complete(GTK_ASSISTANT(qsetup), page, TRUE); } static void qsetup_cancel(GtkWidget *widget, gpointer data) { widget = widget; data = data; memcpy((void *)prm, (const void *)prm_bak, sizeof(Params)); gtk_main_quit(); } static gint qsetup_del_event() { if (question_win("Cancel quick setup ?") == YES) { memcpy((void *)prm, (const void *)prm_bak, sizeof(Params)); gtk_main_quit(); return FALSE; } else return TRUE; } static void keep_setting(GtkWidget *widget, gpointer data) { widget = widget; switch((int)data) { case 1: /* Window y */ prm->win_y = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbut_winy)); break; case 2: /* Window always-on-top */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_alwaysontop))) prm->always_on_top = 'y'; else prm->always_on_top = 'n'; break; case 3: /* Feed title */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_feedtitle))) prm->feed_title = 'y'; else prm->feed_title = 'n'; break; case 4: /* Item title */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_itemtitle))) prm->item_title = 'y'; else prm->item_title = 'n'; break; case 5: /* Item decription */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_itemdes))) prm->item_description = 'y'; else prm->item_description = 'n'; break; case 6: /* Open link cmd */ str_n_cpy(prm->open_link_cmd, (char *)gtk_entry_get_text(GTK_ENTRY(entry_openlinkcmd)), FILE_NAME_MAXLEN); break; case 7: /* Disable popups */ if ((gboolean)gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbut_nopopups))) prm->disable_popups = 'y'; else prm->disable_popups = 'n'; break; default: break; } } static void qsetup_apply(GtkWidget *widget, gpointer data) { widget = widget; data = data; if (gtk_assistant_get_current_page(GTK_ASSISTANT(qsetup)) == 8) { save_to_config_file(prm); gtk_main_quit(); } } static gint move_to_top(GtkWidget *widget) { widget = widget; get_params()->win_y = 0; gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbut_winy), 0); return TRUE; } static gint move_to_bottom(GtkWidget *widget) { char font_n_s[FONT_MAXLEN + 1]; char fname[FONT_NAME_MAXLEN + 1], fsize[FONT_SIZE_MAXLEN + 1]; gint requested_font_size, requested_h, y_bottom; /* We backup this param first because... */ char disable_popups_bak = get_params()->disable_popups; /* ...we want this window to always popup */ get_params()->disable_popups = 'n'; widget = widget; /* We need to know requested ticker height */ requested_h = get_params()->win_h; if (requested_h > 0 && requested_h < DRWA_HEIGHT_MIN) requested_h = DRWA_HEIGHT_MIN; else if (requested_h == 0) { /* Compute ticker height from requested font size */ str_n_cpy(font_n_s, get_params()->font_n_s, FONT_MAXLEN); split_font(font_n_s, fname, fsize); /* In all cases, font size can't be > FONT_MAXSIZE */ requested_font_size = MIN(atoi(fsize), FONT_MAXSIZE); snprintf(fsize, FONT_SIZE_MAXLEN + 1, "%3d", requested_font_size); compact_font(font_n_s, fname, fsize); requested_h = get_layout_height_from_fnamesize(font_n_s); } y_bottom = env->screen_h - requested_h; #ifndef G_OS_WIN32 /* How to get taskbar height on Linux ? */ warning(FALSE, 3, "Taskbar height: Will use ", itoa2(ARBITRARY_TASKBAR_HEIGHT), " pixels arbitrary value - Please adjust as necessary afterwards"); y_bottom -= ARBITRARY_TASKBAR_HEIGHT; #else if (get_win32_taskbar_height() != -1) y_bottom -= get_win32_taskbar_height(); else { warning(FALSE, 3, "Couldn't compute Taskbar height: Will use ", itoa2(ARBITRARY_TASKBAR_HEIGHT), " pixels arbitrary value - Please adjust as necessary afterwards"); y_bottom -= ARBITRARY_TASKBAR_HEIGHT; } #endif get_params()->win_y = y_bottom; gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbut_winy), y_bottom); get_params()->disable_popups = disable_popups_bak; return TRUE; } void quick_setup(Params *prm0) { #define N_PAGES_MAX 16 GtkWidget *page[N_PAGES_MAX], *label[N_PAGES_MAX], *hbox[N_PAGES_MAX]; GtkWidget *vbox[N_PAGES_MAX]; int i; env = get_ticker_env(); prm = prm0; prm_bak = malloc2(sizeof(Params)); memcpy((void *)prm_bak, (const void *)prm, sizeof(Params)); qsetup = gtk_assistant_new(); gtk_window_set_title(GTK_WINDOW(qsetup), "Quick Setup"); set_tickr_icon_to_dialog(GTK_WINDOW(qsetup)); gtk_window_set_position(GTK_WINDOW(qsetup), GTK_WIN_POS_CENTER); gtk_window_set_resizable(GTK_WINDOW(qsetup), FALSE); gtk_widget_set_size_request(qsetup, 550, -1); g_signal_connect(G_OBJECT(qsetup), "delete-event", G_CALLBACK(qsetup_del_event), NULL); i = 0; /* Intro page */ hbox[i] = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox[i]), 15); label[i] = gtk_label_new("No configuration file was found.\n" "Would you like to setup a few parameters first ?"); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox[i]), label[i], FALSE, FALSE, 0); page[i] = hbox[i]; gtk_assistant_append_page(GTK_ASSISTANT(qsetup), page[i]); gtk_assistant_set_page_type(GTK_ASSISTANT(qsetup), page[i], GTK_ASSISTANT_PAGE_INTRO); gtk_assistant_set_page_title(GTK_ASSISTANT(qsetup), page[i], APP_NAME " first run ?"); i++; /* win_y */ hbox[i] = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox[i]), 15); label[i] = gtk_label_new("Y position (Pixels):"); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox[i]), label[i], FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox[i]), gtk_label_new(""), TRUE, FALSE, 0); top_but = gtk_button_new_with_label("Top"); gtk_box_pack_start(GTK_BOX(hbox[i]), top_but, FALSE, FALSE, 0); bottom_but = gtk_button_new_with_label("Bottom"); gtk_box_pack_start(GTK_BOX(hbox[i]), bottom_but, FALSE, FALSE, 0); adj_winy = gtk_adjustment_new(prm->win_y, 0, env->screen_h, 1, 5, 0); spinbut_winy = gtk_spin_button_new(GTK_ADJUSTMENT(adj_winy), 0.0, 0); gtk_box_pack_start(GTK_BOX(hbox[i]), spinbut_winy, FALSE, FALSE, 0); vbox[i] = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), hbox[i], TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); page[i] = vbox[i]; gtk_assistant_append_page(GTK_ASSISTANT(qsetup), page[i]); gtk_assistant_set_page_type(GTK_ASSISTANT(qsetup), page[i], GTK_ASSISTANT_PAGE_CONTENT); gtk_assistant_set_page_title(GTK_ASSISTANT(qsetup), page[i], APP_NAME " location"); i++; /* Window always-on-top */ hbox[i] = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox[i]), 15); label[i] = gtk_label_new("Window Always-On-Top:"); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox[i]), label[i], FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox[i]), gtk_label_new(""), TRUE, FALSE, 0); checkbut_alwaysontop = gtk_check_button_new(); if (prm->always_on_top == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_alwaysontop), TRUE); else if (prm->always_on_top == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_alwaysontop), FALSE); gtk_box_pack_start(GTK_BOX(hbox[i]), checkbut_alwaysontop, FALSE, FALSE, 0); vbox[i] = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), hbox[i], TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); page[i] = vbox[i]; gtk_assistant_append_page(GTK_ASSISTANT(qsetup), page[i]); gtk_assistant_set_page_type(GTK_ASSISTANT(qsetup), page[i], GTK_ASSISTANT_PAGE_CONTENT); gtk_assistant_set_page_title(GTK_ASSISTANT(qsetup), page[i], APP_NAME " always-on-top"); i++; /* Feed title */ hbox[i] = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox[i]), 15); label[i] = gtk_label_new("Feed title:"); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox[i]), label[i], FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox[i]), gtk_label_new(""), TRUE, FALSE, 0); checkbut_feedtitle = gtk_check_button_new(); if (prm->feed_title == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_feedtitle), TRUE); else if (prm->feed_title == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_feedtitle), FALSE); gtk_box_pack_start(GTK_BOX(hbox[i]), checkbut_feedtitle, FALSE, FALSE, 0); vbox[i] = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), hbox[i], TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); page[i] = vbox[i]; gtk_assistant_append_page(GTK_ASSISTANT(qsetup), page[i]); gtk_assistant_set_page_type(GTK_ASSISTANT(qsetup), page[i], GTK_ASSISTANT_PAGE_CONTENT); gtk_assistant_set_page_title(GTK_ASSISTANT(qsetup), page[i], "Display feed title"); i++; /* Item title */ hbox[i] = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox[i]), 15); label[i] = gtk_label_new("Item title:"); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox[i]), label[i], FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox[i]), gtk_label_new(""), TRUE, FALSE, 0); checkbut_itemtitle = gtk_check_button_new(); if (prm->item_title == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_itemtitle), TRUE); else if (prm->item_title == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_itemtitle), FALSE); gtk_box_pack_start(GTK_BOX(hbox[i]), checkbut_itemtitle, FALSE, FALSE, 0); vbox[i] = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), hbox[i], TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); page[i] = vbox[i]; gtk_assistant_append_page(GTK_ASSISTANT(qsetup), page[i]); gtk_assistant_set_page_type(GTK_ASSISTANT(qsetup), page[i], GTK_ASSISTANT_PAGE_CONTENT); gtk_assistant_set_page_title(GTK_ASSISTANT(qsetup), page[i], "Display item title"); i++; /* Item description */ hbox[i] = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox[i]), 15); label[i] = gtk_label_new("Item description:"); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox[i]), label[i], FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox[i]), gtk_label_new(""), TRUE, FALSE, 0); checkbut_itemdes = gtk_check_button_new(); if (prm->item_description == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_itemdes), TRUE); else if (prm->item_description == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_itemdes), FALSE); gtk_box_pack_start(GTK_BOX(hbox[i]), checkbut_itemdes, FALSE, FALSE, 0); vbox[i] = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), hbox[i], TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); page[i] = vbox[i]; gtk_assistant_append_page(GTK_ASSISTANT(qsetup), page[i]); gtk_assistant_set_page_type(GTK_ASSISTANT(qsetup), page[i], GTK_ASSISTANT_PAGE_CONTENT); gtk_assistant_set_page_title(GTK_ASSISTANT(qsetup), page[i], "Display item description"); i++; /* "Open in browser" command line */ hbox[i] = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox[i]), 15); #ifndef G_OS_WIN32 label[i] = gtk_label_new("'Open in Browser' command line:"); #else label[i] = gtk_label_new("'Open in Browser' command line:\n" "(leave blank if unsure)"); #endif gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox[i]), label[i], FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox[i]), gtk_label_new(""), TRUE, FALSE, 0); entry_openlinkcmd = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_openlinkcmd), FILE_NAME_MAXLEN); gtk_entry_set_text(GTK_ENTRY(entry_openlinkcmd), prm->open_link_cmd); gtk_box_pack_start(GTK_BOX(hbox[i]), entry_openlinkcmd, FALSE, FALSE, 0); vbox[i] = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), hbox[i], TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); page[i] = vbox[i]; gtk_assistant_append_page(GTK_ASSISTANT(qsetup), page[i]); gtk_assistant_set_page_type(GTK_ASSISTANT(qsetup), page[i], GTK_ASSISTANT_PAGE_CONTENT); gtk_assistant_set_page_title(GTK_ASSISTANT(qsetup), page[i], "Pick a Browser"); i++; /* Disable popups */ hbox[i] = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox[i]), 15); label[i] = gtk_label_new("Disable error/warning popup windows:"); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox[i]), label[i], FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox[i]), gtk_label_new(""), TRUE, FALSE, 0); checkbut_nopopups = gtk_check_button_new(); if (prm->disable_popups == 'y') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_nopopups), TRUE); else if (prm->disable_popups == 'n') gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbut_nopopups), FALSE); gtk_box_pack_start(GTK_BOX(hbox[i]), checkbut_nopopups, FALSE, FALSE, 0); vbox[i] = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), hbox[i], TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox[i]), gtk_label_new(""), FALSE, FALSE, 0); page[i] = vbox[i]; gtk_assistant_append_page(GTK_ASSISTANT(qsetup), page[i]); gtk_assistant_set_page_type(GTK_ASSISTANT(qsetup), page[i], GTK_ASSISTANT_PAGE_CONTENT); gtk_assistant_set_page_title(GTK_ASSISTANT(qsetup), page[i], "Disable popups"); i++; /* Confirm page */ hbox[i] = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox[i]), 15); label[i] = gtk_label_new("Quick setup complete !\n" "To open the full setup window, right-click then 'Edit > Preferences'."); gtk_label_set_use_markup(GTK_LABEL(label[i]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[i]), 0, 0.5); gtk_box_pack_start(GTK_BOX(hbox[i]), label[i], FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox[i]), gtk_label_new(""), TRUE, FALSE, 0); page[i] = hbox[i]; gtk_container_set_border_width(GTK_CONTAINER(hbox[i]), 15); gtk_assistant_append_page(GTK_ASSISTANT(qsetup), page[i]); gtk_assistant_set_page_type(GTK_ASSISTANT(qsetup), page[i], GTK_ASSISTANT_PAGE_CONFIRM); gtk_assistant_set_page_title(GTK_ASSISTANT(qsetup), page[i], "Done"); g_signal_connect(G_OBJECT(top_but), "clicked", G_CALLBACK(move_to_top), NULL); g_signal_connect(G_OBJECT(bottom_but), "clicked", G_CALLBACK(move_to_bottom), NULL); g_signal_connect(G_OBJECT(spinbut_winy), "changed", G_CALLBACK(keep_setting), (gpointer)1); g_signal_connect(G_OBJECT(checkbut_alwaysontop), "toggled", G_CALLBACK(keep_setting), (gpointer)2); g_signal_connect(G_OBJECT(checkbut_feedtitle), "toggled", G_CALLBACK(keep_setting), (gpointer)3); g_signal_connect(G_OBJECT(checkbut_itemtitle), "toggled", G_CALLBACK(keep_setting), (gpointer)4); g_signal_connect(G_OBJECT(checkbut_itemdes), "toggled", G_CALLBACK(keep_setting), (gpointer)5); g_signal_connect(G_OBJECT(entry_openlinkcmd), "changed", G_CALLBACK(keep_setting), (gpointer)6); g_signal_connect(G_OBJECT(checkbut_nopopups), "toggled", G_CALLBACK(keep_setting), (gpointer)7); g_signal_connect(G_OBJECT(qsetup), "cancel", G_CALLBACK(qsetup_cancel), NULL); g_signal_connect(G_OBJECT(qsetup), "prepare", G_CALLBACK(qsetup_prepare), NULL); g_signal_connect(G_OBJECT(qsetup), "apply", G_CALLBACK(qsetup_apply), NULL); gtk_widget_show_all(qsetup); gtk_main(); while (gtk_events_pending()) gtk_main_iteration(); free2(prm_bak); gtk_widget_destroy(qsetup); } tickr_0.6.4.orig/src/tickr/Makefile.in0000664000175000017500000015164312147427510017231 0ustar manutmmanutm# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = tickr$(EXEEXT) subdir = src/tickr DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(tickrdir)" PROGRAMS = $(bin_PROGRAMS) am_tickr_OBJECTS = tickr-tickr_main.$(OBJEXT) \ tickr-tickr_resource.$(OBJEXT) tickr-tickr_render.$(OBJEXT) \ tickr-tickr_params.$(OBJEXT) tickr-tickr_clock.$(OBJEXT) \ tickr-tickr_feedparser.$(OBJEXT) tickr-tickr_list.$(OBJEXT) \ tickr-tickr_feedpicker.$(OBJEXT) tickr-tickr_prefwin.$(OBJEXT) \ tickr-tickr_otherwins.$(OBJEXT) tickr-tickr_misc.$(OBJEXT) \ tickr-tickr_helptext.$(OBJEXT) tickr-tickr_opml.$(OBJEXT) \ tickr-tickr_http.$(OBJEXT) tickr-tickr_socket.$(OBJEXT) \ tickr-tickr_connectwin.$(OBJEXT) \ tickr-tickr_quickfeedpicker.$(OBJEXT) \ tickr-tickr_quicksetup.$(OBJEXT) \ tickr-tickr_check4updates.$(OBJEXT) tickr_OBJECTS = $(am_tickr_OBJECTS) am__DEPENDENCIES_1 = tickr_DEPENDENCIES = ../libetm-0.4.4/libetm.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) tickr_LINK = $(CCLD) $(tickr_CFLAGS) $(CFLAGS) $(tickr_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(tickr_SOURCES) DIST_SOURCES = $(tickr_SOURCES) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(tickr_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XML2_CFLAGS = @XML2_CFLAGS@ XML2_LIBS = @XML2_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = $(exec_prefix) build_alias = @build_alias@ builddir = @builddir@ datadir = $(datarootdir) datarootdir = $(prefix)/share/tickr docdir = @docdir@ dvidir = @dvidir@ exec_prefix = $(prefix)/bin host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = /usr program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ tickrdir = $(datadir)/pixmaps tickr_SOURCES = tickr_main.c\ tickr_resource.c\ tickr_render.c\ tickr_params.c\ tickr_clock.c \ tickr_feedparser.c\ tickr_list.c\ tickr_feedpicker.c\ tickr_prefwin.c\ tickr_otherwins.c\ tickr_misc.c\ tickr_helptext.c\ tickr_opml.c\ tickr_http.c\ tickr_socket.c\ tickr_connectwin.c\ tickr_quickfeedpicker.c\ tickr_quicksetup.c\ tickr_check4updates.c tickr_CFLAGS = -O2 -Wall -Wextra -Wunused-parameter -Wshadow -Wpointer-arith -ffast-math\ -pedantic $(GTK2_CFLAGS) $(XML2_CFLAGS) tickr_LDFLAGS = -Wl,-z,defs -Wl,--as-needed ../libetm-0.4.4/libetm.a tickr_LDADD = ../libetm-0.4.4/libetm.a $(GTK2_LIBS) $(XML2_LIBS) tickr_DATA = ../../images/tickr-icon.png ../../images/tickr-logo.png\ ../../images/tickr-rss-icon.png ../../images/tickr-icon.xpm all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tickr/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/tickr/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) tickr$(EXEEXT): $(tickr_OBJECTS) $(tickr_DEPENDENCIES) $(EXTRA_tickr_DEPENDENCIES) @rm -f tickr$(EXEEXT) $(tickr_LINK) $(tickr_OBJECTS) $(tickr_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_check4updates.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_clock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_connectwin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_feedparser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_feedpicker.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_helptext.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_http.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_misc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_opml.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_otherwins.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_params.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_prefwin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_quickfeedpicker.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_quicksetup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_render.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_resource.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tickr-tickr_socket.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` tickr-tickr_main.o: tickr_main.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_main.o -MD -MP -MF $(DEPDIR)/tickr-tickr_main.Tpo -c -o tickr-tickr_main.o `test -f 'tickr_main.c' || echo '$(srcdir)/'`tickr_main.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_main.Tpo $(DEPDIR)/tickr-tickr_main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_main.c' object='tickr-tickr_main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_main.o `test -f 'tickr_main.c' || echo '$(srcdir)/'`tickr_main.c tickr-tickr_main.obj: tickr_main.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_main.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_main.Tpo -c -o tickr-tickr_main.obj `if test -f 'tickr_main.c'; then $(CYGPATH_W) 'tickr_main.c'; else $(CYGPATH_W) '$(srcdir)/tickr_main.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_main.Tpo $(DEPDIR)/tickr-tickr_main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_main.c' object='tickr-tickr_main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_main.obj `if test -f 'tickr_main.c'; then $(CYGPATH_W) 'tickr_main.c'; else $(CYGPATH_W) '$(srcdir)/tickr_main.c'; fi` tickr-tickr_resource.o: tickr_resource.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_resource.o -MD -MP -MF $(DEPDIR)/tickr-tickr_resource.Tpo -c -o tickr-tickr_resource.o `test -f 'tickr_resource.c' || echo '$(srcdir)/'`tickr_resource.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_resource.Tpo $(DEPDIR)/tickr-tickr_resource.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_resource.c' object='tickr-tickr_resource.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_resource.o `test -f 'tickr_resource.c' || echo '$(srcdir)/'`tickr_resource.c tickr-tickr_resource.obj: tickr_resource.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_resource.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_resource.Tpo -c -o tickr-tickr_resource.obj `if test -f 'tickr_resource.c'; then $(CYGPATH_W) 'tickr_resource.c'; else $(CYGPATH_W) '$(srcdir)/tickr_resource.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_resource.Tpo $(DEPDIR)/tickr-tickr_resource.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_resource.c' object='tickr-tickr_resource.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_resource.obj `if test -f 'tickr_resource.c'; then $(CYGPATH_W) 'tickr_resource.c'; else $(CYGPATH_W) '$(srcdir)/tickr_resource.c'; fi` tickr-tickr_render.o: tickr_render.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_render.o -MD -MP -MF $(DEPDIR)/tickr-tickr_render.Tpo -c -o tickr-tickr_render.o `test -f 'tickr_render.c' || echo '$(srcdir)/'`tickr_render.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_render.Tpo $(DEPDIR)/tickr-tickr_render.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_render.c' object='tickr-tickr_render.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_render.o `test -f 'tickr_render.c' || echo '$(srcdir)/'`tickr_render.c tickr-tickr_render.obj: tickr_render.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_render.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_render.Tpo -c -o tickr-tickr_render.obj `if test -f 'tickr_render.c'; then $(CYGPATH_W) 'tickr_render.c'; else $(CYGPATH_W) '$(srcdir)/tickr_render.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_render.Tpo $(DEPDIR)/tickr-tickr_render.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_render.c' object='tickr-tickr_render.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_render.obj `if test -f 'tickr_render.c'; then $(CYGPATH_W) 'tickr_render.c'; else $(CYGPATH_W) '$(srcdir)/tickr_render.c'; fi` tickr-tickr_params.o: tickr_params.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_params.o -MD -MP -MF $(DEPDIR)/tickr-tickr_params.Tpo -c -o tickr-tickr_params.o `test -f 'tickr_params.c' || echo '$(srcdir)/'`tickr_params.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_params.Tpo $(DEPDIR)/tickr-tickr_params.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_params.c' object='tickr-tickr_params.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_params.o `test -f 'tickr_params.c' || echo '$(srcdir)/'`tickr_params.c tickr-tickr_params.obj: tickr_params.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_params.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_params.Tpo -c -o tickr-tickr_params.obj `if test -f 'tickr_params.c'; then $(CYGPATH_W) 'tickr_params.c'; else $(CYGPATH_W) '$(srcdir)/tickr_params.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_params.Tpo $(DEPDIR)/tickr-tickr_params.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_params.c' object='tickr-tickr_params.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_params.obj `if test -f 'tickr_params.c'; then $(CYGPATH_W) 'tickr_params.c'; else $(CYGPATH_W) '$(srcdir)/tickr_params.c'; fi` tickr-tickr_clock.o: tickr_clock.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_clock.o -MD -MP -MF $(DEPDIR)/tickr-tickr_clock.Tpo -c -o tickr-tickr_clock.o `test -f 'tickr_clock.c' || echo '$(srcdir)/'`tickr_clock.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_clock.Tpo $(DEPDIR)/tickr-tickr_clock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_clock.c' object='tickr-tickr_clock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_clock.o `test -f 'tickr_clock.c' || echo '$(srcdir)/'`tickr_clock.c tickr-tickr_clock.obj: tickr_clock.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_clock.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_clock.Tpo -c -o tickr-tickr_clock.obj `if test -f 'tickr_clock.c'; then $(CYGPATH_W) 'tickr_clock.c'; else $(CYGPATH_W) '$(srcdir)/tickr_clock.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_clock.Tpo $(DEPDIR)/tickr-tickr_clock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_clock.c' object='tickr-tickr_clock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_clock.obj `if test -f 'tickr_clock.c'; then $(CYGPATH_W) 'tickr_clock.c'; else $(CYGPATH_W) '$(srcdir)/tickr_clock.c'; fi` tickr-tickr_feedparser.o: tickr_feedparser.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_feedparser.o -MD -MP -MF $(DEPDIR)/tickr-tickr_feedparser.Tpo -c -o tickr-tickr_feedparser.o `test -f 'tickr_feedparser.c' || echo '$(srcdir)/'`tickr_feedparser.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_feedparser.Tpo $(DEPDIR)/tickr-tickr_feedparser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_feedparser.c' object='tickr-tickr_feedparser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_feedparser.o `test -f 'tickr_feedparser.c' || echo '$(srcdir)/'`tickr_feedparser.c tickr-tickr_feedparser.obj: tickr_feedparser.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_feedparser.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_feedparser.Tpo -c -o tickr-tickr_feedparser.obj `if test -f 'tickr_feedparser.c'; then $(CYGPATH_W) 'tickr_feedparser.c'; else $(CYGPATH_W) '$(srcdir)/tickr_feedparser.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_feedparser.Tpo $(DEPDIR)/tickr-tickr_feedparser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_feedparser.c' object='tickr-tickr_feedparser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_feedparser.obj `if test -f 'tickr_feedparser.c'; then $(CYGPATH_W) 'tickr_feedparser.c'; else $(CYGPATH_W) '$(srcdir)/tickr_feedparser.c'; fi` tickr-tickr_list.o: tickr_list.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_list.o -MD -MP -MF $(DEPDIR)/tickr-tickr_list.Tpo -c -o tickr-tickr_list.o `test -f 'tickr_list.c' || echo '$(srcdir)/'`tickr_list.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_list.Tpo $(DEPDIR)/tickr-tickr_list.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_list.c' object='tickr-tickr_list.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_list.o `test -f 'tickr_list.c' || echo '$(srcdir)/'`tickr_list.c tickr-tickr_list.obj: tickr_list.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_list.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_list.Tpo -c -o tickr-tickr_list.obj `if test -f 'tickr_list.c'; then $(CYGPATH_W) 'tickr_list.c'; else $(CYGPATH_W) '$(srcdir)/tickr_list.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_list.Tpo $(DEPDIR)/tickr-tickr_list.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_list.c' object='tickr-tickr_list.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_list.obj `if test -f 'tickr_list.c'; then $(CYGPATH_W) 'tickr_list.c'; else $(CYGPATH_W) '$(srcdir)/tickr_list.c'; fi` tickr-tickr_feedpicker.o: tickr_feedpicker.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_feedpicker.o -MD -MP -MF $(DEPDIR)/tickr-tickr_feedpicker.Tpo -c -o tickr-tickr_feedpicker.o `test -f 'tickr_feedpicker.c' || echo '$(srcdir)/'`tickr_feedpicker.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_feedpicker.Tpo $(DEPDIR)/tickr-tickr_feedpicker.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_feedpicker.c' object='tickr-tickr_feedpicker.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_feedpicker.o `test -f 'tickr_feedpicker.c' || echo '$(srcdir)/'`tickr_feedpicker.c tickr-tickr_feedpicker.obj: tickr_feedpicker.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_feedpicker.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_feedpicker.Tpo -c -o tickr-tickr_feedpicker.obj `if test -f 'tickr_feedpicker.c'; then $(CYGPATH_W) 'tickr_feedpicker.c'; else $(CYGPATH_W) '$(srcdir)/tickr_feedpicker.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_feedpicker.Tpo $(DEPDIR)/tickr-tickr_feedpicker.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_feedpicker.c' object='tickr-tickr_feedpicker.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_feedpicker.obj `if test -f 'tickr_feedpicker.c'; then $(CYGPATH_W) 'tickr_feedpicker.c'; else $(CYGPATH_W) '$(srcdir)/tickr_feedpicker.c'; fi` tickr-tickr_prefwin.o: tickr_prefwin.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_prefwin.o -MD -MP -MF $(DEPDIR)/tickr-tickr_prefwin.Tpo -c -o tickr-tickr_prefwin.o `test -f 'tickr_prefwin.c' || echo '$(srcdir)/'`tickr_prefwin.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_prefwin.Tpo $(DEPDIR)/tickr-tickr_prefwin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_prefwin.c' object='tickr-tickr_prefwin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_prefwin.o `test -f 'tickr_prefwin.c' || echo '$(srcdir)/'`tickr_prefwin.c tickr-tickr_prefwin.obj: tickr_prefwin.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_prefwin.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_prefwin.Tpo -c -o tickr-tickr_prefwin.obj `if test -f 'tickr_prefwin.c'; then $(CYGPATH_W) 'tickr_prefwin.c'; else $(CYGPATH_W) '$(srcdir)/tickr_prefwin.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_prefwin.Tpo $(DEPDIR)/tickr-tickr_prefwin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_prefwin.c' object='tickr-tickr_prefwin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_prefwin.obj `if test -f 'tickr_prefwin.c'; then $(CYGPATH_W) 'tickr_prefwin.c'; else $(CYGPATH_W) '$(srcdir)/tickr_prefwin.c'; fi` tickr-tickr_otherwins.o: tickr_otherwins.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_otherwins.o -MD -MP -MF $(DEPDIR)/tickr-tickr_otherwins.Tpo -c -o tickr-tickr_otherwins.o `test -f 'tickr_otherwins.c' || echo '$(srcdir)/'`tickr_otherwins.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_otherwins.Tpo $(DEPDIR)/tickr-tickr_otherwins.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_otherwins.c' object='tickr-tickr_otherwins.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_otherwins.o `test -f 'tickr_otherwins.c' || echo '$(srcdir)/'`tickr_otherwins.c tickr-tickr_otherwins.obj: tickr_otherwins.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_otherwins.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_otherwins.Tpo -c -o tickr-tickr_otherwins.obj `if test -f 'tickr_otherwins.c'; then $(CYGPATH_W) 'tickr_otherwins.c'; else $(CYGPATH_W) '$(srcdir)/tickr_otherwins.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_otherwins.Tpo $(DEPDIR)/tickr-tickr_otherwins.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_otherwins.c' object='tickr-tickr_otherwins.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_otherwins.obj `if test -f 'tickr_otherwins.c'; then $(CYGPATH_W) 'tickr_otherwins.c'; else $(CYGPATH_W) '$(srcdir)/tickr_otherwins.c'; fi` tickr-tickr_misc.o: tickr_misc.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_misc.o -MD -MP -MF $(DEPDIR)/tickr-tickr_misc.Tpo -c -o tickr-tickr_misc.o `test -f 'tickr_misc.c' || echo '$(srcdir)/'`tickr_misc.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_misc.Tpo $(DEPDIR)/tickr-tickr_misc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_misc.c' object='tickr-tickr_misc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_misc.o `test -f 'tickr_misc.c' || echo '$(srcdir)/'`tickr_misc.c tickr-tickr_misc.obj: tickr_misc.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_misc.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_misc.Tpo -c -o tickr-tickr_misc.obj `if test -f 'tickr_misc.c'; then $(CYGPATH_W) 'tickr_misc.c'; else $(CYGPATH_W) '$(srcdir)/tickr_misc.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_misc.Tpo $(DEPDIR)/tickr-tickr_misc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_misc.c' object='tickr-tickr_misc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_misc.obj `if test -f 'tickr_misc.c'; then $(CYGPATH_W) 'tickr_misc.c'; else $(CYGPATH_W) '$(srcdir)/tickr_misc.c'; fi` tickr-tickr_helptext.o: tickr_helptext.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_helptext.o -MD -MP -MF $(DEPDIR)/tickr-tickr_helptext.Tpo -c -o tickr-tickr_helptext.o `test -f 'tickr_helptext.c' || echo '$(srcdir)/'`tickr_helptext.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_helptext.Tpo $(DEPDIR)/tickr-tickr_helptext.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_helptext.c' object='tickr-tickr_helptext.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_helptext.o `test -f 'tickr_helptext.c' || echo '$(srcdir)/'`tickr_helptext.c tickr-tickr_helptext.obj: tickr_helptext.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_helptext.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_helptext.Tpo -c -o tickr-tickr_helptext.obj `if test -f 'tickr_helptext.c'; then $(CYGPATH_W) 'tickr_helptext.c'; else $(CYGPATH_W) '$(srcdir)/tickr_helptext.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_helptext.Tpo $(DEPDIR)/tickr-tickr_helptext.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_helptext.c' object='tickr-tickr_helptext.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_helptext.obj `if test -f 'tickr_helptext.c'; then $(CYGPATH_W) 'tickr_helptext.c'; else $(CYGPATH_W) '$(srcdir)/tickr_helptext.c'; fi` tickr-tickr_opml.o: tickr_opml.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_opml.o -MD -MP -MF $(DEPDIR)/tickr-tickr_opml.Tpo -c -o tickr-tickr_opml.o `test -f 'tickr_opml.c' || echo '$(srcdir)/'`tickr_opml.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_opml.Tpo $(DEPDIR)/tickr-tickr_opml.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_opml.c' object='tickr-tickr_opml.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_opml.o `test -f 'tickr_opml.c' || echo '$(srcdir)/'`tickr_opml.c tickr-tickr_opml.obj: tickr_opml.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_opml.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_opml.Tpo -c -o tickr-tickr_opml.obj `if test -f 'tickr_opml.c'; then $(CYGPATH_W) 'tickr_opml.c'; else $(CYGPATH_W) '$(srcdir)/tickr_opml.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_opml.Tpo $(DEPDIR)/tickr-tickr_opml.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_opml.c' object='tickr-tickr_opml.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_opml.obj `if test -f 'tickr_opml.c'; then $(CYGPATH_W) 'tickr_opml.c'; else $(CYGPATH_W) '$(srcdir)/tickr_opml.c'; fi` tickr-tickr_http.o: tickr_http.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_http.o -MD -MP -MF $(DEPDIR)/tickr-tickr_http.Tpo -c -o tickr-tickr_http.o `test -f 'tickr_http.c' || echo '$(srcdir)/'`tickr_http.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_http.Tpo $(DEPDIR)/tickr-tickr_http.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_http.c' object='tickr-tickr_http.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_http.o `test -f 'tickr_http.c' || echo '$(srcdir)/'`tickr_http.c tickr-tickr_http.obj: tickr_http.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_http.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_http.Tpo -c -o tickr-tickr_http.obj `if test -f 'tickr_http.c'; then $(CYGPATH_W) 'tickr_http.c'; else $(CYGPATH_W) '$(srcdir)/tickr_http.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_http.Tpo $(DEPDIR)/tickr-tickr_http.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_http.c' object='tickr-tickr_http.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_http.obj `if test -f 'tickr_http.c'; then $(CYGPATH_W) 'tickr_http.c'; else $(CYGPATH_W) '$(srcdir)/tickr_http.c'; fi` tickr-tickr_socket.o: tickr_socket.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_socket.o -MD -MP -MF $(DEPDIR)/tickr-tickr_socket.Tpo -c -o tickr-tickr_socket.o `test -f 'tickr_socket.c' || echo '$(srcdir)/'`tickr_socket.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_socket.Tpo $(DEPDIR)/tickr-tickr_socket.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_socket.c' object='tickr-tickr_socket.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_socket.o `test -f 'tickr_socket.c' || echo '$(srcdir)/'`tickr_socket.c tickr-tickr_socket.obj: tickr_socket.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_socket.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_socket.Tpo -c -o tickr-tickr_socket.obj `if test -f 'tickr_socket.c'; then $(CYGPATH_W) 'tickr_socket.c'; else $(CYGPATH_W) '$(srcdir)/tickr_socket.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_socket.Tpo $(DEPDIR)/tickr-tickr_socket.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_socket.c' object='tickr-tickr_socket.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_socket.obj `if test -f 'tickr_socket.c'; then $(CYGPATH_W) 'tickr_socket.c'; else $(CYGPATH_W) '$(srcdir)/tickr_socket.c'; fi` tickr-tickr_connectwin.o: tickr_connectwin.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_connectwin.o -MD -MP -MF $(DEPDIR)/tickr-tickr_connectwin.Tpo -c -o tickr-tickr_connectwin.o `test -f 'tickr_connectwin.c' || echo '$(srcdir)/'`tickr_connectwin.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_connectwin.Tpo $(DEPDIR)/tickr-tickr_connectwin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_connectwin.c' object='tickr-tickr_connectwin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_connectwin.o `test -f 'tickr_connectwin.c' || echo '$(srcdir)/'`tickr_connectwin.c tickr-tickr_connectwin.obj: tickr_connectwin.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_connectwin.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_connectwin.Tpo -c -o tickr-tickr_connectwin.obj `if test -f 'tickr_connectwin.c'; then $(CYGPATH_W) 'tickr_connectwin.c'; else $(CYGPATH_W) '$(srcdir)/tickr_connectwin.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_connectwin.Tpo $(DEPDIR)/tickr-tickr_connectwin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_connectwin.c' object='tickr-tickr_connectwin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_connectwin.obj `if test -f 'tickr_connectwin.c'; then $(CYGPATH_W) 'tickr_connectwin.c'; else $(CYGPATH_W) '$(srcdir)/tickr_connectwin.c'; fi` tickr-tickr_quickfeedpicker.o: tickr_quickfeedpicker.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_quickfeedpicker.o -MD -MP -MF $(DEPDIR)/tickr-tickr_quickfeedpicker.Tpo -c -o tickr-tickr_quickfeedpicker.o `test -f 'tickr_quickfeedpicker.c' || echo '$(srcdir)/'`tickr_quickfeedpicker.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_quickfeedpicker.Tpo $(DEPDIR)/tickr-tickr_quickfeedpicker.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_quickfeedpicker.c' object='tickr-tickr_quickfeedpicker.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_quickfeedpicker.o `test -f 'tickr_quickfeedpicker.c' || echo '$(srcdir)/'`tickr_quickfeedpicker.c tickr-tickr_quickfeedpicker.obj: tickr_quickfeedpicker.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_quickfeedpicker.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_quickfeedpicker.Tpo -c -o tickr-tickr_quickfeedpicker.obj `if test -f 'tickr_quickfeedpicker.c'; then $(CYGPATH_W) 'tickr_quickfeedpicker.c'; else $(CYGPATH_W) '$(srcdir)/tickr_quickfeedpicker.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_quickfeedpicker.Tpo $(DEPDIR)/tickr-tickr_quickfeedpicker.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_quickfeedpicker.c' object='tickr-tickr_quickfeedpicker.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_quickfeedpicker.obj `if test -f 'tickr_quickfeedpicker.c'; then $(CYGPATH_W) 'tickr_quickfeedpicker.c'; else $(CYGPATH_W) '$(srcdir)/tickr_quickfeedpicker.c'; fi` tickr-tickr_quicksetup.o: tickr_quicksetup.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_quicksetup.o -MD -MP -MF $(DEPDIR)/tickr-tickr_quicksetup.Tpo -c -o tickr-tickr_quicksetup.o `test -f 'tickr_quicksetup.c' || echo '$(srcdir)/'`tickr_quicksetup.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_quicksetup.Tpo $(DEPDIR)/tickr-tickr_quicksetup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_quicksetup.c' object='tickr-tickr_quicksetup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_quicksetup.o `test -f 'tickr_quicksetup.c' || echo '$(srcdir)/'`tickr_quicksetup.c tickr-tickr_quicksetup.obj: tickr_quicksetup.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_quicksetup.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_quicksetup.Tpo -c -o tickr-tickr_quicksetup.obj `if test -f 'tickr_quicksetup.c'; then $(CYGPATH_W) 'tickr_quicksetup.c'; else $(CYGPATH_W) '$(srcdir)/tickr_quicksetup.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_quicksetup.Tpo $(DEPDIR)/tickr-tickr_quicksetup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_quicksetup.c' object='tickr-tickr_quicksetup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_quicksetup.obj `if test -f 'tickr_quicksetup.c'; then $(CYGPATH_W) 'tickr_quicksetup.c'; else $(CYGPATH_W) '$(srcdir)/tickr_quicksetup.c'; fi` tickr-tickr_check4updates.o: tickr_check4updates.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_check4updates.o -MD -MP -MF $(DEPDIR)/tickr-tickr_check4updates.Tpo -c -o tickr-tickr_check4updates.o `test -f 'tickr_check4updates.c' || echo '$(srcdir)/'`tickr_check4updates.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_check4updates.Tpo $(DEPDIR)/tickr-tickr_check4updates.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_check4updates.c' object='tickr-tickr_check4updates.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_check4updates.o `test -f 'tickr_check4updates.c' || echo '$(srcdir)/'`tickr_check4updates.c tickr-tickr_check4updates.obj: tickr_check4updates.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -MT tickr-tickr_check4updates.obj -MD -MP -MF $(DEPDIR)/tickr-tickr_check4updates.Tpo -c -o tickr-tickr_check4updates.obj `if test -f 'tickr_check4updates.c'; then $(CYGPATH_W) 'tickr_check4updates.c'; else $(CYGPATH_W) '$(srcdir)/tickr_check4updates.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tickr-tickr_check4updates.Tpo $(DEPDIR)/tickr-tickr_check4updates.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tickr_check4updates.c' object='tickr-tickr_check4updates.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tickr_CFLAGS) $(CFLAGS) -c -o tickr-tickr_check4updates.obj `if test -f 'tickr_check4updates.c'; then $(CYGPATH_W) 'tickr_check4updates.c'; else $(CYGPATH_W) '$(srcdir)/tickr_check4updates.c'; fi` install-tickrDATA: $(tickr_DATA) @$(NORMAL_INSTALL) test -z "$(tickrdir)" || $(MKDIR_P) "$(DESTDIR)$(tickrdir)" @list='$(tickr_DATA)'; test -n "$(tickrdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(tickrdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(tickrdir)" || exit $$?; \ done uninstall-tickrDATA: @$(NORMAL_UNINSTALL) @list='$(tickr_DATA)'; test -n "$(tickrdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(tickrdir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(tickrdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-tickrDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-tickrDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ install-tickrDATA installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-tickrDATA # 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: tickr_0.6.4.orig/src/tickr/tickr_list.c0000640000175000017500000003577012147427510017473 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" #include "tickr_list.h" FList *f_list_new(const char *url, const char *title, gboolean selected, const char *rank) { FList *node = malloc2(sizeof(FList)); /*int url_len, title_len;*/ node->url = malloc2(FLIST_URL_MAXLEN + 1); str_n_cpy(node->url, url, FLIST_URL_MAXLEN); node->title = malloc2(FLIST_TITLE_MAXLEN + 1); str_n_cpy(node->title, title, FLIST_TITLE_MAXLEN); /* * If we want to use the following code (which saves memory use), * we must implement funcs that reallocate memory when modifying * data and we must never modify it directly. */ /*url_len = MIN(strlen(url), FLIST_URL_MAXLEN); node->url = malloc2(url_len + 1); str_n_cpy(node->url, url, url_len); title_len = MIN(strlen(title), FLIST_TITLE_MAXLEN); node->title = malloc2(title_len + 1); str_n_cpy(node->title, title, title_len);*/ node->selected = selected; /* FLIST_RANK_STR_LEN chars long string with only digits/spaces, * right justified. Value = atoi(rank), start at 1, 0 is interpreted as unset (blank) * which is interpreted as last value (follows "999" for 3 chars). */ if (atoi(rank) > 0) snprintf(node->rank, FLIST_RANK_STR_LEN + 1, FLIST_RANK_FORMAT, atoi(rank)); else str_n_cpy(node->rank, BLANK_STR_16, FLIST_RANK_STR_LEN); node->prev = NULL; node->next = NULL; str_n_cpy(node->sig, FLIST_SIG, FLIST_SIG_LEN); return node; } /* * Free allocated memory. */ void f_list_free(FList *node) { CHECK_IS_FLIST(node, "f_list_free()") memset(node->sig, 0, FLIST_SIG_LEN); free2(node->url); free2(node->title); free2(node); } /* * Free allocated memory. */ void f_list_free_all(FList *some_node) { FList *node; CHECK_IS_FLIST(some_node, "f_list_free_all()") for (node = f_list_first(some_node); IS_FLIST(node); node = node->next) f_list_free(node); } FList *f_list_first(FList *node) { CHECK_IS_FLIST(node, "f_list_first()") while (IS_FLIST(node->prev)) node = node->prev; return node; } FList *f_list_last(FList *node) { CHECK_IS_FLIST(node, "f_list_last()") while (IS_FLIST(node->next)) node = node->next; return node; } /* * Return NULL if no previous node. */ FList *f_list_prev(FList *node) { CHECK_IS_FLIST(node, "f_list_prev()") if (IS_FLIST(node->prev)) return node->prev; else return NULL; } /* * Return NULL if no next node. */ FList *f_list_next(FList *node) { CHECK_IS_FLIST(node, "f_list_next()") if (IS_FLIST(node->next)) return node->next; else return NULL; } /* * Return NULL if out of range. */ FList *f_list_nth(FList *some_node, int n) { FList *node; int count, i = 1; CHECK_IS_FLIST(some_node, "f_list_nth()") node = f_list_first(some_node); count = f_list_count(node); if (n > count) { fprintf(STD_ERR, "f_list_nth(): %d is out of range\n", n); return NULL; } else { while (IS_FLIST(node->next) && i++ < n) node = node->next; if (IS_FLIST(node)) return node; else return NULL; } } /* * Return index if found (starting at 0) / -1 otherwise. */ int f_list_index(FList *some_node) { FList *node; int count, node_index = 0; if (IS_FLIST(some_node)) { node = f_list_first(some_node); count = f_list_count(node); for (; IS_FLIST(node) && node_index < count + 1; node = node->next) { if (node == some_node) return node_index; node_index++; } } return -1; } int f_list_count(FList *some_node) { FList *node; int counter = 0; if (IS_FLIST(some_node)) for (node = f_list_first(some_node); IS_FLIST(node); node = node->next) counter++; /*else fprintf(STD_ERR, "f_list_count(): List is empty\n");*/ return counter; } /* * Create and add node at start of list. * 'some_node' may be any node in the list or NULL -> when creating list. */ FList *f_list_add_at_start(FList *some_node, const char *url, const char *title, gboolean selected,\ const char *rank) { FList *instance; instance = f_list_new(url, title, selected, rank); /* ->prev = ->next = NULL */ if (IS_FLIST(some_node)) { some_node = f_list_first(some_node); instance->next = some_node; some_node->prev = instance; } return instance; } /* * Create and add node at end of list. * 'some_node' may be any node in the list or NULL -> when creating list. */ FList *f_list_add_at_end(FList *some_node, const char *url, const char *title, gboolean selected,\ const char *rank) { FList *instance; instance = f_list_new(url, title, selected, rank); /* ->prev = ->next = NULL */ if (IS_FLIST(some_node)) { some_node = f_list_last(some_node); instance->prev = some_node; some_node->next = instance; } return instance; } /* * Create and insert node before 'some_node'. */ FList *f_list_insert_before(FList *some_node, const char *url, const char *title, gboolean selected,\ const char *rank) { FList *instance; CHECK_IS_FLIST(some_node, "f_list_insert_before()") instance = f_list_new(url, title, selected, rank); /* ->prev = ->next = NULL */ if (IS_FLIST(some_node->prev)) { instance->prev = some_node->prev; some_node->prev->next = instance; } instance->next = some_node; some_node->prev = instance; return instance; } /* * Create and insert node after 'some_node'. */ FList *f_list_insert_after(FList *some_node, const char *url, const char *title, gboolean selected,\ const char *rank) { FList *instance; CHECK_IS_FLIST(some_node, "f_list_insert_after()") instance = f_list_new(url, title, selected, rank); /* ->prev = ->next = NULL */ instance->prev = some_node; if (IS_FLIST(some_node->next)) { instance->next = some_node->next; some_node->next->prev = instance; } instance->prev = some_node; some_node->next = instance; return instance; } /* * Remove then return first node or NULL if empty. */ FList *f_list_remove(FList *node) { FList *prev = NULL, *next = NULL, *node2 = NULL; CHECK_IS_FLIST(node, "f_list_remove()") if (IS_FLIST(node->prev)) { prev = node->prev; prev->next = node->next; node2 = prev; } if (IS_FLIST(node->next)) { next = node->next; next->prev = node->prev; node2 = next; } f_list_free(node); if (IS_FLIST(node2)) return f_list_first(node2); else return NULL; } void f_list_swap(FList *node1, FList *node2) { FList tmp; CHECK_IS_FLIST(node1, "f_list_swap()"); CHECK_IS_FLIST(node2, "f_list_swap()"); (&tmp)->prev = node1->prev; (&tmp)->next = node1->next; node1->prev = node2->prev; node1->next = node2->next; node2->prev = (&tmp)->prev; node2->next = (&tmp)->next; } /* * Sort by node->url, then remove duplicated and empty entries, * then return first node. * * If SORT_FLIST_BY_RANK is TRUE, sort 2 times, 2nd time by node->rank. */ FList *f_list_sort(FList *some_node) { FList *node1, *node2, *node_i[N_FLIST_MAX], *tmp; int list_len, min, i, j; CHECK_IS_FLIST(some_node, "f_list_sort()") node1 = f_list_first(some_node); for (i = 0; i < N_FLIST_MAX; i++) { if (IS_FLIST(node1)) { node_i[i] = node1; node1 = node1->next; } else break; } list_len = i; /* Selection sort */ for (i = 0; i < list_len; i++) { min = i; for (j = i + 1; j < list_len; j++) if (strcmp(node_i[min]->url, node_i[j]->url) > 0) min = j; tmp = node_i[i]; node_i[i] = node_i[min]; node_i[min] = tmp; } /* Remove duplicated entries */ for (i = 0; i < list_len; i++) for (j = i + 1; j < list_len; j++) if (strcmp(node_i[i]->url, node_i[j]->url) == 0) { if (node_i[i]->selected || node_i[j]->selected) { node_i[i]->selected = TRUE; node_i[j]->selected = TRUE; } /* We want to use rank in the second entry (ie the last added one). */ str_n_cpy(node_i[i]->rank, node_i[j]->rank, FLIST_RANK_STR_LEN); if (node_i[j]->title[0] == '\0') /* If no title in the second entry, */ node_i[j]->url[0] = '\0'; /* we keep the first one. */ else node_i[i]->url[0] = '\0'; } /* Remove empty entries */ node2 = NULL; for (i = 0; i < list_len; i++) if (node_i[i]->url[0] != '\0') node2 = f_list_add_at_end(node2, node_i[i]->url, node_i[i]->title,\ node_i[i]->selected, node_i[i]->rank); node2 = f_list_first(node2); f_list_free_all(some_node); if (!SORT_FLIST_BY_RANK) return node2; else { /* If SORT_FLIST_BY_RANK is true, sort again, now by node->rank */ for (i = 0; i < N_FLIST_MAX; i++) { if (IS_FLIST(node2)) { node_i[i] = node2; node2 = node2->next; } else break; } list_len = i; /* Selection sort */ /* === rank starts at 1 / 0 = last rank === */ for (i = 0; i < list_len; i++) { min = i; for (j = i + 1; j < list_len; j++) if (atoi((const char *)(node_i[min]->rank)) > atoi((const char *)(node_i[j]->rank))) min = j; tmp = node_i[i]; node_i[i] = node_i[min]; node_i[min] = tmp; } node1 = NULL; for (i = 0; i < list_len; i++) /* We want feeds sorted by rank > 0 first */ if (atoi(node_i[i]->rank) > 0) node1 = f_list_add_at_end(node1, node_i[i]->url, node_i[i]->title,\ node_i[i]->selected, node_i[i]->rank); for (i = 0; i < list_len; i++) if (atoi(node_i[i]->rank) == 0) node1 = f_list_add_at_end(node1, node_i[i]->url, node_i[i]->title,\ node_i[i]->selected, node_i[i]->rank); node1 = f_list_first(node1); return node1; } } /* * Search by node->url and return index if found (starting at 0) / -1 otherwise. */ int f_list_search(FList *some_node, const char *str) { FList *node; int i = 0; CHECK_IS_FLIST(some_node, "f_list_search()") for (node = f_list_first(some_node); IS_FLIST(node); node = node->next) { if (strcmp(str, node->url) == 0) return i; else i++; } return -1; } /* * Use provided file_name if not NULL / default file name (URL_LIST_FILE) otherwise. * Create new f_list. * * Entry format in url list file: * ['*' (selected) or '-' (unselected) + "000" (3 chars rank) + url [+ '>' + title] + '\n'] * * Entry max length = FILE_NAME_MAXLEN * See also: (UN)SELECTED_URL_CHAR/STR and TITLE_TAG_CHAR/STR in tickr.h * FLIST_RANK_FORMAT and FLIST_RANK_STR_LEN in tickr_list.h * * Return OK (and first node of list) or LOAD_URL_LIST_ERROR. */ int f_list_load_from_file(FList **new_node, const char *file_name) { char *listfname, listfname1[TMPSTR_SIZE + 1], listfname2[TMPSTR_SIZE + 1]; FILE *fp; char *tmp, tmp2[FLIST_RANK_STR_LEN + 1]; FList *node; size_t tmp_size = FILE_NAME_MAXLEN + 1; gboolean selected, title_found; int title_shift, i; if (file_name == NULL) { str_n_cpy(listfname1, get_datafile_full_name_from_name(URL_LIST_FILE), TMPSTR_SIZE); #ifndef G_OS_WIN32 snprintf(listfname2, TMPSTR_SIZE + 1, "%s%c%s", INSTALL_PATH, SEPARATOR_CHAR, URL_LIST_FILE); #else snprintf(listfname2, TMPSTR_SIZE + 1, "%s%c%s%c%s", get_progfiles_dir(), SEPARATOR_CHAR, TICKR_DIR_NAME, SEPARATOR_CHAR, URL_LIST_FILE); #endif listfname = listfname1; if ((fp = g_fopen(listfname, "rb")) == NULL) { if (question_win("No URL list has been saved yet. Import one (OPML format required) ?") == YES) import_opml_file(); else if (question_win("No URL list has been saved yet. Use sample one ?") == YES) listfname = listfname2; else return LOAD_URL_LIST_ERROR; } } else listfname = (char *)file_name; node = NULL; if ((fp = g_fopen(listfname, "rb")) != NULL) { tmp = malloc2(tmp_size * sizeof(char)); #ifndef G_OS_WIN32 while (getline(&tmp, &tmp_size, fp) != EOF) { #else while (fgets(tmp, tmp_size, fp) != NULL) { #endif if (tmp[0] == SELECTED_URL_CHAR || tmp[0] == UNSELECTED_URL_CHAR) { selected = (tmp[0] == SELECTED_URL_CHAR) ? TRUE : FALSE; for (i = 0; i < FLIST_RANK_STR_LEN; i++) tmp2[i] = tmp[i + 1]; tmp2[i] = '\0'; title_shift = -1; title_found = FALSE; for (i = 0; i < FILE_NAME_MAXLEN; i++) { if (!title_found && tmp[i] == TITLE_TAG_CHAR) { title_shift = i + 1; tmp[i] = '\0'; title_found = TRUE; } else if (tmp[i] == '\n') { tmp[i] = '\0'; break; } } node = f_list_add_at_end(node, tmp + 1 + FLIST_RANK_STR_LEN,\ (title_shift != -1) ? tmp + title_shift : "", selected, tmp2); } } free2(tmp); fclose(fp); if (node != NULL) { *new_node = f_list_first(node); return OK; } else { warning(FALSE, 3, "URL list '", listfname, "' is empty"); return LOAD_URL_LIST_EMPTY_LIST; } } else { warning(FALSE, 4, "Can't load URL list ", listfname, ": ", strerror(errno)); return LOAD_URL_LIST_ERROR; } } /* * Use provided file_name if not NULL / default file name (URL_LIST_FILE) otherwise. * * Entry format in url list file: * ['*' (selected) or '-' (unselected) + "000" (3 chars rank) + url [+ '>' + title] + '\n'] * * Entry max length = FILE_NAME_MAXLEN * See also: (UN)SELECTED_URL_CHAR/STR and TITLE_TAG_CHAR/STR in tickr.h * FLIST_RANK_FORMAT and FLIST_RANK_STR_LEN in tickr_list.h * * Return OK (and first node of list) or SAVE_URL_LIST_ERROR. */ int f_list_save_to_file(FList *node, const char *file_name) { char *listfname; FILE *fp; if (file_name == NULL) listfname = l_str_new(get_datafile_full_name_from_name(URL_LIST_FILE)); else listfname = l_str_new(file_name); if ((fp = g_fopen(listfname, "wb")) != NULL) { if (IS_FLIST(node)) { for(node = f_list_first(node); IS_FLIST(node); node = node->next) { /* TODO: We should use: "%c" + FLIST_RANK_FORMAT + "%s%s%s\n" */ fprintf(fp, "%c%3d%s%s%s\n", node->selected ? SELECTED_URL_CHAR : UNSELECTED_URL_CHAR, atoi(node->rank), node->url, (node->title[0] != '\0') ? TITLE_TAG_STR : "", (node->title[0] != '\0') ? node->title : ""); } } fclose(fp); l_str_free(listfname); return OK; } else { warning(FALSE, 4, "Can't save URL list ", listfname, ": ", strerror(errno)); l_str_free(listfname); return SAVE_URL_LIST_ERROR; } } FList *f_list_clone(FList *some_node) { FList *new = NULL, *node; CHECK_IS_FLIST(some_node, "f_list_clone()") for (node = f_list_first(some_node); IS_FLIST(node); node = node->next) new = f_list_add_at_end(new, node->url, node->title, node->selected, node->rank); new = f_list_first(new); return new; } tickr_0.6.4.orig/src/tickr/Makefile-tickr-win320000751000175000017500000000170512147427510020664 0ustar manutmmanutm# Makefile for TICKR - GTK-based Feed Reader - win32 version src = tickr_main.c tickr_resource.c tickr_render.c tickr_params.c\ tickr_clock.c tickr_feedparser.c tickr_list.c tickr_feedpicker.c\ tickr_prefwin.c tickr_otherwins.c tickr_misc.c tickr_helptext.c\ tickr_opml.c tickr_http.c tickr_socket.c tickr_connectwin.c\ tickr_quickfeedpicker.c tickr_quicksetup.c tickr_check4updates.c obj = $(src:.c=.o) CC = gcc CFLAGS = -O2 -Wall -Wextra -Wunused-parameter -Wshadow -Wpointer-arith\ -ffast-math -pedantic `pkg-config --cflags gtk+-2.0`\ -I/usr/local/include/libxml2 -DWIN32_V LIBS = --mms-bitfields -mwindows -lwinmm -lrpcrt4 -liphlpapi -lws2_32\ ../libetm-0.4.4/libetm.a `pkg-config --libs gtk+-2.0`\ -static ../../win32_install_stuff/dlls/libxml2.dll.a all: tickr $(obj): $(src) tickr.h Makefile $(CC) $(CFLAGS) -c $(src) tickr: $(obj) $(CC) -o tickr $(obj) $(LIBS) .PHONY: clean clean: rm -f $(obj) tickr.exe tickr_0.6.4.orig/src/tickr/tickr_opml.c0000640000175000017500000003042612147427510017460 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" #define OPML_FEED_RANK APP_CMD "FeedRank" static char *opml_str_global; static char tmp_url[FILE_NAME_MAXLEN + 1], tmp_str[256]; /* * Importing */ static int *get_feed_counter() { static int feed_counter; return &feed_counter; } static void zero_feed_counter() { *get_feed_counter() = 0; } static void inc_feed_counter() { *get_feed_counter() += 1; } void import_opml_file() { char *opml_file_name, *url_list_file_name; FList *node; FILE *fp; int status = OPML_ERROR; if ((opml_file_name = pick_opml_file())[0] != '\0') { url_list_file_name = l_str_new(get_datafile_full_name_from_name(URL_LIST_FILE)); if ((fp = g_fopen(url_list_file_name, "rb")) != NULL) { fclose(fp); if (question_win("Imported URLs will be merged with currently saved ones. " "Continue ?") == NO) { l_str_free(url_list_file_name); return; } } else if ((fp = g_fopen(url_list_file_name, "wb")) != NULL) fclose(fp); else { warning(FALSE, 4, "Can't create URL list ", url_list_file_name, ": ", strerror(errno)); return; } win_with_progress_bar(WIN_WITH_PROGRESS_BAR_OPEN, " Importing (and updating) data from OPML file, please wait... "); #ifdef VERBOSE_OUTPUT fprintf(STD_OUT, "Importing (and updating) data from OPML file (%s), please wait...\n", opml_file_name); fflush(STD_OUT); #endif zero_feed_counter(); get_ticker_env()->selection_mode = MULTIPLE; opml_str_global = l_str_new(NULL); if (parse_opml_xml_file(opml_file_name) == OK) if ((fp = g_fopen(url_list_file_name, "ab")) != NULL) { fprintf(fp, "\n%s\n", opml_str_global); fclose(fp); if (f_list_load_from_file(&node, NULL) == OK) { node = f_list_sort(node); if (f_list_save_to_file(node, NULL) == OK) { if (IS_FLIST(get_feed_list())) f_list_free_all(get_feed_list()); set_feed_list(node); status = OK; } } } l_str_free(url_list_file_name); l_str_free(opml_str_global); win_with_progress_bar(WIN_WITH_PROGRESS_BAR_CLOSE, NULL); if (status == OK) { snprintf(tmp_str, 256, "\nFeed list (%d URLs) has been imported\n", *get_feed_counter()); info_win("", tmp_str, INFO, FALSE); get_new_url(get_resource()); } } } char *pick_opml_file() { GtkWidget *dialog; GtkFileFilter *filter; char *file_name; static char file_name2[FILE_NAME_MAXLEN + 1]; gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); dialog = gtk_file_chooser_dialog_new("Import Feed List (OPML)", GTK_WINDOW(get_ticker_env()->win), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL_CLOSE, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); gtk_widget_show_all(dialog); filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(filter, "*.opml"); gtk_file_filter_add_pattern(filter, "*.xml"); gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter); file_name2[0] = '\0'; if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { if ((file_name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog))) != NULL) { str_n_cpy(file_name2, file_name, FILE_NAME_MAXLEN); g_free(file_name); } } gtk_widget_destroy(dialog); check_main_win_always_on_top(); return file_name2; } int parse_opml_xml_file(const char *file_name) { xmlDoc *doc = NULL; xmlNode *cur_node = NULL, *cur_node_start = NULL; int body_element = NO, outline_element = NO; #ifdef VERBOSE_OUTPUT fprintf(STD_OUT, "Parsing OPML file ...\n"); fflush(STD_OUT); #endif if ((doc = xmlParseFile(file_name)) == NULL) { warning(FALSE, 2, "Can't parse XML file: ", xmlGetLastError()->message); return XML_UNPARSABLE; } else if ((cur_node = xmlDocGetRootElement(doc)) == NULL) { warning(FALSE, 2, "Empty XML document: ", file_name); xmlFreeDoc(doc); return XML_EMPTY; } else if (xmlStrcmp(cur_node->name, (const xmlChar *)"opml") != 0) { warning(FALSE, 2, "Not an OPML document: ", file_name); xmlFreeDoc(doc); return OPML_ERROR; } cur_node_start = cur_node; for (cur_node = cur_node->children; cur_node != NULL; cur_node = cur_node->next) { if (xmlStrcmp(cur_node->name, (const xmlChar *)"body") == 0) { body_element = YES; break; } } if (body_element == YES) { for (cur_node = cur_node->children; cur_node != NULL; cur_node = cur_node->next) { if (xmlStrcmp(cur_node->name, (const xmlChar *)"outline") == 0) { outline_element = YES; break; } } } if (body_element == YES && outline_element == YES) { get_opml_selected_element(cur_node_start, "outline", "type"); #ifdef VERBOSE_OUTPUT fprintf(STD_OUT, "Done\n"); fflush(STD_OUT); #endif xmlFreeDoc(doc); return OK; } else { warning(FALSE, 2, "Couldn't find all required OPML elements in: ", file_name); xmlFreeDoc(doc); return OPML_ERROR; } } /* * Entry format in url list file: * ['*' (selected) or '-' (unselected) + "000" (3 chars rank) + url [+ '>' + title] + '\n'] * * Entry max length = FILE_NAME_MAXLEN * See also: (UN)SELECTED_URL_CHAR/STR and TITLE_TAG_CHAR/STR in tickr.h * FLIST_RANK_FORMAT and FLIST_RANK_STR_LEN in tickr_list.h */ void get_opml_selected_element(xmlNode *some_node, const char *selected_element, const char *selected_attribute) { xmlNode *cur_node; xmlChar *str1, *str2, *str3; gchar *unesc_str; char feed_title[FEED_TITLE_MAXLEN + 1]; char feed_rank[FLIST_RANK_STR_LEN + 1]; int unused; for (cur_node = some_node; cur_node != NULL; cur_node = cur_node->next) { if (xmlStrcmp(cur_node->name, (const xmlChar *)selected_element) == 0) { /* Need to get attribute name and value, * then use only those whose value = "rss" for name = "type", * then get value for name = "xmlUrl" -> rss feed url, * also eventually get value for (NOT STANDARD) name = OPML_FEED_RANK. */ if ((str1 = xmlGetProp(cur_node, (xmlChar *)selected_attribute)) != NULL) { if (xmlStrcmp(str1, (xmlChar *)"rss") == 0) { if ((str2 = xmlGetProp(cur_node, (xmlChar *)"xmlUrl")) != NULL) { /* First, we add one UNSELECTED_URL_CHAR, */ opml_str_global = l_str_cat(opml_str_global, UNSELECTED_URL_STR); /* then FLIST_RANK_STR_LEN chars, */ if ((str3 = xmlGetProp(cur_node, (xmlChar *)OPML_FEED_RANK)) != NULL) { snprintf(feed_rank, FLIST_RANK_STR_LEN + 1, FLIST_RANK_FORMAT, atoi((char *)str3)); xmlFree(str3); } else str_n_cpy(feed_rank, BLANK_STR_16, FLIST_RANK_STR_LEN); opml_str_global = l_str_cat(opml_str_global, feed_rank); /* then feed URL. */ unesc_str = g_uri_unescape_string((const char *)str2, NULL); opml_str_global = l_str_cat(opml_str_global, (const char*)unesc_str); /* Get feed title from feed url - OK like that? */ str_n_cpy(tmp_url, unesc_str, FILE_NAME_MAXLEN); if (fetch_resource(tmp_url, get_datafile_full_name_from_name(TMP1), tmp_url) == OK) if (get_feed_info(&unused, get_datafile_full_name_from_name(TMP1), feed_title, NULL, NULL) == OK) if (feed_title[0] != '\0') { opml_str_global = l_str_cat(opml_str_global, TITLE_TAG_STR); opml_str_global = l_str_cat(opml_str_global, feed_title); } opml_str_global = l_str_cat(opml_str_global, "\n"); inc_feed_counter(); snprintf(tmp_str, 256, "%d feed%s imported so far, please wait...", *get_feed_counter(), *get_feed_counter() <= 1 ? "" : "s"); /*snprintf(tmp_str, 256, "%d feed%s imported so far, please wait... \n%s", *get_feed_counter(), *get_feed_counter() <= 1 ? "" : "s", unesc_str);*/ win_with_progress_bar(WIN_WITH_PROGRESS_BAR_PULSE, tmp_str); g_free(unesc_str); xmlFree(str2); } } xmlFree(str1); } } get_opml_selected_element(cur_node->children, selected_element, selected_attribute); } } /* * Exporting */ void export_opml_file() { FList *node; char *str; if (f_list_load_from_file(&node, NULL) == OK) { str = create_opml_str_from_feed_list_node(node); save_str_as_opml_file(str); l_str_free(str); f_list_free_all(node); } } /* Must l_str_free() opml_str afterwards */ char *create_opml_str_from_feed_list_node(FList *node) { #define OPML_TITLE APP_NAME " Feed List" #define STR_SIZE (4 * 1024) char *opml_header = "\n" "\n" " \n" " %s\n" " \n" " \n"; char *opml_item = " \n"; /*" \n";*/ char *opml_footer = " \n" "\n"; char *opml_str, tmp[STR_SIZE]; gchar *esc_str1, *esc_str2; snprintf(tmp, STR_SIZE, opml_header, OPML_TITLE); opml_str = l_str_new(tmp); for (; node != NULL; node = node->next) { if (!g_utf8_validate(node->url, -1, NULL)) { warning(FALSE, 3, "Non UTF-8 encoded string: ", node->url, " - Skipped"); continue; } esc_str1 = g_uri_escape_string(node->title, " AÄääàçéèêÖöôÜüùà'()[]-_|{}/.,;:?!%€£$*+=", TRUE); esc_str2 = g_uri_escape_string(node->url, G_URI_RESERVED_CHARS_GENERIC_DELIMITERS, TRUE); snprintf(tmp, STR_SIZE, opml_item, esc_str1, esc_str2, node->rank); /*snprintf(tmp, STR_SIZE, opml_item, esc_str1, esc_str2);*/ g_free(esc_str1); g_free(esc_str2); opml_str = l_str_cat(opml_str, tmp); } return l_str_cat(opml_str, opml_footer); } int save_str_as_opml_file(const char *str) { GtkWidget *dialog; char *file_name = NULL; FILE *fp; int exit_status = CREATE_FILE_ERROR; char tmp[TMPSTR_SIZE + 1]; gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); dialog = gtk_file_chooser_dialog_new("Export Feed List (OPML)", GTK_WINDOW(get_ticker_env()->win), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL_CLOSE, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); gtk_widget_show_all(dialog); /*gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), "~");*/ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), APP_CMD "-feed-list.opml"); gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { if ((file_name = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog))) != NULL) { if ((fp = g_fopen(file_name, "wb")) != NULL) { fprintf(fp, "%s", str); fclose(fp); exit_status = OK; } else warning(FALSE, 3, "Can't save OPML file ", file_name, ": ", strerror(errno)); } } gtk_widget_destroy(dialog); if (exit_status == OK) { snprintf(tmp, TMPSTR_SIZE + 1, "\nFeed list has been exported to OPML file: %s\n", file_name); info_win("", tmp, INFO, FALSE); } if (file_name != NULL) g_free(file_name); check_main_win_always_on_top(); return exit_status; } tickr_0.6.4.orig/src/tickr/tickr_feedparser.c0000640000175000017500000003433712147427510020636 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" static int depth; static xmlNode *item_or_entry_element; static int n; static int counter; /* * Here, 'rss' is sometimes used as a synonym of 'feed' and sometimes * used by opposition to 'atom' (this can be confusing). */ /* * Look for url and, if valid, parse it then dump result into * /TICKR_DIR_NAME/XML_DUMP and -/XML_DUMP_EXTRA. * If url isn't valid, only set error code and return. */ int get_feed(Resource *resrc, const Params *prm) { char feed_title[FEED_TITLE_MAXLEN + 1]; char feed_link[FILE_NAME_MAXLEN + 1]; char feed_ttl[32]; char file_name[FILE_NAME_MAXLEN + 1]; char url[FILE_NAME_MAXLEN + 1]; int suspend_rq_bak, exit_status, i; suspend_rq_bak = get_ticker_env()->suspend_rq; get_ticker_env()->suspend_rq = TRUE; resrc->rss_ttl = prm->rss_refresh; /* 'xml dump' stuff */ str_n_cpy(resrc->xml_dump, get_datafile_full_name_from_name(XML_DUMP), FILE_NAME_MAXLEN); if (resrc->fp != NULL) fclose(resrc->fp); resrc->fp = open_new_datafile_with_name(XML_DUMP, "wb"); /* 'xml dump extra' stuff */ str_n_cpy(resrc->xml_dump_extra, get_datafile_full_name_from_name(XML_DUMP_EXTRA), FILE_NAME_MAXLEN); if (resrc->fp_extra != NULL) fclose(resrc->fp_extra); resrc->fp_extra = open_new_datafile_with_name(XML_DUMP_EXTRA, "wb"); str_n_cpy(file_name, get_datafile_full_name_from_name(RESOURCE_DUMP), FILE_NAME_MAXLEN); /* We replace resrc->id with modified url, file_name = downloaded resource */ if ((exit_status = fetch_resource((const char *)resrc->id, (const char *)file_name, url)) == OK) { #ifdef VERBOSE_OUTPUT fprintf(STD_OUT, "Resource fetched: %s\n", (const char *)resrc->id); fflush(STD_OUT); #endif } else if (exit_status == FEED_FORMAT_ERROR) { warning(get_ticker_env()->selection_mode == MULTIPLE, 2, "Feed format error in: ", resrc->id); return FEED_FORMAT_ERROR; } else if (exit_status == CONNECT_TOO_MANY_ERRORS) { return CONNECT_TOO_MANY_ERRORS; } else { warning(get_ticker_env()->selection_mode == MULTIPLE, 2, "Can't fetch resource: ", resrc->id); return FEED_DOWNLOAD_ERROR; } /* We use file_name instead of resrc->id */ if ((i = get_feed_info((int *)&resrc->format, file_name, feed_title, feed_link, feed_ttl)) != OK) { if (i == FEED_UNPARSABLE) warning(get_ticker_env()->selection_mode == MULTIPLE, 2, "Feed is unparsable: ", resrc->id); else if (i == FEED_EMPTY) warning(get_ticker_env()->selection_mode == MULTIPLE, 2, "Feed is empty: ", resrc->id); else if (i == RSS_FORMAT_UNDETERMINED) warning(get_ticker_env()->selection_mode == MULTIPLE, 2, "Undetermined feed format: ", resrc->id); else warning(get_ticker_env()->selection_mode == MULTIPLE, 2, "get_feed_info() undetermined error: ", resrc->id); return i; } else if (resrc->format == RSS_FORMAT_UNDETERMINED) { warning(get_ticker_env()->selection_mode == MULTIPLE, 2, "Undetermined feed format: ", resrc->id); return RSS_FORMAT_UNDETERMINED; } str_n_cpy(resrc->feed_title, feed_title, FEED_TITLE_MAXLEN); if (prm->feed_title == 'y') { /* We remove any LINK_TAG_CHAR from str because it will be used in "link tag" */ remove_char_from_str((char *)feed_title, LINK_TAG_CHAR); fprintf(resrc->fp, "%s%s", feed_title, prm->feed_title_delimiter); } if (feed_ttl[0] != '\0') resrc->rss_ttl = atoi(feed_ttl); /* Link offset stuff reset */ for (i = 0; i < NFEEDLINKANDOFFSETMAX; i++) { resrc->link_and_offset[i].offset_in_surface = 0; (resrc->link_and_offset[i].url)[0] = '\0'; } /* We use file_name instead of resrc->id */ if ((exit_status = parse_xml_file(resrc->format, resrc->fp, resrc->fp_extra, file_name, resrc->link_and_offset, prm)) == FEED_NO_ITEM_OR_ENTRY_ELEMENT) warning(get_ticker_env()->selection_mode == MULTIPLE, 2, "No 'item' or 'entry' element found in: ", resrc->id); if (exit_status != OK) return exit_status; fclose(resrc->fp); resrc->fp = open_new_datafile_with_name(XML_DUMP, "rb"); fclose(resrc->fp_extra); resrc->fp_extra = open_new_datafile_with_name(XML_DUMP_EXTRA, "rb"); get_ticker_env()->suspend_rq = suspend_rq_bak; return OK; } /* * Must be utf-8 encoded */ int parse_xml_file(int format, FILE *fp, FILE *fp_extra, const char* file_name,\ FeedLinkAndOffset *link_and_offset, const Params *prm) { xmlDoc *doc; xmlNode *root_element; #ifdef VERBOSE_OUTPUT fprintf(STD_OUT, "Parsing XML file ... "); fflush(STD_OUT); #endif if ((doc = xmlParseFile(file_name)) == NULL) { warning(get_ticker_env()->selection_mode == MULTIPLE, 2, "XML parser error: ", xmlGetLastError()->message); return FEED_UNPARSABLE; } if ((root_element = xmlDocGetRootElement(doc)) == NULL) { xmlFreeDoc(doc); warning(get_ticker_env()->selection_mode == MULTIPLE, 2, "Empty XML document: ", file_name); return FEED_EMPTY; } depth = 0; item_or_entry_element = NULL; n = 1; counter = 0; if (format == RSS_2_0) get_rss20_selected_elements1(root_element, doc); else if (format == RSS_1_0) get_rss10_selected_elements1(root_element, doc); else if (format == RSS_ATOM) get_atom_selected_elements1(root_element, doc); else { xmlFreeDoc(doc); return FEED_FORMAT_ERROR; } if (item_or_entry_element != NULL) get_feed_selected_elements2(format, item_or_entry_element, doc, fp, fp_extra, link_and_offset, prm); else { xmlFreeDoc(doc); return FEED_NO_ITEM_OR_ENTRY_ELEMENT; } xmlFreeDoc(doc); #ifdef VERBOSE_OUTPUT fprintf(STD_OUT, "Done\n"); fflush(STD_OUT); #endif return OK; } void get_rss20_selected_elements1(xmlNode *some_element, xmlDoc *doc) { xmlNode *cur_node; for (cur_node = some_element; cur_node != NULL; cur_node = cur_node->next) { if (item_or_entry_element != NULL) return; /* NEW: RSS 2.0: we don't want extra namespaces */ if (cur_node->ns != NULL) continue; if (xmlStrcmp(cur_node->name, (const xmlChar *)"rss") == 0 && depth == 0) depth = 1; else if (xmlStrcmp(cur_node->name, (const xmlChar *)"channel") == 0 && depth == 1) depth = 2; else if (xmlStrcmp(cur_node->name, (const xmlChar *)"item") == 0 && depth == 2) depth = 3; if (depth == 3) item_or_entry_element = cur_node; else get_rss20_selected_elements1(cur_node->children, doc); } } void get_rss10_selected_elements1(xmlNode *some_element, xmlDoc *doc) { xmlNode *cur_node; for (cur_node = some_element; cur_node != NULL; cur_node = cur_node->next) { if (item_or_entry_element != NULL) return; if (xmlStrcmp(cur_node->name, (const xmlChar *)"RDF") == 0 && depth == 0) depth = 1; else if (xmlStrcmp(cur_node->name, (const xmlChar *)"item") == 0 && depth == 1) depth = 2; if (depth == 2) item_or_entry_element = cur_node; else get_rss10_selected_elements1(cur_node->children, doc); } } void get_atom_selected_elements1(xmlNode *some_element, xmlDoc *doc) { xmlNode *cur_node; for (cur_node = some_element; cur_node != NULL; cur_node = cur_node->next) { if (item_or_entry_element != NULL) return; if (xmlStrcmp(cur_node->name, (const xmlChar *)"feed") == 0) depth = 1; else if (xmlStrcmp(cur_node->name, (const xmlChar *)"entry") == 0 && depth == 1) depth = 2; if (depth == 2) item_or_entry_element = cur_node; else get_atom_selected_elements1(cur_node->children, doc); } } /* * For every link found, we insert in text LINK_TAG_CHAR + "00n" * with n = link rank and we fill link_and_offset with url. * This is used later in render_stream_to_surface(). */ void get_feed_selected_elements2(int feed_format, xmlNode *some_element, xmlDoc *doc, FILE *fp, FILE *fp_extra, FeedLinkAndOffset *link_and_offset, const Params *prm) { xmlNode *cur_node, *cur_node_bak; xmlChar *str; xmlChar item_or_entry[16]; xmlChar description_or_summary[16]; if (feed_format == RSS_2_0 || feed_format == RSS_1_0) { str_n_cpy((char *)item_or_entry, "item", 15); str_n_cpy((char *)description_or_summary, "description", 15); } else if (feed_format == RSS_ATOM) { str_n_cpy((char *)item_or_entry, "entry", 15); str_n_cpy((char *)description_or_summary, "summary", 15); } else { fprintf(STD_ERR, "get_feed_selected_elements2(): Undefined feed format\n"); fflush(STD_ERR); return; } for (cur_node = some_element; cur_node != NULL; cur_node = cur_node->next) { /* NEW: RSS 2.0: we don't want extra namespaces */ if (feed_format == RSS_2_0 && cur_node->ns != NULL) continue; if (xmlStrcmp(cur_node->name, (const xmlChar *)item_or_entry) == 0) { cur_node_bak = cur_node; cur_node = cur_node->children; for (; cur_node != NULL; cur_node = cur_node->next) { /* NEW: RSS 2.0: we don't want extra namespaces */ if (feed_format == RSS_2_0 && cur_node->ns != NULL) continue; if (xmlStrcmp(cur_node->name, (const xmlChar *)"title") == 0) { /* xmlNodeListGetString(doc, node, 1) = node->content */ if ((str = xmlNodeListGetString(doc, cur_node->children, 1)) != NULL) { /* We remove any LINK_TAG_CHAR from str because it will be used in "link tag" */ remove_char_from_str((char *)str, LINK_TAG_CHAR); remove_char_from_str((char *)str, ITEM_TITLE_TAG_CHAR); if (prm->item_title == 'y') fprintf(fp, "%s%s", str, prm->item_title_delimiter); else if (prm->item_description == 'y') fprintf(fp_extra, "%c%03d%s\n", ITEM_TITLE_TAG_CHAR, n, str); xmlFree(str); } } else if (xmlStrcmp(cur_node->name, (const xmlChar *)description_or_summary) == 0) { if ((str = xmlNodeListGetString(doc, cur_node->children, 1)) != NULL) { /* We remove any LINK_TAG_CHAR from str because it will be used in "link tag" */ remove_char_from_str((char *)str, LINK_TAG_CHAR); remove_char_from_str((char *)str, ITEM_DES_TAG_CHAR); if (prm->item_description == 'y') fprintf(fp, "%s%s", str, prm->item_description_delimiter); else if (prm->item_title == 'y') fprintf(fp_extra, "%c%03d%s\n", ITEM_DES_TAG_CHAR, n, str); xmlFree(str); } } } cur_node = cur_node_bak; cur_node = cur_node->children; for (; cur_node != NULL; cur_node = cur_node->next) { /* NEW: RSS 2.0: we don't want extra namespaces */ if (feed_format == RSS_2_0 && cur_node->ns != NULL) continue; if (xmlStrcmp(cur_node->name, (const xmlChar *)"link") == 0) { /* Node content (RSS 2.0 / RSS 1.0) or node attribute (Atom) */ if ((feed_format != RSS_ATOM && ((str = xmlNodeListGetString(doc, cur_node->children, 1)) != NULL)) || (str = xmlGetProp(cur_node, (const xmlChar *)"href")) != NULL) { if (n < NFEEDLINKANDOFFSETMAX + 1) { str_n_cpy((link_and_offset + n)->url, (const char *)str, FILE_NAME_MAXLEN); fprintf(fp, "%c%03d", LINK_TAG_CHAR, n++); } xmlFree(str); } } } cur_node = cur_node_bak; if (prm->n_items_per_feed != 0) if (++counter >= prm->n_items_per_feed) break; } } } static const char *try_str_to_utf8(const char *str) { static char str2[1024]; int i; str_n_cpy(str2, str, 1023); for (i = strlen(str2); i > 0; i--) { str2[i - 1] = '\0'; if (g_utf8_validate(str2, -1, NULL)) break; } if (i == 0) str_n_cpy(str2, "(not UTF-8 encoded)", 1023); return (const char *)str2; } /* * Info is 1 int + 4 strings, 255 chars long each. * feed_* can be NULL. */ int get_feed_info(int *format, const char *file_name, char *feed_title, char *feed_link, char *feed_ttl) { xmlDoc *doc; xmlNode *root_element; *format = RSS_FORMAT_UNDETERMINED; if ((doc = xmlParseFile(file_name)) == NULL) { return FEED_UNPARSABLE; } else { if ((root_element = xmlDocGetRootElement(doc)) == NULL) { xmlFreeDoc(doc); return FEED_EMPTY; } else { if (xmlStrcmp(root_element->name, (const xmlChar *)"rss") == 0) *format = RSS_2_0; else if (xmlStrcmp(root_element->name, (const xmlChar *)"RDF") == 0) *format = RSS_1_0; else if (xmlStrcmp(root_element->name, (const xmlChar *)"feed") == 0) *format = RSS_ATOM; else { xmlFreeDoc(doc); return *format; } if (feed_title != NULL) { feed_title[0] = '\0'; get_xml_first_element(root_element->children, doc, "title", feed_title, FEED_TITLE_MAXLEN); } if (feed_link != NULL) { feed_link[0] = '\0'; get_xml_first_element(root_element->children, doc, "link", feed_link, FILE_NAME_MAXLEN); } if (feed_ttl != NULL) { feed_ttl[0] = '\0'; get_xml_first_element(root_element->children, doc, "ttl", feed_ttl, 31); } xmlFreeDoc(doc); if (!g_utf8_validate(feed_title, -1, NULL)) str_n_cpy(feed_title, try_str_to_utf8(feed_title), 255); /* We remove any LINK_TAG_CHAR from str because it will be used in "link tag" */ remove_char_from_str(feed_title, LINK_TAG_CHAR); return OK; } } } /* * string must be empty (string[0] = '\0' */ void get_xml_first_element(xmlNode *some_element, xmlDoc *doc, char *name, char *string, int length) { xmlNode *cur_node; xmlChar *str; if (string[0] != '\0') return; for (cur_node = some_element; cur_node != NULL; cur_node = cur_node->next) { if (xmlStrcmp(cur_node->name, (const xmlChar *)name) == 0) { if ((str = xmlNodeListGetString(doc, cur_node->children, 1)) != NULL) { str_n_cpy(string, (const char *)str, length); xmlFree(str); } else string[0] = '\0'; break; } get_xml_first_element(cur_node->children, doc, name, string, length); } } tickr_0.6.4.orig/src/tickr/tickr_connectwin.c0000640000175000017500000003402712147427510020661 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" static Authentication *auth; static Proxy *proxy; static GtkWidget *dialog, *entry_user, *entry_psw, *check_but1; static GtkWidget *entry_host, *entry_port, *entry_proxy_user, *entry_proxy_psw; static GtkWidget *check_but2, *check_but3, *label[9]; void init_authentication() { static Authentication auth0; auth = &auth0; auth->use_authentication = FALSE; auth->user[0] = '\0'; auth->psw[0] = '\0'; auth->auth_str[0] = '\0'; } void init_proxy() { static Proxy proxy0; proxy = &proxy0; proxy->use_proxy = FALSE; proxy->host[0] = '\0'; proxy->port[0] = '\0'; proxy->use_proxy_authentication = FALSE; proxy->user[0] = '\0'; proxy->psw[0] = '\0'; proxy->auth_str[0] = '\0'; } static gint enter_key_pressed_in_entry(GtkWidget *widget) { widget = widget; gtk_dialog_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); return TRUE; } static void set_entries_sensitive1(gboolean state) { gtk_widget_set_sensitive(label[1], state); gtk_widget_set_sensitive(entry_user, state); gtk_widget_set_sensitive(label[2], state); gtk_widget_set_sensitive(entry_psw, state); } static void set_entries_sensitive2(gboolean state) { gtk_widget_set_sensitive(label[4], state); gtk_widget_set_sensitive(entry_host, state); gtk_widget_set_sensitive(label[5], state); gtk_widget_set_sensitive(entry_port, state); gtk_widget_set_sensitive(check_but3, state); } static void set_entries_sensitive3(gboolean state) { gtk_widget_set_sensitive(label[6], state); gtk_widget_set_sensitive(entry_proxy_user, state); gtk_widget_set_sensitive(label[7], state); gtk_widget_set_sensitive(entry_proxy_psw, state); } static gint check_but1_toggled(GtkWidget *check_button) { auth->use_authentication = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_button)); set_entries_sensitive1(auth->use_authentication); return TRUE; } static gint check_but2_toggled(GtkWidget *check_button) { proxy->use_proxy = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_button)); set_entries_sensitive2(proxy->use_proxy); set_entries_sensitive3(proxy->use_proxy && proxy->use_proxy_authentication); return TRUE; } static gint check_but3_toggled(GtkWidget *check_button) { proxy->use_proxy_authentication = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_button)); set_entries_sensitive3(proxy->use_proxy && proxy->use_proxy_authentication); return TRUE; } void compute_auth_and_proxy_str() { char *tmp1, *tmp2; if (auth->user[0] != '\0' && auth->psw[0] != '\0') { tmp1 = l_str_new(auth->user); tmp1 = l_str_cat(tmp1, ":"); tmp1 = l_str_cat(tmp1, auth->psw); tmp2 = g_base64_encode((guchar *)tmp1, (gsize)strlen(tmp1)); str_n_cpy(auth->auth_str, tmp2, AUTH_STR_MAXLEN); g_free(tmp2); l_str_free(tmp1); } else auth->auth_str[0] = '\0'; if (proxy->host[0] != '\0') { tmp1 = l_str_new(proxy->host); if (proxy->port[0] == '\0') str_n_cpy(proxy->port, PROXYPORT, PROXY_PORT_MAXLEN); if (proxy->port[0] != '\0') { tmp1 = l_str_cat(tmp1, ":"); tmp1 = l_str_cat(tmp1, proxy->port); } str_n_cpy(proxy->proxy_str, tmp1, PROXY_STR_MAXLEN); l_str_free(tmp1); } else proxy->proxy_str[0] = '\0'; if (proxy->use_proxy_authentication && proxy->user[0] != '\0' && proxy->psw[0] != '\0') { tmp1 = l_str_new(proxy->user); tmp1 = l_str_cat(tmp1, ":"); tmp1 = l_str_cat(tmp1, proxy->psw); tmp2 = g_base64_encode((guchar *)tmp1, (gsize)strlen(tmp1)); str_n_cpy(proxy->auth_str, tmp2, PROXY_AUTH_STR_MAXLEN); g_free(tmp2); l_str_free(tmp1); } else proxy->auth_str[0] = '\0'; } /* Must be initialized with init_authentication() and init_proxy() */ gint connection_settings(connection_settings_page page) { GtkWidget *notebook, *table1, *table2, *hbox; int response = GTK_RESPONSE_CANCEL_CLOSE; gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); dialog = gtk_dialog_new_with_buttons( "Connection Settings", GTK_WINDOW(get_ticker_env()->win), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL_CLOSE, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); /* * Fill structs from params */ auth->use_authentication = (get_params()->use_authentication == 'y') ? TRUE : FALSE; str_n_cpy(proxy->user, get_params()->user, USER_MAXLEN); proxy->use_proxy = (get_params()->use_proxy == 'y') ? TRUE : FALSE; str_n_cpy(proxy->host, get_params()->proxy_host, PROXY_HOST_MAXLEN); str_n_cpy(proxy->port, get_params()->proxy_port, PROXY_PORT_MAXLEN); proxy->use_proxy_authentication = (get_params()->use_proxy_authentication == 'y') ? TRUE : FALSE; str_n_cpy(proxy->user, get_params()->proxy_user, PROXY_USER_MAXLEN); notebook = gtk_notebook_new(); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), notebook); label[0]= gtk_label_new("Configure HTTP Basic Authentication"); table1 = gtk_table_new(6, 2, TRUE); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table1, label[0]); gtk_table_set_row_spacings(GTK_TABLE(table1), 5); gtk_table_set_col_spacings(GTK_TABLE(table1), 5); gtk_container_set_border_width(GTK_CONTAINER(table1), 10); check_but1 = gtk_check_button_new_with_label(" Use Authentication"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_but1), auth->use_authentication); gtk_table_attach_defaults(GTK_TABLE(table1), check_but1, 0, 1, 0, 1); label[1] = gtk_label_new("Username:"); gtk_label_set_use_markup(GTK_LABEL(label[1]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[1]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table1), label[1], 0, 1, 1, 2); entry_user = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_user), USER_MAXLEN); gtk_entry_set_text(GTK_ENTRY(entry_user), auth->user); gtk_table_attach_defaults(GTK_TABLE(table1), entry_user, 1, 2, 1, 2); label[2] = gtk_label_new("Password:"); gtk_label_set_use_markup(GTK_LABEL(label[2]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[2]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table1), label[2], 0, 1, 2, 3); entry_psw = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_psw), PSW_MAXLEN); gtk_entry_set_visibility(GTK_ENTRY(entry_psw), FALSE); gtk_entry_set_text(GTK_ENTRY(entry_psw), auth->psw); gtk_table_attach_defaults(GTK_TABLE(table1), entry_psw, 1, 2, 2, 3); gtk_entry_set_visibility(GTK_ENTRY(entry_psw), FALSE); label[3] = gtk_label_new("Configure HTTP Proxy Server"); table2 = gtk_table_new(6, 2, TRUE); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table2, label[3]); gtk_table_set_row_spacings(GTK_TABLE(table2), 5); gtk_table_set_col_spacings(GTK_TABLE(table2), 5); gtk_container_set_border_width(GTK_CONTAINER(table2), 10); check_but2 = gtk_check_button_new_with_label(" Connect via Proxy"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_but2), proxy->use_proxy); gtk_table_attach_defaults(GTK_TABLE(table2), check_but2, 0, 1, 0, 1); label[4] = gtk_label_new("Host:"); gtk_label_set_use_markup(GTK_LABEL(label[4]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[4]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table2), label[4], 0, 1, 1, 2); entry_host = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_host), PROXY_HOST_MAXLEN); gtk_entry_set_text(GTK_ENTRY(entry_host), proxy->host); gtk_table_attach_defaults(GTK_TABLE(table2), entry_host, 1, 2, 1, 2); label[5] = gtk_label_new("Port:"); gtk_label_set_use_markup(GTK_LABEL(label[5]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[5]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table2), label[5], 0, 1, 2, 3); entry_port = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_port), PROXY_PORT_MAXLEN); if (proxy->port[0] == '\0') str_n_cpy(proxy->port, PROXYPORT, PROXY_PORT_MAXLEN); gtk_entry_set_text(GTK_ENTRY(entry_port), proxy->port); gtk_table_attach_defaults(GTK_TABLE(table2), entry_port, 1, 2, 2, 3); check_but3 = gtk_check_button_new_with_label(" Proxy requires Authentication"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_but3), proxy->use_proxy_authentication); gtk_table_attach_defaults(GTK_TABLE(table2), check_but3, 0, 1, 3, 4); label[6] = gtk_label_new(" Username:"); gtk_label_set_use_markup(GTK_LABEL(label[6]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[6]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table2), label[6], 0, 1, 4, 5); entry_proxy_user = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_proxy_user), PROXY_USER_MAXLEN); gtk_entry_set_text(GTK_ENTRY(entry_proxy_user), proxy->user); gtk_table_attach_defaults(GTK_TABLE(table2), entry_proxy_user, 1, 2, 4, 5); label[7] = gtk_label_new(" Password:"); gtk_label_set_use_markup(GTK_LABEL(label[7]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[7]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table2), label[7], 0, 1, 5, 6); entry_proxy_psw = gtk_entry_new(); gtk_entry_set_max_length(GTK_ENTRY(entry_proxy_psw), PROXY_PSW_MAXLEN); gtk_entry_set_visibility(GTK_ENTRY(entry_proxy_psw), FALSE); gtk_entry_set_text(GTK_ENTRY(entry_proxy_psw), proxy->psw); gtk_table_attach_defaults(GTK_TABLE(table2), entry_proxy_psw, 1, 2, 5, 6); hbox = gtk_hbox_new(0, FALSE); label[8] = gtk_label_new(" "); gtk_box_pack_start(GTK_BOX(hbox), label[8], FALSE, FALSE, 0); set_entries_sensitive1(auth->use_authentication); set_entries_sensitive2(proxy->use_proxy); set_entries_sensitive3(proxy->use_proxy && proxy->use_proxy_authentication); g_signal_connect(G_OBJECT(check_but1), "toggled", G_CALLBACK(check_but1_toggled), NULL); g_signal_connect(G_OBJECT(check_but2), "toggled", G_CALLBACK(check_but2_toggled), NULL); g_signal_connect(G_OBJECT(check_but3), "toggled", G_CALLBACK(check_but3_toggled), NULL); g_signal_connect(G_OBJECT(entry_user), "activate", G_CALLBACK(enter_key_pressed_in_entry), NULL); g_signal_connect(G_OBJECT(entry_psw), "activate", G_CALLBACK(enter_key_pressed_in_entry), NULL); g_signal_connect(G_OBJECT(entry_host), "activate", G_CALLBACK(enter_key_pressed_in_entry), NULL); g_signal_connect(G_OBJECT(entry_port), "activate", G_CALLBACK(enter_key_pressed_in_entry), NULL); g_signal_connect(G_OBJECT(entry_proxy_user), "activate", G_CALLBACK(enter_key_pressed_in_entry), NULL); g_signal_connect(G_OBJECT(entry_proxy_psw), "activate", G_CALLBACK(enter_key_pressed_in_entry), NULL); gtk_widget_show_all(dialog); gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), (gint)page); get_ticker_env()->suspend_rq = TRUE; if ((response = gtk_dialog_run(GTK_DIALOG(dialog))) == GTK_RESPONSE_OK) { /* * Configure authentication */ auth->use_authentication = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_but1)); str_n_cpy(auth->user, (char *)gtk_entry_get_text(GTK_ENTRY(entry_user)), USER_MAXLEN); remove_char_from_str(auth->user, ' '); str_n_cpy(auth->psw, (char *)gtk_entry_get_text(GTK_ENTRY(entry_psw)), PSW_MAXLEN); remove_char_from_str(auth->psw, ' '); /* * Configure proxy */ proxy->use_proxy = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_but2)); str_n_cpy(proxy->host, (char *)gtk_entry_get_text(GTK_ENTRY(entry_host)), PROXY_HOST_MAXLEN); remove_char_from_str(proxy->host, ' '); str_n_cpy(proxy->port, (char *)gtk_entry_get_text(GTK_ENTRY(entry_port)), PROXY_PORT_MAXLEN); remove_char_from_str(proxy->port, ' '); /* * Configure proxy authentication */ proxy->use_proxy_authentication = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(check_but3)); str_n_cpy(proxy->user, (char *)gtk_entry_get_text(GTK_ENTRY(entry_proxy_user)), PROXY_USER_MAXLEN); remove_char_from_str(proxy->user, ' '); str_n_cpy(proxy->psw, (char *)gtk_entry_get_text(GTK_ENTRY(entry_proxy_psw)), PROXY_PSW_MAXLEN); remove_char_from_str(proxy->psw, ' '); /* * Compute auth and proxy stuff */ compute_auth_and_proxy_str(); /* * Save structs as params, then to file */ get_params()->use_authentication = auth->use_authentication ? 'y' : 'n'; str_n_cpy(get_params()->user, auth->user, USER_MAXLEN); get_params()->use_proxy = proxy->use_proxy ? 'y' : 'n'; str_n_cpy(get_params()->proxy_host, proxy->host, PROXY_HOST_MAXLEN); str_n_cpy(get_params()->proxy_port, proxy->port, PROXY_PORT_MAXLEN); get_params()->use_proxy_authentication = proxy->use_proxy_authentication ? 'y' : 'n'; str_n_cpy(get_params()->proxy_user, proxy->user, PROXY_USER_MAXLEN); save_to_config_file(get_params()); } gtk_widget_destroy(dialog); check_main_win_always_on_top(); get_ticker_env()->suspend_rq = FALSE; return response; } gboolean get_use_authentication() { return auth->use_authentication; } void set_use_authentication(gboolean value) { auth->use_authentication = value; } char *get_http_auth_user() { return (char *)auth->user; } char *get_http_auth_psw() { return (char *)auth->psw; } char *get_http_auth_str() { return (char *)auth->auth_str; } gboolean get_use_proxy() { return proxy->use_proxy; } void set_use_proxy(gboolean value) { proxy->use_proxy = value; } char *get_proxy_host() { return (char *)proxy->host; } char *get_proxy_port() { return (char *)proxy->port; } char *get_proxy_str() { return (char *)proxy->proxy_str; } gboolean get_use_proxy_auth() { return proxy->use_proxy_authentication; } void set_use_proxy_auth(gboolean value) { proxy->use_proxy_authentication = value; } char *get_proxy_auth_user() { return (char *)proxy->user; } char *get_proxy_auth_psw() { return (char *)proxy->psw; } char *get_proxy_auth_str() { return (char *)proxy->auth_str; } tickr_0.6.4.orig/src/tickr/tickr_check4updates.c0000644000175000017500000001067512147427510021250 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" static void new_version_available_win(char *version_num) { GtkWidget *dialog, *table, *label[2], *close_but; char str1[256], str2[256]; gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); dialog = gtk_dialog_new_with_buttons( "New upstream version found", GTK_WINDOW(get_ticker_env()->win), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, NULL); close_but = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL_CLOSE); close_but = close_but; /* To get rid of one annoying compiler warning */ set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); table = gtk_table_new(2, 1, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 5); gtk_container_set_border_width(GTK_CONTAINER(table), 15); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), table); /* Also send to stdout */ fprintf(STD_OUT, "%s version %s is available for download from: <%s>\n", APP_NAME, version_num, DOWNLOAD_URL); snprintf(str1, 256, "%s version %s is available for download from:", APP_NAME, version_num); snprintf(str2, 256, "%s", DOWNLOAD_URL, DOWNLOAD_URL); label[0] = gtk_label_new(str1); gtk_label_set_use_markup(GTK_LABEL(label[0]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[0]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[0], 0, 1, 0, 1); label[1] = gtk_label_new(str2); gtk_label_set_use_markup(GTK_LABEL(label[1]), TRUE); gtk_misc_set_alignment(GTK_MISC(label[1]), 0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label[1], 0, 1, 1, 2); gtk_widget_show_all(dialog); while (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL_CLOSE); gtk_widget_destroy(dialog); check_main_win_always_on_top(); } void check_for_updates() { sockt sock; char *response, *new_url; int /*status,*/ recv_status; char lsvn[32], tmp[32], *p = tmp; int info = OK + 1; fprintf(STD_OUT, "Checking for updates:\n"); if (connect_with_url(&sock, CHECK4UPDATES_URL) == OK) { /* TODO: check this (when http 'connection closed by server' is returned): if ((status = get_http_response(sock, "GET", "", CHECK4UPDATES_URL, &new_url,\ &response, &recv_status)) == SEND_ERROR || status == RECV_ERROR) { if (recv_status == CONNECTION_CLOSED_BY_SERVER || recv_status == SOCK_SHOULD_BE_CLOSED) { CLOSE_SOCK(sock); if (connect_with_url(&sock, CHECK4UPDATES_URL) == OK) status = get_http_response(sock, "GET", "", CHECK4UPDATES_URL, &new_url,\ &response, &recv_status); } } if (status == OK) {*/ if (get_http_response(sock, "GET", "", CHECK4UPDATES_URL, &new_url, &response, &recv_status) == OK) { remove_chunk_info(&response); if (strncmp(response, CHECK4UPDATES_ID_STR, strlen(CHECK4UPDATES_ID_STR)) == 0) { str_n_cpy(lsvn, response + strlen(CHECK4UPDATES_ID_STR), 31); str_n_cpy(p, APP_VERSION_NUMBER, 31); while (*p != '\0') { p++; if (*p == '~') { *p = '\0'; p--; *p -= 1; break; } } if (strcmp(lsvn, tmp) > 0) new_version_available_win(lsvn); else { /* also send to stdout */ fprintf(STD_OUT, APP_NAME " is up to date :)\n"); info_win("Check for Updates", "\n " APP_NAME " is up to date :) \n", INFO, FALSE); } info = OK; } free2(response); } CLOSE_SOCK(sock); } if (info != OK) warning(FALSE, 1, "Couldn't retrieve requested information from website"); } tickr_0.6.4.orig/src/tickr/tickr_otherwins.c0000640000175000017500000004632012147427510020533 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" gint esc_key_pressed(GtkWidget *dialog2, GdkEventKey *event_key) { if (event_key->keyval == GDK_Escape) { gtk_dialog_response(GTK_DIALOG(dialog2), GTK_RESPONSE_CANCEL_CLOSE); return TRUE; } else return FALSE; } void force_quit_dialog(GtkWidget *dialog2) { gtk_dialog_response(GTK_DIALOG(dialog2), GTK_RESPONSE_CANCEL_CLOSE); } /* * 'Pick new file' dialog win */ void open_new_txt_file(Resource *resrc) { TickerEnv *env = get_ticker_env(); GtkWidget *dialog; char *file_name2, tmp[TMPSTR_SIZE + 1]; int resource_flag; Resource resrc_bak; int selection_mode_bak = get_ticker_env()->selection_mode; gtk_window_set_keep_above(GTK_WINDOW(env->win), FALSE); dialog = gtk_file_chooser_dialog_new( "Text File Picker", GTK_WINDOW(env->win), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL_CLOSE, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); gtk_widget_show_all(dialog); /* * Backup last valid opened resource (if any) */ str_n_cpy(resrc_bak.id, resrc->id, FILE_NAME_MAXLEN); while (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { file_name2 = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); str_n_cpy(resrc->id, file_name2, FILE_NAME_MAXLEN); g_free(file_name2); get_ticker_env()->selection_mode = SINGLE; if ((resource_flag = load_resource(resrc, NULL)) == OK) { env->reload_rq = TRUE; break; } else { snprintf(tmp, TMPSTR_SIZE + 1, "load_resource() error %d", resource_flag); info_win("", tmp, INFO_ERROR, FALSE); str_n_cpy(resrc->id, resrc_bak.id, FILE_NAME_MAXLEN); get_ticker_env()->selection_mode = selection_mode_bak; load_resource(resrc, NULL); } } gtk_widget_destroy(dialog); check_main_win_always_on_top(); } static void get_layout_dims(GtkWidget *view, int *layout_width, int *layout_height, char *str) { PangoLayout *p_layout; p_layout = pango_layout_new(gtk_widget_get_pango_context(view)); pango_layout_set_text(p_layout, str, -1); pango_layout_get_pixel_size2(p_layout, layout_width, layout_height); if (p_layout != NULL) g_object_unref(p_layout); } void help_win() { #ifndef G_OS_WIN32 # define FONT "DejaVu Sans Mono 8" /* 8 9 10 OK */ #else # define FONT "Courier New 8" #endif #define HLPWIN_FG_COLOR "#000000ff" /* Black */ #define HLPWIN_BG_COLOR "#ffffffff" /* White */ GtkWidget *dialog, *sc_win, *view; GtkTextBuffer *buf; PangoFontDescription *font_des; GdkColor fg_color, bg_color; guint16 fgc_alpha, bgc_alpha; char *txt; int width, height; int i; gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); dialog = gtk_dialog_new_with_buttons( "Quick Help", GTK_WINDOW(get_ticker_env()->win), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL_CLOSE, NULL); set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); sc_win = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sc_win), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), sc_win); gtk_container_set_border_width(GTK_CONTAINER(sc_win), 5); txt = l_str_new(NULL); buf = gtk_text_buffer_new(NULL); view = gtk_text_view_new_with_buffer(buf); gtk_text_view_set_editable(GTK_TEXT_VIEW(view), FALSE); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(view), FALSE); font_des = pango_font_description_from_string(FONT); gtk_widget_modify_font(view, font_des); get_gdk_color_from_hexstr(HLPWIN_FG_COLOR, &fg_color, &fgc_alpha); get_gdk_color_from_hexstr(HLPWIN_BG_COLOR, &bg_color, &bgc_alpha); /* * Not using gtk_widget_modify_fg/bg() but gtk_widget_modify_text/base() * because it's specifically for editable text. */ if (FALSE) { /* One possible extra setting = 'same colors as ticker's' = 'yes' */ gtk_widget_modify_text(view, GTK_STATE_NORMAL, &(get_params()->fg_color)); gtk_widget_modify_base(view, GTK_STATE_NORMAL, &(get_params()->bg_color)); } else if (TRUE) { /* Widget-level-defined */ gtk_widget_modify_text(view, GTK_STATE_NORMAL, &fg_color); gtk_widget_modify_base(view, GTK_STATE_NORMAL, &bg_color); } else if (FALSE) { /* Same as label inside window */ gtk_widget_modify_text(view, GTK_STATE_NORMAL, (const GdkColor *)&(gtk_widget_get_style(get_ticker_env()->win)->fg[GTK_STATE_NORMAL])); gtk_widget_modify_base(view, GTK_STATE_NORMAL, (const GdkColor *)&(gtk_widget_get_style(get_ticker_env()->win)->bg[GTK_STATE_NORMAL])); } gtk_text_view_set_left_margin(GTK_TEXT_VIEW(view), 15); gtk_text_view_set_right_margin(GTK_TEXT_VIEW(view), 15); gtk_container_add(GTK_CONTAINER(sc_win), view); txt = l_str_cat(txt, "\n"); for (i = 0; get_help_str0()[i] != NULL; i++) txt = l_str_cat(txt, get_help_str0()[i]); for (i = 0; get_help_str1()[i] != NULL; i++) txt = l_str_cat(txt, get_help_str1()[i]); gtk_text_buffer_set_text(buf, txt, -1); get_layout_dims(view, &width, &height, txt); l_str_free(txt); if (width < 400) width = 400; else if (width > 800) width = 800; if (height > 450) height = 450; gtk_widget_set_size_request(sc_win, width + 30 + 15 + 15, height); gtk_widget_show_all(dialog); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); check_main_win_always_on_top(); } static gint license_win() { GtkWidget *dialog, *label; char *txt; int i; gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); dialog = gtk_dialog_new_with_buttons( "License", GTK_WINDOW(get_ticker_env()->win), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL_CLOSE, NULL); set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_container_set_border_width(GTK_CONTAINER(dialog), 15); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_NONE); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); txt = l_str_new(NULL); #ifndef G_OS_WIN32 txt = l_str_cat(txt, ""); #endif for (i = 0; get_license_str1()[i] != NULL; i++) txt = l_str_cat(txt, get_license_str1()[i]); txt = l_str_cat(txt, ""); txt = l_str_cat(txt, get_license_str2()); txt = l_str_cat(txt, ""); #ifndef G_OS_WIN32 txt = l_str_cat(txt, ""); #endif txt = l_str_cat(txt, "\n"); label = gtk_label_new(txt); gtk_label_set_use_markup(GTK_LABEL(label), TRUE); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label); l_str_free(txt); gtk_widget_show_all(dialog); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); check_main_win_always_on_top(); return TRUE; } void about_win() { GtkWidget *dialog, *table, *image = NULL, *label[4]; GtkWidget *license_but, *close_but; gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); dialog = gtk_dialog_new_with_buttons( "About " APP_NAME, GTK_WINDOW(get_ticker_env()->win), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, NULL); license_but = gtk_dialog_add_button(GTK_DIALOG(dialog), "License", GTK_RESPONSE_NONE); close_but = gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL_CLOSE); close_but = close_but; /* to Get rid of one stupid compiler warning */ set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); g_signal_connect(G_OBJECT(license_but), "clicked", G_CALLBACK(license_win), NULL); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); table = gtk_table_new(5, 1, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 5); gtk_container_set_border_width(GTK_CONTAINER(table), 15); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), table); image = gtk_image_new_from_file(get_imagefile_full_name_from_name(TICKR_LOGO)); gtk_table_attach_defaults(GTK_TABLE(table), image, 0, 1, 0, 1); label[0] = gtk_label_new("\n" APP_NAME " version " APP_VERSION_NUMBER " - Feed Reader"); gtk_label_set_use_markup(GTK_LABEL(label[0]), TRUE); gtk_table_attach_defaults(GTK_TABLE(table), label[0], 0, 1, 1, 2); label[1] = gtk_label_new("Copyright (C) Emmanuel Thomas-Maurin 2009-2013"); gtk_label_set_use_markup(GTK_LABEL(label[1]), TRUE); gtk_table_attach_defaults(GTK_TABLE(table), label[1], 0, 1, 2, 3); label[2] = gtk_label_new("" SUPPORT_EMAIL_ADDR ""); gtk_label_set_use_markup(GTK_LABEL(label[2]), TRUE); gtk_table_attach_defaults(GTK_TABLE(table), label[2], 0, 1, 3, 4); label[3] = gtk_label_new("" WEBSITE_URL ""); gtk_label_set_use_markup(GTK_LABEL(label[3]), TRUE); gtk_table_attach_defaults(GTK_TABLE(table), label[3], 0, 1, 4, 5); gtk_widget_show_all(dialog); while (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_CANCEL_CLOSE); gtk_widget_destroy(dialog); check_main_win_always_on_top(); } /* * Info, warning or error. * ==================================================================== * get_params()->disable_popups applies to info_win(), info_win_wait() * and warning(). * warning() always send info to sdtout/stderr. * ==================================================================== * should format text in case we have a long string ? */ void info_win(const char *title, const char *txt, info_type info, gboolean selectable) { GtkWidget *dialog, *table, *image = NULL, *label[2]; gint layout_width, layout_height; if (get_params()->disable_popups == 'y') return; gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); dialog = gtk_dialog_new_with_buttons( title, GTK_WINDOW(get_ticker_env()->win), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE); g_signal_connect(G_OBJECT(dialog), "key-press-event", G_CALLBACK(esc_key_pressed), NULL); g_signal_connect(G_OBJECT(dialog), "delete_event", G_CALLBACK(force_quit_dialog), NULL); table = gtk_table_new(1, 3, FALSE); gtk_table_set_col_spacings(GTK_TABLE(table), 10); gtk_container_set_border_width(GTK_CONTAINER(table), 0); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), table); if (info == INFO) { /* Better without any image if info only so do nothing here */ /*image = gtk_image_new_from_stock(GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG);*/ } else if (info == INFO_WARNING) { image = gtk_image_new_from_stock(GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG); gtk_table_attach_defaults(GTK_TABLE(table), image, 0, 1, 0, 1); } else if (info == INFO_ERROR) { image = gtk_image_new_from_stock(GTK_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_DIALOG); gtk_table_attach_defaults(GTK_TABLE(table), image, 0, 1, 0, 1); } label[0] = gtk_label_new(txt); /* Better if disabled gtk_label_set_use_markup(GTK_LABEL(label[0]), TRUE);*/ pango_layout_get_pixel_size(gtk_label_get_layout(GTK_LABEL(label[0])), &layout_width, &layout_height); if (info == INFO) { if (layout_width > get_ticker_env()->screen_w - 60) gtk_widget_set_size_request(label[0], get_ticker_env()->screen_w - 60, -1); } else { if (layout_width > get_ticker_env()->screen_w - 120) /* Extra 60 pixels for image width */ gtk_widget_set_size_request(label[0], get_ticker_env()->screen_w - 120, -1); } if (selectable) gtk_label_set_selectable(GTK_LABEL(label[0]), TRUE); gtk_table_attach_defaults(GTK_TABLE(table), label[0], 1, 2, 0, 1); label[1] = gtk_label_new(""); gtk_table_attach_defaults(GTK_TABLE(table), label[1], 2, 3, 0, 1); gtk_widget_show_all(dialog); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); check_main_win_always_on_top(); } /* Don't block but show up for ms then close. * TODO: write a more configurable func ? */ void info_win_wait(const char *txt, int delay) { GtkWidget *win; GtkWidget *table, *image, *label[2]; gint layout_width, layout_height; if (get_params()->disable_popups == 'y') return; gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); win = gtk_window_new(GTK_WINDOW_POPUP); set_tickr_icon_to_dialog(GTK_WINDOW(win)); gtk_window_set_position(GTK_WINDOW(win), INFO_WIN_WAIT_POS); gtk_window_set_keep_above(GTK_WINDOW(win), TRUE); table = gtk_table_new(1, 3, FALSE); gtk_table_set_col_spacings(GTK_TABLE(table), 10); gtk_container_set_border_width(GTK_CONTAINER(table), 0); gtk_container_add(GTK_CONTAINER(GTK_WINDOW(win)), table); image = gtk_image_new_from_stock(GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG); gtk_table_attach_defaults(GTK_TABLE(table), image, 0, 1, 0, 1); label[0] = gtk_label_new(txt); /* Better if disabled gtk_label_set_use_markup(GTK_LABEL(label[0]), TRUE);*/ pango_layout_get_pixel_size(gtk_label_get_layout(GTK_LABEL(label[0])), &layout_width, &layout_height); if (layout_width > get_ticker_env()->screen_w - 120) gtk_widget_set_size_request(label[0], get_ticker_env()->screen_w - 120, -1); gtk_table_attach_defaults(GTK_TABLE(table), label[0], 1, 2, 0, 1); label[1] = gtk_label_new(""); gtk_table_attach_defaults(GTK_TABLE(table), label[1], 2, 3, 0, 1); gtk_widget_show_all(win); /* So that win will popup immediately */ while (gtk_events_pending()) gtk_main_iteration(); #ifndef G_OS_WIN32 sleep(delay / 1000); #else Sleep(delay); #endif gtk_widget_destroy(win); check_main_win_always_on_top(); } /* Win centered */ int question_win(const char *txt) { return question_win_at(txt, GTK_WIN_POS_CENTER); } int question_win_at(const char *txt, int win_pos) { GtkWidget *dialog, *table, *image, *label[2]; gint response; gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); dialog = gtk_dialog_new_with_buttons( APP_NAME, GTK_WINDOW(get_ticker_env()->win), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_NO, GTK_RESPONSE_NO, GTK_STOCK_YES, GTK_RESPONSE_YES, NULL); set_tickr_icon_to_dialog(GTK_WINDOW(dialog)); gtk_window_set_position(GTK_WINDOW(dialog), win_pos); gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE); gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE); /* Why always no ? gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_NO);*/ table = gtk_table_new(1, 3, FALSE); gtk_table_set_col_spacings(GTK_TABLE(table), 10); gtk_container_set_border_width(GTK_CONTAINER(table), 0); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), table); image = gtk_image_new_from_stock(GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); gtk_table_attach_defaults(GTK_TABLE(table), image, 0, 1, 0, 1); label[0] = gtk_label_new(txt); gtk_table_attach_defaults(GTK_TABLE(table), label[0], 1, 2, 0, 1); label[1] = gtk_label_new(""); gtk_table_attach_defaults(GTK_TABLE(table), label[1], 2, 3, 0, 1); gtk_widget_show_all(dialog); response = gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); check_main_win_always_on_top(); return ((response == GTK_RESPONSE_YES) ? YES : NO); } /* This one is buggy as the spinner don't always spin as expected (hmm...) */ void win_with_spinner(win_with_spinner_mode mode, const char *txt) { static GtkWidget *win; GtkWidget *hbox, *label; #ifndef G_OS_WIN32 static GtkWidget *spinner; GtkWidget *space_label; #endif if (mode == WIN_WITH_SPINNER_OPEN) { gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); win = gtk_window_new(GTK_WINDOW_POPUP); set_tickr_icon_to_dialog(GTK_WINDOW(win)); gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER); gtk_window_set_keep_above(GTK_WINDOW(win), TRUE); hbox = gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(GTK_WINDOW(win)), hbox); #ifndef G_OS_WIN32 spinner = gtk_spinner_new(); space_label = gtk_label_new(" "); #endif label = gtk_label_new(txt); #ifndef G_OS_WIN32 gtk_container_add(GTK_CONTAINER(GTK_BOX(hbox)), spinner); gtk_container_add(GTK_CONTAINER(GTK_BOX(hbox)), space_label); #endif gtk_container_add(GTK_CONTAINER(GTK_BOX(hbox)), label); gtk_container_set_border_width(GTK_CONTAINER(GTK_BOX(hbox)), 15); gtk_widget_show_all(win); /* So that win will popup immediately */ while (gtk_events_pending()) gtk_main_iteration(); #ifndef G_OS_WIN32 gtk_spinner_start(GTK_SPINNER(spinner)); #endif } else if (mode == WIN_WITH_SPINNER_CLOSE) { #ifndef G_OS_WIN32 gtk_spinner_stop(GTK_SPINNER(spinner)); #endif gtk_widget_destroy(win); check_main_win_always_on_top(); } else warning(FALSE, 1, "win_with_spinner(): Invalid mode"); } void win_with_progress_bar(win_with_progress_bar_mode mode, const char *txt) { static GtkWidget *win, *hbox, *progress_bar; if (mode == WIN_WITH_PROGRESS_BAR_OPEN) { gtk_window_set_keep_above(GTK_WINDOW(get_ticker_env()->win), FALSE); win = gtk_window_new(GTK_WINDOW_POPUP); set_tickr_icon_to_dialog(GTK_WINDOW(win)); gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER); gtk_window_set_keep_above(GTK_WINDOW(win), TRUE); hbox = gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(GTK_WINDOW(win)), hbox); progress_bar = gtk_progress_bar_new(); gtk_container_add(GTK_CONTAINER(GTK_BOX(hbox)), progress_bar); gtk_container_set_border_width(GTK_CONTAINER(GTK_BOX(hbox)), 15); gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress_bar), txt); gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(progress_bar), 0.2); gtk_widget_show_all(win); /* So that win will popup immediately */ while (gtk_events_pending()) gtk_main_iteration(); } else if (mode == WIN_WITH_PROGRESS_BAR_PULSE) { if (txt != NULL) gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress_bar), txt); gtk_progress_bar_pulse(GTK_PROGRESS_BAR(progress_bar)); while (gtk_events_pending()) gtk_main_iteration(); } else if (mode == WIN_WITH_PROGRESS_BAR_CLOSE) { gtk_widget_destroy(win); check_main_win_always_on_top(); } else warning(FALSE, 1, "win_with_spinner(): Invalid mode"); } tickr_0.6.4.orig/src/tickr/tickr_list.h0000644000175000017500000000533412147427510017475 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #ifndef INC_TICKR_LIST_H #define INC_TICKR_LIST_H #define FLIST_URL_MAXLEN FILE_NAME_MAXLEN #define FLIST_TITLE_MAXLEN FEED_TITLE_MAXLEN #define N_FLIST_MAX (32 * 1024) /* To prevent infinite loops - adjust as necessary */ #define FLIST_SIG "fl_node" /* Make sure FLIST_SIG_LEN = strlen(FLIST_SIG) */ #define FLIST_SIG_LEN 7 #define FLIST_RANK_FORMAT "%3d" /* Make sure format and length match */ #define FLIST_RANK_STR_LEN 3 #define BLANK_STR_16 " " /* Make sure FLIST_RANK_STR_LEN < (BLANK_STR_)16 */ #define SORT_FLIST_BY_RANK\ (get_params()->enable_feed_ordering == 'y') #define IS_FLIST(node)\ (node != NULL && strcmp(node->sig, FLIST_SIG) == 0) #define CHECK_IS_FLIST(node, func)\ if (!IS_FLIST(node)) {\ big_error(FLIST_ERROR, 2, func, ": Invalid node in list");\ } typedef struct FeedListNode { char *url; char *title; gboolean selected; char rank[FLIST_RANK_STR_LEN + 1]; struct FeedListNode *prev; struct FeedListNode *next; char sig[FLIST_SIG_LEN + 1]; } FList; FList *f_list_new(const char *, const char *, gboolean, const char *); void f_list_free(FList *); void f_list_free_all(FList *); FList *f_list_first(FList *); FList *f_list_last(FList *); FList *f_list_prev(FList *); FList *f_list_next(FList *); FList *f_list_nth(FList *, int); int f_list_index(FList *); int f_list_count(FList *); FList *f_list_add_at_start(FList *, const char *, const char *, gboolean, const char *); FList *f_list_add_at_end(FList *, const char *, const char *, gboolean, const char *); FList *f_list_insert_before(FList *, const char *, const char *, gboolean, const char *); FList *f_list_insert_after(FList *, const char *, const char *, gboolean, const char *); FList *f_list_remove(FList *); void f_list_swap(FList *, FList *); FList *f_list_sort(FList *); int f_list_search(FList *, const char *); int f_list_load_from_file(FList **, const char *); int f_list_save_to_file(FList *, const char *); FList *f_list_clone(FList *); #endif /* INC_TICKR_LIST_H */ tickr_0.6.4.orig/src/tickr/tickr_clock.c0000640000175000017500000002071612147427510017605 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" #define CLOCK_DELIMITER "|" /* TODO: make as setting */ #define TIME_STR CLOCK_DELIMITER "%c%c:%c%c:%c%c" /* At right = "|00:00:00"*/ void display_time(const Params *prm) { TickerEnv *env = get_ticker_env(); PangoLayout *p_layout; PangoFontDescription *f_des; int layout_width, layout_height; cairo_surface_t *surf_clock; cairo_t *cr; cairo_pattern_t *cr_p; float shadow_k; char tmp[64]; time_t time2; gint h_diff; if (prm->clock == 'l' || prm->clock == 'r') { if ((p_layout = pango_layout_new(gtk_widget_get_pango_context(env->win))) == NULL) return; pango_layout_set_attributes(p_layout, NULL); pango_layout_set_single_paragraph_mode(p_layout, TRUE); f_des = pango_font_description_from_string((const char *)prm->clock_font_n_s); pango_layout_set_font_description(p_layout, f_des); pango_font_description_free(f_des); time2 = time(NULL); if (prm->clock == 'l') { str_n_cpy(tmp, ctime(&time2) + 11, 8); str_n_cat(tmp, CLOCK_DELIMITER, strlen(CLOCK_DELIMITER)); } else if (prm->clock == 'r') { str_n_cpy(tmp, CLOCK_DELIMITER, strlen(CLOCK_DELIMITER)); str_n_cat(tmp, ctime(&time2) + 11, 8); } pango_layout_set_text(p_layout, tmp, -1); pango_layout_context_changed(p_layout); pango_layout_get_pixel_size2(p_layout, &layout_width, &layout_height); env->drwa_clock_width = get_clock_width(prm); /* v_diff */ /* * For some fonts like 'impact bold' which give strange things * v_diff = drwa_clock_width - layout_width; */ gtk_widget_set_size_request(env->drwa_clock, env->drwa_clock_width, env->drwa_height); h_diff = (env->drwa_height - (gint)layout_height) / 2; /* * Create cairo image surface onto which layout will be rendered */ surf_clock = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, env->drwa_clock_width, env->drwa_height); cr = cairo_create(surf_clock); /* * Render layout */ /* Draw background */ if (get_params()->set_clock_gradient_bg == 'y') { cr_p = cairo_pattern_create_linear(0.0, 0.0, 0.0, (float)env->drwa_height); if (cairo_pattern_status(cr_p) == CAIRO_STATUS_SUCCESS) { if (cairo_pattern_get_type(cr_p) == CAIRO_PATTERN_TYPE_LINEAR) { cairo_pattern_add_color_stop_rgba(cr_p, 0.0, (float)prm->clock_bg_color.red / G_MAXUINT16, (float)prm->clock_bg_color.green / G_MAXUINT16, (float)prm->clock_bg_color.blue / G_MAXUINT16, (float)prm->clock_bg_color_alpha / G_MAXUINT16); cairo_pattern_add_color_stop_rgba(cr_p, 1.0, (float)prm->clock_bg_color2.red / (G_MAXUINT16), (float)prm->clock_bg_color2.green / (G_MAXUINT16), (float)prm->clock_bg_color2.blue / (G_MAXUINT16), (float)prm->clock_bg_color_alpha / G_MAXUINT16); cairo_set_source(cr, cr_p); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_paint(cr); } else fprintf(STD_ERR, "display_time(): " "cairo pattern type != linear (gradient)\n"); } else fprintf(STD_ERR, "display_time(): " "cairo_pattern_create_linear() error\n"); cairo_pattern_destroy(cr_p); } else { cairo_set_source_rgba(cr, (float)prm->clock_bg_color.red / G_MAXUINT16, (float)prm->clock_bg_color.green / G_MAXUINT16, (float)prm->clock_bg_color.blue / G_MAXUINT16, (float)prm->clock_bg_color_alpha / G_MAXUINT16); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_paint(cr); } /* Draw foreground */ if (prm->shadow == 'y') { /* Draw shadow */ if (prm->shadow_fx < 0) shadow_k = 1.0; else if (prm->shadow_fx > 10) shadow_k = 0.0; else shadow_k = 1.0 - (float)prm->shadow_fx / 10.0; if (get_params()->set_gradient_bg == 'y') { cr_p = cairo_pattern_create_linear(0.0, 0.0, 0.0, (float)env->drwa_height); if (cairo_pattern_status(cr_p) == CAIRO_STATUS_SUCCESS) { if (cairo_pattern_get_type(cr_p) == CAIRO_PATTERN_TYPE_LINEAR) { cairo_pattern_add_color_stop_rgba(cr_p, 0.0, (float)prm->clock_bg_color.red * shadow_k / G_MAXUINT16, (float)prm->clock_bg_color.green * shadow_k / G_MAXUINT16, (float)prm->clock_bg_color.blue * shadow_k / G_MAXUINT16, (float)prm->clock_bg_color_alpha / G_MAXUINT16); cairo_pattern_add_color_stop_rgba(cr_p, 1.0, (float)prm->clock_bg_color2.red * shadow_k / (G_MAXUINT16), (float)prm->clock_bg_color2.green * shadow_k / (G_MAXUINT16), (float)prm->clock_bg_color2.blue * shadow_k / (G_MAXUINT16), (float)prm->clock_bg_color_alpha / G_MAXUINT16); cairo_set_source(cr, cr_p); pango_cairo_update_layout(cr, p_layout); cairo_move_to(cr, prm->shadow_offset_x, prm->shadow_offset_y); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); pango_cairo_show_layout(cr, p_layout); } else fprintf(STD_ERR, "display_time(): " "cairo pattern type != linear (gradient)\n"); } else fprintf(STD_ERR, "display_time(): " "cairo_pattern_create_linear() error\n"); cairo_pattern_destroy(cr_p); } else { cairo_set_source_rgba(cr, (float)prm->clock_bg_color.red * shadow_k / G_MAXUINT16, (float)prm->clock_bg_color.green * shadow_k / G_MAXUINT16, (float)prm->clock_bg_color.blue * shadow_k / G_MAXUINT16, (float)prm->clock_bg_color_alpha / G_MAXUINT16); pango_cairo_update_layout(cr, p_layout); cairo_move_to(cr, prm->shadow_offset_x, prm->shadow_offset_y); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); pango_cairo_show_layout(cr, p_layout); } } /* Draw text */ cairo_set_source_rgba(cr, (float)prm->clock_fg_color.red / G_MAXUINT16, (float)prm->clock_fg_color.green / G_MAXUINT16, (float)prm->clock_fg_color.blue / G_MAXUINT16, (float)prm->clock_fg_color_alpha / G_MAXUINT16); pango_cairo_update_layout(cr, p_layout); cairo_move_to(cr, 0, 0); cairo_set_operator(cr, CAIRO_OPERATOR_OVER); pango_cairo_show_layout(cr, p_layout); /* Drawing done */ if (p_layout != NULL) g_object_unref(p_layout); cairo_destroy(cr); /* Draw onto clock area * (we now use cairo instead of deprecated gdk_draw_sth) */ cr = gdk_cairo_create(GDK_DRAWABLE((env->drwa_clock)->window)); cairo_set_source_surface(cr, surf_clock, 0, h_diff); cairo_rectangle(cr, 0, 0, env->drwa_clock_width, env->drwa_height); cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); cairo_fill(cr); cairo_destroy(cr); cairo_surface_destroy(surf_clock); } } /* Actually clock max width */ gint get_clock_width(const Params *prm) { static char clock_font_n_s_bak[FONT_MAXLEN + 1] = ""; static gint width = 0; PangoLayout *p_layout; PangoFontDescription *f_des; int layout_width, layout_height, layout_max_width = 0; char tmp[64]; int i; if (prm->clock == 'l' || prm->clock == 'r') { if (strcmp(prm->clock_font_n_s, clock_font_n_s_bak) != 0 || width == 0) { str_n_cpy(clock_font_n_s_bak, prm->clock_font_n_s, FONT_MAXLEN); p_layout = pango_layout_new(gtk_widget_get_pango_context(get_ticker_env()->win)); pango_layout_set_attributes(p_layout, NULL); pango_layout_set_single_paragraph_mode(p_layout, TRUE); f_des = pango_font_description_from_string((const char *)prm->clock_font_n_s); pango_layout_set_font_description(p_layout, f_des); pango_font_description_free(f_des); for (i = '0'; i <= '9'; i++) { snprintf(tmp, /*time_str_len*/strlen(TIME_STR) + 1, TIME_STR, i, i, i, i, i, i); pango_layout_set_text(p_layout, tmp, -1); pango_layout_context_changed(p_layout); pango_layout_get_pixel_size2(p_layout, &layout_width, &layout_height); if (layout_width > layout_max_width) layout_max_width = layout_width; } if (p_layout != NULL) g_object_unref(p_layout); width = (gint)layout_max_width; } } else /* TODO: check that - something BUGGY here ???? */ width = 0; /* Return 0 although if clock = none, actual widget width = 1 */ return width; } tickr_0.6.4.orig/src/tickr/tickr_socket.c0000640000175000017500000002314712147427510020003 0ustar manutmmanutm/* * TICKR - GTK-based Feed Reader - Copyright (C) Emmanuel Thomas-Maurin 2009-2013 * * * 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 3 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, see . */ #include "tickr.h" #include "tickr_socket.h" /* * Can use IPv4 or IPv6 */ #ifndef G_OS_WIN32 static void *get_in_addr(struct sockaddr *s_a) { if (s_a->sa_family == AF_INET) return &(((struct sockaddr_in *)s_a)->sin_addr); else return &(((struct sockaddr_in6 *)s_a)->sin6_addr); } #endif /* * Open stream socket in non-blocking mode and connect to host. * Return socket fd (> 0) / SOCK_CREATE_ERROR (-1 on Linux) if error. */ sockt connect_to_host(const char *host, const char *portnum_str) { sockt sock; #ifndef G_OS_WIN32 char ipa_str[INET6_ADDRSTRLEN]; #else u_long i_mode = 1; /* != 0 to enable non-blocking mode */ #endif struct addrinfo hints, *server_info, *ptr; fd_set read_set, write_set; struct timeval timeout; int s_opt_value; socklen_t s_opt_len = sizeof(sockt); int i; /* addrinfo stuff */ memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; /*#ifdef VERBOSE_OUTPUT FPRINTF_FFLUSH_3(STD_OUT, "Resolving %s ... ", host); FPRINTF_FFLUSH_3(STD_OUT, "Resolving %s ...\n", host); #endif*/ if ((i = getaddrinfo(host, portnum_str, &hints, &server_info)) != 0) { if (USE_PROXY_FLAG) { #ifndef G_OS_WIN32 WARNING(FALSE, 4, "getaddrinfo() error: ", host, ": ", gai_strerror(i)); #else WARNING(FALSE, 4, "getaddrinfo() error: ", host, ": ", sock_error_message()); #endif } else { #ifndef G_OS_WIN32 FPRINTF_FFLUSH_4(STD_ERR, "getaddrinfo() error: %s: %s\n", host, gai_strerror(i)); #else FPRINTF_FFLUSH_4(STD_ERR, "getaddrinfo() error: %s: %s\n", host, sock_error_message()); #endif } return -1; } /*#ifdef VERBOSE_OUTPUT FPRINTF_FFLUSH_2(STD_OUT, "Done\n"); #endif*/ /* We get a list */ for (ptr = server_info; ptr != NULL; ptr = ptr->ai_next) { /* Create socket */ if ((sock = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol)) == SOCK_CREATE_ERROR) { FPRINTF_FFLUSH_3(STD_ERR, "Error: %s\n", sock_error_message()); continue; } /* Set socket in non-blocking mode */ #ifndef G_OS_WIN32 if ((i = fcntl(sock, F_GETFL, 0)) == SOCK_FUNC_ERROR) { FPRINTF_FFLUSH_3(STD_ERR, "fcntl() error: %s\n", sock_error_message()); CLOSE_SOCK(sock); break; } else if (fcntl(sock, F_SETFL, i | O_NONBLOCK) == SOCK_FUNC_ERROR) { FPRINTF_FFLUSH_3(STD_ERR, "fcntl() error: %s\n", sock_error_message()); CLOSE_SOCK(sock); break; } #else if (ioctlsocket(sock, FIONBIO, &i_mode) == SOCK_FUNC_ERROR) { FPRINTF_FFLUSH_3(STD_ERR, "ioctlsocket() error %s\n", sock_error_message()); CLOSE_SOCK(sock); break; } #endif /* Get IP addr from server_info */ #ifdef VERBOSE_OUTPUT #ifndef G_OS_WIN32 inet_ntop(ptr->ai_family, get_in_addr((struct sockaddr *)ptr->ai_addr), ipa_str, sizeof(ipa_str)); /*FPRINTF_FFLUSH_4(STD_OUT, "Connecting to %s (%s) ...\n", ipa_str, host);*/ FPRINTF_FFLUSH_4(STD_OUT, "Connecting to %s (%s) ... ", ipa_str, host); #else /* Available only on Vista and above but we don't really need that (do we?) so disabled. InetNtop(ptr->ai_family, get_in_addr((struct sockaddr *)ptr->ai_addr), s, sizeof(s));*/ /*FPRINTF_FFLUSH_3(STD_OUT, "Connecting to %s ...\n", host);*/ FPRINTF_FFLUSH_3(STD_OUT, "Connecting to %s ... ", host); #endif #endif /* Connect */ if ((i = connect(sock, ptr->ai_addr, ptr->ai_addrlen)) == SOCK_FUNC_ERROR && #ifndef G_OS_WIN32 errno == EINPROGRESS) { #else WSAGetLastError() == WSAEWOULDBLOCK) { #endif /* As socket is in non-blocking mode, we must use select() */ FD_ZERO(&read_set); FD_ZERO(&write_set); FD_SET(sock, &read_set); FD_SET(sock, &write_set); timeout.tv_sec = CONNECT_TIMEOUT; timeout.tv_usec = 0; if ((i = select(sock + 1, &read_set, &write_set, NULL, &timeout)) == SOCK_FUNC_ERROR) { FPRINTF_FFLUSH_3(STD_ERR, "select() error: %s\n", sock_error_message()); } else if (i == 0){ FPRINTF_FFLUSH_2(STD_ERR, "Timed out\n"); } else if (FD_ISSET(sock, &read_set) || FD_ISSET(sock, &write_set)) { if (getsockopt(sock, SOL_SOCKET, SO_ERROR, (void *)(&s_opt_value), &s_opt_len) == SOCK_FUNC_ERROR) { FPRINTF_FFLUSH_3(STD_ERR, "getsockopt() error: %s\n", sock_error_message()); } else if (s_opt_value == 0) { #ifdef VERBOSE_OUTPUT FPRINTF_FFLUSH_2(STD_OUT, "OK\n"); #endif freeaddrinfo(server_info); return sock; } #ifndef G_OS_WIN32 FPRINTF_FFLUSH_3(STD_ERR, "getsockopt(): %s\n", strerror(s_opt_value)); #else FPRINTF_FFLUSH_3(STD_ERR, "getsockopt(): %s\n", win32_error_msg(s_opt_value)); #endif CLOSE_SOCK(sock); break; } CLOSE_SOCK(sock); break; } else if (i == 0) { #ifdef VERBOSE_OUTPUT FPRINTF_FFLUSH_2(STD_OUT, "OK\n"); #endif freeaddrinfo(server_info); return sock; } else { FPRINTF_FFLUSH_3(STD_ERR, "connect() error: %s\n", sock_error_message()); CLOSE_SOCK(sock); } } freeaddrinfo(server_info); return -1; } int writable_data_is_available_on_socket(sockt sock) { fd_set write_set; struct timeval timeout; int i; FD_ZERO(&write_set); FD_SET(sock, &write_set); timeout.tv_sec = SEND_RECV_TIMEOUT_SEC; timeout.tv_usec = SEND_RECV_TIMEOUT_USEC; if ((i = select(sock + 1, NULL, &write_set, NULL, &timeout)) == SOCK_FUNC_ERROR) { FPRINTF_FFLUSH_3(STD_ERR, "select() error: %s\n", sock_error_message()); return SELECT_ERROR; } else if (i == 0) { return SELECT_TIMED_OUT; } else { if (FD_ISSET(sock, &write_set)) return SELECT_TRUE; else return SELECT_FALSE; } } int readable_data_is_available_on_socket(sockt sock) { fd_set read_set; struct timeval timeout; int i; FD_ZERO(&read_set); FD_SET(sock, &read_set); timeout.tv_sec = SEND_RECV_TIMEOUT_SEC; timeout.tv_usec = SEND_RECV_TIMEOUT_USEC; if ((i = select(sock + 1, &read_set, NULL, NULL, &timeout)) == SOCK_FUNC_ERROR) { FPRINTF_FFLUSH_3(STD_ERR, "select() error: %s\n", sock_error_message()); return SELECT_ERROR; } else if (i == 0) { return SELECT_TIMED_OUT; } else { if (FD_ISSET(sock, &read_set)) return SELECT_TRUE; else return SELECT_FALSE; } } /* * Return n bytes sent or SOCK_FUNC_ERROR (-1 on Linux) if error (connection * closed by server or ?) */ int send_full(sockt sock, const char *str) { int len = strlen(str), i, j = 0; while (writable_data_is_available_on_socket(sock) == SELECT_TRUE) { if ((i = send(sock, str + j, len, 0)) != SOCK_FUNC_ERROR) { if (i > 0) { j += i; len -= i; if (len == 0) break; } else { /* Something to do ? */ } } else { j = SOCK_FUNC_ERROR; #ifndef G_OS_WIN32 if (errno == EPIPE) { #else if ((i = WSAGetLastError()) == WSAECONNRESET || i == WSAECONNABORTED ||\ i == WSAESHUTDOWN) { #endif #ifdef VERBOSE_OUTPUT FPRINTF_FFLUSH_2(STD_ERR, "Connection closed by server\n"); #endif } else { FPRINTF_FFLUSH_3(STD_ERR, "send() error: %s\n", sock_error_message()); } break; } } return j; } /* * Return response = recv_full(socket, &bytes_received, &status) or NULL if error. * -> status = SOCK_OK, CONNECTION_CLOSED_BY_SERVER, RECV_ERROR or SOCK_SHOULD_BE_CLOSED. * -> allocate memory for response (must be freed afterwards with free2() if != NULL). */ char *recv_full(sockt sock, int *bytes_received, int *status) { char *response, *full_response; int i; *bytes_received = 0; *status = RECV_ERROR; response = malloc2(RECV_CHUNK_LEN + 1); response[0] = '\0'; full_response = l_str_new(response); while (readable_data_is_available_on_socket(sock) == SELECT_TRUE) { if ((i = recv(sock, response, RECV_CHUNK_LEN, 0)) != SOCK_FUNC_ERROR) { if (i > 0) { response[MIN(i, RECV_CHUNK_LEN)] = '\0'; full_response = l_str_cat(full_response, response); *bytes_received += i; *status = SOCK_OK; } else if (i == 0) { *status = CONNECTION_CLOSED_BY_SERVER; #ifdef VERBOSE_OUTPUT FPRINTF_FFLUSH_2(STD_ERR, "Connection closed by server\n"); #endif break; } } else { #ifndef G_OS_WIN32 *status = RECV_ERROR; l_str_free(full_response); full_response = NULL; #ifdef VERBOSE_OUTPUT FPRINTF_FFLUSH_3(STD_ERR, "recv() error: %s\n", sock_error_message()); #endif #else if ((i = WSAGetLastError()) == WSAECONNRESET || i == WSAECONNABORTED ||\ i == WSAESHUTDOWN) { *status = SOCK_SHOULD_BE_CLOSED; #ifdef VERBOSE_OUTPUT FPRINTF_FFLUSH_2(STD_ERR, "Connection closed by server\n"); #endif } else { *status = RECV_ERROR; l_str_free(full_response); full_response = NULL; #ifdef VERBOSE_OUTPUT FPRINTF_FFLUSH_3(STD_ERR, "recv() error: %s\n", win32_error_msg(i)); #endif } #endif break; } } free2(response); return full_response; } #ifdef G_OS_WIN32 const char *win32_error_msg(int i) { static char str[1024]; gchar *win32_str; win32_str = g_win32_error_message(i); str_n_cpy(str, (const char *)win32_str, 1023); g_free(win32_str); return (const char *)str; } #endif const char *sock_error_message() { static char str[1024]; #ifndef G_OS_WIN32 str_n_cpy(str, strerror(errno), 1023); #else str_n_cpy(str, win32_error_msg(WSAGetLastError()), 1023); #endif return (const char *)str; } tickr_0.6.4.orig/src/libetm-0.4.4/0000755000175000017500000000000012147427510015751 5ustar manutmmanutmtickr_0.6.4.orig/src/libetm-0.4.4/Makefile-libetm-win320000735000175000017500000000105212147427510021622 0ustar manutmmanutm# Makefile for libetm-0.4.4 - win32 version src = str_mem.c error.c misc.c win32_specific.c obj = $(src:.c=.o) headers = libetm.h $(src:.c=.h) CC = gcc CFLAGS = -O2 -Wall -Wextra -Wunused-parameter -Wshadow -Wpointer-arith\ -ffast-math -pedantic -DWIN32_V all: libetm.a $(obj): $(src) $(headers) Makefile $(CC) $(CFLAGS) -c $(src) libetm.a: $(obj) ar -r libetm.a $(obj) .PHONY: install install: mkdir -p /usr/local/include/libetm cp $(headers) /usr/local/include/libetm/ cp libetm.a /usr/local/lib/ .PHONY: clean clean: rm $(obj) libetm.a tickr_0.6.4.orig/src/libetm-0.4.4/win32_specific.c0000624000175000017500000001254312147427510020727 0ustar manutmmanutm/* * libetm-0.4 / win32_specific.c - Copyright (C) Emmanuel Thomas-Maurin 2008-2012 * * * - Win32 specific functions - * * 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 3 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, see . */ #ifdef WIN32_V #include #include #include #include #include #include #include #include "libetm.h" #define APP_WIN32REG_KEYPATH "app_win32_registry_keypath" /* Or whatever */ /* Return NULL if error */ const char *get_appdata_dir() { static TCHAR appdata_dir[MAX_PATH + 1]; static int i = 0; if (i == 0) { i++; if (SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, appdata_dir) != S_OK) i++; } if (i == 1) return (const char *)appdata_dir; else return NULL; } /* Return NULL if error */ const char *get_appdata_dir_w() { static WCHAR appdata_dir[MAX_PATH + 1]; static int i = 0; if (i == 0) { i++; if (SHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, 0, appdata_dir) != S_OK) i++; } if (i == 1) return (const char *)appdata_dir; else return NULL; } /* Return NULL if error */ const char *get_progfiles_dir() { static TCHAR progfiles_dir[MAX_PATH + 1]; static int i = 0; if (i == 0) { i++; if (SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, 0, progfiles_dir) != S_OK) i++; } if (i == 1) return (const char *)progfiles_dir; else return NULL; } /* key_value must be able to store 255 chars */ int get_key_value_from_win32registry(const char *key_name, char *key_value) { char app_win32regkey_full[128]; HKEY hkey; DWORD type = REG_SZ, buf_size = 256; LONG result; str_n_cpy(app_win32regkey_full, APP_WIN32REG_KEYPATH, 64); str_n_cat(app_win32regkey_full, key_name, 63); if ((result = RegOpenKeyEx(HKEY_CURRENT_USER, app_win32regkey_full, 0L, KEY_QUERY_VALUE, &hkey)) == ERROR_SUCCESS) { if (RegQueryValueEx(hkey, NULL, NULL, &type, (unsigned char*)key_value, &buf_size) == ERROR_SUCCESS) { RegCloseKey(hkey); return LIBETM_OK; } else { RegCloseKey(hkey); return WIN32REGKEY_NOT_FOUND; } } else { if (result == ERROR_FILE_NOT_FOUND) return WIN32REGKEY_NOT_FOUND; else return WIN32REGKEY_OTHER_ERROR; } } int save_key_value_into_win32registry(const char *key_name, const char *key_value) { char app_win32regkey_full[128]; HKEY hkey; DWORD disp = 0; str_n_cpy(app_win32regkey_full, APP_WIN32REG_KEYPATH, 64); str_n_cat(app_win32regkey_full, key_name, 63); if (RegCreateKeyEx(HKEY_CURRENT_USER, app_win32regkey_full, 0L, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, &hkey, &disp) == ERROR_SUCCESS) { if (RegSetValueEx(hkey, NULL, 0L, REG_SZ, (unsigned char *)TEXT(key_value), 256) == ERROR_SUCCESS) { RegCloseKey(hkey); return LIBETM_OK; } else { RegCloseKey(hkey); return WIN32REGKEY_SAVE_ERROR; } } else return WIN32REGKEY_CREATE_ERROR; } /* Return NULL if error */ const char *get_default_browser_from_win32registry() { static char browser_cmd[512]; HKEY hkey; DWORD type = REG_SZ, buf_size = 512; LONG result; if ((result = RegOpenKeyEx(HKEY_CLASSES_ROOT, "http\\shell\\open\\command", 0L, KEY_QUERY_VALUE, &hkey)) == ERROR_SUCCESS) { if (RegQueryValueEx(hkey, NULL, NULL, &type, (unsigned char*)browser_cmd, &buf_size) == ERROR_SUCCESS) { RegCloseKey(hkey); return (const char *)browser_cmd; } else { RegCloseKey(hkey); return NULL; } } else return NULL; } /* Return -1 if error */ int get_win32_taskbar_height() { HWND hwnd; RECT r; LPRECT lpRect = &r; if ((hwnd = FindWindow("Shell_traywnd", "")) != NULL) { if (GetWindowRect(hwnd, lpRect)) return (int) (lpRect->bottom - lpRect->top); } return -1; } /* Find up to 15 mac addresses for this computer * Return NULL if error */ /*const char **find_mac_addresses() { IP_ADAPTER_INFO *adapter_info; ULONG buf_len = sizeof(adapter_info); PIP_ADAPTER_INFO p_adapter_info; static char macaddr[16][256], tmp[3]; static char *p_macaddr[16]; unsigned int i, j = 0; adapter_info = (IP_ADAPTER_INFO *)malloc2(sizeof(IP_ADAPTER_INFO)); buf_len = sizeof(IP_ADAPTER_INFO); // initial call is supposed to fail if (GetAdaptersInfo(adapter_info, &buf_len) != ERROR_SUCCESS) { free2(adapter_info); adapter_info = (IP_ADAPTER_INFO *)malloc2(buf_len); } // 2nd call if (GetAdaptersInfo(adapter_info, &buf_len) != ERROR_SUCCESS) { free2(adapter_info); return NULL; } else { p_adapter_info = (PIP_ADAPTER_INFO)adapter_info; while (p_adapter_info && j < 15) { macaddr[j][0] = '\0'; for (i = 0; i < 127 && i < p_adapter_info->AddressLength; i++) { snprintf(tmp, 3, "%02X", p_adapter_info->Address[i]); str_n_cat(macaddr[j], tmp, 2); } p_macaddr[j] = macaddr[j]; j++; p_adapter_info = p_adapter_info->Next; } free2(adapter_info); p_macaddr[j] = NULL; } return (const char **)p_macaddr; }*/ #endif tickr_0.6.4.orig/src/libetm-0.4.4/str_mem.h0000624000175000017500000000661112147427510017572 0ustar manutmmanutm/* * libetm-0.4 / str_mem.h - Copyright (C) Emmanuel Thomas-Maurin 2008-2012 * * * - A few strings and memory management functions - * * 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 3 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, see . */ #ifndef INC_LIBETM_STR_MEM_H #define INC_LIBETM_STR_MEM_H /* * Copy n bytes max from src to dest then add '\0' at end of dest. */ char *str_n_cpy(char *, const char *, size_t); /* * Concanate n bytes max of src to dest then add '\0' at end of dest. * Strings may not be identical and should not overlap. */ char *str_n_cat(char *, const char *, size_t); /* * Create new_l_str (allocate memory) and copy str (can be NULL) to new_l_str. */ char *l_str_new(const char *str); /* * Append l_str_src (can be NULL) to l_str_dest (re-allocate memory as necessary). * l_str_dest must have been created by l_str_new - strings may overlap. */ char *l_str_cat(char *, const char *); /* * Free string created by l_str_new() or l_str_cat(). */ void l_str_free(char *); /* * Wrappers for malloc(), realloc(), calloc() and free() which check returned value. */ void *malloc2(size_t); void *realloc2(void *, size_t); void *calloc2(size_t, size_t); void free2(void *); /* * Return size in readable format (KiB, MiB, GiB, TiB). * *** Allow up to 16 simultaneous calls *** * Convention: we assume 2.5 MiB = 2 MiB + [0.5 x 1024 = 512] KiB, not 500 KiB. * Otherwise, there is no way to express a value in the range 1000 - 1023, * so x.y MiB = x MiB + 0.y MiB, that is: not y x 100 KiB but y x 102.4 KiB * (isn't this a bit confusing?) */ const char *readable_size(double); /* * itoa() is not ansi c so this one could be useful. * *** Allow up to 16 simultaneous calls *** */ const char *itoa2(long int); /* * Modify string in place. */ char *remove_char_from_str(char *, char); /* * Modify string in place. */ char *remove_trailing_whitespaces_from_str(char *); /* * Check that str contains only digits (at least one) and whitespaces * (may start and/or end with whitespaces), meaning numerical value is * integer >= 0. */ int str_is_num(const char *); /* * Check that str contains only whitespaces or is empty. */ int str_is_blank(const char *); /* * Generate a random string up to 1023 chars long. * mode = a -> alpha / d -> digits / b -> both */ const char *rnd_str(char, int); #ifdef LIBETM_EXPERIMENTAL_STUFF /* * Very basic xor sym encryption for small strings (up to 511 chars). * *** Key must be ascii / if 2 chars match (in str and key) the string is cut off *** * *** Allow up to 16 simultaneous calls *** * Works with ascii strings, probably not otherwise so don't try with * exotic things... */ const char *str_crypt(const char *, const char *); /* * Very basic crypto hash. */ unsigned long str_crypto_hash(const char *, const char*); #endif #endif /* INC_LIBETM_STR_MEM_H */ tickr_0.6.4.orig/src/libetm-0.4.4/libetm.h0000624000175000017500000000341012147427510017372 0ustar manutmmanutm/* * libetm-0.4 / libetm.h - Copyright (C) Emmanuel Thomas-Maurin 2008-2012 * * * 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 3 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, see . */ #ifndef INC_LIBETM_H #define INC_LIBETM_H #define LIBETM_NAME "Libetm" #define LIBETM_VERSION_NUM "0.4.4" #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #ifndef _ISOC99_SOURCE #define _ISOC99_SOURCE #endif /*#define LIBETM_EXPERIMENTAL_STUFF*/ #ifndef FALSE # ifndef TRUE # define FALSE (0) # define TRUE (!FALSE) # endif #endif /* Would it be better like that? #undef FALSE #undef TRUE typedef enum { FALSE = (0), TRUE = (!FALSE) } boolean;*/ #define YES (1) #define NO (0) #ifndef MAX # define MAX(x,y) ((x) > (y) ? (x) : (y)) #endif #ifndef MIN # define MIN(x,y) ((x) < (y) ? (x) : (y)) #endif #ifndef ABS # define ABS(x) ((x) > 0 ? (x) : -(x)) #endif /* Do more testing for the 2 following ones */ #ifndef SIGN # define SIGN(x) ((x) != 0 ? ((x) > 0 ? 1 : -1) : 0) #endif /* Only if f > 0 */ #ifndef APPROX # define APPROX(f) (ABS(((f) - (int)(f)) > 0.5) ? (int)(f) + SIGN((f)) : (int)(f)) #endif #include "str_mem.h" #include "misc.h" #include "error.h" #include "win32_specific.h" #endif /* INC_LIBETM_H */ tickr_0.6.4.orig/src/libetm-0.4.4/error.h0000624000175000017500000000304312147427510017251 0ustar manutmmanutm/* * libetm-0.4 / error.h - Copyright (C) Emmanuel Thomas-Maurin 2008-2012 * . */ #ifndef INC_LIBETM_ERROR_H #define INC_LIBETM_ERROR_H typedef enum { LIBETM_OK, OUT_OF_MEMORY, ZERO_RQ_SIZE, /*NEG_RQ_SIZE,*/ NULL_DEST, SRC_EQ_DEST, STR_OVERLAP, NULL_POINTER_FREE, RNDSTR_UNKNOWN_MODE, #ifdef WIN32_V WIN32REGKEY_NOT_FOUND, WIN32REGKEY_CREATE_ERROR, WIN32REGKEY_SAVE_ERROR, WIN32REGKEY_OTHER_ERROR, #endif LIBETM_LASTERRORCODE } lib_error_code; /* * App defined critical error handler prototype. * Error code from app should enum above LIB_LASTERRORCODE. */ int big_error(int, int, ...); /* * This will call big_error() function defined in app. */ int big_error_in_lib(lib_error_code, const char *); /* * If error code > LIBETM_LASTERRORCODE, returns "". */ const char *get_lib_error_str(lib_error_code); #endif /* INC_LIBETM_ERROR_H */ tickr_0.6.4.orig/src/libetm-0.4.4/error_handler_example.c0000624000175000017500000000160712147427510022460 0ustar manutmmanutm/* * This func's prototype is in libetm / error.h. * This func is not defined in libetm but in app and it handles errors * from libetm and app. * * Max number of strings = N_STR_MAX, max string length = STR_MAXLEN. * Outstanding stuff (strings and chars) will be ignored. */ int big_error(int big_error_code, int n_str, ...) { #define N_STR_MAX 8 #define STR_MAXLEN 128 char error_str[32 + 32 + (N_STR_MAX * STR_MAXLEN) + 32 + 1]; va_list str; int i; error_str[0] = '\0'; str_n_cpy(error_str, "CRITICAL ERROR: ", 32); if (big_error_code > LIBETM_LASTERRORCODE) str_n_cat(error_str, APP_NAME ": ", 32); n_str = MIN(n_str, N_STR_MAX); va_start(str, n_str); for (i = 0; i < n_str ; i++) str_n_cat(error_str, va_arg(str, char *), STR_MAXLEN); va_end(str); str_n_cat(error_str, " - Will quit now", 32); fprintf(STD_ERR, "%s\n", error_str); fflush(NULL); exit(big_error_code); } tickr_0.6.4.orig/src/libetm-0.4.4/Makefile.am0000735000175000017500000000031512147427510020005 0ustar manutmmanutmlibs_LIBRARIES = libetm.a libetm_a_SOURCES = str_mem.c error.c misc.c #win32_specific.c libetm_a_CFLAGS = -O2 -Wall -Wextra -Wunused-parameter -Wshadow\ -Wpointer-arith -ffast-math -pedantic libsdir = .. tickr_0.6.4.orig/src/libetm-0.4.4/misc.h0000624000175000017500000000214612147427510017056 0ustar manutmmanutm/* * libetm-0.4 / misc.h - Copyright (C) Emmanuel Thomas-Maurin 2008-2012 * * * - Misc functions - * * 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 3 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, see . */ #ifndef INC_LIBETM_MISC_H #define INC_LIBETM_MISC_H /* get_libetm_version( O ) = version num * 1 = copyright * 2 = license 1/3 * 3 = license 2/3 * 4 = license 3/3 * 5 = compiled date * > 5 = NULL */ const char *get_libetm_version(unsigned int); int question(const char *); #endif /* INC_LIBETM_MISC_H */ tickr_0.6.4.orig/src/libetm-0.4.4/Makefile.in0000664000175000017500000005011412147427510020021 0ustar manutmmanutm# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = src/libetm-0.4.4 DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ COPYING TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libsdir)" LIBRARIES = $(libs_LIBRARIES) AR = ar ARFLAGS = cru libetm_a_AR = $(AR) $(ARFLAGS) libetm_a_LIBADD = am_libetm_a_OBJECTS = libetm_a-str_mem.$(OBJEXT) \ libetm_a-error.$(OBJEXT) libetm_a-misc.$(OBJEXT) libetm_a_OBJECTS = $(am_libetm_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libetm_a_SOURCES) DIST_SOURCES = $(libetm_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XML2_CFLAGS = @XML2_CFLAGS@ XML2_LIBS = @XML2_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ libs_LIBRARIES = libetm.a libetm_a_SOURCES = str_mem.c error.c misc.c #win32_specific.c libetm_a_CFLAGS = -O2 -Wall -Wextra -Wunused-parameter -Wshadow\ -Wpointer-arith -ffast-math -pedantic libsdir = .. all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libetm-0.4.4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libetm-0.4.4/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libsLIBRARIES: $(libs_LIBRARIES) @$(NORMAL_INSTALL) test -z "$(libsdir)" || $(MKDIR_P) "$(DESTDIR)$(libsdir)" @list='$(libs_LIBRARIES)'; test -n "$(libsdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libsdir)'"; \ $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libsdir)" || exit $$?; } @$(POST_INSTALL) @list='$(libs_LIBRARIES)'; test -n "$(libsdir)" || list=; \ for p in $$list; do \ if test -f $$p; then \ $(am__strip_dir) \ echo " ( cd '$(DESTDIR)$(libsdir)' && $(RANLIB) $$f )"; \ ( cd "$(DESTDIR)$(libsdir)" && $(RANLIB) $$f ) || exit $$?; \ else :; fi; \ done uninstall-libsLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(libs_LIBRARIES)'; test -n "$(libsdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libsdir)'; $(am__uninstall_files_from_dir) clean-libsLIBRARIES: -test -z "$(libs_LIBRARIES)" || rm -f $(libs_LIBRARIES) libetm.a: $(libetm_a_OBJECTS) $(libetm_a_DEPENDENCIES) $(EXTRA_libetm_a_DEPENDENCIES) -rm -f libetm.a $(libetm_a_AR) libetm.a $(libetm_a_OBJECTS) $(libetm_a_LIBADD) $(RANLIB) libetm.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libetm_a-error.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libetm_a-misc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libetm_a-str_mem.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` libetm_a-str_mem.o: str_mem.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libetm_a_CFLAGS) $(CFLAGS) -MT libetm_a-str_mem.o -MD -MP -MF $(DEPDIR)/libetm_a-str_mem.Tpo -c -o libetm_a-str_mem.o `test -f 'str_mem.c' || echo '$(srcdir)/'`str_mem.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libetm_a-str_mem.Tpo $(DEPDIR)/libetm_a-str_mem.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='str_mem.c' object='libetm_a-str_mem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libetm_a_CFLAGS) $(CFLAGS) -c -o libetm_a-str_mem.o `test -f 'str_mem.c' || echo '$(srcdir)/'`str_mem.c libetm_a-str_mem.obj: str_mem.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libetm_a_CFLAGS) $(CFLAGS) -MT libetm_a-str_mem.obj -MD -MP -MF $(DEPDIR)/libetm_a-str_mem.Tpo -c -o libetm_a-str_mem.obj `if test -f 'str_mem.c'; then $(CYGPATH_W) 'str_mem.c'; else $(CYGPATH_W) '$(srcdir)/str_mem.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libetm_a-str_mem.Tpo $(DEPDIR)/libetm_a-str_mem.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='str_mem.c' object='libetm_a-str_mem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libetm_a_CFLAGS) $(CFLAGS) -c -o libetm_a-str_mem.obj `if test -f 'str_mem.c'; then $(CYGPATH_W) 'str_mem.c'; else $(CYGPATH_W) '$(srcdir)/str_mem.c'; fi` libetm_a-error.o: error.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libetm_a_CFLAGS) $(CFLAGS) -MT libetm_a-error.o -MD -MP -MF $(DEPDIR)/libetm_a-error.Tpo -c -o libetm_a-error.o `test -f 'error.c' || echo '$(srcdir)/'`error.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libetm_a-error.Tpo $(DEPDIR)/libetm_a-error.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='error.c' object='libetm_a-error.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libetm_a_CFLAGS) $(CFLAGS) -c -o libetm_a-error.o `test -f 'error.c' || echo '$(srcdir)/'`error.c libetm_a-error.obj: error.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libetm_a_CFLAGS) $(CFLAGS) -MT libetm_a-error.obj -MD -MP -MF $(DEPDIR)/libetm_a-error.Tpo -c -o libetm_a-error.obj `if test -f 'error.c'; then $(CYGPATH_W) 'error.c'; else $(CYGPATH_W) '$(srcdir)/error.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libetm_a-error.Tpo $(DEPDIR)/libetm_a-error.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='error.c' object='libetm_a-error.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libetm_a_CFLAGS) $(CFLAGS) -c -o libetm_a-error.obj `if test -f 'error.c'; then $(CYGPATH_W) 'error.c'; else $(CYGPATH_W) '$(srcdir)/error.c'; fi` libetm_a-misc.o: misc.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libetm_a_CFLAGS) $(CFLAGS) -MT libetm_a-misc.o -MD -MP -MF $(DEPDIR)/libetm_a-misc.Tpo -c -o libetm_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libetm_a-misc.Tpo $(DEPDIR)/libetm_a-misc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='misc.c' object='libetm_a-misc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libetm_a_CFLAGS) $(CFLAGS) -c -o libetm_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c libetm_a-misc.obj: misc.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libetm_a_CFLAGS) $(CFLAGS) -MT libetm_a-misc.obj -MD -MP -MF $(DEPDIR)/libetm_a-misc.Tpo -c -o libetm_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libetm_a-misc.Tpo $(DEPDIR)/libetm_a-misc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='misc.c' object='libetm_a-misc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libetm_a_CFLAGS) $(CFLAGS) -c -o libetm_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: for dir in "$(DESTDIR)$(libsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libsLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-libsLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libsLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libsLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libsLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-libsLIBRARIES # 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: tickr_0.6.4.orig/src/libetm-0.4.4/Makefile-libetm-linux0000735000175000017500000000120312147427510022015 0ustar manutmmanutm# Makefile for libetm-0.4.4 - Linux version src = str_mem.c error.c misc.c win32_specific.c obj = $(src:.c=.o) headers = libetm.h $(src:.c=.h) CC = gcc CFLAGS = -O2 -Wall -Wextra -Wunused-parameter -Wshadow -Wpointer-arith\ -ffast-math -pedantic all: libetm.a $(obj): $(src) $(headers) Makefile $(CC) $(CFLAGS) -c $(src) libetm.a: $(obj) ar -r libetm.a $(obj) .PHONY: install install: mkdir -p /usr/local/include/libetm cp $(headers) /usr/local/include/libetm/ cp libetm.a /usr/local/lib/ .PHONY: uninstall uninstall: rm /usr/local/include/libetm/$(headers) rm /usr/local/lib/libetm.a .PHONY: clean clean: rm $(obj) libetm.a tickr_0.6.4.orig/src/libetm-0.4.4/win32_specific.h0000624000175000017500000000304212147427510020726 0ustar manutmmanutm/* * libetm-0.4 / win32_specific.h - Copyright (C) Emmanuel Thomas-Maurin 2008-2012 * * * - Win32 specific functions - * * 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 3 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, see . */ #ifndef INC_LIBETM_WIN32_SPECIFIC_H #define INC_LIBETM_WIN32_SPECIFIC_H #ifdef G_OS_WIN32 # ifndef WIN32_V # define WIN32_V # endif #endif #ifdef WIN32_V /* Return NULL if error */ const char *get_appdata_dir(); const char *get_appdata_dir_w(); const char *get_progfiles_dir(); /* key_value must be able to store 255 chars */ int get_key_value_from_win32registry(const char *, char *); int save_key_value_into_win32registry(const char *, const char *); /* Return NULL if error */ const char *get_default_browser_from_win32registry(); /* Return -1 if error */ int get_win32_taskbar_height(); /* Find up to 15 mac addresses for this computer * Return NULL if error */ /*const char **find_mac_addresses();*/ #endif #endif /* INC_LIBETM_WIN32_SPECIFIC_H */ tickr_0.6.4.orig/src/libetm-0.4.4/str_mem.c0000624000175000017500000002305512147427510017566 0ustar manutmmanutm/* * libetm-0.4 / str_mem.c - Copyright (C) Emmanuel Thomas-Maurin 2008-2012 * * * - A few strings and memory management functions - * * 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 3 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, see . */ #include #include #include #include #include #include "libetm.h" /* * Copy n bytes max from src to dest then add '\0' at end of dest. */ char *str_n_cpy(char *dest, const char *src, size_t length) { char *dest_bak = dest; if (dest == NULL) big_error_in_lib(NULL_DEST, "str_n_cpy()"); while (length-- > 0 && *src != '\0') *dest++ = *src++; *dest = '\0'; return dest_bak; } /* * Concanate n bytes max of src to dest then add '\0' at end of dest. * Strings may not be identical and should not overlap. */ char *str_n_cat(char *dest, const char *src, size_t length) { char *dest_bak = dest; if (dest == NULL) big_error_in_lib(NULL_DEST, "str_n_cat()"); else if (src == dest) big_error_in_lib(SRC_EQ_DEST, "str_n_cat()"); while (*dest++ != '\0'); str_n_cpy(dest - 1, src, length); return dest_bak; } /* * Create new_l_str (allocate memory) and copy str (can be NULL) to new_l_str. */ char *l_str_new(const char *str) { char *new_l_str; size_t str_len; if (str == NULL) str_len = 0; else str_len = strlen(str); new_l_str = malloc2(sizeof(char) * (str_len + 1)); return str_n_cpy(new_l_str, str, str_len); } /* * Append l_str_src (can be NULL) to l_str_dest (re-allocate memory as necessary). * l_str_dest must have been created by l_str_new - strings may overlap. */ char *l_str_cat(char *l_str_dest, const char *l_str_src) { char *new_l_str, *l_str_src2; size_t src_len, dest_len; if (l_str_dest == NULL) big_error_in_lib(NULL_DEST, "l_str_cat()"); else if (l_str_src == NULL) return l_str_dest; l_str_src2 = l_str_new(l_str_src); src_len = strlen(l_str_src); if (src_len == 0) return l_str_dest; dest_len = strlen(l_str_dest); new_l_str = realloc2(l_str_dest, sizeof(char) * (dest_len + src_len + 1)); new_l_str = str_n_cat(new_l_str, l_str_src2, src_len); l_str_free(l_str_src2); return new_l_str; } /* * Free string created by l_str_new() or l_str_cat(). */ void l_str_free(char *l_str) { if (l_str != NULL) free(l_str); else big_error_in_lib(NULL_POINTER_FREE, "l_str_free()"); /* CODE WITH NO EFFECT l_str = NULL;*/ } /* * Wrappers for malloc(), realloc(), calloc() and free() which check returned value. */ void *malloc2(size_t size) { void *free_block = NULL; if (size == 0) big_error_in_lib(ZERO_RQ_SIZE, "malloc2()"); /*else if (size < 0) big_error_in_lib(NEG_RQ_SIZE, "malloc2()");*/ else if ((free_block = malloc(size)) == NULL) big_error_in_lib(OUT_OF_MEMORY, "malloc2()"); return free_block; } void *realloc2(void *free_block, size_t size) { void *tmp = free_block; if (size == 0) big_error_in_lib(ZERO_RQ_SIZE, "realloc2()"); /*else if (size < 0) big_error_in_lib(NEG_RQ_SIZE, "realloc2()");*/ else if ((free_block = realloc(free_block, size)) == NULL) { free2(tmp); big_error_in_lib(OUT_OF_MEMORY, "realloc2()"); } return free_block; } void *calloc2(size_t n_elements, size_t element_size) { void *free_block = NULL; size_t size = n_elements * element_size; if (size == 0) big_error_in_lib(ZERO_RQ_SIZE, "calloc2()"); /*else if (size < 0) big_error_in_lib(NEG_RQ_SIZE, "calloc2()");*/ else if ((free_block = malloc2(size)) != NULL) memset(free_block, 0, size); return free_block; } void free2(void *free_block) { if (free_block != NULL) free(free_block); else big_error_in_lib(NULL_POINTER_FREE, "free2()"); /* CODE WITH NO EFFECT free_block = NULL;*/ } /* * Return size in readable format (KiB, MiB, GiB, TiB). * *** Allow up to 16 simultaneous calls *** * Convention: we assume 2.5 MiB = 2 MiB + [0.5 x 1024 = 512] KiB, not 500 KiB. * Otherwise, there is no way to express a value in the range 1000 - 1023, * so x.y MiB = x MiB + 0.y MiB, that is: not y x 100 KiB but y x 102.4 KiB * (isn't this a bit confusing?) */ const char *readable_size(double size_bytes) { /* We use an array of 16 strings to store the returned string in order * to allow 16 simultaneous calls (should be enough in most cases?) * Otherwise, sth like: * printf("size1 = %s / size2 = %s\n", readable_size(size1), readable_size(size2)) * would produce unpredictable / false results (like readable sizes are * equal whereas sizes are different). */ static char lib_static_str[16][128]; unsigned long size_KiB, size_MiB, size_GiB, size_TiB; static int count = -1; count++; count &= 15; size_KiB = (unsigned long)(size_bytes / 1024); size_MiB = size_KiB / 1024; size_GiB = size_MiB / 1024; size_TiB = size_GiB / 1024; if (size_TiB >= 1) snprintf(lib_static_str[count], 128, "%ld.%ld TiB", size_TiB, ((size_GiB - size_TiB * 1024) * 10) / 1024); else if (size_GiB >= 1) snprintf(lib_static_str[count], 128, "%ld.%ld GiB", size_GiB, ((size_MiB - size_GiB * 1024) * 10) / 1024); else if (size_MiB >= 1) snprintf(lib_static_str[count], 128, "%ld.%ld MiB", size_MiB, ((size_KiB - size_MiB * 1024) * 10) / 1024); else if (size_KiB >= 1) snprintf(lib_static_str[count], 128, "%ld.%ld KiB", size_KiB, (unsigned long)((size_bytes - size_KiB * 1024) * 10) / 1024); else snprintf(lib_static_str[count], 128, "%.0f bytes", size_bytes); return (const char *)lib_static_str[count]; } /* * itoa() is not ansi c so this one could be useful. * *** Allow up to 16 simultaneous calls *** */ const char *itoa2(long int n) { /* Array of 16 strings (like for readable_size() - see above) */ static char lib_static_str[16][128]; static int count = -1; count++; count &= 15; snprintf(lib_static_str[count], 128, "%ld", n); return (const char *)lib_static_str[count]; } /* * Modify string in place. */ char *remove_char_from_str(char *str, char c) { int i, len = strlen(str); for (i = 0; i < len && str[i] != '\0';) { if (str[i] == c) str_n_cpy(str + i, (const char *)(str + i + 1), len - i); else i++; } return str; } /* * Modify string in place. */ char *remove_trailing_whitespaces_from_str(char *str) { int i = strlen(str) - 1; while (isspace((int)str[i]) && i >= 0) i--; str[i + 1] = '\0'; return str; } /* * Check that str contains only digits (at least one) and whitespaces * (may start and/or end with whitespaces), meaning numerical value is * integer >= 0. */ int str_is_num(const char *str2) { char *str, *s; int i, len; if (*str2 == '\0') return FALSE; s = str = l_str_new(str2); len = strlen(str); i = 0; while (i < len) if (isspace((int)*s)) { i++; s++; } else break; if (i == len) { l_str_free(str); return FALSE; } while (i < len) if (isdigit((int)*s)) { i++; s++; } else break; if (i == len) { l_str_free(str); return TRUE; } while (i < len) if (isspace((int)*s)) { i++; s++; } else break; l_str_free(str); if (i == len) return TRUE; else return FALSE; } /* * Check that str contains only whitespaces or is empty. */ int str_is_blank(const char *str) { int i = 0, len = strlen(str); if (*str == '\0') return TRUE; while (i < len) if (isspace((int)*str)) { i++; str++; } else break; if (i == len) return TRUE; else return FALSE; } /* * Generate a random string up to 1023 chars long. * mode = a -> alpha / d -> digits / b -> both */ const char *rnd_str(char mode, int length) { static char str[1024]; char str_a[65] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkl"; char str_d[17] = "1234567890123456"; char str_b[65] = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ00"; int i = 0; if (length > 1023) length = 1023; srand(time(0)); if (mode == 'a') { while (i < length) str[i++] = str_a[rand() & 63]; } else if (mode == 'd') { while (i < length) str[i++] = str_d[rand() & 15]; } else if (mode == 'b') { while (i < length) str[i++] = str_b[rand() & 63]; } else big_error_in_lib(RNDSTR_UNKNOWN_MODE, "rnd_str()"); str[i] = '\0'; return str; } #ifdef LIBETM_EXPERIMENTAL_STUFF /* * Very basic xor sym encryption for small strings (up to 511 chars). * *** Key must be ascii / if 2 chars match (in str and key) the string is cut off *** * *** Allow up to 16 simultaneous calls *** * Works with ascii strings, probably not otherwise so don't try with * exotic things... */ const char *str_crypt(const char *str, const char *key) { /* Array of 16 strings (like for readable_size() - see above) */ static char str2[16][512]; static int count = -1; int i, j; count++; count &= 15; for (i = 0, j = 0; i < 511 && str[i] != '\0'; i++) { if (key[j] == '\0') j = 0; str2[count][i] = str[i] ^ key[j++]; } str2[count][i] = '\0'; return (const char *)str2[count]; } /* * Very basic crypto hash. */ unsigned long str_crypto_hash(const char *str, const char* salt) { char *str2; unsigned long hash = 0; int i = 0; str2 = (char *)str_crypt(str, salt); while (str2[i] != '\0') { hash += str2[i] * 1024 + (str2[i] + 128) * (32 + i) + str2[i] - 1; i ++; } return hash; } #endif tickr_0.6.4.orig/src/libetm-0.4.4/TODO0000664000175000017500000000012212147427510016436 0ustar manutmmanutm- change func names ? - add doubly-linked list api ? - add stream sockets api ? tickr_0.6.4.orig/src/libetm-0.4.4/misc.c0000624000175000017500000000436112147427510017052 0ustar manutmmanutm/* * libetm-0.4 / misc.c - Copyright (C) Emmanuel Thomas-Maurin 2008-2012 * * * - Misc functions - * * 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 3 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, see . */ #include #include #include "libetm.h" /* get_libetm_version( O ) = version num * 1 = copyright * 2 = license 1/3 * 3 = license 2/3 * 4 = license 3/3 * 5 = compiled date * > 5 = NULL */ const char *get_libetm_version(unsigned int i) { static const char *libv[] = { LIBETM_NAME " version " LIBETM_VERSION_NUM, "Copyright (C) Emmanuel Thomas-Maurin 2008-2012 ", LIBETM_NAME " is free software: you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation, either version 3 of the License, or\n" "(at your option) any later version.", LIBETM_NAME " is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.", "You should have received a copy of the GNU General Public License\n" "along with this program. If not, see ", "Compiled on " __DATE__ " - " __TIME__ }; if (i < sizeof(libv) / sizeof(libv[0])) return (const char *)libv[i]; else return NULL; } int question(const char *str) { int i, c; while (1) { printf("%s [y/n] ? ", str); i = fgetc(stdin); c = tolower(i); while (i != '\n' && i != EOF) (i = fgetc(stdin)); if (c == 'y') return TRUE; else if (c == 'n') return FALSE; } } tickr_0.6.4.orig/src/libetm-0.4.4/README0000624000175000017500000000007212147427510016626 0ustar manutmmanutmThis is only a tiny lib with a few functions I use a lot. tickr_0.6.4.orig/src/libetm-0.4.4/error.c0000624000175000017500000000356212147427510017252 0ustar manutmmanutm/* * libetm-0.4 / error.c - Copyright (C) Emmanuel Thomas-Maurin 2008-2012 * * * - Error handling - * * 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 3 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, see . */ #include #include #include "libetm.h" /* * Critical error handler for libetm that will call big_error() function * defined in app, so that appropiate behaviour can be choosen. */ int big_error_in_lib(lib_error_code error_code, const char *str) { /* Only call big_error() in app */ big_error(error_code, 4, LIBETM_NAME "-" LIBETM_VERSION_NUM ": ", str, ": ", get_lib_error_str(error_code)); return error_code; } const char *get_lib_error_str(lib_error_code error_code) { /* * *** Make sure this array matches the lib errors enum *** */ static char *lib_error_str[] = { "OK", "Out of memory", "Zero requested size", /*"Negative requested size",*/ "Null destination string", "Source string = destination string", "Strings overlap", "Attempting to free a null pointer", #ifdef WIN32_V "Can't find Win32 Registry Key", "Can't create Win32 Registry Key", "Can't save Win32 Registry Key", "Win32 Registry Key error (undetermined)", #endif "OK" }; if (error_code <= LIBETM_LASTERRORCODE) return (const char *)lib_error_str[error_code]; else return ""; } tickr_0.6.4.orig/src/libetm-0.4.4/COPYING0000624000175000017500000010451312147427510017006 0ustar manutmmanutm GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state 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 3 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, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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 Lesser General Public License instead of this License. But first, please read . tickr_0.6.4.orig/src/Makefile.am0000755000175000017500000000003512147427510016071 0ustar manutmmanutmSUBDIRS = libetm-0.4.4 tickr tickr_0.6.4.orig/src/Makefile.in0000664000175000017500000003763512147427510016121 0ustar manutmmanutm# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ XMKMF = @XMKMF@ XML2_CFLAGS = @XML2_CFLAGS@ XML2_LIBS = @XML2_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = libetm-0.4.4 tickr all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: