]> git.webhop.me Git - lcd4linux.git/commitdiff
added grouping of widgets by update interval (new file "timer_group.c")
authormzuther <mzuther@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sun, 7 Feb 2010 14:03:46 +0000 (14:03 +0000)
committermzuther <mzuther@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>
Sun, 7 Feb 2010 14:03:46 +0000 (14:03 +0000)
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@1106 3ae390bd-cb1e-0410-b409-cd5a39f66f1f

13 files changed:
Makefile.am
Makefile.in
aclocal.m4
configure
lcd4linux.c
timer_group.c [new file with mode: 0644]
timer_group.h [new file with mode: 0644]
widget_bar.c
widget_gpo.c
widget_icon.c
widget_image.c
widget_text.c
widget_timer.c

index bd830e6c4a00f379f5810d88e122f492b3d61e80..68040f122ea5e47661281af6c0460c34d360298e 100644 (file)
@@ -34,6 +34,7 @@ hash.c        hash.h          \
 layout.c      layout.h        \
 pid.c         pid.h           \
 timer.c       timer.h         \
+timer_group.c timer_group.h   \
 thread.c      thread.h        \
 udelay.c      udelay.h        \
 qprintf.c     qprintf.h       \
index fbfcfce0b7487eb96a96eb4c6591538725539d92..e9e4aecead59585b1c5c76f6db056ac860ab8e87 100644 (file)
@@ -1,4 +1,4 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
@@ -64,9 +64,9 @@ am_lcd4linux_OBJECTS = lcd4linux.$(OBJEXT) cfg.$(OBJEXT) \
        debug.$(OBJEXT) drv.$(OBJEXT) drv_generic.$(OBJEXT) \
        evaluator.$(OBJEXT) property.$(OBJEXT) hash.$(OBJEXT) \
        layout.$(OBJEXT) pid.$(OBJEXT) timer.$(OBJEXT) \
-       thread.$(OBJEXT) udelay.$(OBJEXT) qprintf.$(OBJEXT) \
-       rgb.$(OBJEXT) event.$(OBJEXT) widget.$(OBJEXT) \
-       widget_text.$(OBJEXT) widget_bar.$(OBJEXT) \
+       timer_group.$(OBJEXT) thread.$(OBJEXT) udelay.$(OBJEXT) \
+       qprintf.$(OBJEXT) rgb.$(OBJEXT) event.$(OBJEXT) \
+       widget.$(OBJEXT) widget_text.$(OBJEXT) widget_bar.$(OBJEXT) \
        widget_icon.$(OBJEXT) widget_keypad.$(OBJEXT) \
        widget_timer.$(OBJEXT) widget_gpo.$(OBJEXT) plugin.$(OBJEXT) \
        plugin_cfg.$(OBJEXT) plugin_math.$(OBJEXT) \
@@ -262,6 +262,7 @@ hash.c        hash.h          \
 layout.c      layout.h        \
 pid.c         pid.h           \
 timer.c       timer.h         \
+timer_group.c timer_group.h   \
 thread.c      thread.h        \
 udelay.c      udelay.h        \
 qprintf.c     qprintf.h       \
@@ -625,6 +626,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rgb.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thread.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timer.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timer_group.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udelay.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/widget.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/widget_bar.Po@am__quote@
@@ -750,8 +752,7 @@ distdir: $(DISTFILES)
          fi; \
        done
        -test -n "$(am__skip_mode_fix)" \
-       || find "$(distdir)" -type d ! -perm -755 \
-               -exec chmod u+rwx,go+rx {} \; -o \
+       || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -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 {} {} \; \
@@ -795,17 +796,17 @@ dist dist-all: distdir
 distcheck: dist
        case '$(DIST_ARCHIVES)' in \
        *.tar.gz*) \
-         GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
        *.tar.bz2*) \
-         bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+         bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
        *.tar.lzma*) \
-         lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+         unlzma -c $(distdir).tar.lzma | $(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 ;;\
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
        *.zip*) \
          unzip $(distdir).zip ;;\
        esac
index e126b9d48ecefd428604ac9194125bf7033c4df7..56f9af53f31a96f97fbbb192d649b1a4e02340ff 100644 (file)
@@ -1,4 +1,4 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
 # 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
@@ -13,8 +13,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
-[m4_warning([this file was generated for autoconf 2.65.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],,
+[m4_warning([this file was generated for autoconf 2.64.
 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'.])])
@@ -3648,7 +3648,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -4287,7 +4287,7 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -4908,7 +4908,7 @@ m4_if([$1], [CXX], [
            ;;
        esac
        ;;
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu)
        case $cc_basename in
          KCC*)
            # KAI C++ Compiler
@@ -5192,7 +5192,7 @@ m4_if([$1], [CXX], [
       _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    linux* | k*bsd*-gnu)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -5488,7 +5488,6 @@ dnl Note also adjust exclude_expsyms for C++ above.
     fi
     supports_anon_versioning=no
     case `$LD -v 2>&1` in
-      *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
       *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
@@ -5580,7 +5579,7 @@ _LT_EOF
       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
        case $cc_basename in
@@ -7060,7 +7059,7 @@ if test "$_lt_caught_CXX_error" != yes; then
         _LT_TAGVAR(inherit_rpath, $1)=yes
         ;;
 
-      linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      linux* | k*bsd*-gnu)
         case $cc_basename in
           KCC*)
            # Kuck and Associates, Inc. (KAI) C++ Compiler
@@ -9067,15 +9066,15 @@ m4_define([lt_dict_filter],
 
 # Generated from ltversion.in.
 
-# serial 3017 ltversion.m4
+# serial 3012 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.2.6b])
-m4_define([LT_PACKAGE_REVISION], [1.3017])
+m4_define([LT_PACKAGE_VERSION], [2.2.6])
+m4_define([LT_PACKAGE_REVISION], [1.3012])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.2.6b'
-macro_revision='1.3017'
+[macro_version='2.2.6'
+macro_revision='1.3012'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
@@ -9346,7 +9345,7 @@ 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.1], [],
+m4_if([$1], [1.11], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -9362,7 +9361,7 @@ m4_define([_AM_AUTOCONF_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.1])dnl
+[AM_AUTOMAKE_VERSION([1.11])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
index 8dd87052efadc5cca51e3253a50069942eb286a2..82330cdebf19bdbd906728deb0106567f2987ed1 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,14 +1,12 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.65 for LCD4Linux 0.11.0-SVN.
+# Generated by GNU Autoconf 2.64 for LCD4Linux 0.11.0-SVN.
 #
 # Report bugs to <lcd4linux-users@lists.sourceforge.net>.
 #
-#
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
-#
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
+# Foundation, Inc.
 #
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
@@ -678,8 +676,7 @@ fi
 
 
 
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
+exec 7<&0 </dev/null 6>&1
 
 # Name of the host.
 # hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
@@ -1589,7 +1586,7 @@ Some influential environment variables:
   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
               nonstandard directory <lib dir>
   LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
   CPP         C preprocessor
   PKG_CONFIG  path to pkg-config utility
@@ -1668,7 +1665,7 @@ test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
 LCD4Linux configure 0.11.0-SVN
-generated by GNU Autoconf 2.65
+generated by GNU Autoconf 2.64
 
 Copyright (C) 2009 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1715,7 +1712,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
        ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
+  return $ac_retval
 
 } # ac_fn_c_try_compile
 
@@ -1752,7 +1749,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
     ac_retval=1
 fi
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
+  return $ac_retval
 
 } # ac_fn_c_try_cpp
 
@@ -1798,7 +1795,7 @@ fi
   # 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
+  return $ac_retval
 
 } # ac_fn_c_try_link
 
@@ -2000,7 +1997,7 @@ sed 's/^/| /' conftest.$ac_ext >&5
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-  as_fn_set_status $ac_retval
+  return $ac_retval
 
 } # ac_fn_c_try_run
 
@@ -2093,7 +2090,7 @@ This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
 It was created by LCD4Linux $as_me 0.11.0-SVN, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
+generated by GNU Autoconf 2.64.  Invocation command line was
 
   $ $0 $@
 
@@ -2346,7 +2343,7 @@ 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
+  if 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
@@ -2355,9 +2352,9 @@ $as_echo "$as_me: loading site script $ac_site_file" >&6;}
 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
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if 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
@@ -2777,7 +2774,6 @@ 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
@@ -2785,6 +2781,7 @@ fi
     # 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.
+    test -d ./--version && rmdir ./--version
     MKDIR_P="$ac_install_sh -d"
   fi
 fi
@@ -3267,30 +3264,32 @@ $as_echo "$ac_try_echo"; } >&5
 ... rest of stderr output deleted ...
          10q' conftest.err >conftest.er1
     cat conftest.er1 >&5
+    rm -f conftest.er1 conftest.err
   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.  */
-
+#include <stdio.h>
 int
 main ()
 {
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
 
   ;
   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"
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.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; }
+{ $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; }
 ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
 
 # The possible output files:
@@ -3352,10 +3351,10 @@ test "$ac_cv_exeext" = no && ac_cv_exeext=
 else
   ac_file=''
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
 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
+  $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
@@ -3363,18 +3362,51 @@ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 { as_fn_set_status 77
 as_fn_error "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
+# 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 the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { { 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: yes" >&5
+$as_echo "yes" >&6; }
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
 ac_clean_files=$ac_clean_files_save
+# 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; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
 { $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"
@@ -3407,72 +3439,13 @@ $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
+rm -f 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 <stdio.h>
-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 test "${ac_cv_objext+set}" = set; then :
@@ -4805,7 +4778,7 @@ $as_echo "Please note that some screen refreshs may fail" >&6; }
 $as_echo_n "checking for ncurses version... " >&6; }
        ncurses_version=unknown
 cat > conftest.$ac_ext <<EOF
-#line 4808 "configure"
+#line 4781 "configure"
 #include "confdefs.h"
 #ifdef RENAMED_NCURSES
 #include <curses.h>
@@ -10274,8 +10247,8 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5
-$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat dereferences a symlink specified with a trailing slash" >&5
+$as_echo_n "checking whether lstat dereferences a symlink specified with a trailing slash... " >&6; }
 if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
@@ -10292,7 +10265,7 @@ int
 main ()
 {
 struct stat sbuf;
-     /* Linux will dereference the symlink and fail, as required by POSIX.
+     /* Linux will dereference the symlink and fail.
        That is better in the sense that it means we will not
        have to compile and use the lstat wrapper.  */
      return lstat ("conftest.sym/", &sbuf) == 0;
@@ -10327,7 +10300,7 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
-if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then
+if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then
   case " $LIBOBJS " in
   *" lstat.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS lstat.$ac_objext"
@@ -11088,7 +11061,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # values after options handling.
 ac_log="
 This file was extended by LCD4Linux $as_me 0.11.0-SVN, which was
-generated by GNU Autoconf 2.65.  Invocation command line was
+generated by GNU Autoconf 2.64.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -11128,7 +11101,6 @@ 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
@@ -11151,11 +11123,10 @@ Report bugs to <lcd4linux-users@lists.sourceforge.net>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 LCD4Linux config.status 0.11.0-SVN
-configured by $0, generated by GNU Autoconf 2.65,
-  with options \\"\$ac_cs_config\\"
+configured by $0, generated by GNU Autoconf 2.64,
+  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
 Copyright (C) 2009 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
@@ -11193,8 +11164,6 @@ do
     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 )
@@ -11382,7 +11351,7 @@ s/'"$ac_delim"'$//
 t delim
 :nl
 h
-s/\(.\{148\}\)..*/\1/
+s/\(.\{148\}\).*/\1/
 t more1
 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
 p
@@ -11396,7 +11365,7 @@ s/.\{148\}//
 t nl
 :delim
 h
-s/\(.\{148\}\)..*/\1/
+s/\(.\{148\}\).*/\1/
 t more2
 s/["\\]/\\&/g; s/^/"/; s/$/"/
 p
@@ -12023,8 +11992,8 @@ esac
 
 
 
-macro_version='2.2.6b'
-macro_revision='1.3017'
+macro_version='2.2.6'
+macro_revision='1.3012'
 
 
 
@@ -12494,13 +12463,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
 else
   lt_cv_nm_interface="BSD nm"
   echo "int some_variable = 0;" > conftest.$ac_ext
-  (eval echo "\"\$as_me:12497: $ac_compile\"" >&5)
+  (eval echo "\"\$as_me:12466: $ac_compile\"" >&5)
   (eval "$ac_compile" 2>conftest.err)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:12500: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval echo "\"\$as_me:12469: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
   (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
   cat conftest.err >&5
-  (eval echo "\"\$as_me:12503: output\"" >&5)
+  (eval echo "\"\$as_me:12472: output\"" >&5)
   cat conftest.out >&5
   if $GREP 'External.*some_variable' conftest.out > /dev/null; then
     lt_cv_nm_interface="MS dumpbin"
@@ -12955,7 +12924,7 @@ irix5* | irix6* | nonstopux*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
@@ -13694,7 +13663,7 @@ ia64-*-hpux*)
   ;;
 *-*-irix6*)
   # Find out which ABI we are using.
-  echo '#line 13697 "configure"' > conftest.$ac_ext
+  echo '#line 13666 "configure"' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
   ac_status=$?
@@ -14952,11 +14921,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:14955: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:14924: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:14959: \$? = $ac_status" >&5
+   echo "$as_me:14928: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -15121,7 +15090,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
       lt_prog_compiler_static='-non_shared'
       ;;
 
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    linux* | k*bsd*-gnu)
       case $cc_basename in
       # old Intel for x86_64 which still supported -KPIC.
       ecc*)
@@ -15291,11 +15260,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:15294: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:15263: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>conftest.err)
    ac_status=$?
    cat conftest.err >&5
-   echo "$as_me:15298: \$? = $ac_status" >&5
+   echo "$as_me:15267: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s "$ac_outfile"; then
      # The compiler can only warn and ignore the option if not recognized
      # So say no if there are warnings other than the usual output.
@@ -15396,11 +15365,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:15399: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:15368: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:15403: \$? = $ac_status" >&5
+   echo "$as_me:15372: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -15451,11 +15420,11 @@ else
    -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
    -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    -e 's:$: $lt_compiler_flag:'`
-   (eval echo "\"\$as_me:15454: $lt_compile\"" >&5)
+   (eval echo "\"\$as_me:15423: $lt_compile\"" >&5)
    (eval "$lt_compile" 2>out/conftest.err)
    ac_status=$?
    cat out/conftest.err >&5
-   echo "$as_me:15458: \$? = $ac_status" >&5
+   echo "$as_me:15427: \$? = $ac_status" >&5
    if (exit $ac_status) && test -s out/conftest2.$ac_objext
    then
      # The compiler can only warn and ignore the option if not recognized
@@ -15594,7 +15563,6 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     fi
     supports_anon_versioning=no
     case `$LD -v 2>&1` in
-      *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
       *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
@@ -15686,7 +15654,7 @@ _LT_EOF
       archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+    gnu* | linux* | tpf* | k*bsd*-gnu)
       tmp_diet=no
       if test "$host_os" = linux-dietlibc; then
        case $cc_basename in
@@ -17148,7 +17116,7 @@ linux*oldld* | linux*aout* | linux*coff*)
   ;;
 
 # This must be Linux ELF.
-linux* | k*bsd*-gnu | kopensolaris*-gnu)
+linux* | k*bsd*-gnu)
   version_type=linux
   need_lib_prefix=no
   need_version=no
@@ -17835,7 +17803,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 17838 "configure"
+#line 17806 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -17931,7 +17899,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 17934 "configure"
+#line 17902 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
index 7a48c7c2d3d4415cd5cce6b010c4e11286c5ac12..45b02e91f8fa577e7348ec8db1033f12db8ea260 100644 (file)
@@ -45,6 +45,7 @@
 #include "udelay.h"
 #include "drv.h"
 #include "timer.h"
+#include "timer_group.h"
 #include "layout.h"
 #include "plugin.h"
 #include "thread.h"
@@ -413,6 +414,7 @@ int main(int argc, char *argv[])
     pid_exit(pidfile);
     cfg_exit();
     plugin_exit();
+    timer_exit_group();
     timer_exit();
 
     if (got_signal == SIGHUP) {
diff --git a/timer_group.c b/timer_group.c
new file mode 100644 (file)
index 0000000..0a72e84
--- /dev/null
@@ -0,0 +1,261 @@
+/* $Id$
+ * $URL$
+ *
+ * generic grouping of widget timers that have been set to the same
+ * update interval, thus allowing synchronized updates
+ *
+ * Copyright (C) 2010 Martin Zuther <code@mzuther.de>
+ *
+ * Based on "timer.c" which is
+ * Copyright (C) 2003, 2004 Michael Reinelt <michael@reinelt.co.at>
+ * Copyright (C) 2004 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+/* 
+ * exported functions:
+ *
+ * int timer_add_group(void (*callback) (void *data), const int interval)
+ *   make sure that generic timer exists for given update interval
+ *
+ * int timer_remove_group(void (*callback) (void *data), const int interval)
+ *   remove generic timer for given update interval
+ *
+ * void timer_process_group(void *data)
+ *   process all widgets of a given update interval (*data)
+ *
+ * void timer_exit_group(void)
+ *   release all timers and free reserved memory
+ *
+ * int timer_add_widget(void (*callback) (void *data), void *data, const int interval, const int one_shot)
+ *  add widget to group of the given update interval (creates a new group if
+ *  necessary)
+ *
+ * int timer_remove_widget(void (*callback) (void *data), void *data)
+ *  remove widget from group of the given update interval (als removes emtpy
+ *  groups)
+ *
+ */
+
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "debug.h"
+#include "cfg.h"
+#include "timer.h"
+#include "timer_group.h"
+
+#ifdef WITH_DMALLOC
+#include <dmalloc.h>
+#endif
+
+
+/* contains the actual timers, one for each update interval */
+typedef struct TIMER_GROUP {
+    void (*callback) (void *data);
+    int *interval;
+    int active;
+} TIMER_GROUP;
+
+TIMER_GROUP *GroupTimers = NULL;
+int nGroupTimers = 0;
+
+/* contains callback and data for each widget */
+typedef struct SINGLE_TIMER {
+    void (*callback) (void *data);
+    void *data;
+    int interval;
+    int one_shot;
+    int active;
+} SINGLE_TIMER;
+
+SINGLE_TIMER *SingleTimers = NULL;
+int nSingleTimers = 0;
+
+int timer_add_group(void (*callback) (void *data), const int interval)
+{
+    int group;
+
+    /* check whether timer exists for given update interval */
+    for (group = 0; group < nGroupTimers; group++) {
+       if (*GroupTimers[group].interval == interval)
+           return 0;
+    }
+
+    /* otherwise look for a free group */
+    for (group = 0; group < nGroupTimers; group++) {
+       if (GroupTimers[group].active == 0)
+           break;
+    }
+
+    /* none found, allocate a new group */
+    if (group >= nGroupTimers) {
+       nGroupTimers++;
+       GroupTimers = realloc(GroupTimers, nGroupTimers * sizeof(*GroupTimers));
+
+       /* also allocate memory for callback data */
+       GroupTimers[group].interval = malloc(sizeof(int));
+    }
+
+    /* initialize group */
+    info("Creating new timer group (%d ms)", interval);
+
+    GroupTimers[group].callback = callback;
+    *GroupTimers[group].interval = interval;
+    GroupTimers[group].active = 1;
+
+    /* finally, request a generic timer */
+    return timer_add(GroupTimers[group].callback, GroupTimers[group].interval, interval, 0);
+}
+
+int timer_remove_group(void (*callback) (void *data), const int interval)
+{
+    int group;
+
+    /* look for group with given callback function and update interval */
+    for (group = 0; group < nGroupTimers; group++) {
+       if (GroupTimers[group].callback == callback && *GroupTimers[group].interval == interval
+           && GroupTimers[group].active) {
+           /* inactivate group */
+           GroupTimers[group].active = 0;
+
+           /* remove generic timer */
+           return timer_remove(GroupTimers[group].callback, GroupTimers[group].interval);
+       }
+    }
+    return -1;
+}
+
+void timer_process_group(void *data)
+{
+    int slot;
+    int *interval = (int *) data;
+
+    /* sanity check */
+    if (nSingleTimers == 0) {
+       error("huh? not even a single widget timer to process? dazed and confused...");
+       return;
+    }
+
+    /* process every (active) widget associated with given update interval */
+    for (slot = 0; slot < nSingleTimers; slot++) {
+       if (SingleTimers[slot].active == 0)
+           continue;
+
+       if (SingleTimers[slot].interval == *interval) {
+           /* call one-shot timers only once */
+           if (SingleTimers[slot].one_shot)
+               SingleTimers[slot].active = 0;
+           /* execute callback function */
+           if (SingleTimers[slot].callback != NULL)
+               SingleTimers[slot].callback(SingleTimers[slot].data);
+       }
+    }
+}
+
+int timer_add_widget(void (*callback) (void *data), void *data, const int interval, const int one_shot)
+{
+    int slot;
+
+    /* make sure that group for update interval exists or can be created */
+    if (timer_add_group(timer_process_group, interval) != 0)
+       return -1;
+
+    /* find a free slot for callback data */
+    for (slot = 0; slot < nSingleTimers; slot++) {
+       if (SingleTimers[slot].active == 0)
+           break;
+    }
+
+    /* none found, allocate a new slot */
+    if (slot >= nSingleTimers) {
+       nSingleTimers++;
+       SingleTimers = realloc(SingleTimers, nSingleTimers * sizeof(*SingleTimers));
+    }
+
+    /* fill slot with callback data */
+    SingleTimers[slot].callback = callback;
+    SingleTimers[slot].data = data;
+    SingleTimers[slot].interval = interval;
+    SingleTimers[slot].one_shot = one_shot;
+    SingleTimers[slot].active = 1;
+
+    return 0;
+}
+
+int timer_remove_widget(void (*callback) (void *data), void *data)
+{
+    int slot, interval;
+
+    interval = 0;
+    /* look for (active) widget with given callback function and data */
+    for (slot = 0; slot < nSingleTimers; slot++) {
+       if (SingleTimers[slot].callback == callback && SingleTimers[slot].data == data && SingleTimers[slot].active) {
+           /* deactivate widget */
+           SingleTimers[slot].active = 0;
+           interval = SingleTimers[slot].interval;
+           break;
+       }
+    }
+
+    /* signal an error if no matching widget was found */
+    if (interval == 0)
+       return -1;
+
+    /* look for other widgets with given update interval */
+    for (slot = 0; slot < nSingleTimers; slot++) {
+       if (SingleTimers[slot].active == 0)
+           continue;
+       /* at least one other widget with given update interval exists */
+       if (SingleTimers[slot].interval == interval)
+           return 0;
+    }
+
+    /* remove group with given update interval */
+    return timer_remove_group(timer_process_group, interval);
+}
+
+void timer_exit_group(void)
+{
+    int group;
+
+    /* remove generic timer and free memory for callback data */
+    for (group = 0; group < nGroupTimers; group++) {
+       timer_remove(GroupTimers[group].callback, GroupTimers[group].interval);
+       free(GroupTimers[group].interval);
+    }
+
+    /* free memory for groups */
+    nGroupTimers = 0;
+
+    if (GroupTimers != NULL) {
+       free(GroupTimers);;
+       GroupTimers = NULL;
+    }
+
+    /* free memory for widget callback data */
+    nSingleTimers = 0;
+
+    if (SingleTimers != NULL) {
+       free(SingleTimers);;
+       SingleTimers = NULL;
+    }
+}
diff --git a/timer_group.h b/timer_group.h
new file mode 100644 (file)
index 0000000..36d9057
--- /dev/null
@@ -0,0 +1,40 @@
+/* $Id$
+ * $URL$
+ *
+ * generic grouping of widget timers that have been set to the same
+ * update interval, thus allowing synchronized updates
+ *
+ * Copyright (C) 2010 Martin Zuther <code@mzuther.de>
+ * Copyright (C) 2010 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ *
+ * This file is part of LCD4Linux.
+ *
+ * LCD4Linux 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.
+ *
+ * LCD4Linux is distributed in the hope that 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+
+#ifndef _TIMER_GROUP_H_
+#define _TIMER_GROUP_H_
+
+int timer_add_group(void (*callback) (void *data), const int interval);
+int timer_remove_group(void (*callback) (void *data), const int interval);
+void timer_process_group(void *data);
+void timer_exit_group(void);
+
+int timer_add_widget(void (*callback) (void *data), void *data, const int interval, const int one_shot);
+int timer_remove_widget(void (*callback) (void *data), void *data);
+
+#endif
index 755855027530e904a92febefdbd0f1daf0dc8bf2..bb03eabedd0941bb68a39268cd5daf8cb5322ade 100644 (file)
@@ -41,7 +41,7 @@
 #include "debug.h"
 #include "cfg.h"
 #include "property.h"
-#include "timer.h"
+#include "timer_group.h"
 #include "widget.h"
 #include "widget_bar.h"
 
@@ -204,7 +204,7 @@ int widget_bar_init(WIDGET * Self)
     free(section);
     Self->data = Bar;
 
-    timer_add(widget_bar_update, Self, Bar->update, 0);
+    timer_add_widget(widget_bar_update, Self, Bar->update, 0);
 
     return 0;
 }
index 1a0d52d42042865f08810615c397f47acd9df634..a47a8d5a25edbd75f4c18a251bc57a86afd7d5dc 100644 (file)
@@ -41,7 +41,7 @@
 #include "debug.h"
 #include "cfg.h"
 #include "property.h"
-#include "timer.h"
+#include "timer_group.h"
 #include "widget.h"
 #include "widget_gpo.h"
 
@@ -65,7 +65,7 @@ void widget_gpo_update(void *Self)
 
     /* add a new one-shot timer */
     if (P2N(&GPO->update) > 0) {
-       timer_add(widget_gpo_update, Self, P2N(&GPO->update), 1);
+       timer_add_widget(widget_gpo_update, Self, P2N(&GPO->update), 1);
     }
 
 }
index fe77b473546fb5f135b3428946226a64937f2b04..527bc62e0cc43480dd400cbcdc362a357ec33d6d 100644 (file)
@@ -42,7 +42,7 @@
 #include "cfg.h"
 #include "qprintf.h"
 #include "property.h"
-#include "timer.h"
+#include "timer_group.h"
 #include "widget.h"
 #include "widget_icon.h"
 
@@ -121,7 +121,7 @@ void widget_icon_update(void *Self)
 
     /* add a new one-shot timer */
     if (P2N(&Icon->speed) > 0) {
-       timer_add(widget_icon_update, Self, P2N(&Icon->speed), 1);
+       timer_add_widget(widget_icon_update, Self, P2N(&Icon->speed), 1);
     }
 }
 
index 688f6c825c15a5f6cb0febb0c6061914db977d05..8d997a95d95ea2f8b583d69d12480348bb868e63 100644 (file)
@@ -59,7 +59,7 @@
 #include "cfg.h"
 #include "qprintf.h"
 #include "property.h"
-#include "timer.h"
+#include "timer_group.h"
 #include "widget.h"
 #include "widget_image.h"
 #include "rgb.h"
@@ -195,7 +195,7 @@ static void widget_image_update(void *Self)
 
     /* add a new one-shot timer */
     if (P2N(&Image->update) > 0) {
-       timer_add(widget_image_update, Self, P2N(&Image->update), 1);
+       timer_add_widget(widget_image_update, Self, P2N(&Image->update), 1);
     }
 }
 
index c793f82ae93eff41265f6c98d661156712c13b35..7c1ee7a6eadb8d0e0ab2bfa24f9c571277d3dea2 100644 (file)
@@ -45,6 +45,7 @@
 #include "evaluator.h"
 #include "property.h"
 #include "timer.h"
+#include "timer_group.h"
 #include "event.h"
 #include "widget.h"
 #include "widget_text.h"
@@ -398,7 +399,7 @@ int widget_text_init(WIDGET * Self)
     Self->y2 = Self->row;
 
     /* add update timer, use one-shot if 'update' is zero */
-    timer_add(widget_text_update, Self, Text->update, Text->update == 0);
+    timer_add_widget(widget_text_update, Self, Text->update, Text->update == 0);
 
     /* a marquee scroller has its own timer and callback */
     if (Text->align == ALIGN_MARQUEE || Text->align == ALIGN_AUTOMATIC || Text->align == ALIGN_PINGPONG_LEFT
index 10ba86d8d24e65157256b95765a6b7f9ffa97709..dec7562856ce06e430f4792dc18f86100a837a81 100644 (file)
@@ -42,7 +42,7 @@
 #include "cfg.h"
 #include "qprintf.h"
 #include "property.h"
-#include "timer.h"
+#include "timer_group.h"
 #include "widget.h"
 #include "widget_timer.h"
 
@@ -72,7 +72,7 @@ void widget_timer_update(void *Self)
     }
 
     /* add a new one-shot timer */
-    timer_add(widget_timer_update, Self, update, 1);
+    timer_add_widget(widget_timer_update, Self, update, 1);
 }