Merge branch 'ppa-daily-trunk'
authorJean-Philippe Orsini <jeanfi@gmail.com>
Mon, 22 Sep 2014 20:34:07 +0000 (22:34 +0200)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Mon, 22 Sep 2014 20:34:07 +0000 (22:34 +0200)
Conflicts:
debian/changelog

126 files changed:
AUTHORS
Makefile.in
NEWS
NEWS.html
README
config.h.in
configure
configure.ac
debian/changelog
debian/psensor.install
doc/Makefile.in
doc/faq.html
doc/faq.txt
icons/hicolor/14x14/Makefile.in
icons/hicolor/16x16/Makefile.in
icons/hicolor/22x22/Makefile.in
icons/hicolor/24x24/Makefile.in
icons/hicolor/32x32/Makefile.in
icons/hicolor/48x48/Makefile.in
icons/hicolor/64x64/Makefile.in
icons/hicolor/scalable/Makefile.in
icons/ubuntu-mono-dark/apps/22/Makefile.in
icons/ubuntu-mono-dark/status/22/Makefile.in
icons/ubuntu-mono-light/status/22/Makefile.in
m4/gettext.m4 [new file with mode: 0644]
m4/iconv.m4 [new file with mode: 0644]
m4/lib-ld.m4 [new file with mode: 0644]
m4/lib-link.m4 [new file with mode: 0644]
m4/lib-prefix.m4 [new file with mode: 0644]
m4/nls.m4 [new file with mode: 0644]
m4/po.m4 [new file with mode: 0644]
m4/progtest.m4 [new file with mode: 0644]
po/LINGUAS
po/POTFILES.in
po/de.gmo
po/de.po
po/es.gmo
po/es.po
po/fr.gmo
po/fr.po
po/hr.gmo [new file with mode: 0644]
po/hr.po [new file with mode: 0644]
po/hu.gmo
po/hu.po
po/it.gmo
po/it.po
po/lv.gmo
po/lv.po
po/nl.gmo
po/nl.po
po/psensor.pot
po/pt_BR.gmo
po/pt_BR.po
po/ru.gmo
po/ru.po
po/sl.gmo
po/sl.po
po/sr.gmo
po/sr.po
po/sv.gmo
po/sv.po
po/tr.gmo
po/tr.po
po/uk.gmo
po/uk.po
po/zh_CN.gmo
po/zh_CN.po
src/Makefile.am
src/Makefile.in
src/cfg.c
src/cfg.h
src/description.txt [new file with mode: 0644]
src/glade/Makefile.in
src/glade/psensor-pref.glade
src/glade/psensor.glade
src/glade/sensor-edit.glade
src/graph.c
src/graph.h
src/lib/Makefile.am
src/lib/Makefile.in
src/lib/amd.c
src/lib/amd.h
src/lib/bool.h
src/lib/cpu.c [deleted file]
src/lib/cpu.h [deleted file]
src/lib/hdd.h
src/lib/hdd_atasmart.c
src/lib/hdd_hddtemp.c
src/lib/lmsensor.c
src/lib/lmsensor.h
src/lib/nvidia.c
src/lib/nvidia.h
src/lib/pgtop2.c [new file with mode: 0644]
src/lib/pgtop2.h [new file with mode: 0644]
src/lib/pio.c
src/lib/plog.c
src/lib/psensor.c
src/lib/psensor.h
src/lib/psensor_json.h
src/lib/ptime.c
src/lib/pudisks2.c [new file with mode: 0644]
src/lib/pudisks2.h [new file with mode: 0644]
src/lib/slog.c
src/lib/temperature.c
src/lib/temperature.h
src/main.c
src/psensor.1
src/psensor.gschema.xml
src/pxdg.c
src/server/Makefile.in
src/server/psensor-server.1
src/server/server.c
src/ui.c
src/ui_appindicator.c
src/ui_graph.c
src/ui_notify.c
src/ui_pref.c
src/ui_sensorlist.c
src/ui_sensorpref.c
src/ui_status.c
test-driver [new file with mode: 0755]
tests/Makefile.am
tests/Makefile.in
tests/checkpatch.pl
tests/test_psensor_type_to_unit_str.c
www/Makefile.in

diff --git a/AUTHORS b/AUTHORS
index 8695c29..54c9ec6 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,6 +1,17 @@
-Authors of psensor.
+Authors of psensor:
 
-jeanfi@gmail.com        all files.
-linux.dabao@gmail.com,royclarck         po/zh_CN.po
-thgreasi@gmail.com              src/lib/amd.h src/lib/amd.h
-Christoph Buchner (bilderbuchi)         icons/ubuntu-mono-light/status/22/*svg icons/ubuntu-mono-dark/status/22/*svg
\ No newline at end of file
+jeanfi@gmail.com       all files.
+MestreLion,thgreasi@gmail.com,jeanfi@gmail.com src/lib/amd.h src/lib/amd.h
+Christoph Buchner(bilderbuchi)         icons/ubuntu-mono-light/status/22/*svg icons/ubuntu-mono-dark/status/22/*svg
+
+Include files from other open source softwares:
+
+jqPlot:
+Chris Leonello www/jqplot.dateAxisRenderer.js
+Chris Leonello,Ash Searle www/jqplot.js
+
+jQuery:
+jQuery Foundation www/jquery.js
+
+Linux Kernel:
+Dave Jones,Joel Schopp,Andy Whitcroft tests/checkpatch.pl
\ No newline at end of file
index f45bf33..e387bb1 100644 (file)
@@ -286,6 +286,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
diff --git a/NEWS b/NEWS
index 182b4d5..b918701 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,37 @@
 Psensor NEWS
 ============
 
+v1.1.2
+------
+
+* Fixed missing description in psensor manpage.
+* All mouse buttons can be used to raise color settings in the list of
+  sensors.
+* All mouse buttons can be used to popup menu in the list of sensors.
+* List of sensors UI defined in glade file instead of code.
+* Fixed graph enabled setting not saved when toggle in the list of
+  sensors.
+* Added NVidia GPU graphics, memory, PCIe and video usage.
+* Fixed message when the configuration file is missing.
+* Added NVidia fan support.
+* Added 'Hide' menu item in the contextual menu of the list of
+  sensors.
+* Added free memory support.
+* Added alarm support of sensors expressed as percent.
+* Smoother curves (using Bezier algo).
+* Added translator credits in the about dialog.
+* Added Croatian translation from LP (gogo).
+* Merged all translations from LP.
+* Included the full list of contributors from LP, available throw the
+  about dialog.
+* Support of disk temperature using udisks2.
+* Fixed small UI layout/padding issues.
+* Splitted sensor preferences using a tab panel.
+* New preferences to enable/disable each sensor provider.
+* psensor: removed option +--use-libatasmart+.
+* Changed default color for the curves (copied from the default
+  colors of the gtk color chooser widget).
+
 v1.1.1
 ------
 
index d801d1c..48e7c55 100644 (file)
--- a/NEWS.html
+++ b/NEWS.html
@@ -381,6 +381,128 @@ asciidoc.install();
 </div>\r
 <div id="content">\r
 <div class="sect1">\r
+<h2 id="_v1_1_2">v1.1.2</h2>\r
+<div class="sectionbody">\r
+<div class="ulist"><ul>\r
+<li>\r
+<p>\r
+Fixed missing description in psensor manpage.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+All mouse buttons can be used to raise color settings in the list of\r
+  sensors.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+All mouse buttons can be used to popup menu in the list of sensors.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+List of sensors UI defined in glade file instead of code.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Fixed graph enabled setting not saved when toggle in the list of\r
+  sensors.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Added NVidia GPU graphics, memory, PCIe and video usage.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Fixed message when the configuration file is missing.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Added NVidia fan support.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Added <em>Hide</em> menu item in the contextual menu of the list of\r
+  sensors.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Added free memory support.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Added alarm support of sensors expressed as percent.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Smoother curves (using Bezier algo).\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Added translator credits in the about dialog.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Added Croatian translation from LP (gogo).\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Merged all translations from LP.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Included the full list of contributors from LP, available throw the\r
+  about dialog.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Support of disk temperature using udisks2.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Fixed small UI layout/padding issues.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Splitted sensor preferences using a tab panel.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+New preferences to enable/disable each sensor provider.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+psensor: removed option <code>--use-libatasmart</code>.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+Changed default color for the curves (copied from the default\r
+  colors of the gtk color chooser widget).\r
+</p>\r
+</li>\r
+</ul></div>\r
+</div>\r
+</div>\r
+<div class="sect1">\r
 <h2 id="_v1_1_1">v1.1.1</h2>\r
 <div class="sectionbody">\r
 <div class="ulist"><ul>\r
@@ -2729,7 +2851,7 @@ Fixed BR1: crash when no temperature sensor is available
 <div id="footnotes"><hr /></div>\r
 <div id="footer">\r
 <div id="footer-text">\r
-Last updated 2014-08-27 10:16:15 CEST\r
+Last updated 2014-09-20 08:53:43 CEST\r
 </div>\r
 </div>\r
 </body>\r
diff --git a/README b/README
index 00d93ab..c1d3c70 100644 (file)
--- a/README
+++ b/README
@@ -11,10 +11,12 @@ It draws realtime charts and raises alerts about:
  * the temperature of the motherboard and CPU sensors (using
    lm-sensors).
  * the temperature of the NVidia GPUs (using XNVCtrl).
- * the temperature of the Hard Disk Drives (using hddtemp or libatasmart).
- * the rotation speed of the fans (using lm-sensors).
+ * the temperature of ATI GPUs (using ATI ADL SDK).
+ * the temperature of the Hard Disk Drives (using hddtemp, libatasmart
+   or udisks2).
+ * the rotation speed of the fans.
  * the temperature of a remote computer.
- * the cpu load.
+ * the CPU load.
 
 Alerts are using Desktop Notification and a specific GTK+ status icon.
 
@@ -125,6 +127,7 @@ The compilation of +psensor+ requires:
  * library unity (>=v3.4.2, optional)
  * library gtop2 (optional, required for CPU usage)
  * library atasmart (optional, for disk monitoring)
+ * library udisk2 (optional, for disk monitoring)
 
 The specific requirements for +psensor-server+:
 
@@ -141,8 +144,7 @@ Compilation and Installation Steps
 5. Start the sensor detection script: +sensors-detect+ and follows the
 instructions. Reboot or activate the kernel modules which have
 been found.
-6. To monitor HDDs, the +hddtemp+ daemon must be installed and running.
-7. Run: +psensor+
+6. Run: +psensor+
 
 ATI/AMD GPU Support
 ~~~~~~~~~~~~~~~~~~~
index 1f671a6..8d62e31 100644 (file)
@@ -34,9 +34,6 @@
 /* Define if the GNU gettext() function is already present or preinstalled. */
 #undef HAVE_GETTEXT
 
-/* Define to 1 if you have the `gettimeofday' function. */
-#undef HAVE_GETTIMEOFDAY
-
 /* Use GTOP */
 #undef HAVE_GTOP
 
 /* Define to 1 if you have the `sensors' library (-lsensors). */
 #undef HAVE_LIBSENSORS
 
-/* 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 `memmove' function. */
-#undef HAVE_MEMMOVE
+/* Use libudisks */
+#undef HAVE_LIBUDISKS2
 
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 /* NVidia support enabled */
 #undef HAVE_NVIDIA
 
-/* Define to 1 if your system has a GNU libc compatible `realloc' function,
-   and to 0 otherwise. */
-#undef HAVE_REALLOC
-
 /* Remote monitoring enabled */
 #undef HAVE_REMOTE_SUPPORT
 
@@ -99,9 +88,6 @@
 /* Define to 1 if you have the <sensors/sensors.h> header file. */
 #undef HAVE_SENSORS_SENSORS_H
 
-/* Define to 1 if you have the `socket' function. */
-#undef HAVE_SOCKET
-
 /* Define to 1 if you have the <stdbool.h> header file. */
 #undef HAVE_STDBOOL_H
 
 /* Define to 1 if you have the <stdlib.h> header file. */
 #undef HAVE_STDLIB_H
 
-/* Define to 1 if you have the `strdup' function. */
-#undef HAVE_STRDUP
-
 /* Define to 1 if you have the <strings.h> header file. */
 #undef HAVE_STRINGS_H
 
 /* Define to 1 if you have the <string.h> header file. */
 #undef HAVE_STRING_H
 
-/* Define to 1 if you have the `strtol' function. */
-#undef HAVE_STRTOL
-
 /* Define to 1 if you have the <sys/stat.h> header file. */
 #undef HAVE_SYS_STAT_H
 
 
 /* Define for large files, on AIX-style hosts. */
 #undef _LARGE_FILES
-
-/* 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 <sys/types.h> does not define. */
-#undef size_t
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef ssize_t
index 404e3b9..98bd186 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for psensor 1.1.1.
+# Generated by GNU Autoconf 2.69 for psensor 1.1.2.
 #
 # Report bugs to <jeanfi@gmail.com>.
 #
@@ -580,8 +580,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='psensor'
 PACKAGE_TARNAME='psensor'
-PACKAGE_VERSION='1.1.1'
-PACKAGE_STRING='psensor 1.1.1'
+PACKAGE_VERSION='1.1.2'
+PACKAGE_STRING='psensor 1.1.2'
 PACKAGE_BUGREPORT='jeanfi@gmail.com'
 PACKAGE_URL='http://wpitchoune.net/psensor'
 
@@ -626,6 +626,7 @@ gt_needs=
 ac_subst_vars='am__EXEEXT_FALSE
 am__EXEEXT_TRUE
 LTLIBOBJS
+LIBOBJS
 CPPCHECK_FALSE
 CPPCHECK_TRUE
 HAVE_CPPCHECK
@@ -673,6 +674,10 @@ ATASMART_FALSE
 ATASMART_TRUE
 ATASMART_LIBS
 ATASMART_CFLAGS
+LIBUDISKS2_FALSE
+LIBUDISKS2_TRUE
+LIBUDISKS2_LIBS
+LIBUDISKS2_CFLAGS
 GTK_FALSE
 GTK_TRUE
 GTK_LIBS
@@ -717,7 +722,6 @@ MSGFMT_015
 GMSGFMT
 MSGFMT
 USE_NLS
-LIBOBJS
 EGREP
 GREP
 CPP
@@ -842,6 +846,8 @@ XEXT_CFLAGS
 XEXT_LIBS
 GTK_CFLAGS
 GTK_LIBS
+LIBUDISKS2_CFLAGS
+LIBUDISKS2_LIBS
 ATASMART_CFLAGS
 ATASMART_LIBS
 LIBNOTIFY_CFLAGS
@@ -1398,7 +1404,7 @@ 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 psensor 1.1.1 to adapt to many kinds of systems.
+\`configure' configures psensor 1.1.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1472,7 +1478,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of psensor 1.1.1:";;
+     short | recursive ) echo "Configuration of psensor 1.1.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1525,6 +1531,10 @@ Some influential environment variables:
   XEXT_LIBS   linker flags for XEXT, overriding pkg-config
   GTK_CFLAGS  C compiler flags for GTK, overriding pkg-config
   GTK_LIBS    linker flags for GTK, overriding pkg-config
+  LIBUDISKS2_CFLAGS
+              C compiler flags for LIBUDISKS2, overriding pkg-config
+  LIBUDISKS2_LIBS
+              linker flags for LIBUDISKS2, overriding pkg-config
   ATASMART_CFLAGS
               C compiler flags for ATASMART, overriding pkg-config
   ATASMART_LIBS
@@ -1618,7 +1628,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-psensor configure 1.1.1
+psensor configure 1.1.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1916,132 +1926,11 @@ $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 <limits.h> declares $2.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#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 psensor $as_me 1.1.1, which was
+It was created by psensor $as_me 1.1.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2906,7 +2795,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='psensor'
- VERSION='1.1.1'
+ VERSION='1.1.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -5119,178 +5008,6 @@ 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 <stdlib.h>
-#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 <stdlib.h>
-#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 gettimeofday memmove socket strdup strtol
-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
-
-
 
 
 mkdir_p="$MKDIR_P"
@@ -7603,7 +7320,7 @@ fi
 
 
 
-# Checks GTK+ 3.0
+# Check GTK+ 3.0
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5
@@ -7613,12 +7330,12 @@ if test -n "$GTK_CFLAGS"; then
     pkg_cv_GTK_CFLAGS="$GTK_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+-3.0\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gtk+-3.0") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.4\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.4") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-3.0" 2>/dev/null`
+  pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-3.0 >= 3.4" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -7630,12 +7347,12 @@ if test -n "$GTK_LIBS"; then
     pkg_cv_GTK_LIBS="$GTK_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+-3.0\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gtk+-3.0") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.4\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.4") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-3.0" 2>/dev/null`
+  pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-3.0 >= 3.4" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -7656,9 +7373,9 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-               GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-3.0" 2>&1`
+               GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-3.0 >= 3.4" 2>&1`
         else
-               GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-3.0" 2>&1`
+               GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-3.0 >= 3.4" 2>&1`
         fi
        # Put the nasty error message in config.log where it belongs
        echo "$GTK_PKG_ERRORS" >&5
@@ -7695,9 +7412,94 @@ GTK_CFLAGS+=" -DGSEAL_ENABLE "
 
 
 
-### Optional
+# Check udisks2
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBUDISKS2" >&5
+$as_echo_n "checking for LIBUDISKS2... " >&6; }
+
+if test -n "$LIBUDISKS2_CFLAGS"; then
+    pkg_cv_LIBUDISKS2_CFLAGS="$LIBUDISKS2_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"udisks2\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "udisks2") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBUDISKS2_CFLAGS=`$PKG_CONFIG --cflags "udisks2" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$LIBUDISKS2_LIBS"; then
+    pkg_cv_LIBUDISKS2_LIBS="$LIBUDISKS2_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"udisks2\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "udisks2") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBUDISKS2_LIBS=`$PKG_CONFIG --libs "udisks2" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
 
-# check libatasmart
+
+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
+               LIBUDISKS2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "udisks2" 2>&1`
+        else
+               LIBUDISKS2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "udisks2" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$LIBUDISKS2_PKG_ERRORS" >&5
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Library udisks2 not present\"" >&5
+$as_echo "$as_me: WARNING: \"Library udisks2 not present\"" >&2;}
+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}: WARNING: \"Library udisks2 not present\"" >&5
+$as_echo "$as_me: WARNING: \"Library udisks2 not present\"" >&2;}
+else
+       LIBUDISKS2_CFLAGS=$pkg_cv_LIBUDISKS2_CFLAGS
+       LIBUDISKS2_LIBS=$pkg_cv_LIBUDISKS2_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_LIBUDISKS2 1" >>confdefs.h
+
+fi
+ if test -n "$LIBUDISKS2_LIBS"; then
+  LIBUDISKS2_TRUE=
+  LIBUDISKS2_FALSE='#'
+else
+  LIBUDISKS2_TRUE='#'
+  LIBUDISKS2_FALSE=
+fi
+
+
+
+
+# Check libatasmart
 
 pkg_failed=no
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ATASMART" >&5
@@ -8556,7 +8358,7 @@ else
 fi
 
 
-# libatiadl
+# Check libatiadl
 
 # Check whether --with-libatiadl was given.
 if test "${with_libatiadl+set}" = set; then :
@@ -8640,7 +8442,7 @@ fi
 
 ############### psensor-server
 
-# libmicrohttpd, mandatory for psensor-server
+# Check libmicrohttpd, mandatory for psensor-server
 LIBMICROHTTPD_LIBS=
 
 pkg_failed=no
@@ -8728,8 +8530,7 @@ fi
 
 
 
-# GTop, optional
-
+# Check gtop2, optional
 
 # Check whether --with-gtop was given.
 if test "${with_gtop+set}" = set; then :
@@ -9114,6 +8915,10 @@ if test -z "${GTK_TRUE}" && test -z "${GTK_FALSE}"; then
   as_fn_error $? "conditional \"GTK\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${LIBUDISKS2_TRUE}" && test -z "${LIBUDISKS2_FALSE}"; then
+  as_fn_error $? "conditional \"LIBUDISKS2\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${ATASMART_TRUE}" && test -z "${ATASMART_FALSE}"; then
   as_fn_error $? "conditional \"ATASMART\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -9559,7 +9364,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by psensor $as_me 1.1.1, which was
+This file was extended by psensor $as_me 1.1.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -9626,7 +9431,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-psensor config.status 1.1.1
+psensor config.status 1.1.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
index c81887f..e13331b 100644 (file)
@@ -2,7 +2,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ([2.69])
-AC_INIT([psensor], [1.1.1],[jeanfi@gmail.com],[psensor],[http://wpitchoune.net/psensor])
+AC_INIT([psensor], [1.1.2],[jeanfi@gmail.com],[psensor],[http://wpitchoune.net/psensor])
 
 AM_INIT_AUTOMAKE([-Wall gnu])
 
@@ -26,15 +26,6 @@ AM_PROG_AR
 AC_PATH_X
 AC_CHECK_HEADERS([stdbool.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([gettimeofday memmove socket strdup strtol])
-
 AM_GNU_GETTEXT_VERSION([0.16])
 AM_GNU_GETTEXT([external])
 
@@ -68,8 +59,10 @@ AM_CONDITIONAL(XEXT, test -n "$XEXT_LIBS")
 AC_SUBST(XEXT_CFLAGS)
 AC_SUBST(XEXT_LIBS)
 
-# Checks GTK+ 3.0
-PKG_CHECK_MODULES(GTK, gtk+-3.0,,[AC_MSG_WARN("gtk missing psensor will not be built")])
+# Check GTK+ 3.0
+PKG_CHECK_MODULES(GTK,
+                 [gtk+-3.0 >= 3.4],,
+                 [AC_MSG_WARN("gtk missing psensor will not be built")])
 AM_CONDITIONAL(GTK, test -n "$GTK_LIBS")
 # ensure that only allowed headers are included
 GTK_CFLAGS+=" -DGTK_DISABLE_SINGLE_INCLUDES "
@@ -81,9 +74,16 @@ GTK_CFLAGS+=" -DGSEAL_ENABLE "
 AC_SUBST(GTK_CFLAGS)
 AC_SUBST(GTK_LIBS)
 
-### Optional
+# Check udisks2
+PKG_CHECK_MODULES(LIBUDISKS2,
+                 udisks2,
+                 [AC_DEFINE([HAVE_LIBUDISKS2],[1],[Use libudisks])],
+                 [AC_MSG_WARN("Library udisks2 not present")])
+AM_CONDITIONAL(LIBUDISKS2, test -n "$LIBUDISKS2_LIBS")
+AC_SUBST(LIBUDISKS2_CFLAGS)
+AC_SUBST(LIBUDISKS2_LIBS)
 
-# check libatasmart
+# Check libatasmart
 PKG_CHECK_MODULES(ATASMART, libatasmart,
                  [AC_DEFINE([HAVE_ATASMART],[1],[Use libatasmart])],
                          [AC_MSG_WARN("Library atasmart not present")])
@@ -195,7 +195,7 @@ AC_SUBST(UNITY_CFLAGS)
 AC_SUBST(UNITY_LIBS)
 AM_CONDITIONAL(UNITY, test -n "$UNITY_LIBS")
 
-# libatiadl
+# Check libatiadl
 AC_ARG_WITH(libatiadl,
 [  --with-libatiadl[=DIR]   use libatiadlxx in DIR],[
                   ATIADL_DIR=${withval}
@@ -218,7 +218,7 @@ AC_SUBST(LIBATIADL_LIBS)
 
 ############### psensor-server
 
-# libmicrohttpd, mandatory for psensor-server
+# Check libmicrohttpd, mandatory for psensor-server
 LIBMICROHTTPD_LIBS=
 PKG_CHECK_MODULES(LIBMICROHTTPD, 
   libmicrohttpd, 
@@ -228,8 +228,7 @@ AM_CONDITIONAL(LIBMICROHTTPD, test -n "$LIBMICROHTTPD_LIBS")
 AC_SUBST(LIBMICROHTTPD_CFLAGS)
 AC_SUBST(LIBMICROHTTPD_LIBS)
 
-# GTop, optional
-
+# Check gtop2, optional
 AC_ARG_WITH(gtop,
 [  --with-gtop[=yes|no]   use gtop],[
        with_gtop=$withval],[
index 362d523..c0f2ee0 100644 (file)
@@ -1,9 +1,3 @@
-psensor (1.1.2-1ppatrusty1) trusty; urgency=medium
-
-  * New upstream release.
-
- -- Jean-Philippe Orsini <jeanfi@gmail.com>  Mon, 01 Sep 2014 17:50:19 +0200
-
 psensor (1.1.2-1) unstable; urgency=medium
 
   * New upstream release.
index 716001e..4a71b01 100644 (file)
@@ -1,7 +1,7 @@
 /usr/bin/psensor
 /usr/share/applications
+/usr/share/glib-2.0
 /usr/share/icons
 /usr/share/psensor/psensor-pref.glade
 /usr/share/psensor/sensor-edit.glade
 /usr/share/psensor/psensor.glade
-/usr/share/glib-2.0
index 78d74a9..7d71d4c 100644 (file)
@@ -202,6 +202,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
index 23cde0a..293d41d 100644 (file)
@@ -392,7 +392,8 @@ asciidoc.install(2);
 <div class="sect1">\r
 <h2 id="S_NoSensors">1. No sensors or only cpu usage is displayed</h2>\r
 <div class="sectionbody">\r
-<div class="paragraph"><p>Psensor is relying on few libraries or softwares for retrieving the information about the computer:</p></div>\r
+<div class="paragraph"><p>Psensor is relying on few libraries or softwares for retrieving the\r
+information about the computer:</p></div>\r
 <div class="ulist"><ul>\r
 <li>\r
 <p>\r
@@ -431,13 +432,26 @@ proprietary driver Catalyst/fglx: use <code>aticonfig</code> to
 </li>\r
 </ul></div>\r
 </li>\r
+</ul></div>\r
+<div class="paragraph"><p>For hard disk drives, psensor can use:</p></div>\r
+<div class="ulist"><ul>\r
+<li>\r
+<p>\r
+udisks2: added since 1.1.2 release. It is the default and\r
+      recommended provider.\r
+</p>\r
+</li>\r
 <li>\r
 <p>\r
-HDDs: it uses the hddtemp daemon. Verify that it is\r
-          correctly reporting temperature by using the command: <code>sudo\r
-          hddtemp /dev/sda</code>. If hddtemp does not support your disk,\r
-          you may want to try using the libatasmart support instead\r
-          (option <code>--use-libatasmart</code>).\r
+hddtemp: verify that it is correctly reporting temperature by\r
+      using the command: <code>sudo hddtemp /dev/sda</code>. It is the default\r
+      provider until 1.1.2 release.\r
+</p>\r
+</li>\r
+<li>\r
+<p>\r
+atasmart library: before the 1.1.2 release it can be enabled\r
+      by using the command line option <code>--use-libatasmart</code>.\r
 </p>\r
 </li>\r
 </ul></div>\r
@@ -446,6 +460,8 @@ displayed by Psensor, it is probably a bug in Psensor, so please
 report it. Otherwise, the issue is on the underlying software itself\r
 and you should contact the corresponding development team or refer to\r
 its documentation.</p></div>\r
+<div class="paragraph"><p>Since the release 1.1.2, the providers can be enabled or disabled directly\r
+from the user interface (<code>Preferences&gt;Provider</code>).</p></div>\r
 </div>\r
 </div>\r
 <div class="sect1">\r
@@ -681,43 +697,42 @@ the option <code>Launch on session startup</code>.</p></div>
 <div class="paragraph"><p>This feature is requiring that the Desktop Environment supports the\r
 <a href="http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html">XDG\r
 specification</a>.</p></div>\r
-</div>\r
-</div>\r
-<div class="sect1">\r
-<h2 id="S_disk">16. How to monitor the temperature of a disk?</h2>\r
-<div class="sectionbody">\r
-<div class="paragraph"><p>By default, Psensor is using <code>hddtemp</code> to retrieve the temperature of\r
-the disks.</p></div>\r
-<div class="paragraph"><p>If <code>hddtemp</code> is installed but no disk temperature is reported, check\r
-that the daemon is running by using for example the command <code>ps\r
--eaf|grep hddtemp</code>.\r
-It should output something like:</p></div>\r
+<div class="paragraph" id="S_disk"><p>How to monitor the temperature of a disk with <code>hddtemp</code>?</p></div>\r
 <div class="listingblock">\r
 <div class="content">\r
-<pre><code>root      1433     1  0 May28 ?        00:00:21 /usr/sbin/hddtemp -d -l 127.0.0.1 -p 7634 -s | /dev/sdb</code></pre>\r
+<pre><code>Until the release 1.1.2, Psensor is using +hddtemp+ by default to\r
+retrieve the temperature of the disks.\r
+\r
+If +hddtemp+ is installed but no disk temperature is reported, check\r
+that the daemon is running by using for example the command +ps\r
+-eaf|grep hddtemp+.\r
+It should output something like:</code></pre>\r
 </div></div>\r
-<div class="paragraph"><p>Depending on the Linux distribution, the installation of the <code>hddtemp</code>\r
-package does not enable the hddtemp daemon automaticaly.</p></div>\r
-<div class="paragraph"><p>In this case, edit the file <code>/etc/default/hddtemp</code> and set\r
-<code>RUN_DAEMON</code> to <code>"true"</code> like in the following example:</p></div>\r
+<div class="paragraph"><p>root      1433     1  0 May28 ?        00:00:21 /usr/sbin/hddtemp -d -l 127.0.0.1 -p 7634 -s | /dev/sdb</p></div>\r
 <div class="listingblock">\r
 <div class="content">\r
-<pre><code># hddtemp network daemon switch. If set to true, hddtemp will listen\r
+<pre><code>Depending on the Linux distribution, the installation of the +hddtemp+\r
+package does not enable the hddtemp daemon automaticaly.\r
+\r
+In this case, edit the file +/etc/default/hddtemp+ and set\r
++RUN_DAEMON+ to +"true"+ like in the following example:</code></pre>\r
+</div></div>\r
+<div class="paragraph"><p># hddtemp network daemon switch. If set to true, hddtemp will listen\r
 # for incoming connections.\r
-RUN_DAEMON="true"</code></pre>\r
+RUN_DAEMON="true"</p></div>\r
+<div class="listingblock">\r
+<div class="content">\r
+<pre><code>For Debian/Ubuntu, you can use</code></pre>\r
 </div></div>\r
-<div class="paragraph"><p>For Debian/Ubuntu, you can use</p></div>\r
+<div class="paragraph"><p>dpkg-reconfigure hddtemp</p></div>\r
 <div class="listingblock">\r
 <div class="content">\r
-<pre><code>dpkg-reconfigure hddtemp</code></pre>\r
+<pre><code>and reply +yes+ when asked whether hddtemp daemon must be\r
+run during the startup.\r
+\r
+[[S_SimilarSoft]]\r
+Is there any other similar softwares?</code></pre>\r
 </div></div>\r
-<div class="paragraph"><p>and reply <code>yes</code> when asked whether hddtemp daemon must be\r
-run during the startup.</p></div>\r
-</div>\r
-</div>\r
-<div class="sect1">\r
-<h2 id="S_SimilarSoft">17. Is there any other similar softwares?</h2>\r
-<div class="sectionbody">\r
 <div class="paragraph"><p>Here is a list of few well-known sensors monitoring softwares:</p></div>\r
 <div class="ulist"><ul>\r
 <li>\r
@@ -745,7 +760,7 @@ more general, but can be configured to display sensors
 </div>\r
 </div>\r
 <div class="sect1">\r
-<h2 id="S_HideSensor">18. Is it possible to hide sensors in the main window?</h2>\r
+<h2 id="S_HideSensor">16. Is it possible to hide sensors in the main window?</h2>\r
 <div class="sectionbody">\r
 <div class="paragraph"><p>Before v1.1.1, the sensors retrieved from the lm-sensor library can be\r
 ignored directly in the lm-sensor configuration. See the manpage\r
@@ -758,7 +773,7 @@ of sensors.conf(5).</p></div>
 <div id="footnotes"><hr /></div>\r
 <div id="footer">\r
 <div id="footer-text">\r
-Last updated 2014-08-22 01:10:27 CEST\r
+Last updated 2014-09-20 09:13:33 CEST\r
 </div>\r
 </div>\r
 </body>\r
index 56350b6..c837bf3 100644 (file)
@@ -7,7 +7,8 @@ The last version of this FAQ is available at http://wpitchoune.net/gitweb/?p=pse
 No sensors or only cpu usage is displayed
 -----------------------------------------
 
-Psensor is relying on few libraries or softwares for retrieving the information about the computer:
+Psensor is relying on few libraries or softwares for retrieving the
+information about the computer:
 
        - motherboard and CPUs sensors: the information is retrieved
           from the lm-sensors library, it requires that
@@ -29,11 +30,17 @@ Psensor is relying on few libraries or softwares for retrieving the information
                   note: it requires that you are using a Psensor
                   binary compiled with the ATI support.
 
-       - HDDs: it uses the hddtemp daemon. Verify that it is
-          correctly reporting temperature by using the command: +sudo
-          hddtemp /dev/sda+. If hddtemp does not support your disk,
-          you may want to try using the libatasmart support instead
-          (option +--use-libatasmart+).
+For hard disk drives, psensor can use:
+
+    - udisks2: added since 1.1.2 release. It is the default and
+      recommended provider.
+   
+    - hddtemp: verify that it is correctly reporting temperature by
+      using the command: +sudo hddtemp /dev/sda+. It is the default
+      provider until 1.1.2 release.
+
+    - atasmart library: before the 1.1.2 release it can be enabled
+      by using the command line option +--use-libatasmart+.
 
 If the underlying software is reporting sensors which are not
 displayed by Psensor, it is probably a bug in Psensor, so please
@@ -41,6 +48,9 @@ report it. Otherwise, the issue is on the underlying software itself
 and you should contact the corresponding development team or refer to
 its documentation.
 
+Since the release 1.1.2, the providers can be enabled or disabled directly
+from the user interface (+Preferences>Provider+).
+
 [[S_ATIMonitoring]]
 How to monitor an ATI card using the Catalyst driver?
 -----------------------------------------------------
@@ -230,11 +240,11 @@ http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html[XDG
 specification].
 
 [[S_disk]]
-How to monitor the temperature of a disk?
+How to monitor the temperature of a disk with +hddtemp+?
 -----------------------------------------
 
-By default, Psensor is using +hddtemp+ to retrieve the temperature of
-the disks.
+Until the release 1.1.2, Psensor is using +hddtemp+ by default to
+retrieve the temperature of the disks.
 
 If +hddtemp+ is installed but no disk temperature is reported, check
 that the daemon is running by using for example the command +ps
index 397cd9c..7bd0a08 100644 (file)
@@ -201,6 +201,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
index 897d839..4148855 100644 (file)
@@ -201,6 +201,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
index 897481a..7b2b13a 100644 (file)
@@ -201,6 +201,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
index c477aec..25e88f4 100644 (file)
@@ -201,6 +201,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
index 0962c12..530450f 100644 (file)
@@ -201,6 +201,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
index f21011d..ca6ce55 100644 (file)
@@ -201,6 +201,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
index bfb3d67..0660305 100644 (file)
@@ -201,6 +201,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
index 44e0e57..3d3706c 100644 (file)
@@ -201,6 +201,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
index 63b9a6f..f156ce5 100644 (file)
@@ -201,6 +201,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
index 76d9ea6..a72a4e7 100644 (file)
@@ -201,6 +201,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
index 88e49ea..2ac509c 100644 (file)
@@ -201,6 +201,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
diff --git a/m4/gettext.m4 b/m4/gettext.m4
new file mode 100644 (file)
index 0000000..b5ce322
--- /dev/null
@@ -0,0 +1,417 @@
+# gettext.m4 serial 58 (gettext-0.16)
+dnl Copyright (C) 1995-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl    default (if it is not specified or empty) is 'no-libtool'.
+dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl    depending on --{enable,disable}-{shared,static} and on the presence of
+dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl    $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl    implementations (in libc or libintl) without the ngettext() function
+dnl    will be ignored.  If NEEDSYMBOL is specified and is
+dnl    'need-formatstring-macros', then GNU gettext implementations that don't
+dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries.  If empty,
+dnl    the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl    and used.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl    Catalog format: none
+dnl    Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+  dnl Argument checking.
+  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+    [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+  define([gt_included_intl],
+    ifelse([$1], [external],
+      ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+      [yes]))
+  define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+  gt_NEEDS_INIT
+  AM_GNU_GETTEXT_NEED([$2])
+
+  AC_REQUIRE([AM_PO_SUBDIRS])dnl
+  ifelse(gt_included_intl, yes, [
+    AC_REQUIRE([AM_INTL_SUBDIR])dnl
+  ])
+
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Sometimes libintl requires libiconv, so first search for libiconv.
+  dnl Ideally we would do this search only after the
+  dnl      if test "$USE_NLS" = "yes"; then
+  dnl        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+  dnl the configure script would need to contain the same shell code
+  dnl again, outside any 'if'. There are two solutions:
+  dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+  dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+  dnl documented, we avoid it.
+  ifelse(gt_included_intl, yes, , [
+    AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+  ])
+
+  dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
+  gt_INTL_MACOSX
+
+  dnl Set USE_NLS.
+  AC_REQUIRE([AM_NLS])
+
+  ifelse(gt_included_intl, yes, [
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+  ])
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+  dnl Add a version number to the cache macros.
+  case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+  dnl If we use NLS figure out what method
+  if test "$USE_NLS" = "yes"; then
+    gt_use_preinstalled_gnugettext=no
+    ifelse(gt_included_intl, yes, [
+      AC_MSG_CHECKING([whether included gettext is requested])
+      AC_ARG_WITH(included-gettext,
+        [  --with-included-gettext use the GNU gettext library included here],
+        nls_cv_force_use_gnu_gettext=$withval,
+        nls_cv_force_use_gnu_gettext=no)
+      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+    ])
+        dnl User does not insist on using GNU NLS library.  Figure out what
+        dnl to use.  If GNU gettext is available we use this.  Else we have
+        dnl to fall back to GNU NLS library.
+
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='[[
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+]]'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
+
+        AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+         [AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+            [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
+            [eval "$gt_func_gnugettext_libc=yes"],
+            [eval "$gt_func_gnugettext_libc=no"])])
+
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+          dnl Sometimes libintl requires libiconv, so first search for libiconv.
+          ifelse(gt_included_intl, yes, , [
+            AM_ICONV_LINK
+          ])
+          dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+          dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+          dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+          dnl even if libiconv doesn't exist.
+          AC_LIB_LINKFLAGS_BODY([intl])
+          AC_CACHE_CHECK([for GNU gettext in libintl],
+            [$gt_func_gnugettext_libintl],
+           [gt_save_CPPFLAGS="$CPPFLAGS"
+            CPPFLAGS="$CPPFLAGS $INCINTL"
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $LIBINTL"
+            dnl Now see whether libintl exists and does not depend on libiconv.
+            AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+              [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+              [eval "$gt_func_gnugettext_libintl=yes"],
+              [eval "$gt_func_gnugettext_libintl=no"])
+            dnl Now see whether libintl exists and depends on libiconv.
+            if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+                [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+               [LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                eval "$gt_func_gnugettext_libintl=yes"
+               ])
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"])
+        fi
+
+        dnl If an already present or preinstalled GNU gettext() is found,
+        dnl use it.  But if this macro is used in GNU gettext, and GNU
+        dnl gettext is already preinstalled in libintl, we update this
+        dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+                && test "$PACKAGE" != gettext-runtime \
+                && test "$PACKAGE" != gettext-tools; }; then
+          gt_use_preinstalled_gnugettext=yes
+        else
+          dnl Reset the values set by searching for libintl.
+          LIBINTL=
+          LTLIBINTL=
+          INCINTL=
+        fi
+
+    ifelse(gt_included_intl, yes, [
+        if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+          dnl GNU gettext is not found in the C library.
+          dnl Fall back on included GNU gettext library.
+          nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions used to generate GNU NLS library.
+        BUILD_INCLUDED_LIBINTL=yes
+        USE_INCLUDED_LIBINTL=yes
+        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+      CATOBJEXT=
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions to use GNU gettext tools.
+        CATOBJEXT=.gmo
+      fi
+    ])
+
+    if test -n "$INTL_MACOSX_LIBS"; then
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Some extra flags are needed during linking.
+        LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+      fi
+    fi
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
+      AC_DEFINE(ENABLE_NLS, 1,
+        [Define to 1 if translation of program messages to the user's native language
+   is requested.])
+    else
+      USE_NLS=no
+    fi
+  fi
+
+  AC_MSG_CHECKING([whether to use NLS])
+  AC_MSG_RESULT([$USE_NLS])
+  if test "$USE_NLS" = "yes"; then
+    AC_MSG_CHECKING([where the gettext function comes from])
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        gt_source="external libintl"
+      else
+        gt_source="libc"
+      fi
+    else
+      gt_source="included intl directory"
+    fi
+    AC_MSG_RESULT([$gt_source])
+  fi
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        AC_MSG_CHECKING([how to link with libintl])
+        AC_MSG_RESULT([$LIBINTL])
+        AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+      fi
+
+      dnl For backward compatibility. Some packages may be using this.
+      AC_DEFINE(HAVE_GETTEXT, 1,
+       [Define if the GNU gettext() function is already present or preinstalled.])
+      AC_DEFINE(HAVE_DCGETTEXT, 1,
+       [Define if the GNU dcgettext() function is already present or preinstalled.])
+    fi
+
+    dnl We need to process the po/ directory.
+    POSUB=po
+  fi
+
+  ifelse(gt_included_intl, yes, [
+    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+    dnl to 'yes' because some of the testsuite requires it.
+    if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+      BUILD_INCLUDED_LIBINTL=yes
+    fi
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(BUILD_INCLUDED_LIBINTL)
+    AC_SUBST(USE_INCLUDED_LIBINTL)
+    AC_SUBST(CATOBJEXT)
+
+    dnl For backward compatibility. Some configure.ins may be using this.
+    nls_cv_header_intl=
+    nls_cv_header_libgt=
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    DATADIRNAME=share
+    AC_SUBST(DATADIRNAME)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INSTOBJEXT=.mo
+    AC_SUBST(INSTOBJEXT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    GENCAT=gencat
+    AC_SUBST(GENCAT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INTLOBJS=
+    if test "$USE_INCLUDED_LIBINTL" = yes; then
+      INTLOBJS="\$(GETTOBJS)"
+    fi
+    AC_SUBST(INTLOBJS)
+
+    dnl Enable libtool support if the surrounding package wishes it.
+    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+    AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+  ])
+
+  dnl For backward compatibility. Some Makefiles may be using this.
+  INTLLIBS="$LIBINTL"
+  AC_SUBST(INTLLIBS)
+
+  dnl Make all documented variables known to autoconf.
+  AC_SUBST(LIBINTL)
+  AC_SUBST(LTLIBINTL)
+  AC_SUBST(POSUB)
+])
+
+
+dnl Checks for special options needed on MacOS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+  dnl Check for API introduced in MacOS X 10.2.
+  AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+    gt_cv_func_CFPreferencesCopyAppValue,
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
+       [CFPreferencesCopyAppValue(NULL, NULL)],
+       [gt_cv_func_CFPreferencesCopyAppValue=yes],
+       [gt_cv_func_CFPreferencesCopyAppValue=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+    AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1,
+      [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+  fi
+  dnl Check for API introduced in MacOS X 10.3.
+  AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent,
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
+       [gt_cv_func_CFLocaleCopyCurrent=yes],
+       [gt_cv_func_CFLocaleCopyCurrent=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1,
+      [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+  fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+  fi
+  AC_SUBST([INTL_MACOSX_LIBS])
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+  m4_divert_text([DEFAULTS], [gt_needs=])
+  m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+  m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/m4/iconv.m4 b/m4/iconv.m4
new file mode 100644 (file)
index 0000000..654c415
--- /dev/null
@@ -0,0 +1,101 @@
+# iconv.m4 serial AM4 (gettext-0.11.3)
+dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable GNU libiconv installed).
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed libiconv and not disabled its use
+  dnl via --without-libiconv-prefix, he wants to use it. The first
+  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+  am_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+  AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      am_cv_func_iconv=yes)
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+        am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes)
+      LIBS="$am_save_LIBS"
+    fi
+  ])
+  if test "$am_cv_func_iconv" = yes; then
+    AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    AC_MSG_CHECKING([how to link with libiconv])
+    AC_MSG_RESULT([$LIBICONV])
+  else
+    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+    dnl either.
+    CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+  AC_SUBST(LIBICONV)
+  AC_SUBST(LTLIBICONV)
+])
+
+AC_DEFUN([AM_ICONV],
+[
+  AM_ICONV_LINK
+  if test "$am_cv_func_iconv" = yes; then
+    AC_MSG_CHECKING([for iconv declaration])
+    AC_CACHE_VAL(am_cv_proto_iconv, [
+      AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    AC_MSG_RESULT([$]{ac_t:-
+         }[$]am_cv_proto_iconv)
+    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+      [Define as const if the declaration of iconv() needs const.])
+  fi
+])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
new file mode 100644 (file)
index 0000000..96c4e2c
--- /dev/null
@@ -0,0 +1,110 @@
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]* | [A-Za-z]:[\\/]*)]
+      [re_direlt='/[^/][^/]*/\.\./']
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+       ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(acl_cv_path_LD,
+[if test -z "$LD"; then
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+       test "$with_gnu_ld" != no && break ;;
+      *)
+       test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
new file mode 100644 (file)
index 0000000..f95b7ba
--- /dev/null
@@ -0,0 +1,644 @@
+# lib-link.m4 serial 9 (gettext-0.16)
+dnl Copyright (C) 2001-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.50)
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+    AC_LIB_LINKFLAGS_BODY([$1], [$2])
+    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+  dnl results of this search when this library appears as a dependency.
+  HAVE_LIB[]NAME=yes
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. If found, it
+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed lib[]Name and not disabled its use
+  dnl via --without-lib[]Name-prefix, he wants to use it.
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+    ac_save_LIBS="$LIBS"
+    LIBS="$LIBS $LIB[]NAME"
+    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+    LIBS="$ac_save_LIBS"
+  ])
+  if test "$ac_cv_lib[]Name" = yes; then
+    HAVE_LIB[]NAME=yes
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+    AC_MSG_CHECKING([how to link with lib[]$1])
+    AC_MSG_RESULT([$LIB[]NAME])
+  else
+    HAVE_LIB[]NAME=no
+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+    dnl $INC[]NAME either.
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    LIB[]NAME=
+    LTLIB[]NAME=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
+dnl hardcode_direct, hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
+  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+  ])
+  wl="$acl_cv_wl"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  dnl Determine whether the user wants rpath handling at all.
+  AC_ARG_ENABLE(rpath,
+    [  --disable-rpath         do not hardcode runtime library paths],
+    :, enable_rpath=yes)
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib$1-prefix],
+[  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
+  --without-lib$1-prefix     don't search for lib$1 in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  dnl Search the library and its dependencies in $additional_libdir and
+  dnl $LDFLAGS. Using breadth-first-seach.
+  LIB[]NAME=
+  LTLIB[]NAME=
+  INC[]NAME=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='$1 $2'
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+        dnl or AC_LIB_HAVE_LINKFLAGS call.
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+          else
+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+            dnl that this library doesn't exist. So just drop it.
+            :
+          fi
+        else
+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
+          found_dir=
+          found_la=
+          found_so=
+          found_a=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" \
+               && { test -f "$additional_libdir/lib$name.$shlibext" \
+                    || { test "$shlibext" = dll \
+                         && test -f "$additional_libdir/lib$name.dll.a"; }; }; then
+              found_dir="$additional_libdir"
+              if test -f "$additional_libdir/lib$name.$shlibext"; then
+                found_so="$additional_libdir/lib$name.$shlibext"
+              else
+                found_so="$additional_libdir/lib$name.dll.a"
+              fi
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIB[]NAME; do
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  if test -n "$shlibext" \
+                     && { test -f "$dir/lib$name.$shlibext" \
+                          || { test "$shlibext" = dll \
+                               && test -f "$dir/lib$name.dll.a"; }; }; then
+                    found_dir="$dir"
+                    if test -f "$dir/lib$name.$shlibext"; then
+                      found_so="$dir/lib$name.$shlibext"
+                    else
+                      found_so="$dir/lib$name.dll.a"
+                    fi
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+            dnl Found the library.
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+              dnl Linking with a shared library. We attempt to hardcode its
+              dnl directory into the executable's runpath, unless it's the
+              dnl standard /usr/lib.
+              if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                dnl No hardcoding is needed.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+              else
+                dnl Use an explicit option to hardcode DIR into the resulting
+                dnl binary.
+                dnl Potentially add DIR to ltrpathdirs.
+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                dnl The hardcoding into $LIBNAME is system dependent.
+                if test "$hardcode_direct" = yes; then
+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+                  dnl resulting binary.
+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+                    dnl Use an explicit option to hardcode DIR into the resulting
+                    dnl binary.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    dnl Potentially add DIR to rpathdirs.
+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
+                    haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                    dnl Rely on "-L$found_dir".
+                    dnl But don't add it if it's already contained in the LDFLAGS
+                    dnl or the already constructed $LIBNAME
+                    haveit=
+                    for x in $LDFLAGS $LIB[]NAME; do
+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+                    fi
+                    if test "$hardcode_minus_L" != no; then
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    else
+                      dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
+                      dnl here, because this doesn't fit in flags passed to the
+                      dnl compiler. So give up. No hardcoding. This affects only
+                      dnl very old systems.
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                dnl Linking with a static library.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+              else
+                dnl We shouldn't come here, but anyway it's good to have a
+                dnl fallback.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+              fi
+            fi
+            dnl Assume the include files are nearby.
+            additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+              dnl Potentially add $additional_includedir to $INCNAME.
+              dnl But don't add it
+              dnl   1. if it's the standard /usr/include,
+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
+              dnl   3. if it's already present in $CPPFLAGS or the already
+              dnl      constructed $INCNAME,
+              dnl   4. if it doesn't exist as a directory.
+              if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INC[]NAME; do
+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                      dnl Really add $additional_includedir to $INCNAME.
+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+            dnl Look for dependencies.
+            if test -n "$found_la"; then
+              dnl Read the .la file. It defines the variables
+              dnl dlname, library_names, old_library, dependency_libs, current,
+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
+              save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+              dnl We use only dependency_libs.
+              for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dnl But don't add it
+                    dnl   1. if it's the standard /usr/lib,
+                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
+                    dnl   3. if it's already present in $LDFLAGS or the already
+                    dnl      constructed $LIBNAME,
+                    dnl   4. if it doesn't exist as a directory.
+                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                      dnl Potentially add DIR to rpathdirs.
+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
+                      haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                      dnl Potentially add DIR to ltrpathdirs.
+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                      haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                    dnl Handle this in the next round.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                    dnl Handle this in the next round. Throw away the .la's
+                    dnl directory; it is already contained in a preceding -L
+                    dnl option.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                    dnl Most likely an immediate library name.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+            dnl Didn't find the library; assume it is in the system directories
+            dnl known to the linker and runtime loader. (All the system
+            dnl directories known to the linker should also be known to the
+            dnl runtime loader, otherwise the system is severely misconfigured.)
+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$hardcode_libdir_separator"; then
+      dnl Weird platform: only the last -rpath option counts, the user must
+      dnl pass all path elements in one option. We can arrange that for a
+      dnl single library, but not when more than one $LIBNAMEs are used.
+      alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+    else
+      dnl The -rpath options are cumulative.
+      for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+    dnl When using libtool, the option that works for both libraries and
+    dnl executables is -R. The -R options are cumulative.
+    for found_dir in $ltrpathdirs; do
+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+    done
+  fi
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+  for element in [$2]; do
+    haveit=
+    for x in $[$1]; do
+      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      [$1]="${[$1]}${[$1]:+ }$element"
+    fi
+  done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+  AC_REQUIRE([AC_LIB_RPATH])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  $1=
+  if test "$enable_rpath" != no; then
+    if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
+      dnl Use an explicit option to hardcode directories into the resulting
+      dnl binary.
+      rpathdirs=
+      next=
+      for opt in $2; do
+        if test -n "$next"; then
+          dir="$next"
+          dnl No need to hardcode the standard /usr/lib.
+          if test "X$dir" != "X/usr/$acl_libdirstem"; then
+            rpathdirs="$rpathdirs $dir"
+          fi
+          next=
+        else
+          case $opt in
+            -L) next=yes ;;
+            -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+                 dnl No need to hardcode the standard /usr/lib.
+                 if test "X$dir" != "X/usr/$acl_libdirstem"; then
+                   rpathdirs="$rpathdirs $dir"
+                 fi
+                 next= ;;
+            *) next= ;;
+          esac
+        fi
+      done
+      if test "X$rpathdirs" != "X"; then
+        if test -n ""$3""; then
+          dnl libtool is used for linking. Use -R options.
+          for dir in $rpathdirs; do
+            $1="${$1}${$1:+ }-R$dir"
+          done
+        else
+          dnl The linker is used for linking directly.
+          if test -n "$hardcode_libdir_separator"; then
+            dnl Weird platform: only the last -rpath option counts, the user
+            dnl must pass all path elements in one option.
+            alldirs=
+            for dir in $rpathdirs; do
+              alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$dir"
+            done
+            acl_save_libdir="$libdir"
+            libdir="$alldirs"
+            eval flag=\"$hardcode_libdir_flag_spec\"
+            libdir="$acl_save_libdir"
+            $1="$flag"
+          else
+            dnl The -rpath options are cumulative.
+            for dir in $rpathdirs; do
+              acl_save_libdir="$libdir"
+              libdir="$dir"
+              eval flag=\"$hardcode_libdir_flag_spec\"
+              libdir="$acl_save_libdir"
+              $1="${$1}${$1:+ }$flag"
+            done
+          fi
+        fi
+      fi
+    fi
+  fi
+  AC_SUBST([$1])
+])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
new file mode 100644 (file)
index 0000000..a8684e1
--- /dev/null
@@ -0,0 +1,185 @@
+# lib-prefix.m4 serial 5 (gettext-0.15)
+dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib-prefix],
+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  if test $use_additional = yes; then
+    dnl Potentially add $additional_includedir to $CPPFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/include,
+    dnl   2. if it's already present in $CPPFLAGS,
+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_includedir" != "X/usr/include"; then
+      haveit=
+      for x in $CPPFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-I$additional_includedir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_includedir" = "X/usr/local/include"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_includedir"; then
+            dnl Really add $additional_includedir to $CPPFLAGS.
+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+          fi
+        fi
+      fi
+    fi
+    dnl Potentially add $additional_libdir to $LDFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/lib,
+    dnl   2. if it's already present in $LDFLAGS,
+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+      haveit=
+      for x in $LDFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-L$additional_libdir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_libdir"; then
+            dnl Really add $additional_libdir to $LDFLAGS.
+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+          fi
+        fi
+      fi
+    fi
+  fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+  dnl Unfortunately, prefix and exec_prefix get only finally determined
+  dnl at the end of configure.
+  if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  $1
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing
+dnl the basename of the libdir, either "lib" or "lib64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+  dnl There is no formal standard regarding lib and lib64. The current
+  dnl practice is that on a system supporting 32-bit and 64-bit instruction
+  dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit
+  dnl libraries go under $prefix/lib. We determine the compiler's default
+  dnl mode by looking at the compiler's library search path. If at least
+  dnl of its elements ends in /lib64 or points to a directory whose absolute
+  dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the
+  dnl default, namely "lib".
+  acl_libdirstem=lib
+  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+  if test -n "$searchpath"; then
+    acl_save_IFS="${IFS=       }"; IFS=":"
+    for searchdir in $searchpath; do
+      if test -d "$searchdir"; then
+        case "$searchdir" in
+          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+          *) searchdir=`cd "$searchdir" && pwd`
+             case "$searchdir" in
+               */lib64 ) acl_libdirstem=lib64 ;;
+             esac ;;
+        esac
+      fi
+    done
+    IFS="$acl_save_IFS"
+  fi
+])
diff --git a/m4/nls.m4 b/m4/nls.m4
new file mode 100644 (file)
index 0000000..7967cc2
--- /dev/null
+++ b/m4/nls.m4
@@ -0,0 +1,31 @@
+# nls.m4 serial 3 (gettext-0.15)
+dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+AC_DEFUN([AM_NLS],
+[
+  AC_MSG_CHECKING([whether NLS is requested])
+  dnl Default is enabled NLS
+  AC_ARG_ENABLE(nls,
+    [  --disable-nls           do not use Native Language Support],
+    USE_NLS=$enableval, USE_NLS=yes)
+  AC_MSG_RESULT($USE_NLS)
+  AC_SUBST(USE_NLS)
+])
diff --git a/m4/po.m4 b/m4/po.m4
new file mode 100644 (file)
index 0000000..00133ef
--- /dev/null
+++ b/m4/po.m4
@@ -0,0 +1,428 @@
+# po.m4 serial 13 (gettext-0.15)
+dnl Copyright (C) 1995-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+  AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+  AC_REQUIRE([AM_NLS])dnl
+
+  dnl Perform the following tests also if --disable-nls has been given,
+  dnl because they are needed for "make dist" to work.
+
+  dnl Search for GNU msgfmt in the PATH.
+  dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+  dnl The second test excludes FreeBSD msgfmt.
+  AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+    [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+  dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+  case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+    *) MSGFMT_015=$MSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+    *) GMSGFMT_015=$GMSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([GMSGFMT_015])
+
+  dnl Search for GNU xgettext 0.12 or newer in the PATH.
+  dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+  dnl The second test excludes FreeBSD xgettext.
+  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+    [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  dnl Remove leftover from FreeBSD xgettext call.
+  rm -f messages.po
+
+  dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+  case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+    *) XGETTEXT_015=$XGETTEXT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([XGETTEXT_015])
+
+  dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+  AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+    [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+  dnl Installation directories.
+  dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+  dnl have to define it here, so that it can be used in po/Makefile.
+  test -n "$localedir" || localedir='${datadir}/locale'
+  AC_SUBST([localedir])
+
+  AC_CONFIG_COMMANDS([po-directories], [[
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        # Treat a directory as a PO directory if and only if it has a
+        # POTFILES.in file. This allows packages to have multiple PO
+        # directories under different names or in different locations.
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[  ]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.in.
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          # Compute POFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+          # Compute UPDATEPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+          # Compute DUMMYPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+          # Compute GMOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          GMOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done]],
+   [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+    # from automake < 1.5.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+   ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+  # When this code is run, in config.status, two variables have already been
+  # set:
+  # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+  # - LINGUAS is the value of the environment variable LINGUAS at configure
+  #   time.
+
+changequote(,)dnl
+  # Adjust a relative srcdir.
+  ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+  ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+  ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+  # In autoconf-2.13 it is called $ac_given_srcdir.
+  # In autoconf-2.50 it is called $srcdir.
+  test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+  case "$ac_given_srcdir" in
+    .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+    /*) top_srcdir="$ac_given_srcdir" ;;
+    *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  # Find a way to echo strings without interpreting backslash.
+  if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+    gt_echo='echo'
+  else
+    if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+      gt_echo='printf %s\n'
+    else
+      echo_func () {
+        cat <<EOT
+$*
+EOT
+      }
+      gt_echo='echo_func'
+    fi
+  fi
+
+  # A sed script that extracts the value of VARIABLE from a Makefile.
+  sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^[     ]*VARIABLE[     ]*=/{
+  # Seen the first line of the variable definition.
+  s/^[  ]*VARIABLE[     ]*=//
+  ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+  # Set POTFILES to the value of the Makefile variable POTFILES.
+  sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+  POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+  # Compute POTFILES_DEPS as
+  #   $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+  POTFILES_DEPS=
+  for file in $POTFILES; do
+    POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+  done
+  POMAKEFILEDEPS=""
+
+  if test -n "$OBSOLETE_ALL_LINGUAS"; then
+    test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+  fi
+  if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+    # The LINGUAS file contains the set of available languages.
+    ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+    POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+  else
+    # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+    sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+    ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+  fi
+  # Hide the ALL_LINGUAS assigment from automake < 1.5.
+  eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+  # Compute POFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+  # Compute UPDATEPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+  # Compute DUMMYPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+  # Compute GMOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+  # Compute PROPERTIESFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+  # Compute CLASSFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+  # Compute QMFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+  # Compute MSGFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+  # Compute RESOURCESDLLFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+  case "$ac_given_srcdir" in
+    .) srcdirpre= ;;
+    *) srcdirpre='$(srcdir)/' ;;
+  esac
+  POFILES=
+  UPDATEPOFILES=
+  DUMMYPOFILES=
+  GMOFILES=
+  PROPERTIESFILES=
+  CLASSFILES=
+  QMFILES=
+  MSGFILES=
+  RESOURCESDLLFILES=
+  for lang in $ALL_LINGUAS; do
+    POFILES="$POFILES $srcdirpre$lang.po"
+    UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+    DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+    GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+    PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+    CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+    QMFILES="$QMFILES $srcdirpre$lang.qm"
+    frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+    MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+    frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+    RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+  done
+  # CATALOGS depends on both $ac_dir and the user's LINGUAS
+  # environment variable.
+  INST_LINGUAS=
+  if test -n "$ALL_LINGUAS"; then
+    for presentlang in $ALL_LINGUAS; do
+      useit=no
+      if test "%UNSET%" != "$LINGUAS"; then
+        desiredlanguages="$LINGUAS"
+      else
+        desiredlanguages="$ALL_LINGUAS"
+      fi
+      for desiredlang in $desiredlanguages; do
+        # Use the presentlang catalog if desiredlang is
+        #   a. equal to presentlang, or
+        #   b. a variant of presentlang (because in this case,
+        #      presentlang can be used as a fallback for messages
+        #      which are not translated in the desiredlang catalog).
+        case "$desiredlang" in
+          "$presentlang"*) useit=yes;;
+        esac
+      done
+      if test $useit = yes; then
+        INST_LINGUAS="$INST_LINGUAS $presentlang"
+      fi
+    done
+  fi
+  CATALOGS=
+  JAVACATALOGS=
+  QTCATALOGS=
+  TCLCATALOGS=
+  CSHARPCATALOGS=
+  if test -n "$INST_LINGUAS"; then
+    for lang in $INST_LINGUAS; do
+      CATALOGS="$CATALOGS $lang.gmo"
+      JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+      QTCATALOGS="$QTCATALOGS $lang.qm"
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+    done
+  fi
+
+  sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp"
+  if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+       @echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+       \$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+       @echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+       \$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if test -n "$POMAKEFILEDEPS"; then
+    cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+  fi
+  mv "$ac_file.tmp" "$ac_file"
+])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
new file mode 100644 (file)
index 0000000..a56365c
--- /dev/null
@@ -0,0 +1,92 @@
+# progtest.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+AC_PREREQ(2.50)
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  [[\\/]]* | ?:[[\\/]]*)
+    ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in ifelse([$5], , $PATH, [$5]); do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+          if [$3]; then
+            ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+    ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
index 3240975..8f4503b 100644 (file)
@@ -10,6 +10,7 @@ de
 es
 fr
 hu
+hr
 it
 lv
 nl
index 71ba7c7..fa87f3d 100644 (file)
@@ -3,10 +3,10 @@ src/glade/psensor.glade
 src/glade/psensor-pref.glade
 src/glade/sensor-edit.glade
 src/lib/amd.c
-src/lib/cpu.c
 src/lib/hdd_atasmart.c
 src/lib/hdd_hddtemp.c
 src/lib/lmsensor.c
+src/lib/pgtop2.c
 src/lib/plog.c
 src/lib/nvidia.c
 src/lib/psensor.c
index 09cbfd5..cae1870 100644 (file)
Binary files a/po/de.gmo and b/po/de.gmo differ
index 74cc44e..b23c4b0 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -7,32 +7,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor 0.7.0.x\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2014-04-30 16:48+0100\n"
-"Last-Translator: Jean-Philippe Orsini <jeanfi@gmail.com>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-20 11:25+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: German\n"
 "Language: de\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-02-11 20:01+0000\n"
-"X-Generator: Poedit 1.5.4\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, fuzzy, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr "Erzeugen des Webservers ist gescheitert."
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr ""
-
-#: src/cfg.c:545
-#, c-format
-msgid "Failed to parse configuration file: %s"
-msgstr ""
+#: src/cfg.c:557
+#, fuzzy, c-format
+msgid "Failed to load configuration file %s: %s"
+msgstr "Aktivieren der Sensorenprotokollierung ist gescheitert."
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, fuzzy, c-format
 msgid "Failed to save configuration file %s."
 msgstr "Aktivieren der Sensorenprotokollierung ist gescheitert."
@@ -42,7 +38,7 @@ msgid "About"
 msgstr "Info"
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "Einstellungen"
 
@@ -71,6 +67,31 @@ msgstr "_Psensor"
 msgid "_Help"
 msgstr "_Hilfe"
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Sensor"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "Wert"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Min."
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Max."
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "Farbe"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "Graph"
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -92,316 +113,409 @@ msgstr "Unterseite"
 msgid "Edit Preferences"
 msgstr "Einstellungen bearbeiten"
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr "Keine Fensterdekorationen verwenden"
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr "Fenster unterhalb anheften"
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "Menü aktivieren"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr "Wert im Starter von Unity anzeigen"
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr "Temperatureinheit:"
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr "Position der Sensorentabelle:"
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr "Benutzeroberfläche"
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr "Fenster beim Programmstart ausblenden"
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr "Fensterposition und -größe merken"
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr "Vordergrund:"
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr "Hintergrund:"
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr "Hintergrunddeckkraft:"
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
-msgstr "<i>Min.</i>"
-
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
-msgstr "<i>Max.</i>"
-
-#: src/glade/psensor-pref.glade:530
+#: src/glade/psensor-pref.glade:500
 msgid "Colors"
 msgstr "Farben"
 
-#: src/glade/psensor-pref.glade:548
+#: src/glade/psensor-pref.glade:521
 msgid "Monitoring duration:"
 msgstr "Überwachungszeitraum:"
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
-msgstr "Minute(n)"
-
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
-msgid "second(s)"
-msgstr "Sekunde(n)"
-
-#: src/glade/psensor-pref.glade:637
+#: src/glade/psensor-pref.glade:539
 msgid "Update interval:"
 msgstr "Aktualisierungsintervall:"
 
-#: src/glade/psensor-pref.glade:655
+#: src/glade/psensor-pref.glade:557
 msgid "Measures"
 msgstr "Messungen"
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
-msgstr "Graph"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>Min.</i>"
+
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>Max.</i>"
+
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "Sekunde(n)"
+
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "Minute(n)"
+
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr ""
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr "Messintervall:"
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr "Sensorenprotokollierung aktivieren"
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr "Sekunde(n)"
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "Sensoren"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr "Sensoreinstellungen bearbeiten"
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr "Name"
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr "Typ:"
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "N/V"
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr "Sensorinformationen"
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr "Chip:"
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr "Name:"
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr "Id:"
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr "Sensorgraphen darstellen"
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr "Farbe:"
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
-msgstr "Alarm"
+#: src/glade/sensor-edit.glade:380
+msgid "Display sensor in the list of sensors"
+msgstr ""
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr "Benachrichtigungen aktivieren"
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr "Obere Grenze:"
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr "Untere Grenze:"
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
-msgstr ""
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "Alarm"
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 msgid "Display sensor in the label (experimental)"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:541
-msgid "Display sensor in the list of sensors"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
 msgstr ""
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr "AMD: ADL-Bibliothek konnte nicht gefunden werden."
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr "AMD: API der ADL-Bibliothek fehlt."
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr "AMD: ADL-Bibliothek konnte nicht initialisiert werden."
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr "AMD: Anzahl der Adapter konnte nicht ermittelt werden."
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr "Anzahl der AMD/ATI-Adapter: %d"
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr "Anzahl der aktiven AMD/ATI-Adapter: %d"
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr ""
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr ""
 
-#: src/lib/hdd_atasmart.c:152
+#: src/lib/hdd_atasmart.c:141
 #, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
-msgstr "atasmart: sk_disk_open() gescheitert: %s."
+msgid "%s: sk_disk_open() failure: %s."
+msgstr "%s: sk_disk_open() gescheitert: %s."
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
-msgstr "hddtemp: Öffnen des Sockets gescheitert."
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
+msgstr "%s: Öffnen des Sockets gescheitert."
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
-msgstr "hddtemp: Öffnen der Verbindung gescheitert."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
+msgstr "%s: Öffnen der Verbindung gescheitert."
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
-msgstr "hddtemp: Falsche Zeichenkette: %s."
+msgid "%s: wrong string: %s."
+msgstr "%s: Falsche Zeichenkette: %s."
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
-msgstr "lmsensor: Wert der Unterfunktion %s kann nicht ermittelt werden: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
+msgstr "%s: Wert der Unterfunktion %s kann nicht ermittelt werden: %s."
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
-msgstr "lmsensor: lmsensor_psensor_create gescheitert: Falscher Funktionstyp."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
+msgstr "%s: Falscher Funktionstyp."
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:218
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
 #, c-format
-msgid "lmsensor: initialization failure: %s."
-msgstr "lmsensor: Initialisierung gescheitert: %s."
+msgid "%s: initialization failure: %s."
+msgstr "%s: Initialisierung gescheitert: %s."
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr ""
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr ""
 
 #: src/lib/plog.c:43
 #, c-format
 msgid "Cannot open log file: %s"
 msgstr "Protokolldatei kann nicht geöffnet werden: %s"
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
-msgstr ""
-"Entweder wird kein proprietärer NVIDIA-Treiber verwendet oder die NVIDIA-GPU-"
-"Temperatur kann nicht ermittelt werden."
+#: src/lib/nvidia.c:58
+#, fuzzy, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "Ermittlung der NVIDIA-Informationen gescheitert."
+
+#: src/lib/nvidia.c:63
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "Ermittlung der NVIDIA-Informationen gescheitert."
+
+#: src/lib/nvidia.c:226
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
+msgstr "Ermittlung der NVIDIA-Informationen gescheitert."
+
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s: Verbindung zum X11-Server konnte nicht hergestellt werden."
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
-msgstr "Verbindung zum X11-Server konnte nicht hergestellt werden."
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s: Ermittlung der NVIDIA-Informationen gescheitert."
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:370
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve number of fans."
 msgstr "Ermittlung der NVIDIA-Informationen gescheitert."
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr "U/min"
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr "%"
 
@@ -409,26 +523,26 @@ msgstr "%"
 msgid "HOME variable not set."
 msgstr "HOME-Variable ist nicht festgelegt."
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr "Sensorprotokolldatei ist bereits geöffnet."
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr "Sensorprotokolldatei kann nicht geöffnet werden: %s."
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr "Sensorprotokolldatei ist nicht geöffnet."
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr ""
 "Sensorprotokolldatei ist nicht geöffnet und kann deswegen nicht geschlossen "
 "werden."
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -444,12 +558,12 @@ msgstr ""
 "weiterverbreiten.\n"
 "Sie wird OHNE JEGLICHE GEWÄHRLEISTUNG zur Verfügung gestellt.\n"
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "Aufruf: %s [OPTION] …\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
@@ -457,11 +571,11 @@ msgstr ""
 "Psensor ist eine GTK+-Anwendung zur Überwachung von Hardware-Sensoren, "
 "inklusive Temperaturen und Lüftergeschwindigkeiten."
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "Optionen:"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
@@ -469,7 +583,7 @@ msgstr ""
 "  -h, --help          Diese Hilfe anzeigen und beenden\n"
 "  -v, --version       Versionsinformationen anzeigen und beenden"
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
@@ -477,57 +591,59 @@ msgstr ""
 "  -u, --url=URL       Die Adresse (URL) von psensor-server,\n"
 "                      Beispiel: http://hostname:3131"
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-"  --use-libatasmart   atasmart-Bibliothek zur Festplattenüberwachung\n"
-"                      anstelle des hddtemp-Dienstes nutzen"
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr ""
 "  -n, --new-instance  Erzeugung einer neuen Psensor-Anwendung erzwingen"
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=STUFE   Fehlerdiagnosestufe festlegen, Ganzzahl zwischen 0 und "
 "3"
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "Programmfehler melden an: %s\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr "%s-Website: <%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr "Psensor wurde ohne Unterstützung für entfernte Sensoren kompiliert."
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr "Fehlerdiagnosemodus wird aktiviert."
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Rufen Sie »%s --help« auf, um weitere Informationen zu erhalten.\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr "Es existiert bereits eine Psensor-Instanz."
 
-#: src/main.c:597
+#: src/main.c:631
 #, fuzzy
 msgid "Failed to create thread for monitoring sensors"
 msgstr "Erzeugen des Webservers ist gescheitert."
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Daniel Winzen https://launchpad.net/~q-d\n"
+"  Dennis Baudys https://launchpad.net/~thecondordb\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi\n"
+"  Michael Egger https://launchpad.net/~michael-egger\n"
+"  Veit https://launchpad.net/~shoutbox"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -543,24 +659,24 @@ msgstr "Ungültiger Inhalt: %s"
 msgid "Invalid JSON: %s"
 msgstr "Ungültiges JSON: %s"
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr "<html><body><p>Anhalten des Servers angefordert</p></body></html>"
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 "<html><body><p>Seite nicht gefunden – Gehen Sie zurück zur <a "
 "href='/'>Startseite</a></p></body>"
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 "psensor-server ist ein HTTP-Server zur Fernüberwachung von Hardware-Sensoren."
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
@@ -568,7 +684,7 @@ msgstr ""
 "  -h, --help\t\tDiese Hilfe anzeigen und beenden\n"
 "  -v, --version\t\tVersionsinformationen anzeigen und beenden"
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
@@ -576,110 +692,91 @@ msgstr ""
 "  -p,--port=PORT\tWebserver-Port\n"
 "  -w,--wdir=DIR\t\tOrdner, der Webserver-Seiten enthält"
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=LEVEL     Fehlerdiagnoseebene festlegen, Ganzzahl zwischen 0 "
 "und 3"
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr "  -l, --log-file=PATH   Protokolldatei auf PATH festlegen"
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr "  --sensor-log-file=PATH Sensorenprotokolldatei auf PATH festlegen"
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 "  --sensor-log-interval=S Sensorenprotokollierungsintervall auf S (Sekunden) "
 "festlegen"
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr "HTTP Abfrage: %s"
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr "Aktiviert den Fehlerdiagnosemodus: %d"
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr "Keine Sensoren erkannt."
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr "Erzeugen des Webservers ist gescheitert."
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr "Web-Server wurde gestartet auf Port: %d"
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr "WWW-Ordner: %s"
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr "Adresse: http://localhost:%d"
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr "Aktivieren der Sensorenprotokollierung ist gescheitert."
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr "Psensor ist eine GTK-Anwendung zur Überwachung von Hardware-Sensoren"
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
-msgstr ""
-"Copyright © 2010-2014\n"
-"jeanfi@gmail.com"
-
 #: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
+msgstr "Copyright © 2010-2014jeanfi@gmail.com"
+
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "Info zu Psensor"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "Psensor-Website"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr "Laden des Psensor-Symbols ist gescheitert."
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "Wählen Sie eine Vordergrundfarbe"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "Sensor"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr "Wert"
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "Min."
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "Max."
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr ""
 
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "Farbe"
+#: src/ui_sensorlist.c:296
+#, fuzzy
+msgid "Select sensor color"
+msgstr "Wählen Sie eine Vordergrundfarbe"
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -690,9 +787,24 @@ msgid "Temperature alert"
 msgstr "Temperaturalarm"
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+#, fuzzy
+msgid "Fan speed alert"
 msgstr "Lüfteralarm"
 
 #: src/ui_sensorpref.c:248
 msgid "Unknown"
 msgstr "Unbekannt"
+
+#~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#~ msgstr ""
+#~ "lmsensor: lmsensor_psensor_create gescheitert: Falscher Funktionstyp."
+
+#~ msgid "Sensor Information"
+#~ msgstr "Sensorinformationen"
+
+#~ msgid ""
+#~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU "
+#~ "temperature."
+#~ msgstr ""
+#~ "Entweder wird kein proprietärer NVIDIA-Treiber verwendet oder die NVIDIA-"
+#~ "GPU-Temperatur kann nicht ermittelt werden."
index 360fd65..113165c 100644 (file)
Binary files a/po/es.gmo and b/po/es.gmo differ
index 96f95aa..070b60a 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -7,32 +7,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2013-05-12 22:16+0000\n"
-"Last-Translator: Javier <buik8roadmaster@hotmail.com>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-20 11:26+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: Spanish <es@li.org>\n"
 "Language: es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-10-18 06:32+0000\n"
-"X-Generator: Launchpad (build 16799)\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, fuzzy, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr "Fallo al crear el servidor Web"
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr ""
-
-#: src/cfg.c:545
-#, c-format
-msgid "Failed to parse configuration file: %s"
-msgstr ""
+#: src/cfg.c:557
+#, fuzzy, c-format
+msgid "Failed to load configuration file %s: %s"
+msgstr "Error al activar el registro de sensores"
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, fuzzy, c-format
 msgid "Failed to save configuration file %s."
 msgstr "Error al activar el registro de sensores"
@@ -42,7 +38,7 @@ msgid "About"
 msgstr "Acerca de"
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "Ajustes"
 
@@ -71,6 +67,31 @@ msgstr "_Psensor"
 msgid "_Help"
 msgstr "_Ayuda"
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Sensor"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "Valor"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Mín"
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Máx"
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "Color"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "Gráfica"
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -92,318 +113,411 @@ msgstr "Abajo"
 msgid "Edit Preferences"
 msgstr "Editar Ajustes"
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr "Ocultar el marco de la ventana"
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr "Mantener debajo del resto de ventanas"
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "Activar menú"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr "Inicio retardado al abrir sesión"
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr "Unidad de temperatura"
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr "Ubicación de los valores"
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr "Interfaz"
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr "Ocultar la ventana de gráficas al iniciar sesión."
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr "Restaurar tamaño y posición de la ventana"
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr "Escalas y cuadrícula"
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr "Fondo de gráfica"
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr "Opacidad del fondo:"
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
-msgstr "<i>Mín</i>"
-
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
-msgstr "<i>Máx</i>"
-
-#: src/glade/psensor-pref.glade:530
+#: src/glade/psensor-pref.glade:500
 msgid "Colors"
 msgstr "Colores"
 
-#: src/glade/psensor-pref.glade:548
+#: src/glade/psensor-pref.glade:521
 msgid "Monitoring duration:"
 msgstr "Intervalo de la gráfica"
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
-msgstr "minuto(s)"
-
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
-msgid "second(s)"
-msgstr "segundo(s)"
-
-#: src/glade/psensor-pref.glade:637
+#: src/glade/psensor-pref.glade:539
 msgid "Update interval:"
 msgstr "Intervalo de actualización:"
 
-#: src/glade/psensor-pref.glade:655
+#: src/glade/psensor-pref.glade:557
 msgid "Measures"
 msgstr "Medidas"
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
-msgstr "Gráfica"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>Mín</i>"
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>Máx</i>"
+
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "segundo(s)"
+
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "minuto(s)"
+
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr "Medir sensores cada:"
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr "Activar registro de sensores"
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr "Intervalo de registro de sensores:"
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr "segundo(s)"
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "Sensores"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr "Editar Ajustes Sensores"
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr "Nombre"
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr "Tipo:"
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "No disponible"
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr "Información del sensor"
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr "Chip:"
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr "Nombre:"
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr "Identificativo:"
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr "Representar el sensor en la gráfica"
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr "Color:"
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
-msgstr "Alarma"
+#: src/glade/sensor-edit.glade:380
+#, fuzzy
+msgid "Display sensor in the list of sensors"
+msgstr "Mostrar sensor en el menú de aplicaciones"
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr "Activar notificaciones en el escritorio"
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr "Límite superior"
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr "Límite inferior"
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
-msgstr "Indicador de aplicación"
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "Alarma"
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr "Mostrar sensor en el menú de aplicaciones"
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 #, fuzzy
 msgid "Display sensor in the label (experimental)"
 msgstr "Mostrar sensor en el menú de aplicaciones"
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:541
-#, fuzzy
-msgid "Display sensor in the list of sensors"
-msgstr "Mostrar sensor en el menú de aplicaciones"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
+msgstr "Indicador de aplicación"
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr "AMD: no se ha encontrado la librería ADL"
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr "AMD: ADL's API perdidos"
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr "AMD: error al iniciar ADL"
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr "AMD: imposible listar el número de adaptadores"
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr "Numero de adaptadores AMD/ATI: %d"
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr "Numero de adaptadores AMD/ATI: %d"
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr ""
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr ""
 
-#: src/lib/hdd_atasmart.c:152
+#: src/lib/hdd_atasmart.c:141
 #, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
-msgstr "atasmart: sk_disk_open() Error: %s"
+msgid "%s: sk_disk_open() failure: %s."
+msgstr "%s: sk_disk_open() Error: %s"
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
-msgstr "hddtemp: fallo al desplegar el conector"
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
+msgstr "%s: fallo al desplegar el conector"
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
-msgstr "hddtemp: fallo al establecer conexión"
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
+msgstr "%s: fallo al establecer conexión"
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
-msgstr "hddtemp: argumento erróneo:%s."
+msgid "%s: wrong string: %s."
+msgstr "%s: argumento erróneo:%s."
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
-msgstr "lmsensor: imposible obtener el valor de subcaracterística %s:%s"
+msgid "%s: Cannot get value of subfeature %s: %s."
+msgstr "%s: imposible obtener el valor de subcaracterística %s:%s"
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
-msgstr "lmsensor: lmsensor_psensor_create Fallo: tipo de funcion equivocada."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
+msgstr ""
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:218
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
 #, c-format
-msgid "lmsensor: initialization failure: %s."
-msgstr "lmsensor: Fallo de inicialización:%s."
+msgid "%s: initialization failure: %s."
+msgstr "%s: Fallo de inicialización:%s."
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr ""
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr ""
 
 #: src/lib/plog.c:43
 #, c-format
 msgid "Cannot open log file: %s"
 msgstr "Imposible abrir el archivo de registro: %s"
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
-msgstr ""
-"Controlador propietario de NVIDIA no activado ó incapaz de obtener la "
-"temperatura de la GPU"
+#: src/lib/nvidia.c:58
+#, fuzzy, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "Error al obtener la información de NVIDIA"
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
-msgstr "Imposible establecer conexión con el servidor X11."
+#: src/lib/nvidia.c:63
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "Error al obtener la información de NVIDIA"
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:226
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
 msgstr "Error al obtener la información de NVIDIA"
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s: Imposible establecer conexión con el servidor X11."
+
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s: Error al obtener la información de NVIDIA"
+
+#: src/lib/nvidia.c:370
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve number of fans."
+msgstr "Error al obtener la información de NVIDIA"
+
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr "RPM"
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr "%"
 
@@ -411,24 +525,24 @@ msgstr "%"
 msgid "HOME variable not set."
 msgstr "La variable HOME no ha sido definida"
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr "Ya existe un registro de sensores abierto"
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr "No se puede abrir el archivo de registro: %s."
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr "No se abrió el archivo de registro."
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr "¡No existe archivo que cerrar!"
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -444,12 +558,12 @@ msgstr ""
 "apoyada por el autor. \n"
 "No existe NINGUNA GARANTÍA hasta donde la ley lo permita.\n"
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "Uso: %s [OPTION]...\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
@@ -457,11 +571,11 @@ msgstr ""
 "Psensor es un programa GTK+ que muestra datos de temperatura y ventiladores "
 "a través de los sensores de su hardware."
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "Opciones"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
@@ -469,7 +583,7 @@ msgstr ""
 "  -h, --help         Muestra esta ayuda. \n"
 "  -v, --versión       Muestra información sobre la versión."
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
@@ -477,56 +591,57 @@ msgstr ""
 "  -u, --url=URL       La URL del servidor psensor,\n"
 "                      ejemplo: http://hostname:3131"
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-"  --usar-libatasmart   usar librería atasmart para leer el sensor del disco\n"
-"                        duro en lugar de hddtemp daemon"
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr "  -n, --new-instance  Fuerza el inicio de otro Psensor paralelo"
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=NIVEL   Establece el nivel de depuración con un valor entre 0 "
 "y 3"
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "Comunicar fallos: %s\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr "%s Página Oficial: <%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr "Psensor no ha sido compilado con soporte para sensores remotos."
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr "Activa el modo de depuración"
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Introducir `%s --ayuda' para obtener más información\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr "Ya existe un Psensor en ejecución."
 
-#: src/main.c:597
+#: src/main.c:631
 #, fuzzy
 msgid "Failed to create thread for monitoring sensors"
 msgstr "Fallo al crear el servidor Web"
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Adolfo Jayme https://launchpad.net/~fitojb\n"
+"  Eduardo Alberto Calvo https://launchpad.net/~edu5800\n"
+"  Javier https://launchpad.net/~buik8roadmaster\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -542,25 +657,25 @@ msgstr "Contenido no válido:%s"
 msgid "Invalid JSON: %s"
 msgstr "JSON no válido:%s"
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr "<html><body><p>El servidor solicitó detenerse</p></body></html>"
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 "<html><body><p>Página no encontrada- Ir a <a href='/'>Página Principal</a></"
 "p></body>"
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 "psensor-server es un servidor HTTP para obtener información de los sensores "
 "de forma remota."
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
@@ -568,7 +683,7 @@ msgstr ""
 "  -h, --help\t\tMuestra esta ayuda.\n"
 "  -v, --version\t\tMuestra la versión."
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
@@ -576,111 +691,91 @@ msgstr ""
 "  -p,--port=PORT\tPuerto del servidor web. \n"
 "  -w,--wdir=DIR\t\tDirectorio de servidores web."
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=NIVEL     Establece el nivel de depuración con un número de 0 "
 "a 3"
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr "  -l, --log-file=PATH   establece el archivo de registro en PATH"
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr "  --sensor-log-file=PATH establecer el archivo de registro en PATH"
 
-#: src/server/server.c:114
-#, fuzzy
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr "  --sensor-log-interval=S registrar sensores cada S (seconds)"
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr "Petición HTTP:%s"
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr "Activa el modo de depuración:%d"
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr "No se han detectado sensores."
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr "Fallo al crear el servidor Web"
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr "Servidor web iniciado en el puerto:%d"
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr "directorio WWW:%s"
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr "URL: http://localhost:%d"
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr "Error al activar el registro de sensores"
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr ""
 "Psensor es una aplicación GTK+ que recoge y muestra información de los "
 "sensores del hardware."
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
-msgstr ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
-
 #: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
+msgstr "Copyright(c) 2010-2014 jeanfi@gmail.com"
+
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "Sobre Psensor"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "Web de Psensor"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr "Error al cargar el icono de Psensor"
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "Seleccionar el color del primer plano"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "Sensor"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr "Valor"
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "Mín"
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "Máx"
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr ""
 
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "Color"
+#: src/ui_sensorlist.c:296
+#, fuzzy
+msgid "Select sensor color"
+msgstr "Seleccionar el color del primer plano"
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -691,9 +786,24 @@ msgid "Temperature alert"
 msgstr "Alarma por temperatura."
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+#, fuzzy
+msgid "Fan speed alert"
 msgstr "Alarma por parada de ventilador."
 
 #: src/ui_sensorpref.c:248
 msgid "Unknown"
 msgstr "Desconocido"
+
+#~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#~ msgstr ""
+#~ "lmsensor: lmsensor_psensor_create Fallo: tipo de funcion equivocada."
+
+#~ msgid "Sensor Information"
+#~ msgstr "Información del sensor"
+
+#~ msgid ""
+#~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU "
+#~ "temperature."
+#~ msgstr ""
+#~ "Controlador propietario de NVIDIA no activado ó incapaz de obtener la "
+#~ "temperatura de la GPU"
index 513b873..5194c96 100644 (file)
Binary files a/po/fr.gmo and b/po/fr.gmo differ
index 3f02095..e415599 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,42 +7,38 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2013-06-29 15:14+0000\n"
-"Last-Translator: londumas <helion331990@gmail.com>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-21 09:39+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: French <>\n"
 "Language: fr_FR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-10-18 06:32+0000\n"
-"X-Generator: Launchpad (build 16799)\n"
+"X-Launchpad-Export-Date: 2014-09-21 09:40+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr ""
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr ""
-
-#: src/cfg.c:545
+#: src/cfg.c:557
 #, c-format
-msgid "Failed to parse configuration file: %s"
+msgid "Failed to load configuration file %s: %s"
 msgstr ""
 
-#: src/cfg.c:569
-#, fuzzy, c-format
+#: src/cfg.c:580
+#, c-format
 msgid "Failed to save configuration file %s."
-msgstr "Échec de l'activation de la journalisation des capteurs."
+msgstr ""
 
 #: src/glade/psensor.glade:6
 msgid "About"
 msgstr "À propos"
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "Préférences"
 
@@ -71,6 +67,31 @@ msgstr ""
 msgid "_Help"
 msgstr "_Aide"
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Capteur"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "Valeur"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Min"
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Max"
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "Couleur"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "Graphe"
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -92,317 +113,409 @@ msgstr "Bas"
 msgid "Edit Preferences"
 msgstr "Modifier les préférences"
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr "Cacher les décorations de la fenêtre"
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr "Garder la fenêtre en arrière-plan"
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "Activer le menu"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr "Activer le compteur du lanceur de Unity"
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr "Unité de température :"
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr "Position de la table des capteurs :"
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr "Interface"
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr "Cacher la fenêtre au lancement"
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr "Rétablir la position et la taille de la fenêtre"
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr "Avant-plan :"
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr "Arrière-plan :"
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr "Opacité de l'arrière-plan :"
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
-msgstr "<i>Min</i>"
-
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
-msgstr "<i>Max</i>"
-
-#: src/glade/psensor-pref.glade:530
+#: src/glade/psensor-pref.glade:500
 msgid "Colors"
 msgstr "Couleurs"
 
-#: src/glade/psensor-pref.glade:548
+#: src/glade/psensor-pref.glade:521
 msgid "Monitoring duration:"
 msgstr "Durée de surveillance :"
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
-msgstr "minutes(s)"
-
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
-msgid "second(s)"
-msgstr "seconde(s)"
-
-#: src/glade/psensor-pref.glade:637
+#: src/glade/psensor-pref.glade:539
 msgid "Update interval:"
 msgstr "Intervalle de mise à jour :"
 
-#: src/glade/psensor-pref.glade:655
+#: src/glade/psensor-pref.glade:557
 msgid "Measures"
 msgstr "Mesures"
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
-msgstr "Graphe"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>Min</i>"
+
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>Max</i>"
+
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "seconde(s)"
+
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "minutes(s)"
+
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr ""
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr "Intervalle de mise à jour des mesures :"
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr "Activer la journalisation des capteurs"
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr "Interval de journallisation des capteurs :"
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr "seconde(s)"
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "Capteurs"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr "Préférences des capteurs"
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr "Nom :"
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr "Type :"
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "N/A"
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr "Informations du capteur"
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr "Puce :"
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr "Nom :"
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr "Id :"
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr "Dessiner la courbe du capteur"
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr "Couleur :"
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
-msgstr "Alarme"
+#: src/glade/sensor-edit.glade:380
+msgid "Display sensor in the list of sensors"
+msgstr ""
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr "Activer les notifications du bureau"
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr "Seuil supérieur :"
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr "Seuil inférieur :"
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
-msgstr "Indicateur d'application"
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "Alarme"
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr "Afficher le capteur dans le menu"
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 msgid "Display sensor in the label (experimental)"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:541
-#, fuzzy
-msgid "Display sensor in the list of sensors"
-msgstr "Afficher le capteur dans le menu"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
+msgstr "Indicateur d'application"
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr "AMD : impossible de trouver la bibliothèque ADL."
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr "AMD : L'interface de programmation ADL est manquante."
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr "AMD : échec de l'initialisation d'ADL."
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr "AMD : impossible de récupérer le nombre d'adaptateurs."
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr "Processeur"
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr "Disque"
 
-#: src/lib/hdd_atasmart.c:152
+#: src/lib/hdd_atasmart.c:141
 #, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
-msgstr "atasmart : échec de sk_disk_open() : %s."
+msgid "%s: sk_disk_open() failure: %s."
+msgstr "%s : échec de sk_disk_open() : %s."
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
-msgstr "hddtemp : échec d'ouverture de l'interface de connexion."
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
+msgstr "%s : échec d'ouverture de l'interface de connexion."
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
-msgstr "hddtemp : échec de l'ouverture de la connexion."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
+msgstr "%s : échec de l'ouverture de la connexion."
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
-msgstr "hddtemp : mauvaise chaîne: %s."
+msgid "%s: wrong string: %s."
+msgstr "%s : mauvaise chaîne: %s."
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
-msgstr ""
-"lmsensor : impossible de récupérer la valeur de la sous-fonction %s: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
+msgstr "%s : impossible de récupérer la valeur de la sous-fonction %s: %s."
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
 msgstr ""
-"lmsensor : échec de lmsensor_psensor_create : mauvais type de fonction."
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr "Processeur Intel"
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr "Processeur graphique NVIDIA"
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:218
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
 #, c-format
-msgid "lmsensor: initialization failure: %s."
-msgstr "lmsensor : échec de l'initialisation: %s."
+msgid "%s: initialization failure: %s."
+msgstr "%s : échec de l'initialisation: %s."
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr "Processeur"
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr ""
 
 #: src/lib/plog.c:43
 #, c-format
 msgid "Cannot open log file: %s"
 msgstr "Impossible d'ouvrir le journal: %s"
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
-msgstr "Échec de la récupération des températures NVIDIA."
+#: src/lib/nvidia.c:58
+#, fuzzy, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "Échec de la récupération des information NVIDIA."
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
-msgstr "Impossible d'ouvrir la connexion au serveur X11."
+#: src/lib/nvidia.c:63
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "Échec de la récupération des information NVIDIA."
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:226
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
 msgstr "Échec de la récupération des information NVIDIA."
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s : Impossible d'ouvrir la connexion au serveur X11."
+
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s : Échec de la récupération des information NVIDIA."
+
+#: src/lib/nvidia.c:370
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve number of fans."
+msgstr "Échec de la récupération des information NVIDIA."
+
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr "Tr/mn"
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr "%"
 
@@ -410,24 +523,24 @@ msgstr "%"
 msgid "HOME variable not set."
 msgstr "Variable home non définie."
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr "Le journal des capteurs est déjà ouvert."
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr "Ne peut ouvrir le journal : %s."
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr "Le journal des capteurs n'est pas ouvert."
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr "Le journal des capteurs n'est pas ouvert, il ne peut être fermé."
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -437,19 +550,19 @@ msgid ""
 "There is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 "Copyright © %s wpitchoune@gmail.com\n"
-"License GPLv2 : GNU GPL version 3 ou ultérieure <http://www.gnu.org/licenses/"
+"License GPLv2 : GNU GPL version 2 ou ultérieure <http://www.gnu.org/licenses/"
 "old-licenses/gpl-2.0.html>\n"
 "Ceci est un logiciel libre, vous êtes libre de le modifier et de le \n"
 "redistribuer.\n"
 "Ce logiciel n'est accompagné d'ABSOLUMENT AUCUNE GARANTIE, dans les limites\n"
 "autorisées par la loi.\n"
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "Utilisation : %s [OPTION]...\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
@@ -457,11 +570,11 @@ msgstr ""
 "Psensor est une application GTK+ pour surveiller les capteurs thermiques et "
 "les vitesses de ventilateurs."
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "Options :"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
@@ -469,65 +582,64 @@ msgstr ""
 "  -h, --help          afficher cette aide et quitter\n"
 "  -v, --version       afficher les informations de version et quitter"
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
 msgstr ""
 "  -u, --url=URL       l'URL de psensor-server, example: http://hostname:3131"
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-"  --use-libatasmart   utiliser la librairie atasmart pour la surveillance\n"
-"                      des disks a la place du serveur hddtemp"
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr ""
 "  -n, --new-instance  forcer la création d'une nouvelle occurrence de "
 "l'application Psensor"
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=LEVEL   assigner le niveau de débogage, nombre entier entre 0 "
 "et 3"
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "Signaler les bogues à: %s\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
-msgstr "%s page d’accueil: <%s>\n"
+msgstr "Page d'accueil de %s : <%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr ""
 "Psensor n'a pas été compilé avec le support de surveillance à distance."
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr "Active le mode de débogage."
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Essayez « %s --help » pour plus d'informations.\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr "Une instance de Psensor existe déjà."
 
-#: src/main.c:597
-#, fuzzy
+#: src/main.c:631
 msgid "Failed to create thread for monitoring sensors"
-msgstr "Échec de la création du serveur Web."
+msgstr ""
+
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi\n"
+"  Ubuntu-QC-1 https://launchpad.net/~aobreyss\n"
+"  londumas https://launchpad.net/~helion331990"
 
 #: src/rsensor.c:107
 #, c-format
@@ -544,25 +656,25 @@ msgstr "Contenu invalide : %s"
 msgid "Invalid JSON: %s"
 msgstr "JSON invalide : %s"
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr "<html><body><p>L’arrêt du serveur a été demandé</p></body></html>"
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 "<html><body><p>Page introuvable - Allez à <a href='/'>Main page</a></p></"
 "body>"
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 "psensor-server est un serveur HTTP pour surveiller à distance les capteurs "
 "matérielles."
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
@@ -570,7 +682,7 @@ msgstr ""
 "  -h, --help\t\tafficher cette aide et quitter\n"
 "  -v, --version\t\tafficher les informations de version et quitter"
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
@@ -578,112 +690,92 @@ msgstr ""
 "  -p,--port=PORT\tport du serveur Web\n"
 "  -w,--wdir=DIR\t\trépertoire contenant les pages du serveur Web"
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=LEVEL   assigne le niveau de débogage, nombre entier entre 0 "
 "et 3"
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr "  -l, --log-file=PATH assigner le chemin d’accès au journal"
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr "  --sensor-log-file=PATH assigne le journal du capteur vers PATH"
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 "  --sensor-log-interval=S assigne l'intervalle de journalisation du capteur "
 "à S (secondes)"
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr "Requête HTTP : %s"
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr "Activation du mode de déboguage: %d"
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr "Aucun capteur détecté."
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr "Échec de la création du serveur Web."
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
-msgstr "Le serveur Web a été démarré sur le port: %d"
+msgstr "Le serveur Web a été démarré sur le port : %d"
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr "WWW répertoire : %s"
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
-msgstr "URL: http://localhost:%d"
+msgstr "URL : http://localhost:%d"
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr "Échec de l'activation de la journalisation des capteurs."
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr ""
 "Psensor est une application GTK+ pour surveiller les capteurs thermiques et "
 "les ventilateurs."
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
-msgstr ""
-"Copyright © 2010-2014\n"
-"jeanfi@gmail.com"
-
 #: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
+msgstr "Copyright © 2010-2014 jeanfi@gmail.com"
+
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "À propos de Psensor"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "Site internet de Psensor"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr "Échec du chargement de l’icône de Psensor."
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "Sélectionner la couleur d'avant-plan"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "Capteur"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr "Valeur"
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "Min"
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "Max"
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr ""
 
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "Couleur"
+#: src/ui_sensorlist.c:296
+msgid "Select sensor color"
+msgstr ""
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -694,9 +786,12 @@ msgid "Temperature alert"
 msgstr "Alerte thermique"
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+msgid "Fan speed alert"
 msgstr "Alerte ventilateur"
 
 #: src/ui_sensorpref.c:248
 msgid "Unknown"
 msgstr "Inconnu"
+
+#~ msgid "Sensor Information"
+#~ msgstr "Informations du capteur"
diff --git a/po/hr.gmo b/po/hr.gmo
new file mode 100644 (file)
index 0000000..0633331
Binary files /dev/null and b/po/hr.gmo differ
diff --git a/po/hr.po b/po/hr.po
new file mode 100644 (file)
index 0000000..adcdbb9
--- /dev/null
+++ b/po/hr.po
@@ -0,0 +1,786 @@
+# Croatian translation for psensor
+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
+# This file is distributed under the same license as the psensor package.
+# Jean-Philippe Orsini <jeanfi@gmail.com>, 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: psensor\n"
+"Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-21 06:25+0000\n"
+"Last-Translator: gogo <trebelnik2@gmail.com>\n"
+"Language-Team: Croatian <hr@li.org>\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
+
+#: src/cfg.c:510
+#, c-format
+msgid "Failed to create the directory %s: %s"
+msgstr "Neuspjelo stvaranje direktorija %s: %s"
+
+#: src/cfg.c:557
+#, c-format
+msgid "Failed to load configuration file %s: %s"
+msgstr "Neuspjelo učitavanje datoteke podešavanja %s: %s"
+
+#: src/cfg.c:580
+#, c-format
+msgid "Failed to save configuration file %s."
+msgstr "Neuspjelo spremanje datoteke podešavanja %s."
+
+#: src/glade/psensor.glade:6
+msgid "About"
+msgstr "O programu"
+
+#: src/glade/psensor.glade:10 src/glade/psensor.glade:11
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
+msgid "Preferences"
+msgstr "Osobitosti"
+
+#: src/glade/psensor.glade:15 src/glade/psensor.glade:16
+#: src/glade/psensor.glade:28
+msgid "Sensor Preferences"
+msgstr "Osobitosti senzora"
+
+#: src/glade/psensor.glade:24
+msgid "Quit"
+msgstr "Zatvori"
+
+#: src/glade/psensor.glade:84
+msgid "Show"
+msgstr "Prikaži"
+
+#: src/glade/psensor.glade:186
+msgid "Psensor - Temperature Monitor"
+msgstr "Psensor - Nadziratelj temperature"
+
+#: src/glade/psensor.glade:201
+msgid "_Psensor"
+msgstr "_Psensor"
+
+#: src/glade/psensor.glade:248
+msgid "_Help"
+msgstr "_Pomoć"
+
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Senzor"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "Vrijednost"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Min"
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Maks"
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "Boja"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "Grafikon"
+
+#: src/glade/psensor-pref.glade:24
+msgctxt "psensor"
+msgid "Right"
+msgstr "Desno"
+
+#: src/glade/psensor-pref.glade:27
+msgid "Left"
+msgstr "Lijevo"
+
+#: src/glade/psensor-pref.glade:30
+msgid "Top"
+msgstr "Vrh"
+
+#: src/glade/psensor-pref.glade:33
+msgid "Bottom"
+msgstr "Dno"
+
+#: src/glade/psensor-pref.glade:60
+msgid "Edit Preferences"
+msgstr "Uredi osobitosti"
+
+#: src/glade/psensor-pref.glade:126
+msgid "Hide window decoration"
+msgstr "Sakrij ukras prozora"
+
+#: src/glade/psensor-pref.glade:146
+msgid "Keep window below"
+msgstr "Drži prozor ispod"
+
+#: src/glade/psensor-pref.glade:166
+msgid "Enable menu"
+msgstr "Omogući izbornik"
+
+#: src/glade/psensor-pref.glade:186
+msgid "Enable Unity Launcher counter"
+msgstr "Omogući brojač Unity pokretača"
+
+#: src/glade/psensor-pref.glade:214
+msgid "Celsius"
+msgstr "Celzijus"
+
+#: src/glade/psensor-pref.glade:215
+msgid "Fahrenheit"
+msgstr "Farenhajt"
+
+#: src/glade/psensor-pref.glade:259
+msgid "Temperature unit:"
+msgstr "Jedinica temperature:"
+
+#: src/glade/psensor-pref.glade:277
+msgid "Position of sensors table:"
+msgstr "Položaj okvira senzora:"
+
+#: src/glade/psensor-pref.glade:296
+msgid "Interface"
+msgstr "Sučelje"
+
+#: src/glade/psensor-pref.glade:312
+msgid "Launch on session startup"
+msgstr "Pokreni pri pokretanju sesije"
+
+#: src/glade/psensor-pref.glade:333
+msgid "Hide window on startup"
+msgstr "Sakrij prozor pri pokretanju"
+
+#: src/glade/psensor-pref.glade:353
+msgid "Restore window position and size"
+msgstr "Vrati položaj i veličinu prozora"
+
+#: src/glade/psensor-pref.glade:384
+msgid "Startup"
+msgstr "Pokretanje"
+
+#: src/glade/psensor-pref.glade:428
+msgid "Foreground:"
+msgstr "Prednji plan:"
+
+#: src/glade/psensor-pref.glade:446
+msgid "Background:"
+msgstr "Pozadina:"
+
+#: src/glade/psensor-pref.glade:482
+msgid "Background opacity:"
+msgstr "Prozirnost pozadine:"
+
+#: src/glade/psensor-pref.glade:500
+msgid "Colors"
+msgstr "Boje"
+
+#: src/glade/psensor-pref.glade:521
+msgid "Monitoring duration:"
+msgstr "Trajanje nadziranja:"
+
+#: src/glade/psensor-pref.glade:539
+msgid "Update interval:"
+msgstr "Razdoblje ažuriranja:"
+
+#: src/glade/psensor-pref.glade:557
+msgid "Measures"
+msgstr "Mjere"
+
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>Min</i>"
+
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>Maks</i>"
+
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "sekunda(i)"
+
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "minuta(e)"
+
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr "Zaglađene krivulje"
+
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr "Krivulje"
+
+#: src/glade/psensor-pref.glade:814
+msgid "Measure update interval:"
+msgstr "Razdoblje ažuriranja mjera:"
+
+#: src/glade/psensor-pref.glade:862
+msgid "Enable sensors logging"
+msgstr "Omogući zapisivanje sensora"
+
+#: src/glade/psensor-pref.glade:909
+msgid "Sensors logging interval:"
+msgstr "Razdoblje zapisivanja senzora:"
+
+#: src/glade/psensor-pref.glade:926
+msgid "seconds(s)"
+msgstr "sekunda(i)"
+
+#: src/glade/psensor-pref.glade:943
+msgid "Script executed when an alarm is raised:"
+msgstr "Skripta za izvršavanje kada se alarm upali"
+
+#: src/glade/psensor-pref.glade:984
+msgid "Sensors"
+msgstr "Senzori"
+
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr "Omogući podršku za lm-sensors"
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr "Omogući podršku za NVCtrl (NVidia)"
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr "Omogući podršku za ATI ADL"
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr "Omogući podršku za gtop2"
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr "Omogući podršku za hddtemp daemon"
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr "Omogući podršku za libatasmart"
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr "Omogući podršku za udisks2"
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr "Promjene će biti primjenjene nakon ponovnog pokretanja psensora."
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr "Čvrsti disk"
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr "Korištenje CPU-a i memorije"
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr "GPU s vlasničkim upravljačkim programima"
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr "Matična ploča, CPU i GPU"
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
+msgid "Edit Sensor Preferences"
+msgstr "Uredi osobitosti senzora"
+
+#: src/glade/sensor-edit.glade:107
+msgid "Name"
+msgstr "Naziv"
+
+#: src/glade/sensor-edit.glade:174
+msgid "Type:"
+msgstr "Vrsta:"
+
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
+msgid "N/A"
+msgstr "Nedostupno"
+
+#: src/glade/sensor-edit.glade:212
+msgid "Chip:"
+msgstr "Čip:"
+
+#: src/glade/sensor-edit.glade:245
+msgid "Name:"
+msgstr "Naziv:"
+
+#: src/glade/sensor-edit.glade:264
+msgid "Id:"
+msgstr "Id:"
+
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr "Pojedinosti"
+
+#: src/glade/sensor-edit.glade:320
+msgid "Draw sensor curve"
+msgstr "Iscrtavaj krivulju senzora"
+
+#: src/glade/sensor-edit.glade:349
+msgid "Color:"
+msgstr "Boja:"
+
+#: src/glade/sensor-edit.glade:380
+msgid "Display sensor in the list of sensors"
+msgstr "Prikaži senzor u popisu senzora"
+
+#: src/glade/sensor-edit.glade:431
+msgid "Activate desktop notifications"
+msgstr "Uključi obavijesti radne površine"
+
+#: src/glade/sensor-edit.glade:460
+msgid "High threshold:"
+msgstr "Gornja granica:"
+
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr "0"
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr "-1"
+
+#: src/glade/sensor-edit.glade:588
+msgid "Low threshold:"
+msgstr "Donja granica:"
+
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "Alarm"
+
+#: src/glade/sensor-edit.glade:629
+msgid "Display sensor in the menu"
+msgstr "Prikaži senzor u izbrniku"
+
+#: src/glade/sensor-edit.glade:650
+msgid "Display sensor in the label (experimental)"
+msgstr "Prikaži senzor u oznaci (eksperimentalno)"
+
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
+msgstr "Programičić pokazivača"
+
+#: src/lib/amd.c:171
+msgid "AMD: cannot found ADL library."
+msgstr "AMD: nemogu pronaći ADL biblioteku."
+
+#: src/lib/amd.c:198
+msgid "AMD: missing ADL's API."
+msgstr "AMD: nedostaje ADL API."
+
+#: src/lib/amd.c:208
+msgid "AMD: failed to initialize ADL."
+msgstr "AMD: neuspjelo pokretanje ADL-a."
+
+#: src/lib/amd.c:214
+msgid "AMD: cannot get the number of adapters."
+msgstr "AMD: nemoguće je dobiti broj adaptera."
+
+#: src/lib/amd.c:253
+#, c-format
+msgid "Number of AMD/ATI adapters: %d"
+msgstr "Broj AMD/ATI adaptera: %d"
+
+#: src/lib/amd.c:254
+#, c-format
+msgid "Number of active AMD/ATI adapters: %d"
+msgstr "Broj aktivnih AMD/ATI adaptera: %d"
+
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
+msgid "Disk"
+msgstr "Disk"
+
+#: src/lib/hdd_atasmart.c:141
+#, c-format
+msgid "%s: sk_disk_open() failure: %s."
+msgstr "%s: sk_disk_open() neuspjelo: %s."
+
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
+msgstr "%s: neuspjelo otvaranje socketa."
+
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
+msgstr "%s: neuspjelo otvaranje povezivanja."
+
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
+#, c-format
+msgid "%s: wrong string: %s."
+msgstr "%s: pogrešan string: %s."
+
+#: src/lib/lmsensor.c:44
+#, fuzzy, c-format
+msgid "%s: Cannot get value of subfeature %s: %s."
+msgstr "%s: nemoguće dobivanje vrijednosti podznačajki %s: %s."
+
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
+msgstr "%s: pogrešna vrsta značajki."
+
+#: src/lib/lmsensor.c:166
+msgid "Intel CPU"
+msgstr "Intel CPU"
+
+#: src/lib/lmsensor.c:170
+msgid "AMD CPU"
+msgstr "AMD CPU"
+
+#: src/lib/lmsensor.c:172
+msgid "NVIDIA GPU"
+msgstr "NVIDIA GPU"
+
+#: src/lib/lmsensor.c:174
+msgid "VIA CPU"
+msgstr "VIA CPU"
+
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr "ACPI"
+
+#: src/lib/lmsensor.c:201
+#, c-format
+msgid "%s: initialization failure: %s."
+msgstr "%s: neuspjeh pokretanja: %s."
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr "CPU"
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr "slobodna memorija"
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr "memorija"
+
+#: src/lib/plog.c:43
+#, c-format
+msgid "Cannot open log file: %s"
+msgstr "Nemoguće otvaranje datoteke: %s"
+
+#: src/lib/nvidia.c:58
+#, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "%s: Nepoznat naziv NVIDIA proizvoda za GPU %d"
+
+#: src/lib/nvidia.c:63
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "%s: Neuspjelo čitanje naziva NVIDIA proizvoda za GPU %d"
+
+#: src/lib/nvidia.c:226
+#, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
+msgstr "%s: Neuspjelo čitanje mjernih jedinica %x za NVIDIA GPU %d"
+
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s: Nemoguće povezivanje s X11 poslužiteljem."
+
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s: Neuspjelo primanje NVIDIA informacija."
+
+#: src/lib/nvidia.c:370
+#, c-format
+msgid "%s: Failed to retrieve number of fans."
+msgstr "%s: NVIDIA: nuespjelo očitavanje broja ventilatora."
+
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
+msgid "RPM"
+msgstr "Okr/min"
+
+#: src/lib/psensor.c:455
+msgid "%"
+msgstr "%"
+
+#: src/lib/slog.c:87
+msgid "HOME variable not set."
+msgstr "HOME varijabla nije postavljena."
+
+#: src/lib/slog.c:96
+msgid "Sensor log file already open."
+msgstr "Datoteka zapisa senzora je već otvorena."
+
+#: src/lib/slog.c:105
+#, c-format
+msgid "Cannot open sensor log file: %s."
+msgstr "Nemoguće otvaranje datoteke zapisa senzora: %s."
+
+#: src/lib/slog.c:136
+msgid "Sensor log file not open."
+msgstr "Datoteka zapisa senzora nije otvorena."
+
+#: src/lib/slog.c:192
+msgid "Sensor log not open, cannot close."
+msgstr "Datoteka zapisa senzora nije otvorena, nemoguće zatvaranje."
+
+#: src/main.c:80 src/server/server.c:87
+#, c-format
+msgid ""
+"Copyright (C) %s jeanfi@gmail.com\n"
+"License GPLv2: GNU GPL version 2 or later <http://www.gnu.org/licenses/old-"
+"licenses/gpl-2.0.html>\n"
+"This is free software: you are free to change and redistribute it.\n"
+"There is NO WARRANTY, to the extent permitted by law.\n"
+msgstr ""
+"Autorsko pravo (C) %s jeanfi@gmail.com\n"
+"Licenca GPLv2: GNU GPL inačica 2 ili novija <http://www.gnu.org/licenses/old-"
+"licenses/gpl-2.0.html>\n"
+"Ovo je slobodan softver: slobodno ga možete mijenjati i redistribuirati.\n"
+"Ne postoji nikakvo JAMSTVO, propisano zakonom.\n"
+
+#: src/main.c:91 src/server/server.c:97
+#, c-format
+msgid "Usage: %s [OPTION]...\n"
+msgstr "Upotreba: %s [MOGUĆNOST]...\n"
+
+#: src/main.c:93
+msgid ""
+"Psensor is a GTK+ application for monitoring hardware sensors, including "
+"temperatures and fan speeds."
+msgstr ""
+"Psensor je GTK+ aplikacija za nadziranje hardverskih senzora, koja uključuje "
+"temperature i brzinu okretaja ventilatora."
+
+#: src/main.c:97
+msgid "Options:"
+msgstr "Mogućnosti:"
+
+#: src/main.c:98
+msgid ""
+"  -h, --help          display this help and exit\n"
+"  -v, --version       display version information and exit"
+msgstr ""
+"  -h, --help          prikaz pomoći\n"
+"  -v, --version       prikaz informacije inačice"
+
+#: src/main.c:104
+msgid ""
+"  -u, --url=URL       the URL of the psensor-server,\n"
+"                      example: http://hostname:3131"
+msgstr ""
+"  -u, --url=URL       URL psensor-poslužitelja,\n"
+"                      npr: http://hostname:3131"
+
+#: src/main.c:107
+msgid "  -n, --new-instance  force the creation of a new Psensor application"
+msgstr "  -n, --new-instance  prisili stvaranje nove Psensor aplikacije"
+
+#: src/main.c:110
+msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
+msgstr ""
+"  -d, --debug=LEVEL   postavi razinu otklanjanja greške, cijeli broj između "
+"0 i 3"
+
+#: src/main.c:115 src/server/server.c:120
+#, c-format
+msgid "Report bugs to: %s\n"
+msgstr "Prijavi grešku na: %s\n"
+
+#: src/main.c:117 src/server/server.c:122
+#, c-format
+msgid "%s home page: <%s>\n"
+msgstr "%s početna stranica: <%s>\n"
+
+#: src/main.c:473
+msgid "Psensor has not been compiled with remote sensor support."
+msgstr "Psensor nije kompajliran s udaljenom podrškom senzora."
+
+#: src/main.c:551
+msgid "Enables debug mode."
+msgstr "Omogućava način otklanjanja greške."
+
+#: src/main.c:563 src/server/server.c:384
+#, c-format
+msgid "Try `%s --help' for more information.\n"
+msgstr "Pokušajte `%s --help` za više informacija.\n"
+
+#: src/main.c:576
+msgid "A Psensor instance already exists."
+msgstr "Psensor primjerak je već pokrenut."
+
+#: src/main.c:631
+msgid "Failed to create thread for monitoring sensors"
+msgstr "Neuspjelo stvaranje niza za nadziranje senzora"
+
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi\n"
+"  gogo https://launchpad.net/~trebelnik-stefina"
+
+#: src/rsensor.c:107
+#, c-format
+msgid "Fail to connect to: %s"
+msgstr "Neuspjelo povezivanje s: %s"
+
+#: src/rsensor.c:144
+#, c-format
+msgid "Invalid content: %s"
+msgstr "Nevaljan sadržaj: %s"
+
+#: src/rsensor.c:184
+#, c-format
+msgid "Invalid JSON: %s"
+msgstr "Nevaljan JSON: %s"
+
+#: src/server/server.c:57
+msgid "<html><body><p>Server stop requested</p></body></html>"
+msgstr "<html><body><p>Poslužitelj je prestao reagirat</p></body></html>"
+
+#: src/server/server.c:63
+msgid ""
+"<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
+msgstr ""
+"<html><body><p>Stranica nije pronađena - Idite na <a href='/'>Glavna "
+"stranica</a></p></body>"
+
+#: src/server/server.c:99
+msgid ""
+"psensor-server is an HTTP server for monitoring hardware sensors remotely."
+msgstr ""
+"psensor-poslužitelj je HTTP poslužitelj za udaljeno nadziranje senzora "
+"hardvera."
+
+#: src/server/server.c:104
+msgid ""
+"  -h, --help\t\tdisplay this help and exit\n"
+"  -v, --version\t\tdisplay version information and exit"
+msgstr ""
+"  -h, --help\t\tprikazuje pomoć\n"
+"  -v, --version\t\tprikazuje informacije o inačici"
+
+#: src/server/server.c:108
+msgid ""
+"  -p,--port=PORT\twebserver port\n"
+"  -w,--wdir=DIR\t\tdirectory containing webserver pages"
+msgstr ""
+"  -p,--port=PORT\tulaz web poslužitelja\n"
+"  -w,--wdir=DIR\t\tdirektorij sadrži stranice web poslužitelja"
+
+#: src/server/server.c:112
+msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
+msgstr ""
+"  -d, --debug=LEVEL     postavi razinu otklanjanja greške, cijeli broj "
+"između 0 i 3"
+
+#: src/server/server.c:114
+msgid "  -l, --log-file=PATH   set the log file to PATH"
+msgstr "  -l, --log-file=PUTANJA   postavite PUTANJU datoteke zapisa"
+
+#: src/server/server.c:115
+msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
+msgstr "  --sensor-log-file=PUTANJA postavite PUTANJU datoteke zapisa senzora"
+
+#: src/server/server.c:116
+msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
+msgstr ""
+"  --sensor-log-interval=S postavite trajanje zapisa senzora u S (sekunde)"
+
+#: src/server/server.c:301
+#, c-format
+msgid "HTTP Request: %s"
+msgstr "HTTP Zahtjev: %s"
+
+#: src/server/server.c:364
+#, c-format
+msgid "Enables debug mode: %d"
+msgstr "Omogućuje način otklanjanja greške: %d"
+
+#: src/server/server.c:408
+msgid "No sensors detected."
+msgstr "Nema otkrivenih senzora."
+
+#: src/server/server.c:415
+msgid "Failed to create Web server."
+msgstr "Neuspjelo stvaranje Web poslužitelja."
+
+#: src/server/server.c:419
+#, c-format
+msgid "Web server started on port: %d"
+msgstr "Web poslužitelj pokrenut na ulazu: %d"
+
+#: src/server/server.c:420
+#, c-format
+msgid "WWW directory: %s"
+msgstr "WWW direktorij: %s"
+
+#: src/server/server.c:421
+#, c-format
+msgid "URL: http://localhost:%d"
+msgstr "URL: http://localhost:%d"
+
+#: src/server/server.c:431
+msgid "Failed to activate logging of sensors."
+msgstr "Neuspjelo aktiviranje zapisivanja senzora."
+
+#: src/ui.c:87
+msgid "Psensor is a GTK+ application for monitoring hardware sensors"
+msgstr "Psensor je GTK+ aplikacija za nadziranje senzora hardvera."
+
+#: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
+msgstr "Autorsko pravo(c) 2010-2014 jeanfi@gmail.com"
+
+#: src/ui.c:96
+msgid "About Psensor"
+msgstr "O Psensoru"
+
+#: src/ui.c:100
+msgid "Psensor Homepage"
+msgstr "Psensor web stranica"
+
+#: src/ui.c:223
+msgid "Failed to load Psensor icon."
+msgstr "Neuspjelo učitavanje ikone Psensora."
+
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr "Sakrij"
+
+#: src/ui_sensorlist.c:296
+msgid "Select sensor color"
+msgstr "Odaberi boju senzora"
+
+#: src/ui_notify.c:48
+msgid "gettimeofday failed."
+msgstr "dobivanje-vremena-dana neuspjelo."
+
+#: src/ui_notify.c:77
+msgid "Temperature alert"
+msgstr "Upozorenje temperature"
+
+#: src/ui_notify.c:79
+msgid "Fan speed alert"
+msgstr "Upozorenje brzine ventilatora"
+
+#: src/ui_sensorpref.c:248
+msgid "Unknown"
+msgstr "Nepoznato"
index d67daf5..e52a57d 100644 (file)
Binary files a/po/hu.gmo and b/po/hu.gmo differ
index a4a8e0a..040c00c 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -8,32 +8,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2014-08-21 11:43+0000\n"
-"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-20 11:26+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: Hungarian <gnome-hu-list-request@gnome.org>\n"
 "Language: hu\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-08-27 08:00+0000\n"
-"X-Generator: Launchpad (build 17174)\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr "Nem sikerült a mappa létrehozása: %s - %s"
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr "A konfigurációs fájl nem létezik."
-
-#: src/cfg.c:545
-#, c-format
-msgid "Failed to parse configuration file: %s"
+#: src/cfg.c:557
+#, fuzzy, c-format
+msgid "Failed to load configuration file %s: %s"
 msgstr "Nem sikerült a konfigurációs fájlt beolvasni: %s"
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, c-format
 msgid "Failed to save configuration file %s."
 msgstr "Nem sikerült a konfigurációs fájlt elmenteni: %s"
@@ -43,7 +39,7 @@ msgid "About"
 msgstr "Névjegy"
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "Beállítások"
 
@@ -72,6 +68,31 @@ msgstr "_Psensor"
 msgid "_Help"
 msgstr "_Súgó"
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Érzékelő"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "Érték"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Minimum"
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Maximum"
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "Szín"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "Grafikon"
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -93,318 +114,409 @@ msgstr "Alul"
 msgid "Edit Preferences"
 msgstr "Beállítások szerkesztése"
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr "Ablakdíszítés elrejtése"
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr "Ablak alul tartása"
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "Menü engedélyezése"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr "Unity indítón lévő számláló engedélyezése"
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr "Celsius"
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr "Fahrenheit"
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr "Hőmérséklet mértékegysége:"
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr "Érzékelőtábla pozíciója:"
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr "Felület"
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr "Indítás a munkamenettel"
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr "Ablak elrejtése induláskor"
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr "Ablak pozíciójának és méretének visszaállítása"
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr "Indítás"
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr "Előtér:"
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr "Háttér:"
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr "Háttér átlátszósága:"
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
-msgstr "<i>Min</i>"
-
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
-msgstr "<i>Max</i>"
-
-#: src/glade/psensor-pref.glade:530
+#: src/glade/psensor-pref.glade:500
 msgid "Colors"
 msgstr "Színek"
 
-#: src/glade/psensor-pref.glade:548
+#: src/glade/psensor-pref.glade:521
 msgid "Monitoring duration:"
 msgstr "Figyelés hossza:"
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
-msgstr "perc"
-
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
-msgid "second(s)"
-msgstr "másodperc"
-
-#: src/glade/psensor-pref.glade:637
+#: src/glade/psensor-pref.glade:539
 msgid "Update interval:"
 msgstr "Frissítési időköz:"
 
-#: src/glade/psensor-pref.glade:655
+#: src/glade/psensor-pref.glade:557
 msgid "Measures"
 msgstr "Mérések"
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
-msgstr "Grafikon"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>Min</i>"
+
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>Max</i>"
+
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "másodperc"
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "perc"
+
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr "Mérések frissítési időköze:"
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr "Érzékelők naplózásának engedélyezése"
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr "Naplózás időköze:"
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr "másodperc"
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr "Parancsfájl futtatás riasztáskor:"
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "Érzékelők"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr "Érzékelő beállításainak szerkesztése"
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr "Név"
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr "Típus:"
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "---"
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr "Érzékelő információi"
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr "Chip:"
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr "Név:"
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr "Azonosító:"
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr "Érzékelő görbéjének rajzolása"
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr "Szín:"
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
-msgstr "Riasztás"
+#: src/glade/sensor-edit.glade:380
+msgid "Display sensor in the list of sensors"
+msgstr "Érzékelő megjelenítése az érzékelők listáján"
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr "Asztali értesítések bekapcsolása"
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr "Felső küszöbérték:"
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr "-1"
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr "Alsó küszöbérték:"
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
-msgstr "Alkalmazás Indikátor"
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "Riasztás"
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr "Érzékelők megjelenítése az alkalmazásmenüben"
 
-#: src/glade/sensor-edit.glade:429
-#, fuzzy
+#: src/glade/sensor-edit.glade:650
 msgid "Display sensor in the label (experimental)"
 msgstr "Érzékelők megjelenítése a címkén (fejlesztés alatt)"
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:541
-#, fuzzy
-msgid "Display sensor in the list of sensors"
-msgstr "Érzékelő megjelenítése az érzékelők listáján"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
+msgstr "Alkalmazás Indikátor"
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr "AMD: Nem sikerült betölteni az ADL programkönyvtárat."
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr "AMD: hiányzó ADL API."
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr "AMD: az ADL előkészítése meghiúsult."
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr "AMD: adapterek számainak lekérése meghiúsult"
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr "ADM/ATI adapterek száma: %d"
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr "Aktív ADM/ATI adapterek száma: %d"
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr "Processzor"
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr "Lemez"
 
-#: src/lib/hdd_atasmart.c:152
-#, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
-msgstr "atasmart: sk_disk_open() hiba: %s."
+#: src/lib/hdd_atasmart.c:141
+#, fuzzy, c-format
+msgid "%s: sk_disk_open() failure: %s."
+msgstr "%s: sk_disk_open() hiba: %s."
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
-msgstr "hddtemp: foglalat megnyitása meghiúsult."
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
+msgstr "%s: foglalat megnyitása meghiúsult."
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
-msgstr "hddtemp: a kapcsolat megnyitása nem sikerült."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
+msgstr "%s: a kapcsolat megnyitása nem sikerült."
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
-msgstr "hddtemp: rossz karakterlánc: %s."
+msgid "%s: wrong string: %s."
+msgstr "%s: rossz karakterlánc: %s."
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
-msgstr "lmsensor: alfunkció értékének lekérdezése meghiúsult %s: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
+msgstr "%s: alfunkció értékének lekérdezése meghiúsult %s: %s."
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
-msgstr "lmsensor: lmsensor_psensor_create hiba: rossz funkciótípus."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
+msgstr "%s: rossz funkciótípus."
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr "Intel processzor"
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr "AMD processzor"
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr "NVIDIA videokártya"
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr "VIA processzor"
 
-#: src/lib/lmsensor.c:218
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
 #, c-format
-msgid "lmsensor: initialization failure: %s."
-msgstr "lmsensor: előkészítési hiba: %s."
+msgid "%s: initialization failure: %s."
+msgstr "%s: előkészítési hiba: %s."
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr "Processzor"
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr ""
 
 #: src/lib/plog.c:43
 #, c-format
 msgid "Cannot open log file: %s"
 msgstr "A naplófájl megnyitása sikertelen: %s"
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
-msgstr ""
-"Az NVIDIA zár eszközmeghajtó nincs használatban vagy csak nem sikerült a "
-"videokártya hőmérsékletének lekérése."
+#: src/lib/nvidia.c:58
+#, fuzzy, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "NVIDIA információinak lekérése meghiúsult."
+
+#: src/lib/nvidia.c:63
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "NVIDIA információinak lekérése meghiúsult."
+
+#: src/lib/nvidia.c:226
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
+msgstr "NVIDIA információinak lekérése meghiúsult."
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
-msgstr "Nem lehet létrehozni a kapcsolatot az X11 kiszolgálóval."
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s: Nem lehet létrehozni a kapcsolatot az X11 kiszolgálóval."
+
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s: NVIDIA információinak lekérése meghiúsult."
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:370
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve number of fans."
 msgstr "NVIDIA információinak lekérése meghiúsult."
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr "RPM"
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr "%"
 
@@ -412,24 +524,24 @@ msgstr "%"
 msgid "HOME variable not set."
 msgstr "HOME változó nincs beállítva."
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr "Az érzékelő naplófájlja már meg van nyitva."
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr "%s érzékelő naplófájlját nem lehet megnyitni"
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr "Az érzékelő naplófájlja nincs nyitva."
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr "Az érzékelő naplófájlja nincs nyitva, nem lehet bezárni."
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -444,12 +556,12 @@ msgstr ""
 "Ez egy szabad szoftver: szabadon terjesztheti és/vagy módosíthatja\n"
 "NINCS GARANCIA, a jogszabályok által megengedett mértékben.\n"
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "Használat: %s [KAPCSOLÓK]...\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
@@ -457,11 +569,11 @@ msgstr ""
 "A Psensor egy GTK+ alkalmazás a hardver érzékelőinek figyelésére, beleértve "
 "a hőmérsékleteket és a ventilátor sebességét."
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "Kapcsolók:"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
@@ -469,7 +581,7 @@ msgstr ""
 "  -h, --help          ezen súgó megjelenítése, majd kilépés\n"
 "  -v, --version         verzióinformációk megjelenítése, majd kilépés"
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
@@ -477,56 +589,56 @@ msgstr ""
 "  -u, --url=URL       a psensor-server URL-címe,\n"
 "                      például: http://gepnev:3131"
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-"  --use-libatasmart   atasmart függvénykönyvtár használata a lemezek "
-"figyelésére a\n"
-"                      hddtemp démon helyett"
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr "  -n, --new-instance  új Psensor alkalmazás indításának kényszerítése"
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=LEVEL   hibakeresési szint beállítása, egész 0 és 3 között"
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "A talált hibákat itt jelentse be: %s\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr "%s honlap: <%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr "A Psensor távoli érzékelők támogatása nélkül lett lefordítva."
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr "Hibakeresési mód engedélyezése."
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "További információkért adja ki a „%s --help” parancsot.\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr "A Psensors egy példánya már létezik."
 
-#: src/main.c:597
+#: src/main.c:631
 #, fuzzy
 msgid "Failed to create thread for monitoring sensors"
 msgstr "Nem sikerült a mappa létrehozása: %s - %s"
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Bence Lukács https://launchpad.net/~lukacs-bence1\n"
+"  Gabor Kelemen https://launchpad.net/~kelemeng\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi\n"
+"  Richard Somlói https://launchpad.net/~ricsipontaz"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -542,25 +654,25 @@ msgstr "Érvénytelen tartalom: %s"
 msgid "Invalid JSON: %s"
 msgstr "Érvénytelen JSON: %s"
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr "<html><body><p>A kiszolgáló leállítást kért</p></body></html>"
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 "<html><body><p>Az oldal nem található - Ugrás a <a href='/'>Főoldalra</a></"
 "p></body>"
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 "A psensor-server egy HTTP kiszolgáló a hardver érzékelőinek figyelésére "
 "távolról."
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
@@ -568,7 +680,7 @@ msgstr ""
 "  -h, --help\t\tezen súgó megjelenítése, majd kilépés\n"
 "  -v, --version\t\tverzióinformáció megjelenítése, majd kilépés"
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
@@ -576,110 +688,91 @@ msgstr ""
 "  -p,--port=PORT\twebkiszolgáló portja\n"
 "  -w,--wdir=DIR\t\ta webkiszolgáló oldalait tartalmazó mappa"
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=LEVEL     hibakeresési szint beállítása, egész 0 és 3 között"
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr "  -l, --log-file=ÚTVONAL   a naplófájl ÚTVONALÁNAK beállítása"
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr ""
 "  --sensor-log-file=ÚTVONAL érzékelők naplójának beállítása az ÚTVONALRA"
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 "  --sensor-log-interval=S érzékelő naplózási gyakoriságának beállítása S "
 "másodpercre"
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr "HTTP-kérés: %s"
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr "Hibakeresési mód engedélyezése: %d"
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr "Nem találhatók érzékelők."
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr "Nem sikerült létrehozni a webkiszolgálót."
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr "A webkiszolgáló elindult ezen a porton: %d"
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr "WWW könyvtár: %s"
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr "URL: http://localhost:%d"
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr "Érzékelők naplózásának aktiválása meghiúsult."
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr "A Psensor egy GTK+ alkalmazás a hardver érzékelőinek figyelésére"
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
-msgstr ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
-
 #: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
+msgstr "Copyright(c) 2010-2014 jeanfi@gmail.com"
+
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "A Psensor névjegye"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "A Psensor honlapja"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr "Nem sikerült betölteni a Psensor ikonját."
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "Előtérszín kiválasztása"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "Érzékelő"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr "Érték"
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "Minimum"
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "Maximum"
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr ""
 
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "Szín"
+#: src/ui_sensorlist.c:296
+#, fuzzy
+msgid "Select sensor color"
+msgstr "Előtérszín kiválasztása"
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -690,9 +783,26 @@ msgid "Temperature alert"
 msgstr "Hőmérséklet riasztás"
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+#, fuzzy
+msgid "Fan speed alert"
 msgstr "Ventilátor riasztás"
 
 #: src/ui_sensorpref.c:248
 msgid "Unknown"
 msgstr "Ismeretlen"
+
+#~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#~ msgstr "lmsensor: lmsensor_psensor_create hiba: rossz funkciótípus."
+
+#~ msgid "The configuration file does not exist."
+#~ msgstr "A konfigurációs fájl nem létezik."
+
+#~ msgid "Sensor Information"
+#~ msgstr "Érzékelő információi"
+
+#~ msgid ""
+#~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU "
+#~ "temperature."
+#~ msgstr ""
+#~ "Az NVIDIA zár eszközmeghajtó nincs használatban vagy csak nem sikerült a "
+#~ "videokártya hőmérsékletének lekérése."
index 3e77dc2..a1a51a7 100644 (file)
Binary files a/po/it.gmo and b/po/it.gmo differ
index d421310..015cc50 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -7,32 +7,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor 0.7.0.x\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2014-08-15 21:05+0000\n"
-"Last-Translator: Gabriele <deepdown23@gmail.com>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-20 11:24+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: Italian\n"
 "Language: it\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-08-27 08:00+0000\n"
-"X-Generator: Launchpad (build 17174)\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, fuzzy, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr "Impossibile creare il Web server."
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr ""
-
-#: src/cfg.c:545
-#, c-format
-msgid "Failed to parse configuration file: %s"
-msgstr ""
+#: src/cfg.c:557
+#, fuzzy, c-format
+msgid "Failed to load configuration file %s: %s"
+msgstr "Attivazione registro dei sensori fallita."
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, fuzzy, c-format
 msgid "Failed to save configuration file %s."
 msgstr "Attivazione registro dei sensori fallita."
@@ -42,7 +38,7 @@ msgid "About"
 msgstr "Informazioni su..."
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "Preferenze"
 
@@ -71,6 +67,31 @@ msgstr "_Psensor"
 msgid "_Help"
 msgstr "_Aiuto"
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Sensore"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "Valore"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Minimo"
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Massimo"
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "Colore"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "Grafico"
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -92,317 +113,410 @@ msgstr "In Basso"
 msgid "Edit Preferences"
 msgstr "Modifica le preferenze"
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr "Nascondi le decorazioni della finestra"
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr "Mantieni la finestra sotto"
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "Abilita il menù"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr "Abilita contatore nel Launcher Unity"
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr "Celsius"
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr "Fahrenheit"
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr "Unità di misura della temperatura"
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr "Posizione della tabella dei sensori"
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr "Interfaccia"
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr "Lancia all'avvio"
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr "Nascondi la finestra all'avvio"
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr "Ripristina posizione e dimensione della finestra"
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
-msgstr ""
+msgstr "Avvio"
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr "Primo piano:"
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr "Sfondo:"
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr "Opacità dello sfondo:"
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
-msgstr "<i>Minimo</i>"
-
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
-msgstr "<i>Massimo</i>"
-
-#: src/glade/psensor-pref.glade:530
+#: src/glade/psensor-pref.glade:500
 msgid "Colors"
 msgstr "Colori"
 
-#: src/glade/psensor-pref.glade:548
+#: src/glade/psensor-pref.glade:521
 msgid "Monitoring duration:"
 msgstr "Durata del monitoraggio:"
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
-msgstr "minuto/i"
-
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
-msgid "second(s)"
-msgstr "secondo/i"
-
-#: src/glade/psensor-pref.glade:637
+#: src/glade/psensor-pref.glade:539
 msgid "Update interval:"
 msgstr "Intervallo di aggiornamento:"
 
-#: src/glade/psensor-pref.glade:655
+#: src/glade/psensor-pref.glade:557
 msgid "Measures"
 msgstr "Misure"
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
-msgstr "Grafico"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>Minimo</i>"
+
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>Massimo</i>"
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "secondo/i"
+
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "minuto/i"
+
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr "Intervallo di aggiornamento delle misure"
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr "Abilita registrazione sensori"
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr "Intervallo registrazione sensori:"
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr "secondo(i)"
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
-msgstr ""
+msgstr "Script eseguito quando un allarme viene attivato:"
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "Sensori"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr "Modifica preferenze del sensore"
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr "Nome"
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr "Tipo:"
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "N/A"
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr "Informazioni sul Sensore"
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr "Processore:"
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr "Nome:"
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr "Id:"
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr "Disegna curva"
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr "Colore:"
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
-msgstr "Avviso"
+#: src/glade/sensor-edit.glade:380
+#, fuzzy
+msgid "Display sensor in the list of sensors"
+msgstr "Mostra sensore nel menu"
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr "Attiva le notifiche sul desktop"
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr "Soglia verso l'alto"
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr "-1"
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr "Soglia verso il basso"
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
-msgstr "Indicatore Applicazione"
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "Avviso"
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr "Mostra sensore nel menu"
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 msgid "Display sensor in the label (experimental)"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr "-1"
-
-#: src/glade/sensor-edit.glade:541
-#, fuzzy
-msgid "Display sensor in the list of sensors"
-msgstr "Mostra sensore nel menu"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
+msgstr "Indicatore Applicazione"
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr "AMD: impossibile trovare la libreria ADL"
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr "AMD: impossibile trovare l'API di ADL"
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr "AMD: impossibile inizializzare ADL"
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr "AMD: impossibile rilevare il numero di adattatori."
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr "CPU"
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr "Disco"
 
-#: src/lib/hdd_atasmart.c:152
+#: src/lib/hdd_atasmart.c:141
 #, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
-msgstr "atasmart: errore sk_disk_open(): %s."
+msgid "%s: sk_disk_open() failure: %s."
+msgstr "%s: errore sk_disk_open(): %s."
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
-msgstr "hddtemp: impossibile aprire il socket."
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
+msgstr "%s: impossibile aprire il socket."
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
-msgstr "hddtemp: impossibile aprire la connessione."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
+msgstr "%s: impossibile aprire la connessione."
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
-msgstr "hddtemp: errore di stringa: %s"
+msgid "%s: wrong string: %s."
+msgstr "%s: errore di stringa: %s"
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
-msgstr "lmsensor: impossibile rilevare il valore della sotto funzione %s: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
+msgstr "%s: impossibile rilevare il valore della sotto funzione %s: %s."
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
-msgstr "lmsensor: lmsensor_psensor_create fallito: tipo di funzione errata."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
+msgstr "%s: tipo di funzione errata."
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr "CPU Intel"
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr "CPU AMD"
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr "CPU NVIDIA"
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr "CPU VIA"
 
-#: src/lib/lmsensor.c:218
-#, c-format
-msgid "lmsensor: initialization failure: %s."
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
+#, fuzzy, c-format
+msgid "%s: initialization failure: %s."
 msgstr "lmsensor: inizializzazione fallita: %s"
 
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr "CPU"
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr ""
+
 #: src/lib/plog.c:43
 #, c-format
 msgid "Cannot open log file: %s"
 msgstr "Impossibile aprire il file di log: %s"
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
-msgstr ""
-"Driver proprietario NVIDIA non usato o impossibile rilevare la temperatura "
-"della GPU NVIDIA."
+#: src/lib/nvidia.c:58
+#, fuzzy, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "Impossibile recuperare informazioni da NVIDIA"
+
+#: src/lib/nvidia.c:63
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "Impossibile recuperare informazioni da NVIDIA"
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
-msgstr "Impossibile connettersi al server X11."
+#: src/lib/nvidia.c:226
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
+msgstr "Impossibile recuperare informazioni da NVIDIA"
+
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s: Impossibile connettersi al server X11."
+
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s: Impossibile recuperare informazioni da NVIDIA"
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:370
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve number of fans."
 msgstr "Impossibile recuperare informazioni da NVIDIA"
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr "RPM"
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr "%"
 
@@ -410,24 +524,24 @@ msgstr "%"
 msgid "HOME variable not set."
 msgstr "Variabile HOME non impostata."
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr "File di registazione sensori già aperto."
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr "Impossibile aprire il file di registrazione sensori: %s."
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr "File di registazione sensori non aperto."
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr "Registro sensori non aperto, impossibile chiuderlo."
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -442,12 +556,12 @@ msgstr ""
 "Questo è software libero: sei libero di modificarlo e redistribuirlo.\n"
 "NON esiste GARANZIA, per gli scopi permessi dalla legge.\n"
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "Uso: %s [OPZIONE]...\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
@@ -455,11 +569,11 @@ msgstr ""
 "Psensor è un'applicazione GTK+ per monitorare i sensori dell'hardware, "
 "incluse temperature e velocità delle ventole."
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "Opzioni:"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
@@ -467,7 +581,7 @@ msgstr ""
 "  -h, --help mostra questo help ed esce\n"
 "  -v, --version mostra le informazioni sulla versione ed esce"
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
@@ -475,57 +589,57 @@ msgstr ""
 "  -u, --url=URL URL del server psensor,\n"
 "                      esempio: http://hostname:3131"
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-"  --use-libatasmart usa la libreria atasmart library per il monitoraggio "
-"dell'hard disk invece del \n"
-"                      servizio hddtemp"
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr ""
 "  -n, --new-instance forza la creazione di una nuova applicazione Psensor"
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=LEVEL imposta il livello di debug, un intero compreso tra 0 e 3"
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "Segnalare i bug a: %s\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr "%s home page: <%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr "Psensor è stato compilato senza il supporto per sensori remoti."
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr "Abilita la modalità debug."
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Usare '%s --help' per maggiori informazioni.\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr "Esiste già un'istanza di Psensor"
 
-#: src/main.c:597
+#: src/main.c:631
 #, fuzzy
 msgid "Failed to create thread for monitoring sensors"
 msgstr "Impossibile creare il Web server."
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Andrea Bernini https://launchpad.net/~andrea-bernini\n"
+"  Diego Pierotto https://launchpad.net/~gringo\n"
+"  Gabriele https://launchpad.net/~deepdown23\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -541,25 +655,25 @@ msgstr "Conenuto non valido: %s"
 msgid "Invalid JSON: %s"
 msgstr "JSON non valido: %s"
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr "<html><body><p>Arresto del server richiesto</p></body></html>"
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 "<html><body><p>Pagina non trovata - Vai a <a href='/'>Pagina principale</a></"
 "p></body>"
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 "psensor-server è un server HTTP per il monitoraggio remoto di sensori "
 "hardware."
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
@@ -567,7 +681,7 @@ msgstr ""
 "  -h, --help\t\tmostra questo help ed esce\n"
 "  -v, --version\t\tmostra le informazioni sulla versione ed esce"
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
@@ -575,110 +689,91 @@ msgstr ""
 "  -p,--port=PORT\tporta del server web\n"
 "  -w,--wdir=DIR\t\tdirectory che contiene le pagine web"
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=LEVEL imposta il livello di debug, un intero compreso tra 0 e 3"
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr "  -l, --log-file=PATH imposta il file di log su PATH"
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr ""
 "  --sensor-log-file=PATH imposta il file di registro dei sensori come PATH"
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 "  --sensor-log-interval=S imposta l'intervallo del registro di sensori come "
 "S (secondi)"
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr "HTTP Request: %s"
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr "Abilita modalità di debug: %d"
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr "Nessun sensore rilevato."
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr "Impossibile creare il Web server."
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr "Web server inizializzato sulla porta: %d"
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr "WWW directory: %s"
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr "URL: http://localhost:%d"
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr "Attivazione registro dei sensori fallita."
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr "Psensor è un'applicazione GTK+ per monitorare i sensori hardware"
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
-msgstr ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
-
 #: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
+msgstr "Copyright(c) 2010-2014 jeanfi@gmail.com"
+
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "Informazioni su Psensor"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "Psensor Homepage"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr "Impossibile caricare l'icona di Psensor."
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "Colore di primo piano:"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "Sensore"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr "Valore"
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "Minimo"
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "Massimo"
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr ""
 
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "Colore"
+#: src/ui_sensorlist.c:296
+#, fuzzy
+msgid "Select sensor color"
+msgstr "Colore di primo piano:"
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -689,9 +784,23 @@ msgid "Temperature alert"
 msgstr "Allarme temperatura"
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+#, fuzzy
+msgid "Fan speed alert"
 msgstr "Allarme ventola"
 
 #: src/ui_sensorpref.c:248
 msgid "Unknown"
 msgstr "Sconosciuto"
+
+#~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#~ msgstr "lmsensor: lmsensor_psensor_create fallito: tipo di funzione errata."
+
+#~ msgid "Sensor Information"
+#~ msgstr "Informazioni sul Sensore"
+
+#~ msgid ""
+#~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU "
+#~ "temperature."
+#~ msgstr ""
+#~ "Driver proprietario NVIDIA non usato o impossibile rilevare la "
+#~ "temperatura della GPU NVIDIA."
index 4c4888e..bac41f8 100644 (file)
Binary files a/po/lv.gmo and b/po/lv.gmo differ
index d33a21b..d84feaf 100644 (file)
--- a/po/lv.po
+++ b/po/lv.po
@@ -7,32 +7,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2014-06-04 22:47+0000\n"
-"Last-Translator: tuxmaniack <Unknown>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-20 11:26+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: Latvian <lv@li.org>\n"
 "Language: lv\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-08-27 08:00+0000\n"
-"X-Generator: Launchpad (build 17174)\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, fuzzy, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr "Neizdevās izveidot tīmekļa serveri."
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr ""
-
-#: src/cfg.c:545
-#, c-format
-msgid "Failed to parse configuration file: %s"
-msgstr ""
+#: src/cfg.c:557
+#, fuzzy, c-format
+msgid "Failed to load configuration file %s: %s"
+msgstr "Neizdevās aktivizēt sensoru žurnalēšanu."
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, fuzzy, c-format
 msgid "Failed to save configuration file %s."
 msgstr "Neizdevās aktivizēt sensoru žurnalēšanu."
@@ -42,7 +38,7 @@ msgid "About"
 msgstr "Par"
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "Iestatījumi"
 
@@ -71,6 +67,31 @@ msgstr "_Psensor"
 msgid "_Help"
 msgstr "_Palīdzība"
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Sensors"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "Vērtība"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Min."
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Maks."
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "Krāsa"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "Grafiks"
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -92,318 +113,411 @@ msgstr "Lejā"
 msgid "Edit Preferences"
 msgstr "Rediģēt iestatījumus"
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr "Slēpt loga apdari"
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr "Turēt logu apakšā"
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "Aktivizēt izvēlni"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr "Aktivizēt Unity palaidēja skaitītāju"
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr "Celsijs"
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr "Fārenheits"
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr "Temperatūras mērvienība:"
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr "Sensoru tabulas novietojums:"
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr "Saskarne"
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr "Palaist pieteicoties sistēmā"
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr "Slēpt logu pieteicoties sistēmā"
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr "Atjaunot loga pozīciju un izmēru"
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr "Palaišana"
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr "Priekšplāns:"
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr "Fons:"
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr "Fona necaurspīdība:"
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
-msgstr "<i>Min.</i>"
-
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
-msgstr "<i>Maks.</i>"
-
-#: src/glade/psensor-pref.glade:530
+#: src/glade/psensor-pref.glade:500
 msgid "Colors"
 msgstr "Krāsas"
 
-#: src/glade/psensor-pref.glade:548
+#: src/glade/psensor-pref.glade:521
 msgid "Monitoring duration:"
 msgstr "Pārraudzības ilgums:"
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
-msgstr "minūte(s)"
-
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
-msgid "second(s)"
-msgstr "sekunde(s)"
-
-#: src/glade/psensor-pref.glade:637
+#: src/glade/psensor-pref.glade:539
 msgid "Update interval:"
 msgstr "Atjaunināšanas intervāls:"
 
-#: src/glade/psensor-pref.glade:655
+#: src/glade/psensor-pref.glade:557
 msgid "Measures"
 msgstr "Mērījumi"
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
-msgstr "Grafiks"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>Min.</i>"
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>Maks.</i>"
+
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "sekunde(s)"
+
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "minūte(s)"
+
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr "Mērījumu atjaunināšanas intervāls:"
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr "Aktivizēt sensora žurnalēšanu"
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr "Sensoru žurnalēšanas intervāls:"
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr "sekunde(s)"
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr "Skrips izpildīts, kad trauksme ir aktivizēta:"
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "Sensori"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr "Rediģēt sensoru iestatījumus"
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr "Nosaukums"
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr "Tips:"
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "N/P"
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr "Sensora informācija"
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr "Mikroshēma:"
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr "Nosaukums:"
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr "Id:"
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr "Zīmēt sensora līkni"
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr "Krāsa:"
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
-msgstr "Trauksme"
+#: src/glade/sensor-edit.glade:380
+#, fuzzy
+msgid "Display sensor in the list of sensors"
+msgstr "Rādīt sensoru aplikāciju indikatora izvēlnē"
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr "Aktivizēt darbvirsmas paziņojumus"
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr "Augsts slieksnis:"
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr "-1"
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr "Zems slieksnis:"
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
-msgstr "Aplikāciju indikators"
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "Trauksme"
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr "Rādīt sensoru aplikāciju indikatora izvēlnē"
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 #, fuzzy
 msgid "Display sensor in the label (experimental)"
 msgstr "Attēlot sensoru etiķetē (eksperimentāls)"
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:541
-#, fuzzy
-msgid "Display sensor in the list of sensors"
-msgstr "Rādīt sensoru aplikāciju indikatora izvēlnē"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
+msgstr "Aplikāciju indikators"
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr "AMD: nevar atrast ADL bibliotēku."
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr "AMD: trūkst ADL programmatūras saskarne."
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr "AMD: neizdevās inicializēt ADL."
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr "AMD: nevar saņemt adapteru skaitu."
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr "AMD/ATI adapteru skaits: %d"
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr "Aktīvo AMD/ATI adapteru skaits: %d"
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr "CPU"
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr "Disks"
 
-#: src/lib/hdd_atasmart.c:152
-#, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
+#: src/lib/hdd_atasmart.c:141
+#, fuzzy, c-format
+msgid "%s: sk_disk_open() failure: %s."
 msgstr "atasmart: sk_disk_open() atteice: %s."
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
-msgstr "hddtemp: neizdevās atvērt ligzdu."
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
+msgstr "%s: neizdevās atvērt ligzdu."
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
-msgstr "hddtemp: neizdevās atvērt savienojumu."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
+msgstr "%s: neizdevās atvērt savienojumu."
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
-msgstr "hddtemp: nepareiza virkne: %s."
+msgid "%s: wrong string: %s."
+msgstr "%s: nepareiza virkne: %s."
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
-msgstr "lmsensor: nevar iegūt vērtību no apakšīpašības %s: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
+msgstr "%s: nevar iegūt vērtību no apakšīpašības %s: %s."
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
-msgstr "lmsensor: lmsensor_psensor_create atteice: nepareis īpašības tips."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
+msgstr "%s: nepareis īpašības tips."
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr "Intel CPU"
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr "AMD CPU"
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr "NVIDIA GPU"
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr "VIA CPU"
 
-#: src/lib/lmsensor.c:218
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
 #, c-format
-msgid "lmsensor: initialization failure: %s."
-msgstr "lmsensor: inicializācijas kļūda: %s."
+msgid "%s: initialization failure: %s."
+msgstr "%s: inicializācijas kļūda: %s."
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr "CPU"
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr ""
 
 #: src/lib/plog.c:43
 #, c-format
 msgid "Cannot open log file: %s"
 msgstr "Nevar atvērt žurnāla failu: %s"
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
-msgstr ""
-"NVIDIA īpašniekdraiveris netiek izmantots vai nevar iegūt NVIDIA GPU "
-"temperatūru."
+#: src/lib/nvidia.c:58
+#, fuzzy, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "Neizdevās saņemt NVIDIA informāciju."
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
-msgstr "Nevar atvērt savienojumu ar X11 server."
+#: src/lib/nvidia.c:63
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "Neizdevās saņemt NVIDIA informāciju."
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:226
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
 msgstr "Neizdevās saņemt NVIDIA informāciju."
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s: Nevar atvērt savienojumu ar X11 server."
+
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s: Neizdevās saņemt NVIDIA informāciju."
+
+#: src/lib/nvidia.c:370
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve number of fans."
+msgstr "Neizdevās saņemt NVIDIA informāciju."
+
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr "RPM"
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr "%"
 
@@ -411,24 +525,24 @@ msgstr "%"
 msgid "HOME variable not set."
 msgstr "HOME mainīgais nav iestatīts."
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr "Sensora žurnāla fails jau ir atvērts."
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr "Nevar atvērt sensora žurnāla failu: %s."
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr "Sensora žurnāla fails nav atvērts."
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr "Sensora žurnāls nav atvērts, nevar aizvērt."
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -438,12 +552,12 @@ msgid ""
 "There is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "Lietošana: %s [OPCIJAS]...\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
@@ -451,11 +565,11 @@ msgstr ""
 "Psensor ir GTK+ lietotne aparatūras sensoru pārraudzībai, ieskaitot "
 "temperatūras un ventilatoru ātrumus."
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "Opcijas:"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
@@ -463,7 +577,7 @@ msgstr ""
 "  -h, --help          rādīt šo palīdzību un iziet\n"
 "  -v, --version       rādīt versijas informāciju un iziet"
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
@@ -471,54 +585,53 @@ msgstr ""
 "  -u, --url=SAITE       psensor-server adrese,\n"
 "                      piemērs: http://saimniekdatoravārds:3131"
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-"  --use-libatasmart   izmantot atasmart bibliotēku disku pārraudzībai\n"
-"                      hddtemp dēmona vietā"
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr "  -n, --new-instance  piespiest izveidot jaunu Psensor lietotni"
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr "  -d, --debug=LĪMENIS   iestatīt atkļūdošanas līmeni, starp 0 un 3"
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "Ziņojiet kļūdas uz: %s.\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr "%s mājas lapa: <%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr "Psensor nav kompilēts ar attālināto sensoru atbalstu."
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr "Aktivizēt atkļūdošanas režīmu."
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Mēģiniet `%s --help', lai iegūtu vairāk informācijas.\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr "Psensor instance jau eksistē."
 
-#: src/main.c:597
+#: src/main.c:631
 #, fuzzy
 msgid "Failed to create thread for monitoring sensors"
 msgstr "Neizdevās izveidot tīmekļa serveri."
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi\n"
+"  tuxmaniack https://launchpad.net/~tuxmaniack"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -534,24 +647,24 @@ msgstr "Nederīgs saturs: %s"
 msgid "Invalid JSON: %s"
 msgstr "Nederīgs JSON: %s"
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr "<html><body><p>Servera apturēšana pieprasīta</p></body></html>"
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 "<html><body><p>Lapa nav atrasta - dodieties uz <a href='/'>galveno lapu</a></"
 "p></body>"
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 "psensor-server ir HTTP serveris aparatūras sensoru attālinātai pārraudzībai."
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
@@ -559,7 +672,7 @@ msgstr ""
 "  -h, --help\t\trādīt šo palīdzību un iziet\n"
 "  -v, --version\t\trādīt versijas informāciju un iziet"
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
@@ -567,109 +680,93 @@ msgstr ""
 "  -p,--port=PORTS\ttīmekļa servera ports\n"
 "  -w,--wdir=DIR\t\tmape ar tīmekļa servera lapām"
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=LĪMENIS     iestatīt atkļūdošanas līmeni, vesels skaitlis "
 "starp 0 un 3"
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr "  -l, --log-file=CEĻŠ   žurnalēšanas faila ceļš"
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr "  --sensor-log-file=CEĻŠ sensora žurnāla faila ceļš"
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 "  --sensor-log-interval=S iestata sensora žurnāla intervālu uz S (sekundēm)"
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr "HTTP pieprasījums: %s"
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr "Aktivizē atkļūdošanas režīmu: %d"
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr "Sensori nav atklāti."
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr "Neizdevās izveidot tīmekļa serveri."
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr "Tīmekļa serveris sākts uz porta: %d"
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr "WWW mape: %s"
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr "Saite: http://localhost:%d"
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr "Neizdevās aktivizēt sensoru žurnalēšanu."
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr "Psensor ir GTK+ lietotne aparatūras sensoru pārraudzībai"
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
+#: src/ui.c:90
+#, fuzzy
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
 msgstr ""
 "Autortiesības(c) 2010-2014\n"
 "jeanfi@gmail.com"
 
-#: src/ui.c:90
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "Par Psensor"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "Psensor mājas lapa"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr "Neizdevās ielādēt Psensor ikonu."
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "Izvēlieties priekšplāna krāsu"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "Sensors"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr "Vērtība"
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "Min."
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "Maks."
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr ""
 
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "Krāsa"
+#: src/ui_sensorlist.c:296
+#, fuzzy
+msgid "Select sensor color"
+msgstr "Izvēlieties priekšplāna krāsu"
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -680,9 +777,23 @@ msgid "Temperature alert"
 msgstr "Temperatūras trauksme"
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+#, fuzzy
+msgid "Fan speed alert"
 msgstr "Ventilatora trauksme"
 
 #: src/ui_sensorpref.c:248
 msgid "Unknown"
 msgstr "Nezināms"
+
+#~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#~ msgstr "lmsensor: lmsensor_psensor_create atteice: nepareis īpašības tips."
+
+#~ msgid "Sensor Information"
+#~ msgstr "Sensora informācija"
+
+#~ msgid ""
+#~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU "
+#~ "temperature."
+#~ msgstr ""
+#~ "NVIDIA īpašniekdraiveris netiek izmantots vai nevar iegūt NVIDIA GPU "
+#~ "temperatūru."
index 4e3682e..21dfec9 100644 (file)
Binary files a/po/nl.gmo and b/po/nl.gmo differ
index 2ad5bc9..89049f0 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,32 +7,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2014-04-07 08:50+0000\n"
-"Last-Translator: Pjotr12345 <Unknown>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-20 11:25+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: Dutch <nl@li.org>\n"
 "Language: nl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-04-09 22:52+0000\n"
-"X-Generator: Launchpad (build 16976)\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, fuzzy, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr "Kon geen webserver maken."
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr ""
-
-#: src/cfg.c:545
-#, c-format
-msgid "Failed to parse configuration file: %s"
-msgstr ""
+#: src/cfg.c:557
+#, fuzzy, c-format
+msgid "Failed to load configuration file %s: %s"
+msgstr "Kon logboeken bijhouden niet inschakelen voor sensoren."
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, fuzzy, c-format
 msgid "Failed to save configuration file %s."
 msgstr "Kon logboeken bijhouden niet inschakelen voor sensoren."
@@ -42,7 +38,7 @@ msgid "About"
 msgstr "Over"
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "Voorkeuren"
 
@@ -71,6 +67,31 @@ msgstr "_Psensor"
 msgid "_Help"
 msgstr "_Hulp"
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Sensor"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "Waarde"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Min"
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Max"
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "Kleur"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "Grafiek"
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -92,319 +113,412 @@ msgstr ""
 msgid "Edit Preferences"
 msgstr "Voorkeuren bewerken"
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr "Vensteromlijsting verbergen"
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr "Houd venster eronder"
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "Menu inschakelen"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr "Teller voor Unity-starter inschakelen"
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr "Temperatuureenheid:"
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr "Positie van sensorentabel:"
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr "Bedieningsschil"
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr "Venster bij opstarten verbergen"
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr "Vensterpositie en -grootte herstellen"
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr "Voorgrond:"
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr "Achtergrond:"
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr "Ondoorzichtigheid van achtergrond:"
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
-msgstr "<i>Min</i>"
-
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
-msgstr "<i>Max</i>"
-
-#: src/glade/psensor-pref.glade:530
+#: src/glade/psensor-pref.glade:500
 msgid "Colors"
 msgstr "Kleuren"
 
-#: src/glade/psensor-pref.glade:548
+#: src/glade/psensor-pref.glade:521
 msgid "Monitoring duration:"
 msgstr "Duur van bewaking:"
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
-msgstr "minu(u)t(en)"
-
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
-msgid "second(s)"
-msgstr "seconde(n)"
-
-#: src/glade/psensor-pref.glade:637
+#: src/glade/psensor-pref.glade:539
 msgid "Update interval:"
 msgstr "Tussenpoze voor bijwerken:"
 
-#: src/glade/psensor-pref.glade:655
+#: src/glade/psensor-pref.glade:557
 msgid "Measures"
 msgstr "Metingen"
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
-msgstr "Grafiek"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>Min</i>"
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>Max</i>"
+
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "seconde(n)"
+
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "minu(u)t(en)"
+
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr "Tussenpoze voor bijwerken van meting:"
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr "Logboeken bijhouden inschakelen voor sensoren"
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr "Tussenpoze voor bijhouden van logboeken voor sensoren:"
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr "seconden(s)"
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr "Script dat wordt uitgevoerd wanneer er een alarm plaatsvindt:"
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "Sensoren"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr "Sensorvoorkeuren bewerken"
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr "Naam"
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr "Soort:"
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "N.v.t."
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr "Sensorinformatie"
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr "Chip:"
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr "Naam:"
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr "Id:"
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr "Sensor-curve tekenen"
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr "Kleur:"
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
-msgstr "Alarm"
+#: src/glade/sensor-edit.glade:380
+#, fuzzy
+msgid "Display sensor in the list of sensors"
+msgstr "Sensor tonen in het menu van de Toepassingsindicator"
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr "Bureaubladmeldingen inschakelen"
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr "Drempel voor hoog:"
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr "Drempel voor laag:"
 
-#: src/glade/sensor-edit.glade:397
-#, fuzzy
-msgid "Application Indicator"
-msgstr "Ubuntu Toepassingsindicator"
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "Alarm"
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr "Sensor tonen in het menu van de Toepassingsindicator"
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 #, fuzzy
 msgid "Display sensor in the label (experimental)"
 msgstr "Sensor tonen in het menu van de Toepassingsindicator"
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:541
+#: src/glade/sensor-edit.glade:682
 #, fuzzy
-msgid "Display sensor in the list of sensors"
-msgstr "Sensor tonen in het menu van de Toepassingsindicator"
+msgid "Application Indicator"
+msgstr "Ubuntu Toepassingsindicator"
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr "AMD: kan ADL-bibliotheekbestand niet vinden"
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr "AMD: ontbrekende ADL's API."
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr "AMD: kon ADL niet initialiseren."
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr "AMD: kan het aantal videokaarten niet bepalen."
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr "Aantal AMD/ATI-videokaarten: %d"
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr "Aantal actieve AMD/ATI-videokaarten: %d"
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr ""
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr ""
 
-#: src/lib/hdd_atasmart.c:152
-#, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
+#: src/lib/hdd_atasmart.c:141
+#, fuzzy, c-format
+msgid "%s: sk_disk_open() failure: %s."
 msgstr "atasmart: sk_disk_open() mislukking: %s."
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
-msgstr "hddtemp: kon contactpunt niet openen."
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
+msgstr "%s: kon contactpunt niet openen."
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
-msgstr "hddtemp: kon verbinding niet openen."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
+msgstr "%s: kon verbinding niet openen."
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
-msgstr "hddtemp: verkeerde tekenreeks: %s."
+msgid "%s: wrong string: %s."
+msgstr "%s: verkeerde tekenreeks: %s."
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
-msgstr "lmsensor: kan waarde van subfunctie %s niet bepalen: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
+msgstr "%s: kan waarde van subfunctie %s niet bepalen: %s."
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
-msgstr "lmsensor: lmsensor_psensor_create failure: verkeerd functietype."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
+msgstr "%s: verkeerd functietype."
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:218
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
 #, c-format
-msgid "lmsensor: initialization failure: %s."
-msgstr "lmsensor: opstartfout: %s."
+msgid "%s: initialization failure: %s."
+msgstr "%s: opstartfout: %s."
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr ""
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr ""
 
 #: src/lib/plog.c:43
 #, c-format
 msgid "Cannot open log file: %s"
 msgstr "Kan logboekbestand niet openen: %s"
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
-msgstr ""
-"Het niet-vrije Nvidia-stuurprogramma wordt niet gebruikt of het kan de "
-"temperatuur van de grafische Nvidia-chip niet bepalen."
+#: src/lib/nvidia.c:58
+#, fuzzy, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "Kon Nvidia-informatie niet ophalen."
+
+#: src/lib/nvidia.c:63
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "Kon Nvidia-informatie niet ophalen."
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
-msgstr "Kan verbinding met X11-server niet openen."
+#: src/lib/nvidia.c:226
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
+msgstr "Kon Nvidia-informatie niet ophalen."
+
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s: Kan verbinding met X11-server niet openen."
+
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s: Kon Nvidia-informatie niet ophalen."
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:370
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve number of fans."
 msgstr "Kon Nvidia-informatie niet ophalen."
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr "RPM"
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr "%"
 
@@ -412,24 +526,24 @@ msgstr "%"
 msgid "HOME variable not set."
 msgstr "Variabele voor HOME niet ingesteld."
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr "Logboekbestand van sensor is al geopend."
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr "Kan logboekbestand van sensor niet openen: %s."
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr "Logboekbestand van sensor niet geopend."
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr "Logboekbestand van sensor niet geopend, kan niet sluiten."
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -444,12 +558,12 @@ msgstr ""
 "Dit is vrije programmatuur: u mag hem wijzigen en doorgeven.\n"
 "Er zit geen garantie op, voor zover de wet dat toestaat.\n"
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "Gebruik: %s [OPTIE]...\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
@@ -457,11 +571,11 @@ msgstr ""
 "Psensor is een GTK+ toepassing voor het bewaken van apparatuursensoren, "
 "inclusief temperaturen en ventilatorsnelheden."
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "Opties:"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
@@ -469,7 +583,7 @@ msgstr ""
 "  -h, --help          toon deze hulpinformatie en sluit af\n"
 "  -v, --version       toon versie-informatie en sluit af"
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
@@ -477,58 +591,56 @@ msgstr ""
 "  -u, --url=URL       het webadres van de psensor-server,\n"
 "                      voorbeeld: http://hostname:3131"
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-"  --use-libatasmart   gebruik atasmart-bibiotheekbestand voor "
-"schijfbewaking\n"
-"               i.p.v. hddtemp-achtergronddienst"
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr ""
 "  -n, --new-instance  forceer het aanmaken van een nieuwe Psensor-toepassing"
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=LEVEL   stel het foutopsporingsniveau in, integer tussen 0 en 3"
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "Meld fouten aan: %s\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr "Webpagina van %s: <%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr ""
 "Psensor os niet gecompileerd met ondersteuning voor sensoren op afstand."
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr "Schakelt foutopsporingsmodus in."
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Probeer '%s --help' voor meer informatie.\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr "Er bestaat reeds een instantie van Psensor."
 
-#: src/main.c:597
+#: src/main.c:631
 #, fuzzy
 msgid "Failed to create thread for monitoring sensors"
 msgstr "Kon geen webserver maken."
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi\n"
+"  Pjotr12345 https://launchpad.net/~computertip"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -544,25 +656,25 @@ msgstr "Ongeldige inhoud: %s"
 msgid "Invalid JSON: %s"
 msgstr "Ongeldige JSON: %s"
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr "<html><body><p>Stilzetting van server verzocht</p></body></html>"
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 "<html><body><p>Pagina niet gevonden - ga naar <a href='/'>Hoofdpagina</a></"
 "p></body>"
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 "psensor-server is een HTTP-server voor het bewaken van apparatuursensoren op "
 "afstand."
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
@@ -570,7 +682,7 @@ msgstr ""
 "  -h, --help\t\ttoon deze hulptekst en sluit af\n"
 "  -v, --version\t\ttoon versie-infomatie en sluit af"
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
@@ -578,110 +690,91 @@ msgstr ""
 "  -p,--port=PORT\twebserverpoort\n"
 "  -w,--wdir=DIR\t\tmap die webserverpagina's bevat"
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=LEVEL     stel het foutopsporingsniveau in, integer tussen 0 "
 "en 3"
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr "  -l, --log-file=PATH   stel het logboekbestand in op PATH"
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr "  --sensor-log-file=PATH stel het sensorlogboekbestand in op PATH"
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 "  --sensor-log-interval=S stel de tussenpoze voor het sensorlogboek in op S "
 "(seconden)"
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr "HTTP-verzoek: %s"
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr "Schakelt foutopsporingsmodus in: %d"
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr "Geen sensoren bespeurd."
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr "Kon geen webserver maken."
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr "Webserver gestart op poort: %d"
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr "WWW-map: %s"
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr "URL: http://localhost:%d"
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr "Kon logboeken bijhouden niet inschakelen voor sensoren."
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr "Psensor is een GTK+ toepassing voor het bewaken van apparatuursensoren"
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
-msgstr ""
-"Auteursrecht(c) 2010-2014\n"
-"jeanfi@gmail.com"
-
 #: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
+msgstr "Auteursrecht(c) 2010-2014 jeanfi@gmail.com"
+
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "Over Psensor"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "Thuispagina van Psensor"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr "Kon pictogram van Psensor niet laden."
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "Kies voorgrondkleur"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "Sensor"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr "Waarde"
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "Min"
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "Max"
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr ""
 
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "Kleur"
+#: src/ui_sensorlist.c:296
+#, fuzzy
+msgid "Select sensor color"
+msgstr "Kies voorgrondkleur"
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -692,9 +785,20 @@ msgid "Temperature alert"
 msgstr "Temperatuurwaarschuwing"
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+#, fuzzy
+msgid "Fan speed alert"
 msgstr "Ventilatorwaarschuwing"
 
 #: src/ui_sensorpref.c:248
 msgid "Unknown"
 msgstr "Onbekend"
+
+#~ msgid "Sensor Information"
+#~ msgstr "Sensorinformatie"
+
+#~ msgid ""
+#~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU "
+#~ "temperature."
+#~ msgstr ""
+#~ "Het niet-vrije Nvidia-stuurprogramma wordt niet gebruikt of het kan de "
+#~ "temperatuur van de grafische Nvidia-chip niet bepalen."
index c21f555..1a3572a 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,21 +17,17 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr ""
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr ""
-
-#: src/cfg.c:545
+#: src/cfg.c:557
 #, c-format
-msgid "Failed to parse configuration file: %s"
+msgid "Failed to load configuration file %s: %s"
 msgstr ""
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, c-format
 msgid "Failed to save configuration file %s."
 msgstr ""
@@ -41,7 +37,7 @@ msgid "About"
 msgstr ""
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr ""
 
@@ -70,6 +66,31 @@ msgstr ""
 msgid "_Help"
 msgstr ""
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr ""
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr ""
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr ""
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr ""
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr ""
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr ""
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -91,289 +112,367 @@ msgstr ""
 msgid "Edit Preferences"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
+#: src/glade/psensor-pref.glade:500
+msgid "Colors"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
+#: src/glade/psensor-pref.glade:521
+msgid "Monitoring duration:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:530
-msgid "Colors"
+#: src/glade/psensor-pref.glade:539
+msgid "Update interval:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:548
-msgid "Monitoring duration:"
+#: src/glade/psensor-pref.glade:557
+msgid "Measures"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
 msgid "second(s)"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:637
-msgid "Update interval:"
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:655
-msgid "Measures"
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
+#: src/glade/sensor-edit.glade:380
+msgid "Display sensor in the list of sensors"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 msgid "Display sensor in the label (experimental)"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:541
-msgid "Display sensor in the list of sensors"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
 msgstr ""
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr ""
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr ""
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr ""
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr ""
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr ""
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr ""
 
-#: src/lib/hdd_atasmart.c:152
+#: src/lib/hdd_atasmart.c:141
 #, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
+msgid "%s: sk_disk_open() failure: %s."
 msgstr ""
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
 msgstr ""
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
 msgstr ""
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
+msgid "%s: wrong string: %s."
 msgstr ""
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
 msgstr ""
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
 msgstr ""
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:218
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
 #, c-format
-msgid "lmsensor: initialization failure: %s."
+msgid "%s: initialization failure: %s."
+msgstr ""
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr ""
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
 msgstr ""
 
 #: src/lib/plog.c:43
@@ -381,24 +480,41 @@ msgstr ""
 msgid "Cannot open log file: %s"
 msgstr ""
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
+#: src/lib/nvidia.c:58
+#, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
 msgstr ""
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
+#: src/lib/nvidia.c:63
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
 msgstr ""
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:226
+#, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
 msgstr ""
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr ""
+
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr ""
+
+#: src/lib/nvidia.c:370
+#, c-format
+msgid "%s: Failed to retrieve number of fans."
+msgstr ""
+
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr ""
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr ""
 
@@ -406,24 +522,24 @@ msgstr ""
 msgid "HOME variable not set."
 msgstr ""
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr ""
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr ""
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr ""
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr ""
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -433,78 +549,76 @@ msgid ""
 "There is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr ""
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
 msgstr ""
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr ""
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
 msgstr ""
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
 msgstr ""
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr ""
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr ""
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr ""
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr ""
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr ""
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr ""
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr ""
 
-#: src/main.c:597
+#: src/main.c:631
 msgid "Failed to create thread for monitoring sensors"
 msgstr ""
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -520,129 +634,111 @@ msgstr ""
 msgid "Invalid JSON: %s"
 msgstr ""
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr ""
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
 msgstr ""
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
 msgstr ""
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr ""
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr ""
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr ""
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr ""
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr ""
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr ""
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr ""
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr ""
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr ""
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr ""
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr ""
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr ""
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
+#: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
 msgstr ""
 
-#: src/ui.c:90
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr ""
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr ""
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr ""
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
+#: src/ui_sensorlist.c:254
+msgid "Hide"
 msgstr ""
 
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr ""
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr ""
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr ""
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr ""
-
-#: src/ui_sensorlist.c:352
-msgid "Color"
+#: src/ui_sensorlist.c:296
+msgid "Select sensor color"
 msgstr ""
 
 #: src/ui_notify.c:48
@@ -654,7 +750,7 @@ msgid "Temperature alert"
 msgstr ""
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+msgid "Fan speed alert"
 msgstr ""
 
 #: src/ui_sensorpref.c:248
index e194334..ee09299 100644 (file)
Binary files a/po/pt_BR.gmo and b/po/pt_BR.gmo differ
index b4c0801..bdc142a 100644 (file)
@@ -7,32 +7,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor 0.7.0.x\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2013-09-01 18:54+0000\n"
-"Last-Translator: Celio Alves <Unknown>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-11 21:22+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: Brazilian Portuguese\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-10-18 06:32+0000\n"
-"X-Generator: Launchpad (build 16799)\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, fuzzy, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr "Falhou ao criar servidor web."
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr ""
-
-#: src/cfg.c:545
-#, c-format
-msgid "Failed to parse configuration file: %s"
-msgstr ""
+#: src/cfg.c:557
+#, fuzzy, c-format
+msgid "Failed to load configuration file %s: %s"
+msgstr "Falhou ao criar servidor web."
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, c-format
 msgid "Failed to save configuration file %s."
 msgstr ""
@@ -42,7 +38,7 @@ msgid "About"
 msgstr "Sobre"
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "Preferências"
 
@@ -71,6 +67,31 @@ msgstr "_Psensor"
 msgid "_Help"
 msgstr "Ajuda"
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Sensor"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "Valor"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Min"
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Max"
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "Cor"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "Grafo"
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -92,314 +113,409 @@ msgstr ""
 msgid "Edit Preferences"
 msgstr "Editar Preferências"
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr "Ocultar decoração da janela"
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr "Manter janela abaixo"
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "Habilitar menu"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr "Unidade de temperatura:"
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr "Posição da tabela de sensores:"
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr "Interface"
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr "Ocultar janela na inicialização"
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr "Restaurar posição e tamanho da janela"
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr "Primeiro plano:"
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr "Plano de fundo:"
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr "Opacidade do plano de fundo:"
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
-msgstr "<i>Min</i>"
-
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
-msgstr "<i>Max</i>"
-
-#: src/glade/psensor-pref.glade:530
+#: src/glade/psensor-pref.glade:500
 msgid "Colors"
 msgstr "Cores"
 
-#: src/glade/psensor-pref.glade:548
+#: src/glade/psensor-pref.glade:521
 msgid "Monitoring duration:"
 msgstr "Duração do monitoramento:"
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
-msgstr "minuto(s)"
-
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
-msgid "second(s)"
-msgstr "segundo(s)"
-
-#: src/glade/psensor-pref.glade:637
+#: src/glade/psensor-pref.glade:539
 msgid "Update interval:"
 msgstr "Intervalo de atualização:"
 
-#: src/glade/psensor-pref.glade:655
+#: src/glade/psensor-pref.glade:557
 msgid "Measures"
 msgstr "Medidas"
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
-msgstr "Grafo"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>Min</i>"
+
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>Max</i>"
+
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "segundo(s)"
+
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "minuto(s)"
+
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr ""
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr "Intervalo de atualização das medições:"
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr "Habilitar registro (log) de sensores"
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr "Intervalo de registro dos sensores:"
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr "segundo(s)"
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "Sensores"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr "Editar preferências do sensor"
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr "Nome"
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr "Tipo:"
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "N/D"
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr "Informações do sensor"
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr "Chip:"
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr "Nome:"
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr "ID:"
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr "Desenhar curva do sensor"
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr "Cor:"
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
-msgstr "Alarme"
+#: src/glade/sensor-edit.glade:380
+msgid "Display sensor in the list of sensors"
+msgstr ""
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr "Ativar notificações de desktop"
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr "Limite superior:"
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr "Limite inferior:"
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
-msgstr ""
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "Alarme"
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 msgid "Display sensor in the label (experimental)"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:541
-msgid "Display sensor in the list of sensors"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
 msgstr ""
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr "AMD: não foi possível encontrar a biblioteca ADL."
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr "AMD: está faltando a API da ADL."
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr "AMD: falha ao iniciar ADL."
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr "AMD: não foi possível obter número de adaptadores."
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr "Número de adaptadores AMD/ATI: %d"
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr "Número de adaptadores AMD/ATI ativos: %d"
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr ""
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr ""
 
-#: src/lib/hdd_atasmart.c:152
+#: src/lib/hdd_atasmart.c:141
 #, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
-msgstr "atasmart: falha em sk_disk_open(): %s."
+msgid "%s: sk_disk_open() failure: %s."
+msgstr "%s: falha em sk_disk_open(): %s."
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
-msgstr ""
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
+msgstr "%s: falha em abrir conexão."
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
-msgstr "hddtemp: falha em abrir conexão."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
+msgstr "%s: falha em abrir conexão."
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
+msgid "%s: wrong string: %s."
 msgstr ""
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
-msgstr "lmsensor: não foi possível obter valor do sub-recurso %s: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
+msgstr "%s: não foi possível obter valor do sub-recurso %s: %s."
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
 msgstr ""
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:218
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
 #, c-format
-msgid "lmsensor: initialization failure: %s."
-msgstr "lmsensor: falha na inicialização: %s."
+msgid "%s: initialization failure: %s."
+msgstr "%s: falha na inicialização: %s."
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr ""
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr ""
 
 #: src/lib/plog.c:43
 #, c-format
 msgid "Cannot open log file: %s"
 msgstr "Não é possível abrir arquivo de log: %s"
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
-msgstr ""
+#: src/lib/nvidia.c:58
+#, fuzzy, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "Falha ao recuperar informações de NVIDIA."
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
-msgstr "Não é possível abrir conexão com o servidor X11."
+#: src/lib/nvidia.c:63
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "Falha ao recuperar informações de NVIDIA."
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:226
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
 msgstr "Falha ao recuperar informações de NVIDIA."
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s: Não é possível abrir conexão com o servidor X11."
+
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s: Falha ao recuperar informações de NVIDIA."
+
+#: src/lib/nvidia.c:370
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve number of fans."
+msgstr "Falha ao recuperar informações de NVIDIA."
+
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr "RPM"
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr "%"
 
@@ -407,24 +523,24 @@ msgstr "%"
 msgid "HOME variable not set."
 msgstr "Variável HOME não configurada."
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr "Arquivo de registro do sensor já está aberto."
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr "Não é possível abrir arquivo de log do sensor: %s."
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr "Arquivo de registros do sensor não foi aberto."
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr ""
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -434,12 +550,12 @@ msgid ""
 "There is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "Uso: %s [OPÇÃO]...\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
@@ -447,11 +563,11 @@ msgstr ""
 "Psensor é um aplicativo GTK+ para monitoramento de sensores de hardware, "
 "incluindo temperatura e velocidade de ventoinhas."
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "Opções:"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
@@ -459,7 +575,7 @@ msgstr ""
 "  -h, --help          exibir esta ajuda e sair\n"
 "  -v, --version       exibir informação de versão e sair"
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
@@ -467,52 +583,56 @@ msgstr ""
 "  -u, --url=URL       a URL  do psensor-server,\n"
 "                      exemplo: http://hostname:3131"
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr ""
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr ""
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "Relatar falhas para: %s\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr "Página inicial de %s: <%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr ""
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr "Ativar o modo de depuração"
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Utilize `%s --help' para mais informações.\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr "Uma instancia de Psensor já existe."
 
-#: src/main.c:597
+#: src/main.c:631
 #, fuzzy
 msgid "Failed to create thread for monitoring sensors"
 msgstr "Falhou ao criar servidor web."
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Celio Alves https://launchpad.net/~celio.alves\n"
+"  Daniel Serafim https://launchpad.net/~daniel-serafim\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi\n"
+"  MestreLion https://launchpad.net/~mestrelion\n"
+"  Rafael Neri https://launchpad.net/~rafepel"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -528,136 +648,117 @@ msgstr "Conteúdo inválido: %s"
 msgid "Invalid JSON: %s"
 msgstr "JSON inválido: %s"
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr ""
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 "<html><body><p>Página não encontrada - Ir para a <a href='/'>página inicial</"
 "a></p></body>"
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 "psensor-server é um servidor HTTP para monitoramento remoto de sensores de "
 "hardware."
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
 msgstr ""
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
 msgstr ""
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr ""
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr ""
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr ""
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr "Requisição HTTP: %s"
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr "Habilita modo de depuração: %d"
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr "Nenhum sensor detectado"
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr "Falhou ao criar servidor web."
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr "Servidor web iniciado na porta: %d"
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr "Diretório WWW: %s"
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr "URL: http://localhost:%d"
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr ""
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr "Psensor é uma aplicação GTK+ para monitorar sensores de hardware"
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
-msgstr ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
-
 #: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
+msgstr "Copyright(c) 2010-2014 jeanfi@gmail.com"
+
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "Sobre o Psensor"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "Site do Psensor"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr "Falha ao carregar o ícone do Psensor."
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "Selecionar cor do primeiro plano"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "Sensor"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr "Valor"
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "Min"
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "Max"
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr ""
 
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "Cor"
+#: src/ui_sensorlist.c:296
+#, fuzzy
+msgid "Select sensor color"
+msgstr "Selecionar cor do primeiro plano"
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -668,9 +769,13 @@ msgid "Temperature alert"
 msgstr "Alerta de temperatura"
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+#, fuzzy
+msgid "Fan speed alert"
 msgstr "Alenta do ventilador"
 
 #: src/ui_sensorpref.c:248
 msgid "Unknown"
 msgstr "Desconhecido"
+
+#~ msgid "Sensor Information"
+#~ msgstr "Informações do sensor"
index 2bcb418..019e38c 100644 (file)
Binary files a/po/ru.gmo and b/po/ru.gmo differ
index 0c4e30c..dbbd180 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,32 +8,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor 0.7.0.x\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2014-05-20 05:14+0000\n"
-"Last-Translator: Dmitry Serov <dmitri.s93@gmail.com>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-11 21:23+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: Russian\n"
 "Language: ru\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-06-02 08:08+0000\n"
-"X-Generator: Launchpad (build 17031)\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, fuzzy, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr "Не удалось создать веб-сервер."
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr ""
-
-#: src/cfg.c:545
-#, c-format
-msgid "Failed to parse configuration file: %s"
-msgstr ""
+#: src/cfg.c:557
+#, fuzzy, c-format
+msgid "Failed to load configuration file %s: %s"
+msgstr "Не удалось включить журналирование датчиков."
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, fuzzy, c-format
 msgid "Failed to save configuration file %s."
 msgstr "Не удалось включить журналирование датчиков."
@@ -43,7 +39,7 @@ msgid "About"
 msgstr "О программе"
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "Параметры"
 
@@ -72,6 +68,31 @@ msgstr ""
 msgid "_Help"
 msgstr "_Справка"
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Датчик"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "Значение"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Мин."
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Макс."
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "Цвет"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "Диаграмма"
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -93,315 +114,410 @@ msgstr ""
 msgid "Edit Preferences"
 msgstr "Изменить параметры"
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr "Спрятать рамку окна"
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr "Держать окно позади"
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "Включить меню"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr "Включить счётчик в панеле запуска Unity"
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr "Единица измерения температуры:"
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr "Положение таблицы датчиков:"
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr "Внешний вид"
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr "Скрыть окно при запуске"
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr "Восстанавливать положение и размер окна"
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr "Передний план:"
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr "Фон:"
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr "Непрозрачность фона:"
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
-msgstr "<i>Мин.</i>"
-
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
-msgstr "<i>Макс.</i>"
-
-#: src/glade/psensor-pref.glade:530
+#: src/glade/psensor-pref.glade:500
 msgid "Colors"
 msgstr "Цвета"
 
-#: src/glade/psensor-pref.glade:548
+#: src/glade/psensor-pref.glade:521
 msgid "Monitoring duration:"
 msgstr "Время мониторинга:"
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
-msgstr "мин."
-
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
-msgid "second(s)"
-msgstr "сек."
-
-#: src/glade/psensor-pref.glade:637
+#: src/glade/psensor-pref.glade:539
 msgid "Update interval:"
 msgstr "Интервал обновления:"
 
-#: src/glade/psensor-pref.glade:655
+#: src/glade/psensor-pref.glade:557
 msgid "Measures"
 msgstr "Замеры"
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
-msgstr "Диаграмма"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>Мин.</i>"
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>Макс.</i>"
+
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "сек."
+
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "мин."
+
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr "Интервал обновления замеров:"
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr "Вести журнал событий датчиков"
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr "Интервал ведения журнала событий датчиков:"
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr "секунд(с)"
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "Датчики"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr "Изменить параметры датчика"
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr "Название"
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr "Тип:"
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "Н/Д"
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr "Информация датчика"
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr "Микросхема:"
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr "Название:"
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr "Идентификатор:"
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr "Рисовать график датчика"
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr "Цвет:"
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
-msgstr "Уведомление"
+#: src/glade/sensor-edit.glade:380
+#, fuzzy
+msgid "Display sensor in the list of sensors"
+msgstr "Показать датчик в индикаторе меню приложений"
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr "Включить уведомления"
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr "Высший порог:"
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr "Нижний порог:"
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
-msgstr "Ð\98ндикаÑ\82оÑ\80 Ð¿Ñ\80иложениÑ\8f"
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "Уведомление"
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr "Показать датчик в индикаторе меню приложений"
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 msgid "Display sensor in the label (experimental)"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:541
-#, fuzzy
-msgid "Display sensor in the list of sensors"
-msgstr "Показать датчик в индикаторе меню приложений"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
+msgstr "Индикатор приложения"
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr "AMD: библиотека ADL не найдена."
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr "AMD: отсутствует API ADL."
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr "AMD: не удалось инициализировать ADL."
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr "AMD: ошибка определения количества адаптеров."
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr ""
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr ""
 
-#: src/lib/hdd_atasmart.c:152
-#, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
+#: src/lib/hdd_atasmart.c:141
+#, fuzzy, c-format
+msgid "%s: sk_disk_open() failure: %s."
 msgstr "atasmart: ошибка sk_disk_open(): %s."
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
-msgstr "hddtemp: не удалось открыть сокет."
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
+msgstr "%s: не удалось открыть сокет."
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
-msgstr "hddtemp: не удалось открыть соединение."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
+msgstr "%s: не удалось открыть соединение."
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
-msgstr "hddtemp: неправильная строка: %s."
+msgid "%s: wrong string: %s."
+msgstr "%s: неправильная строка: %s."
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
 msgstr ""
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
 msgstr ""
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:218
-#, c-format
-msgid "lmsensor: initialization failure: %s."
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
+#, fuzzy, c-format
+msgid "%s: initialization failure: %s."
 msgstr "lmsensor: ошибка инициализации: %s."
 
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr ""
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr ""
+
 #: src/lib/plog.c:43
 #, c-format
 msgid "Cannot open log file: %s"
 msgstr "Ошибка открытия файла журнала: %s"
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
-msgstr ""
+#: src/lib/nvidia.c:58
+#, fuzzy, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "Не удалось получить информацию NVIDIA."
+
+#: src/lib/nvidia.c:63
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "Не удалось получить информацию NVIDIA."
+
+#: src/lib/nvidia.c:226
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
+msgstr "Не удалось получить информацию NVIDIA."
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
-msgstr "Ошибка открытия соединения к серверу X11."
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s: Ошибка открытия соединения к серверу X11."
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s: Не удалось получить информацию NVIDIA."
+
+#: src/lib/nvidia.c:370
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve number of fans."
 msgstr "Не удалось получить информацию NVIDIA."
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr "об/мин"
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr "%"
 
@@ -409,24 +525,24 @@ msgstr "%"
 msgid "HOME variable not set."
 msgstr "Переменная HOME не установлена."
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr "Файл журнала датчика уже открыт."
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr "Не удалось открыть файл журнала датчика: %s."
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr "Файл журнала датчика не открыт."
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr "Файл журнала датчика не открыт, не удалось закрыть."
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -436,12 +552,12 @@ msgid ""
 "There is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "Использование: %s [КЛЮЧ]...\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
@@ -449,11 +565,11 @@ msgstr ""
 "Psensor — это GTK+ приложение для мониторинга аппаратных датчиков, включая "
 "температуру и скорость вентилятора."
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "Опции:"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
@@ -461,62 +577,63 @@ msgstr ""
 "  -h, --help          показать эту справку и выйти\n"
 "  -v, --version      показать версию и выйти"
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
 msgstr ""
 "  -u, --url=URL       URL psensor-сервера, пример: http://hostname:3131"
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-"  --use-libatasmart   использовать библиотеку atasmart для мониторинга "
-"дисков вместо демона hddtemp"
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr ""
 "  -n, --new-instance  принудительно запускает новую копию программы Psensor"
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr "  -d, --debug=УРОВЕНЬ   установить уровень отладки, целое между 0 и 3"
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "Сообщайте об ошибках на: %s\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr "%s домашняя страница: <%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr "Psensor не был собран с поддержкой удалённых датчиков."
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr "Включает режим отладки."
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Попробуйте `%s --help' для дополнительной информации.↵\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr "Копия Psensor уже запущена."
 
-#: src/main.c:597
+#: src/main.c:631
 #, fuzzy
 msgid "Failed to create thread for monitoring sensors"
 msgstr "Не удалось создать веб-сервер."
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Dmitry Serov https://launchpad.net/~dmitri-s93\n"
+"  Eugene Marshal https://launchpad.net/~lowrider\n"
+"  Ilya Volchanetskiy https://launchpad.net/~volchanetskiy\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -532,25 +649,25 @@ msgstr "Неправильное содержимое: %s"
 msgid "Invalid JSON: %s"
 msgstr "Неправильный JSON: %s"
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr "<html><body><p>Запрошена остановка сервера</p></body></html>"
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 "<html><body><p>Страница не найдена - Перейти к <a href='/'>Главной странице</"
 "a></p></body>"
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 "psensor-server ‌— это HTTP-сервер для удалённого мониторинга аппаратных "
 "датчиков."
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
@@ -558,7 +675,7 @@ msgstr ""
 "  -h, --help\t\tпоказать эту справку и выйти\n"
 "  -v, --version\t\tпоказать версию и выйти"
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
@@ -566,106 +683,89 @@ msgstr ""
 "  -p,--port=PORT\tпорт веб-сервера\n"
 "  -w,--wdir=DIR\t\tдиректория для страниц веб-сервера"
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr "  -d, --debug=LEVEL   установить уровень отладки, целое между 0 и 3"
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr "  -l, --log-file=ПУТЬ   установить ПУТЬ к файлу журнала"
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr "  --sensor-log-file=ПУТЬ установить ПУТЬ к файлу журнала датчика"
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 "  --sensor-log-interval=ПЕРИОД установить ПЕРИОД журналирования датчиков (в "
 "секундах)"
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr "HTTP запрос: %s"
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr "Включает режим отладки: %d"
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr "Датчики не обнаружены."
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr "Не удалось создать веб-сервер."
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr "Веб-сервер запущен на порту: %d"
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr "WWW-каталог: %s"
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr "URL: http://localhost:%d"
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr "Не удалось включить журналирование датчиков."
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
-msgstr "Psensor — это  GTK+ приложения для мониторинга аппаратных серсоров"
+msgstr "Psensor — это  GTK+ приложения для мониторинга аппаратных сенсоров"
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
+#: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
 msgstr ""
 
-#: src/ui.c:90
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "О Psensor"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "Домашняя страница Psensor"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr "Не удалось загрузить значок Psensor."
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "Выберите цвет переднего плана"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "Датчик"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr "Значение"
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "Мин."
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "Макс."
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr ""
 
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "Цвет"
+#: src/ui_sensorlist.c:296
+#, fuzzy
+msgid "Select sensor color"
+msgstr "Выберите цвет переднего плана"
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -676,9 +776,13 @@ msgid "Temperature alert"
 msgstr "Уведомление температуры"
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+#, fuzzy
+msgid "Fan speed alert"
 msgstr "Уведомление вентилятора"
 
 #: src/ui_sensorpref.c:248
 msgid "Unknown"
 msgstr ""
+
+#~ msgid "Sensor Information"
+#~ msgstr "Информация датчика"
index ffbc6ad..bc73c76 100644 (file)
Binary files a/po/sl.gmo and b/po/sl.gmo differ
index 49a9516..ea57a87 100644 (file)
--- a/po/sl.po
+++ b/po/sl.po
@@ -7,32 +7,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2012-04-14 21:02+0000\n"
-"Last-Translator: Jean-Philippe Orsini <jeanfi@gmail.com>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-11 21:22+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: Slovenian <sl@li.org>\n"
 "Language: sl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-07-02 08:28+0000\n"
-"X-Generator: Launchpad (build 15520)\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr ""
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr ""
-
-#: src/cfg.c:545
+#: src/cfg.c:557
 #, c-format
-msgid "Failed to parse configuration file: %s"
+msgid "Failed to load configuration file %s: %s"
 msgstr ""
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, c-format
 msgid "Failed to save configuration file %s."
 msgstr ""
@@ -42,7 +38,7 @@ msgid "About"
 msgstr ""
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr ""
 
@@ -71,6 +67,31 @@ msgstr ""
 msgid "_Help"
 msgstr ""
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr ""
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr ""
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr ""
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr ""
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr ""
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr ""
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -92,289 +113,367 @@ msgstr ""
 msgid "Edit Preferences"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
+#: src/glade/psensor-pref.glade:500
+msgid "Colors"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
+#: src/glade/psensor-pref.glade:521
+msgid "Monitoring duration:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:530
-msgid "Colors"
+#: src/glade/psensor-pref.glade:539
+msgid "Update interval:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:548
-msgid "Monitoring duration:"
+#: src/glade/psensor-pref.glade:557
+msgid "Measures"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
 msgid "second(s)"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:637
-msgid "Update interval:"
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:655
-msgid "Measures"
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
+#: src/glade/sensor-edit.glade:380
+msgid "Display sensor in the list of sensors"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 msgid "Display sensor in the label (experimental)"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:541
-msgid "Display sensor in the list of sensors"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
 msgstr ""
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr ""
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr ""
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr ""
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr ""
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr ""
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr ""
 
-#: src/lib/hdd_atasmart.c:152
+#: src/lib/hdd_atasmart.c:141
 #, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
+msgid "%s: sk_disk_open() failure: %s."
 msgstr ""
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
 msgstr ""
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
 msgstr ""
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
+msgid "%s: wrong string: %s."
 msgstr ""
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
 msgstr ""
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
 msgstr ""
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:218
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
 #, c-format
-msgid "lmsensor: initialization failure: %s."
+msgid "%s: initialization failure: %s."
+msgstr ""
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr ""
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
 msgstr ""
 
 #: src/lib/plog.c:43
@@ -382,24 +481,41 @@ msgstr ""
 msgid "Cannot open log file: %s"
 msgstr ""
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
+#: src/lib/nvidia.c:58
+#, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
 msgstr ""
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
+#: src/lib/nvidia.c:63
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
 msgstr ""
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:226
+#, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
 msgstr ""
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr ""
+
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr ""
+
+#: src/lib/nvidia.c:370
+#, c-format
+msgid "%s: Failed to retrieve number of fans."
+msgstr ""
+
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr ""
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr ""
 
@@ -407,24 +523,24 @@ msgstr ""
 msgid "HOME variable not set."
 msgstr ""
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr ""
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr ""
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr ""
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr ""
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -434,78 +550,79 @@ msgid ""
 "There is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr ""
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
 msgstr ""
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr ""
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
 msgstr ""
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
 msgstr ""
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr ""
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr ""
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr ""
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr ""
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr ""
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr ""
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr ""
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr ""
 
-#: src/main.c:597
+#: src/main.c:631
 msgid "Failed to create thread for monitoring sensors"
 msgstr ""
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi\n"
+"  Sasa Batistic https://launchpad.net/~sasa-batistic"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -521,129 +638,111 @@ msgstr ""
 msgid "Invalid JSON: %s"
 msgstr ""
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr ""
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
 msgstr ""
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
 msgstr ""
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr ""
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr ""
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr ""
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr ""
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr ""
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr ""
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr ""
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr ""
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr ""
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr ""
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr ""
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr ""
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
+#: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
 msgstr ""
 
-#: src/ui.c:90
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr ""
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr ""
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr ""
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
+#: src/ui_sensorlist.c:254
+msgid "Hide"
 msgstr ""
 
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr ""
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr ""
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr ""
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr ""
-
-#: src/ui_sensorlist.c:352
-msgid "Color"
+#: src/ui_sensorlist.c:296
+msgid "Select sensor color"
 msgstr ""
 
 #: src/ui_notify.c:48
@@ -655,7 +754,7 @@ msgid "Temperature alert"
 msgstr ""
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+msgid "Fan speed alert"
 msgstr ""
 
 #: src/ui_sensorpref.c:248
index 7eedc46..73c3083 100644 (file)
Binary files a/po/sr.gmo and b/po/sr.gmo differ
index 681936c..6402415 100644 (file)
--- a/po/sr.po
+++ b/po/sr.po
@@ -7,32 +7,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2012-05-03 02:31+0000\n"
-"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-11 21:25+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: Serbian <sr@li.org>\n"
 "Language: sr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-07-02 08:28+0000\n"
-"X-Generator: Launchpad (build 15520)\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr ""
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr ""
-
-#: src/cfg.c:545
+#: src/cfg.c:557
 #, c-format
-msgid "Failed to parse configuration file: %s"
+msgid "Failed to load configuration file %s: %s"
 msgstr ""
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, c-format
 msgid "Failed to save configuration file %s."
 msgstr ""
@@ -42,7 +38,7 @@ msgid "About"
 msgstr "О програму"
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "Поставке"
 
@@ -71,6 +67,31 @@ msgstr ""
 msgid "_Help"
 msgstr ""
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Сензор"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr ""
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Најмање"
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Највише"
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "У боји"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr ""
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -92,289 +113,367 @@ msgstr ""
 msgid "Edit Preferences"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "Укључено"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
+#: src/glade/psensor-pref.glade:500
+msgid "Colors"
+msgstr "У боји"
+
+#: src/glade/psensor-pref.glade:521
+msgid "Monitoring duration:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
+#: src/glade/psensor-pref.glade:539
+msgid "Update interval:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:530
-msgid "Colors"
-msgstr "У боји"
+#: src/glade/psensor-pref.glade:557
+msgid "Measures"
+msgstr ""
 
-#: src/glade/psensor-pref.glade:548
-msgid "Monitoring duration:"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
 msgid "second(s)"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:637
-msgid "Update interval:"
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:655
-msgid "Measures"
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "Сензор"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "Недоступно"
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
+#: src/glade/sensor-edit.glade:380
+msgid "Display sensor in the list of sensors"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 msgid "Display sensor in the label (experimental)"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:541
-msgid "Display sensor in the list of sensors"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
 msgstr ""
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr ""
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr ""
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr ""
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr ""
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr ""
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr ""
 
-#: src/lib/hdd_atasmart.c:152
+#: src/lib/hdd_atasmart.c:141
 #, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
+msgid "%s: sk_disk_open() failure: %s."
 msgstr ""
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
 msgstr ""
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
 msgstr ""
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
+msgid "%s: wrong string: %s."
 msgstr ""
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
 msgstr ""
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
 msgstr ""
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:218
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
 #, c-format
-msgid "lmsensor: initialization failure: %s."
+msgid "%s: initialization failure: %s."
+msgstr ""
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr ""
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
 msgstr ""
 
 #: src/lib/plog.c:43
@@ -382,24 +481,41 @@ msgstr ""
 msgid "Cannot open log file: %s"
 msgstr ""
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
+#: src/lib/nvidia.c:58
+#, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
 msgstr ""
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
+#: src/lib/nvidia.c:63
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
 msgstr ""
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:226
+#, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
+msgstr ""
+
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
 msgstr ""
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr ""
+
+#: src/lib/nvidia.c:370
+#, c-format
+msgid "%s: Failed to retrieve number of fans."
+msgstr ""
+
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr ""
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr ""
 
@@ -407,24 +523,24 @@ msgstr ""
 msgid "HOME variable not set."
 msgstr ""
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr ""
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr ""
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr ""
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr ""
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -434,78 +550,79 @@ msgid ""
 "There is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "Употреба: %s [ОПЦИЈА]...\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
 msgstr ""
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "Опције:"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
 msgstr ""
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
 msgstr ""
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr ""
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr ""
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "Пријавите грешку на: %s\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr "%s матична страна: <%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr ""
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr ""
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Покушајте„%s --help“ за више информација.\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr ""
 
-#: src/main.c:597
+#: src/main.c:631
 msgid "Failed to create thread for monitoring sensors"
 msgstr ""
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi\n"
+"  Мирослав Николић https://launchpad.net/~lipek"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -521,130 +638,113 @@ msgstr ""
 msgid "Invalid JSON: %s"
 msgstr ""
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr ""
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
 msgstr ""
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
 msgstr ""
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr ""
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr ""
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr ""
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr ""
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr ""
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr ""
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr ""
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr ""
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr ""
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr ""
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr ""
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr ""
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
+#: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
 msgstr ""
 
-#: src/ui.c:90
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "О Псензору"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "Матична страница Псензора"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr ""
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "Одаберите боју текста"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "Сензор"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
+#: src/ui_sensorlist.c:254
+msgid "Hide"
 msgstr ""
 
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "Најмање"
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "Највише"
-
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "У боји"
+#: src/ui_sensorlist.c:296
+#, fuzzy
+msgid "Select sensor color"
+msgstr "Одаберите боју текста"
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -655,7 +755,7 @@ msgid "Temperature alert"
 msgstr ""
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+msgid "Fan speed alert"
 msgstr ""
 
 #: src/ui_sensorpref.c:248
index b486cd7..3b239f7 100644 (file)
Binary files a/po/sv.gmo and b/po/sv.gmo differ
index b19621c..00f17a4 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -9,33 +9,29 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor 1.0.0.0\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2014-08-02 18:45+0000\n"
-"Last-Translator: Josef Andersson <Unknown>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-20 11:26+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: Swedish\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-08-27 08:00+0000\n"
-"X-Generator: Launchpad (build 17174)\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr "Misslyckades med att skapa katalogen %s: %s"
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr "Konfigurationsfilen existerar inte"
-
-#: src/cfg.c:545
-#, c-format
-msgid "Failed to parse configuration file: %s"
+#: src/cfg.c:557
+#, fuzzy, c-format
+msgid "Failed to load configuration file %s: %s"
 msgstr "Misslyckades med att tolka konfigurationsfilen: %s"
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, c-format
 msgid "Failed to save configuration file %s."
 msgstr "Misslyckades med att spara konfigurationsfilen %s."
@@ -45,7 +41,7 @@ msgid "About"
 msgstr "Om"
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "Inställningar"
 
@@ -74,6 +70,31 @@ msgstr "_Psensor"
 msgid "_Help"
 msgstr "_Hjälp"
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Sensor"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "Värde"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Min"
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Max"
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "Färg"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "Graf"
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -95,317 +116,410 @@ msgstr "Botten"
 msgid "Edit Preferences"
 msgstr "Redigera inställningar"
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr "Göm fönsterdekoration"
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr "Håll fönster under"
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "Aktivera meny"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr "Aktivera räknare för Unity-programstartare"
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr "Celsius"
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr "Fahrenheit"
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr "Temperaturenhet:"
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr "Sensortabellens position:"
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr "Gränssnitt"
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr "Starta vid sessionsuppstart"
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr "Göm fönster vid uppstart"
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr "Återställ fönsterposition och storlek"
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr "Uppstart"
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr "Förgrund:"
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr "Bakgrund:"
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr "Bakgrundsgenomskinlighet:"
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
-msgstr "<i>Min</i>"
-
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
-msgstr "<i>Max</i>"
-
-#: src/glade/psensor-pref.glade:530
+#: src/glade/psensor-pref.glade:500
 msgid "Colors"
 msgstr "Färger"
 
-#: src/glade/psensor-pref.glade:548
+#: src/glade/psensor-pref.glade:521
 msgid "Monitoring duration:"
 msgstr "Övervakningstid:"
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
-msgstr "minut(er)"
-
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
-msgid "second(s)"
-msgstr "sekund(er)"
-
-#: src/glade/psensor-pref.glade:637
+#: src/glade/psensor-pref.glade:539
 msgid "Update interval:"
 msgstr "Uppdateringsintervall:"
 
-#: src/glade/psensor-pref.glade:655
+#: src/glade/psensor-pref.glade:557
 msgid "Measures"
 msgstr "Mätningar"
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
-msgstr "Graf"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>Min</i>"
+
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>Max</i>"
+
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "sekund(er)"
+
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "minut(er)"
+
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr ""
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr "Uppdateringsintervall för mätning:"
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr "Aktivera sensorlogging"
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr "Loggintervall för sensor:"
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr "sekund(er)"
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr "Skript att köra vid alarm:"
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "Sensorer"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr "Redigera sensorinställningar"
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr "Namn"
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr "Typ:"
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "Ej tillgänglig"
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr "Sensorinformation"
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr "Chip:"
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr "Namn:"
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr "Id:"
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr "Rita sensorkurva"
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr "Färg:"
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
-msgstr "Alarm"
+#: src/glade/sensor-edit.glade:380
+#, fuzzy
+msgid "Display sensor in the list of sensors"
+msgstr "Visa sensor i meny"
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr "Aktivera skrivbordsnotifiering"
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr "Högt tröskelvärde:"
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr "-1"
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr "Lågt tröskelvärde:"
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
-msgstr "Programindikator"
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "Alarm"
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr "Visa sensor i meny"
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 msgid "Display sensor in the label (experimental)"
 msgstr "Visa sensor i etiketten (experimentell)"
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr "-1"
-
-#: src/glade/sensor-edit.glade:541
-#, fuzzy
-msgid "Display sensor in the list of sensors"
-msgstr "Visa sensor i meny"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
+msgstr "Programindikator"
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr "AMD: kan inte hitta ADL-bibliotek."
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr "AMD: saknar ADL API."
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr "AMD: misslyckades med att initialisera ADL."
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr "AMD: kan inte hämta antal adaptrar."
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr "Antal AMD/ATI-adaptrar: %d"
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr "Antal aktiva AMD/ATI-adaptrar: %d"
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr "CPU"
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr "Disk"
 
-#: src/lib/hdd_atasmart.c:152
+#: src/lib/hdd_atasmart.c:141
 #, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
-msgstr "atasmart: sk_disk_open()-fel: %s."
+msgid "%s: sk_disk_open() failure: %s."
+msgstr "%s: sk_disk_open()-fel: %s."
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
-msgstr "hddtemp: misslyckades med att öppna uttag."
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
+msgstr "%s: misslyckades med att öppna uttag."
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
-msgstr "hddtemp: misslyckades med att öppna anslutning."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
+msgstr "%s: misslyckades med att öppna anslutning."
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
-msgstr "hddtemp: fel sträng: %s."
+msgid "%s: wrong string: %s."
+msgstr "%s: fel sträng: %s."
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
-msgstr "lmsensor: kan inte hämta värdet för underegenskap %s: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
+msgstr "%s: kan inte hämta värdet för underegenskap %s: %s."
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
-msgstr "lmsensor: lmsensor_psensor_create fel: fel egenskapstyp."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
+msgstr "%s: fel egenskapstyp."
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr "Intel CPU"
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr "AMD CPU"
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr "NVIDIA GPU"
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr "VIA CPU"
 
-#: src/lib/lmsensor.c:218
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
 #, c-format
-msgid "lmsensor: initialization failure: %s."
-msgstr "lmsensor: initialiseringsfel: %s."
+msgid "%s: initialization failure: %s."
+msgstr "%s: initialiseringsfel: %s."
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr "CPU"
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr ""
 
 #: src/lib/plog.c:43
 #, c-format
 msgid "Cannot open log file: %s"
 msgstr "Kan inte öppna loggfil: %s"
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
-msgstr ""
-"Proprietär NVIDIA-drivrutin ej använd, eller kan inte hämta NVIDIA GPU-"
-"temperatur."
+#: src/lib/nvidia.c:58
+#, fuzzy, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "Misslyckades med att hämta NVIDIA-information."
+
+#: src/lib/nvidia.c:63
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "Misslyckades med att hämta NVIDIA-information."
+
+#: src/lib/nvidia.c:226
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
+msgstr "Misslyckades med att hämta NVIDIA-information."
+
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s: Kan inte öppna anslutning till X11-server."
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
-msgstr "Kan inte öppna anslutning till X11-server."
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s: Misslyckades med att hämta NVIDIA-information."
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:370
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve number of fans."
 msgstr "Misslyckades med att hämta NVIDIA-information."
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr "RPM"
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr "%"
 
@@ -413,24 +527,24 @@ msgstr "%"
 msgid "HOME variable not set."
 msgstr "HOME-variabel inte inställd."
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr "Sensorloggfil redan öppen."
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr "Kan inte öppna sensorloggfil: %s"
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr "Sensorloggfil ej öppen."
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr "Sensorloggfil ej öppen, kan inte stänga."
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -445,12 +559,12 @@ msgstr ""
 "Det här är fri programvara: Du kan fritt modifiera den och distribuera den\n"
 "Det finns INGEN GARANTI i den omfattning som medges av gällande lag.\n"
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "Användning: %s [FLAGGA]...\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
@@ -458,11 +572,11 @@ msgstr ""
 "Psensor är ett GTK+-program för att övervaka hårdvarusensorer, inklusive "
 "temperaturer och fläkthastigheter."
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "Alternativ:"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
@@ -470,7 +584,7 @@ msgstr ""
 "  -h, --help          visa denna hjälp och avsluta\n"
 "  -v, --version      visa versionsinformation och avsluta"
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
@@ -478,56 +592,54 @@ msgstr ""
 "  -u, --url=URL       URL för psensor-server,\n"
 "                      exempelvis: http://hostname:3131"
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-"  --use-libatasmart   använd atasmart-biblioteket för diskövervakning "
-"istället för\n"
-"                      hddtemp-demon"
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr "  -n, --new-instance  tvinga fram att skapa ett nytt Psensor-program"
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=LEVEL   ställ in felsökningsnivå, heltal mellan nivå 0 och 3"
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "Rapportera fel till: %s\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr "%s webbplats <%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr "Psensor har inte kompilerats med fjärrsensorstöd."
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr "Aktivera felsökningsläge."
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Prova`%s --help' för mer information.\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr "Det finns redan en Psensor-instans."
 
-#: src/main.c:597
+#: src/main.c:631
 #, fuzzy
 msgid "Failed to create thread for monitoring sensors"
 msgstr "Misslyckades med att skapa katalogen %s: %s"
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi\n"
+"  Josef Andersson https://launchpad.net/~northar"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -543,24 +655,24 @@ msgstr "Ogiltigt innehåll: %s"
 msgid "Invalid JSON: %s"
 msgstr "Ogiltig JSON: %s"
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr "<html><body><p>Begärde serverstopp</p></body></html>"
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 "<html><body><p>Hittade inte sida - Gå till <a href='/'>Huvudsida</a></p></"
 "body>"
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 "psensor-server är en HTTP-server för att fjärrövervaka hårdvarusensorer."
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
@@ -568,7 +680,7 @@ msgstr ""
 "  -h, --help\t\tvisa denna hjälp och avsluta\n"
 "  -v, --version\t\tvisa versionsinformation och avsluta"
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
@@ -576,107 +688,91 @@ msgstr ""
 "  -p,--port=PORT\twebbserverport\n"
 "  -w,--wdir=DIR\t\tkatalog som innehåller webbserversidor"
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr "  -d, --debug=LEVEL     ställ in felsökningnivån mellan 0 and 3"
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr "  -l, --log-file=PATH   ställ in loggfilen till PATH"
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr "  --sensor-log-file=PATH ställ in loggfil för sensor till PATH"
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 "  --sensor-log-interval=S ställ in loggintervall för sensor till S (sekunder)"
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr "HTTP-begäran: %s"
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr "Aktiverar felsökningsläge: %d"
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr "Inga sensorer hittades."
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr "Misslyckades med att skapa webbserver."
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr "Webbserver startade på port: %d"
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr "WWW-katalog: %s"
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr "URL: http://localhost:%d"
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr "Misslyckades med att aktivera sensorloggning."
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr "Psensor är ett GTK+-program för att övervaka hårdvarusensorer"
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
+#: src/ui.c:90
+#, fuzzy
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
 msgstr ""
 "Copyright(c) 2010-2014\n"
 "jeanfi@gmail.com"
 
-#: src/ui.c:90
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "Om Psensor"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "Psensor-webbplats"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr "Misslyckades med att läsa in Psensor-ikon."
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "Välj förgrundsfärg"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "Sensor"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr "Värde"
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "Min"
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "Max"
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr ""
 
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "Färg"
+#: src/ui_sensorlist.c:296
+#, fuzzy
+msgid "Select sensor color"
+msgstr "Välj förgrundsfärg"
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -687,9 +783,17 @@ msgid "Temperature alert"
 msgstr "Temperaturlarm"
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+#, fuzzy
+msgid "Fan speed alert"
 msgstr "Fläktlarm"
 
 #: src/ui_sensorpref.c:248
 msgid "Unknown"
 msgstr "Okänd"
+
+#~ msgid ""
+#~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU "
+#~ "temperature."
+#~ msgstr ""
+#~ "Proprietär NVIDIA-drivrutin ej använd, eller kan inte hämta NVIDIA GPU-"
+#~ "temperatur."
index 9ae3b9b..dd3b3f4 100644 (file)
Binary files a/po/tr.gmo and b/po/tr.gmo differ
index fd08f1c..0782e41 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -7,32 +7,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2014-07-19 20:17+0000\n"
-"Last-Translator: İbrahim Çelik <ibrahimcelik89@gmail.com>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-20 11:27+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: Turkish <tr@li.org>\n"
 "Language: tr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-08-27 08:00+0000\n"
-"X-Generator: Launchpad (build 17174)\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, fuzzy, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr "Web sunucusu oluşturulamadı."
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr "Yapılandırma dosyası mevcut değil."
-
-#: src/cfg.c:545
-#, c-format
-msgid "Failed to parse configuration file: %s"
-msgstr ""
+#: src/cfg.c:557
+#, fuzzy, c-format
+msgid "Failed to load configuration file %s: %s"
+msgstr "Algılayıcıların günlük kaydı etkinleştirilemedi."
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, fuzzy, c-format
 msgid "Failed to save configuration file %s."
 msgstr "Algılayıcıların günlük kaydı etkinleştirilemedi."
@@ -42,7 +38,7 @@ msgid "About"
 msgstr "Hakkında"
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "Tercihler"
 
@@ -71,6 +67,31 @@ msgstr "_Psensor"
 msgid "_Help"
 msgstr "_Yardım"
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Algılayıcı"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "Değer"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Asgari"
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Azami"
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "Renk"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "Grafik"
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -92,318 +113,411 @@ msgstr "Alt"
 msgid "Edit Preferences"
 msgstr "Tercihleri Düzenle"
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr "Pencere çubuğunu gizle"
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr "Pencereyi aşağıda tut"
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "Menüyü etkinleştir"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr "Unity Başlatıcı sayacını etkinleştir"
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr "Celsius"
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr "Fahrenhayt"
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr "Sıcaklık birimi:"
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr "Gözlemleyici tablosunun konumu:"
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr "Arayüz"
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr "Oturum başlangıcında başlat"
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr "Başlangıçta pencereyi gizle"
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr "Pencere konumunu ve boyutunu yeniden yükle"
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr "Başlangıç"
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr "Önplan:"
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr "Arkaplan:"
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr "Arkaplan saydamlığı:"
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
-msgstr "<i>Asgari</i>"
-
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
-msgstr "<i>Azami</i>"
-
-#: src/glade/psensor-pref.glade:530
+#: src/glade/psensor-pref.glade:500
 msgid "Colors"
 msgstr "Renk"
 
-#: src/glade/psensor-pref.glade:548
+#: src/glade/psensor-pref.glade:521
 msgid "Monitoring duration:"
 msgstr "Gözlemleme süresi:"
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
-msgstr "dakika"
-
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
-msgid "second(s)"
-msgstr "saniye"
-
-#: src/glade/psensor-pref.glade:637
+#: src/glade/psensor-pref.glade:539
 msgid "Update interval:"
 msgstr "Güncelleme aralığı:"
 
-#: src/glade/psensor-pref.glade:655
+#: src/glade/psensor-pref.glade:557
 msgid "Measures"
 msgstr "Ölçümler"
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
-msgstr "Grafik"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>Asgari</i>"
+
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>Azami</i>"
+
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "saniye"
+
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "dakika"
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr "Ölçüm güncelleştirme aralığı:"
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr "Algılayıcı günlük kaydını etkinleştir"
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr "Algılayıcı günlük kaydı aralığı:"
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr "saniye"
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr "Alarm çaldığında betik çalıştırılır:"
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "Algılayıcılar"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr "Algılayıcı Tercihlerini Düzenle"
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr "Ad"
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr "Tür:"
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "Bilinmeyen"
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr "Algılayıcı Bilgisi"
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr "Yonga:"
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr "İsim:"
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr "Kimlik:"
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr "Algılayıcı eğrisini çiz"
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr "Renk :"
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
-msgstr "Alarm"
+#: src/glade/sensor-edit.glade:380
+#, fuzzy
+msgid "Display sensor in the list of sensors"
+msgstr "Algılayıcıları menüde göster"
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr "Masaüstü bildirimlerini etkinleştir"
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr "Yüksek eşik:"
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr "-1"
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr "Düşük eşik:"
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
-msgstr "Uygulama Göstergesi"
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "Alarm"
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr "Algılayıcıları menüde göster"
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 #, fuzzy
 msgid "Display sensor in the label (experimental)"
 msgstr "Etikette algılayıcı göster (deneysel)"
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:541
-#, fuzzy
-msgid "Display sensor in the list of sensors"
-msgstr "Algılayıcıları menüde göster"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
+msgstr "Uygulama Göstergesi"
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr "AMD:  ADL kütüphanesi bulunamadı."
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr "AMD: ADL'nin API'sı kayıp."
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr "AMD: ADL başlatılamadı."
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr "AMD: bağdaştırıcıların sayısı alınamadı."
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr "AMD/ATI bağdaştırıcı sayısı: %d"
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr "Etkin AMD/ATI bağdaştırıcı sayısı: %d"
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr "İşlemci"
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr "Disk"
 
-#: src/lib/hdd_atasmart.c:152
+#: src/lib/hdd_atasmart.c:141
 #, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
-msgstr "atasmart: sk_disk_open() hatası: %s."
+msgid "%s: sk_disk_open() failure: %s."
+msgstr "%s: sk_disk_open() hatası: %s."
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
-msgstr "hddtemp: yuva açılamadı"
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
+msgstr "%s: yuva açılamadı"
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
-msgstr "hddtemp: bağlantı açılamadı."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
+msgstr "%s: bağlantı açılamadı."
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
-msgstr "hddtemp: yanlış dizi: %s."
+msgid "%s: wrong string: %s."
+msgstr "%s: yanlış dizi: %s."
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
-msgstr "lmsensor: %s alt özelliğinin değeri alınamıyor: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
+msgstr "%s: %s alt özelliğinin değeri alınamıyor: %s."
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
-msgstr "lmsensor: lmsensor_psensor_create hatası: yanlış özellik tipi."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
+msgstr "%s: yanlış özellik tipi."
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr "İntel işlemci"
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr "AMD işlemci"
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr "NVIDIA Ekran Kartı"
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr "VIA İşlemci"
 
-#: src/lib/lmsensor.c:218
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
 #, c-format
-msgid "lmsensor: initialization failure: %s."
-msgstr "lmsensor: başlatma hatası: %s."
+msgid "%s: initialization failure: %s."
+msgstr "%s: başlatma hatası: %s."
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr "İşlemci"
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr ""
 
 #: src/lib/plog.c:43
 #, c-format
 msgid "Cannot open log file: %s"
 msgstr "Günlükleme dosyası açılamadı: %s"
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
-msgstr ""
-"NVIDIA kapalı kaynak sürücüsü kullanılmıyor veya NVIDIA ekran kartı "
-"sıcaklığı alınamıyor."
+#: src/lib/nvidia.c:58
+#, fuzzy, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "NVIDIA bilgisi alınamıyor."
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
-msgstr "X11 sunucusu bağlantısı açılamıyor."
+#: src/lib/nvidia.c:63
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "NVIDIA bilgisi alınamıyor."
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:226
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
 msgstr "NVIDIA bilgisi alınamıyor."
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s: X11 sunucusu bağlantısı açılamıyor."
+
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s: NVIDIA bilgisi alınamıyor."
+
+#: src/lib/nvidia.c:370
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve number of fans."
+msgstr "NVIDIA bilgisi alınamıyor."
+
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr "RPM"
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr "%"
 
@@ -411,24 +525,24 @@ msgstr "%"
 msgid "HOME variable not set."
 msgstr "HOME değişkeni ayarlanmamış."
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr "Algılayıcı günlük kaydı dosyası zaten açık."
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr "Algılayıcı günlük kaydı dosyası açılamıyor: %s."
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr "Algılayıcı günlük kaydı dosyası açık değil."
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr "Algılayıcı günlük kaydı açık değil, kapatılamıyor."
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -443,12 +557,12 @@ msgstr ""
 "Bu bir özgür yazılımdır: değiştirmekte ve yeniden dağıtmakta özgürsünüz.\n"
 "Yasaların izin verdiği çerçevede hiçbir garantisi YOKTUR.\n"
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "Kullanım: %s [SEÇENEK]...\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
@@ -456,11 +570,11 @@ msgstr ""
 "Psensor, sıcaklık ve fan hızı da dahil olmak üzere donanım algılayıcılarını "
 "gözlemleyen bir GTK+ uygulamasıdır."
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "Seçenekler:"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
@@ -468,7 +582,7 @@ msgstr ""
 "  -h, --help          yardımı göster ve çık\n"
 "  -v, --version       sürüm bilgisini göster ve çık"
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
@@ -476,56 +590,56 @@ msgstr ""
 "  -u, --url=URL       psensor sunucusunun bağlantısı,\n"
 "                      example: http://hostname:3131"
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-"  --use-libatasmart   disk gözlemleme için hddtemp yerine bir atasmart\n"
-"                      kütüphanesi kullan"
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr ""
 "  -n, --new-instance  yeni bir Psensor uygulaması oluşturulmasını zorla"
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=LEVEL   hata ayıklama seviyesin ayarla, 0 ve 3 arasında tamsayı"
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "Hataları rapor et:%s\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr "%s ana sayfa: <%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr "Psensor, uzaktan algılayıcı desteği ile derlenmemiştir."
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr "Hata ayıklama modunu etkinleştirir."
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Daha fazla bilgi için `%s --help' yazın.\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr "Bir Psensor örneği zaten mevcut."
 
-#: src/main.c:597
+#: src/main.c:631
 #, fuzzy
 msgid "Failed to create thread for monitoring sensors"
 msgstr "Web sunucusu oluşturulamadı."
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi\n"
+"  zeugma https://launchpad.net/~sunder67\n"
+"  İbrahim Çelik https://launchpad.net/~ibrahimcelik89"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -541,25 +655,25 @@ msgstr "Geçersiz içerik: %s"
 msgid "Invalid JSON: %s"
 msgstr "Geçersiz JSON: %s"
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr "<html><body><p>Sunucu durdurma istendi</p></body></html>"
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 "<html><body><p>Sayfa bulunamadı - Şuraya gidin <a href='/'>Main page</a></"
 "p></body>"
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 "psensor-sunucusu, donanım algılayıcılarını uzaktan gözlemleme amaçlı bir "
 "HTTP sunucusudur."
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
@@ -567,7 +681,7 @@ msgstr ""
 "  -h, --help\t\tyardımı göster ve çık\n"
 "  -v, --version\t\tsürüm bilgisini göster ve çık"
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
@@ -575,112 +689,93 @@ msgstr ""
 "  -p,--port=PORT\twebsunucu bağlantı noktası\n"
 "  -w,--wdir=DIR\t\tdizin websunucusu sayfaları içerir"
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr ""
 "  -d, --debug=LEVEL     hata ayıklama seviyesini ayarla, 0 ve 3 arasında bir "
 "tamsayı"
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr "  -l, --log-file=PATH   günlük kaydı dosyasını PATH olarak ayarla"
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr ""
 "  --sensor-log-file=PATH algılayıcı günlük kaydı dosyasını PATH olarak ayarla"
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 "  --sensor-log-interval=S algılayıcı günlük kaydı aralığını S (saniye) "
 "olarak ayarla"
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr "HTTP İsteği: %s"
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr "Hata ayıklama modunu etkinleştirir: %d"
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr "Hiçbir algılayıcı bulunamadı."
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr "Web sunucusu oluşturulamadı."
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr "Web sunucusu şu noktadan başlatıldı: %d"
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr "WWW dizini: %s"
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr "URL: http://localhost:%d"
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr "Algılayıcıların günlük kaydı etkinleştirilemedi."
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr ""
 "Psensor, donanım algılayıcılarının gözlenmesi amaçlı bir GTK+ uygulamasıdır"
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
-msgstr ""
-"Telif Hakkı(c) 2010-2014\n"
-"jeanfi@gmail.com"
-
 #: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
+msgstr "Telif Hakkı(c) 2010-2014 jeanfi@gmail.com"
+
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "Psensor Hakkında"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "Psensor Anasayfası"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr "Psensor simgesi yüklenemedi."
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "Önplan rengini seçin"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "Algılayıcı"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr "Değer"
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "Asgari"
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "Azami"
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr ""
 
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "Renk"
+#: src/ui_sensorlist.c:296
+#, fuzzy
+msgid "Select sensor color"
+msgstr "Önplan rengini seçin"
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -691,9 +786,26 @@ msgid "Temperature alert"
 msgstr "Sıcaklık uyarısı"
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+#, fuzzy
+msgid "Fan speed alert"
 msgstr "Fan uyarısı"
 
 #: src/ui_sensorpref.c:248
 msgid "Unknown"
 msgstr "Bilinmeyen"
+
+#~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#~ msgstr "lmsensor: lmsensor_psensor_create hatası: yanlış özellik tipi."
+
+#~ msgid "The configuration file does not exist."
+#~ msgstr "Yapılandırma dosyası mevcut değil."
+
+#~ msgid "Sensor Information"
+#~ msgstr "Algılayıcı Bilgisi"
+
+#~ msgid ""
+#~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU "
+#~ "temperature."
+#~ msgstr ""
+#~ "NVIDIA kapalı kaynak sürücüsü kullanılmıyor veya NVIDIA ekran kartı "
+#~ "sıcaklığı alınamıyor."
index 1de1261..1703cfe 100644 (file)
Binary files a/po/uk.gmo and b/po/uk.gmo differ
index c2cdd83..fe88100 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -7,32 +7,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2012-10-13 16:24+0000\n"
-"Last-Translator: Ilya Volchanetskiy <Unknown>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-11 21:23+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: Ukrainian <uk@li.org>\n"
 "Language: uk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2013-01-21 09:32+0000\n"
-"X-Generator: Launchpad (build 16430)\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, fuzzy, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr "Не вдалося створити веб-сервер."
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr ""
-
-#: src/cfg.c:545
-#, c-format
-msgid "Failed to parse configuration file: %s"
-msgstr ""
+#: src/cfg.c:557
+#, fuzzy, c-format
+msgid "Failed to load configuration file %s: %s"
+msgstr "Не вдалося створити веб-сервер."
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, c-format
 msgid "Failed to save configuration file %s."
 msgstr ""
@@ -42,7 +38,7 @@ msgid "About"
 msgstr "Про програму"
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "Налаштування"
 
@@ -71,6 +67,31 @@ msgstr ""
 msgid "_Help"
 msgstr "_Довдіка"
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "Датчик"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "Значення"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "Мін."
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "Макс."
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "Колір"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "Діаграма"
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -92,314 +113,409 @@ msgstr ""
 msgid "Edit Preferences"
 msgstr "Редагувати налаштування"
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr "Сховати каркас вікна"
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr "Тримати вікно позаду"
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "Увімкнути меню"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr "Увімкнути лічильник на панелі запуску Unity"
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr "Одиниця температури:"
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr "Положення таблиці датчиків:"
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr "Зовнішній вигляд"
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr "Сховати вікно після запуску"
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr "Відновляти позицію і розмір вікна"
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr "Передній план:"
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr "Тло:"
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr "Непрозорість тла:"
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
-msgstr "<i>Мін.</i>"
-
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
-msgstr "<i>Макс.</i>"
-
-#: src/glade/psensor-pref.glade:530
+#: src/glade/psensor-pref.glade:500
 msgid "Colors"
 msgstr "Кольори"
 
-#: src/glade/psensor-pref.glade:548
+#: src/glade/psensor-pref.glade:521
 msgid "Monitoring duration:"
 msgstr "Тривалість спостереження"
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
-msgstr "хв."
-
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
-msgid "second(s)"
-msgstr "сек."
-
-#: src/glade/psensor-pref.glade:637
+#: src/glade/psensor-pref.glade:539
 msgid "Update interval:"
 msgstr "Інтервал оновлення:"
 
-#: src/glade/psensor-pref.glade:655
+#: src/glade/psensor-pref.glade:557
 msgid "Measures"
 msgstr "Заміри"
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
-msgstr "Діаграма"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>Мін.</i>"
+
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>Макс.</i>"
+
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "сек."
+
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "хв."
+
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr ""
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr "Інтервал оновлення замірів:"
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "Датчики"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr "Редагувати налаштування датчика"
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr "Тип:"
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "Н/Д"
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr "Інформація датчика"
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr "Назва:"
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr "Ідентифікатор:"
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr "Малювати криву датчика"
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr "Колір:"
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
-msgstr "Оповіщення"
+#: src/glade/sensor-edit.glade:380
+msgid "Display sensor in the list of sensors"
+msgstr ""
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr "Увімкнути оповіщення"
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr "Вищий поріг:"
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr "Нижчий поріг:"
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
-msgstr ""
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "Оповіщення"
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 msgid "Display sensor in the label (experimental)"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
-msgstr ""
-
-#: src/glade/sensor-edit.glade:541
-msgid "Display sensor in the list of sensors"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
 msgstr ""
 
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr "AMD: не вдалося знайти бібліотеку ADL."
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr "AMD: відсутнє API ADL."
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr "AMD: не вдалося ініціалізувати ADL."
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr "AMD: не вдалося отримати кількість адаптерів."
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr ""
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr ""
 
-#: src/lib/hdd_atasmart.c:152
-#, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
+#: src/lib/hdd_atasmart.c:141
+#, fuzzy, c-format
+msgid "%s: sk_disk_open() failure: %s."
 msgstr "atasmart: помилка sk_disk_open(): %s."
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
-msgstr "hddtemp: не вдалося відкрити сокет."
+#: src/lib/hdd_hddtemp.c:62
+#, c-format
+msgid "%s: failed to open socket."
+msgstr "%s: не вдалося відкрити сокет."
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
-msgstr "hddtemp: не вдалося встановити з'єднання."
+#: src/lib/hdd_hddtemp.c:75
+#, c-format
+msgid "%s: failed to open connection."
+msgstr "%s: не вдалося встановити з'єднання."
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
 #, c-format
-msgid "hddtemp: wrong string: %s."
-msgstr "hddtemp: неправильний рядок: %s."
+msgid "%s: wrong string: %s."
+msgstr "%s: неправильний рядок: %s."
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
+msgid "%s: Cannot get value of subfeature %s: %s."
 msgstr ""
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
 msgstr ""
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:218
-#, c-format
-msgid "lmsensor: initialization failure: %s."
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
+#, fuzzy, c-format
+msgid "%s: initialization failure: %s."
 msgstr "lmsensor: помилка ініціалізації: %s."
 
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr ""
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr ""
+
 #: src/lib/plog.c:43
 #, c-format
 msgid "Cannot open log file: %s"
 msgstr "Не вдалося відкрити лог-файл: %s"
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
-msgstr ""
+#: src/lib/nvidia.c:58
+#, fuzzy, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "Не вдалося отримати інформацію NVIDIA."
+
+#: src/lib/nvidia.c:63
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "Не вдалося отримати інформацію NVIDIA."
+
+#: src/lib/nvidia.c:226
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
+msgstr "Не вдалося отримати інформацію NVIDIA."
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
-msgstr "Не вдалося встановити з'єднання до сервера X11."
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s: Не вдалося встановити з'єднання до сервера X11."
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s: Не вдалося отримати інформацію NVIDIA."
+
+#: src/lib/nvidia.c:370
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve number of fans."
 msgstr "Не вдалося отримати інформацію NVIDIA."
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr "об/хв"
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr "%"
 
@@ -407,24 +523,24 @@ msgstr "%"
 msgid "HOME variable not set."
 msgstr "Змінна HOME не встановлена."
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr ""
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr ""
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr ""
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr ""
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -434,22 +550,22 @@ msgid ""
 "There is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "Використання: %s [КЛЮЧ]...\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
 msgstr ""
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "Опції:"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
@@ -457,61 +573,61 @@ msgstr ""
 "  -h, --help          показати цю довідку і вийти\n"
 "  -v, --version       показати версію і вийти"
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
 msgstr ""
 "  -u, --url=URL       URL psensor-сервера, наприклад: http://hostname:3131"
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-"  --use-libatasmart   використовувати бібліотеку atasmart для моніторингу\n"
-"дисків замість демона hddtemp"
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr "  -n, --new-instance  примусово створювати нову копію програми Psensor"
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr "  -d, --debug=РІВЕНЬ   встановити рівень налагодження, ціле між 0 та 3"
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "Звітуйте про помилки до: %s\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr "%s домашня сторінка: <%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr "Psensor не був зібраний з підтримкою віддалених датчиків."
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr "Включає режим налагодження."
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Спробуйте `%s --help' щоб отримати більше інформації.\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr ""
 
-#: src/main.c:597
+#: src/main.c:631
 #, fuzzy
 msgid "Failed to create thread for monitoring sensors"
 msgstr "Не вдалося створити веб-сервер."
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Ilya Volchanetskiy https://launchpad.net/~volchanetskiy\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi\n"
+"  VPIP https://launchpad.net/~tymbood"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -527,25 +643,25 @@ msgstr ""
 msgid "Invalid JSON: %s"
 msgstr "Неправильний JSON: %s"
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr ""
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr ""
 "<html><body><p>Сторінка не знайдена - Перейти до <a href='/'>Головної "
 "сторінки</a></p></body>"
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr ""
 "psensor-server ‌— це HTTP-сервер для віддаленого моніторингу апаратних "
 "датчиків."
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
@@ -553,7 +669,7 @@ msgstr ""
 "  -h, --help\t\tпоказати цю довідку і вийти\n"
 "  -v, --version\t\tпоказати версію і вийти"
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
@@ -561,104 +677,87 @@ msgstr ""
 "  -p,--port=PORT\tпорт веб-сервера\n"
 "  -w,--wdir=DIR\t\tдиректорія для сторінок веб-сервера"
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr ""
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr ""
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr ""
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr "HTTP запит: %s"
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr ""
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr "Датчики не знайдені."
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr "Не вдалося створити веб-сервер."
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr ""
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr "WWW-директорія: %s"
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr "URL: http://localhost:%d"
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr ""
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr ""
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
+#: src/ui.c:90
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
 msgstr ""
 
-#: src/ui.c:90
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "Про Psensor"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "Домашня сторінка Psensor"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr "Не вдалося завантажити іконку Psensor."
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "Оберіть колір переднього плану"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "Датчик"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr "Значення"
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "Мін."
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "Макс."
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr ""
 
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "Колір"
+#: src/ui_sensorlist.c:296
+#, fuzzy
+msgid "Select sensor color"
+msgstr "Оберіть колір переднього плану"
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -669,9 +768,12 @@ msgid "Temperature alert"
 msgstr ""
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+msgid "Fan speed alert"
 msgstr ""
 
 #: src/ui_sensorpref.c:248
 msgid "Unknown"
 msgstr ""
+
+#~ msgid "Sensor Information"
+#~ msgstr "Інформація датчика"
index fc90737..8aac8e1 100644 (file)
Binary files a/po/zh_CN.gmo and b/po/zh_CN.gmo differ
index 4f7cbcc..0ce1b3d 100644 (file)
@@ -7,32 +7,28 @@ msgid ""
 msgstr ""
 "Project-Id-Version: psensor\n"
 "Report-Msgid-Bugs-To: jeanfi@gmail.com\n"
-"POT-Creation-Date: 2014-08-27 10:01+0200\n"
-"PO-Revision-Date: 2014-05-01 13:23+0000\n"
-"Last-Translator: Wang Dianjin <Unknown>\n"
+"POT-Creation-Date: 2014-09-21 18:26+0200\n"
+"PO-Revision-Date: 2014-09-11 21:24+0000\n"
+"Last-Translator: Jean-Philippe Orsini <Unknown>\n"
 "Language-Team: Chinese (simplified)\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-06-02 08:08+0000\n"
-"X-Generator: Launchpad (build 17031)\n"
+"X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n"
+"X-Generator: Launchpad (build 17196)\n"
 
-#: src/cfg.c:494
+#: src/cfg.c:510
 #, fuzzy, c-format
 msgid "Failed to create the directory %s: %s"
 msgstr "无法创建网络服务器。"
 
-#: src/cfg.c:542
-msgid "The configuration file does not exist."
-msgstr ""
-
-#: src/cfg.c:545
-#, c-format
-msgid "Failed to parse configuration file: %s"
-msgstr ""
+#: src/cfg.c:557
+#, fuzzy, c-format
+msgid "Failed to load configuration file %s: %s"
+msgstr "无法激活监测器日志。"
 
-#: src/cfg.c:569
+#: src/cfg.c:580
 #, fuzzy, c-format
 msgid "Failed to save configuration file %s."
 msgstr "无法激活监测器日志。"
@@ -42,7 +38,7 @@ msgid "About"
 msgstr "关于"
 
 #: src/glade/psensor.glade:10 src/glade/psensor.glade:11
-#: src/glade/psensor.glade:20 src/ui_sensorlist.c:217
+#: src/glade/psensor.glade:20 src/ui_sensorlist.c:264
 msgid "Preferences"
 msgstr "首选项"
 
@@ -71,6 +67,31 @@ msgstr ""
 msgid "_Help"
 msgstr "帮助(_H)"
 
+#: src/glade/psensor.glade:312
+msgid "Sensor"
+msgstr "监视设备"
+
+#: src/glade/psensor.glade:323
+msgid "Value"
+msgstr "值"
+
+#: src/glade/psensor.glade:334
+msgid "Min"
+msgstr "最小值"
+
+#: src/glade/psensor.glade:345
+msgid "Max"
+msgstr "最大值"
+
+#: src/glade/psensor.glade:356
+msgid "Color"
+msgstr "颜色"
+
+#: src/glade/psensor.glade:367 src/glade/psensor-pref.glade:787
+#: src/glade/sensor-edit.glade:412
+msgid "Graph"
+msgstr "图表"
+
 #: src/glade/psensor-pref.glade:24
 msgctxt "psensor"
 msgid "Right"
@@ -92,315 +113,410 @@ msgstr "底部"
 msgid "Edit Preferences"
 msgstr "编辑首选项"
 
-#: src/glade/psensor-pref.glade:121
+#: src/glade/psensor-pref.glade:126
 msgid "Hide window decoration"
 msgstr "隐藏窗口标题栏"
 
-#: src/glade/psensor-pref.glade:141
+#: src/glade/psensor-pref.glade:146
 msgid "Keep window below"
 msgstr "保持在最底层"
 
-#: src/glade/psensor-pref.glade:161
+#: src/glade/psensor-pref.glade:166
 msgid "Enable menu"
 msgstr "启用菜单"
 
-#: src/glade/psensor-pref.glade:181
+#: src/glade/psensor-pref.glade:186
 msgid "Enable Unity Launcher counter"
 msgstr "启用 Unity 启动器计数器"
 
-#: src/glade/psensor-pref.glade:209
+#: src/glade/psensor-pref.glade:214
 msgid "Celsius"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:210
+#: src/glade/psensor-pref.glade:215
 msgid "Fahrenheit"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:254
+#: src/glade/psensor-pref.glade:259
 msgid "Temperature unit:"
 msgstr "温度单位:"
 
-#: src/glade/psensor-pref.glade:272
+#: src/glade/psensor-pref.glade:277
 msgid "Position of sensors table:"
 msgstr "监视设备列表位置:"
 
-#: src/glade/psensor-pref.glade:287
+#: src/glade/psensor-pref.glade:296
 msgid "Interface"
 msgstr "界面"
 
-#: src/glade/psensor-pref.glade:299
+#: src/glade/psensor-pref.glade:312
 msgid "Launch on session startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:320
+#: src/glade/psensor-pref.glade:333
 msgid "Hide window on startup"
 msgstr "启动时隐藏窗口"
 
-#: src/glade/psensor-pref.glade:340
+#: src/glade/psensor-pref.glade:353
 msgid "Restore window position and size"
 msgstr "恢复窗口位置和大小"
 
-#: src/glade/psensor-pref.glade:367
+#: src/glade/psensor-pref.glade:384
 msgid "Startup"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:405
+#: src/glade/psensor-pref.glade:428
 msgid "Foreground:"
 msgstr "前景:"
 
-#: src/glade/psensor-pref.glade:420
+#: src/glade/psensor-pref.glade:446
 msgid "Background:"
 msgstr "背景:"
 
-#: src/glade/psensor-pref.glade:454
+#: src/glade/psensor-pref.glade:482
 msgid "Background opacity:"
 msgstr "背景透明:"
 
-#: src/glade/psensor-pref.glade:477
-msgid "<i>Min</i>"
-msgstr "<i>最小值</i>"
-
-#: src/glade/psensor-pref.glade:504
-msgid "<i>Max</i>"
-msgstr "<i>最大值</i>"
-
-#: src/glade/psensor-pref.glade:530
+#: src/glade/psensor-pref.glade:500
 msgid "Colors"
 msgstr "颜色"
 
-#: src/glade/psensor-pref.glade:548
+#: src/glade/psensor-pref.glade:521
 msgid "Monitoring duration:"
 msgstr "监视持续时长:"
 
-#: src/glade/psensor-pref.glade:585
-msgid "minute(s)"
-msgstr "分钟"
-
-#: src/glade/psensor-pref.glade:602 src/glade/psensor-pref.glade:752
-msgid "second(s)"
-msgstr "秒"
-
-#: src/glade/psensor-pref.glade:637
+#: src/glade/psensor-pref.glade:539
 msgid "Update interval:"
 msgstr "更新间隔:"
 
-#: src/glade/psensor-pref.glade:655
+#: src/glade/psensor-pref.glade:557
 msgid "Measures"
 msgstr "测量"
 
-#: src/glade/psensor-pref.glade:691 src/glade/sensor-edit.glade:264
-#: src/ui_sensorlist.c:364
-msgid "Graph"
-msgstr "图表"
+#: src/glade/psensor-pref.glade:584
+msgid "<i>Min</i>"
+msgstr "<i>最小值</i>"
 
-#: src/glade/psensor-pref.glade:715
+#: src/glade/psensor-pref.glade:611
+msgid "<i>Max</i>"
+msgstr "<i>最大值</i>"
+
+#: src/glade/psensor-pref.glade:664 src/glade/psensor-pref.glade:851
+msgid "second(s)"
+msgstr "秒"
+
+#: src/glade/psensor-pref.glade:716
+msgid "minute(s)"
+msgstr "分钟"
+
+#: src/glade/psensor-pref.glade:734
+msgid "Smooth curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:761
+msgid "Curves"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:814
 msgid "Measure update interval:"
 msgstr "测量更新间隔:"
 
-#: src/glade/psensor-pref.glade:763
+#: src/glade/psensor-pref.glade:862
 msgid "Enable sensors logging"
 msgstr "启用监测器记录"
 
-#: src/glade/psensor-pref.glade:810
+#: src/glade/psensor-pref.glade:909
 msgid "Sensors logging interval:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:827
+#: src/glade/psensor-pref.glade:926
 msgid "seconds(s)"
 msgstr "秒"
 
-#: src/glade/psensor-pref.glade:844
+#: src/glade/psensor-pref.glade:943
 msgid "Script executed when an alarm is raised:"
 msgstr ""
 
-#: src/glade/psensor-pref.glade:877
+#: src/glade/psensor-pref.glade:984
 msgid "Sensors"
 msgstr "传感器"
 
-#: src/glade/sensor-edit.glade:28
+#: src/glade/psensor-pref.glade:1002
+msgid "Enable support of lm-sensors"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1022
+msgid "Enable support of NVCtrl (NVidia)"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1042
+msgid "Enable support of ATI ADL"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1062
+msgid "Enable support of gtop2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1082
+msgid "Enable support of hddtemp daemon"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1102
+msgid "Enable support of libatasmart"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1122
+msgid "Enable support of udisks2"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1149
+msgid "The changes are applied after the restart of psensor."
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1171
+msgid "Hard disk drive"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1194
+msgid "CPU and memory usage"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1217
+msgid "GPU with proprietary driver"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1240
+msgid "Motherboard, CPU and GPU"
+msgstr ""
+
+#: src/glade/psensor-pref.glade:1263
+msgid "Providers"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:29
 msgid "Edit Sensor Preferences"
 msgstr "编辑传感器首选项"
 
-#: src/glade/sensor-edit.glade:96
+#: src/glade/sensor-edit.glade:107
 msgid "Name"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:140
+#: src/glade/sensor-edit.glade:174
 msgid "Type:"
 msgstr "类型:"
 
-#: src/glade/sensor-edit.glade:155 src/glade/sensor-edit.glade:202
-#: src/glade/sensor-edit.glade:249 src/glade/sensor-edit.glade:475
-#: src/glade/sensor-edit.glade:523 src/lib/psensor.c:481 src/ui_notify.c:81
+#: src/glade/sensor-edit.glade:193 src/glade/sensor-edit.glade:230
+#: src/glade/sensor-edit.glade:282 src/glade/sensor-edit.glade:507
+#: src/glade/sensor-edit.glade:562 src/lib/psensor.c:457 src/ui_notify.c:81
 msgid "N/A"
 msgstr "不可用"
 
-#: src/glade/sensor-edit.glade:170
-msgid "Sensor Information"
-msgstr "传感器信息"
-
-#: src/glade/sensor-edit.glade:188
+#: src/glade/sensor-edit.glade:212
 msgid "Chip:"
 msgstr "芯片:"
 
-#: src/glade/sensor-edit.glade:217
+#: src/glade/sensor-edit.glade:245
 msgid "Name:"
 msgstr "名称:"
 
-#: src/glade/sensor-edit.glade:232
+#: src/glade/sensor-edit.glade:264
 msgid "Id:"
 msgstr "标识:"
 
-#: src/glade/sensor-edit.glade:278
+#: src/glade/sensor-edit.glade:302
+msgid "Details"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:320
 msgid "Draw sensor curve"
 msgstr "绘制监视曲线"
 
-#: src/glade/sensor-edit.glade:300
+#: src/glade/sensor-edit.glade:349
 msgid "Color:"
 msgstr "颜色:"
 
-#: src/glade/sensor-edit.glade:331
-msgid "Alarm"
-msgstr "警告"
+#: src/glade/sensor-edit.glade:380
+#, fuzzy
+msgid "Display sensor in the list of sensors"
+msgstr "在应用指示器菜单中显示监视器"
 
-#: src/glade/sensor-edit.glade:345
+#: src/glade/sensor-edit.glade:431
 msgid "Activate desktop notifications"
 msgstr "激活桌面气泡提示"
 
-#: src/glade/sensor-edit.glade:367
+#: src/glade/sensor-edit.glade:460
 msgid "High threshold:"
 msgstr "高阈值:"
 
-#: src/glade/sensor-edit.glade:382
+#: src/glade/sensor-edit.glade:482
+msgid "0"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:536
+msgid "-1"
+msgstr ""
+
+#: src/glade/sensor-edit.glade:588
 msgid "Low threshold:"
 msgstr "低阈值:"
 
-#: src/glade/sensor-edit.glade:397
-msgid "Application Indicator"
-msgstr ""
+#: src/glade/sensor-edit.glade:610
+msgid "Alarm"
+msgstr "警告"
 
-#: src/glade/sensor-edit.glade:411
+#: src/glade/sensor-edit.glade:629
 msgid "Display sensor in the menu"
 msgstr "在应用指示器菜单中显示监视器"
 
-#: src/glade/sensor-edit.glade:429
+#: src/glade/sensor-edit.glade:650
 msgid "Display sensor in the label (experimental)"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:500
-msgid "-1"
+#: src/glade/sensor-edit.glade:682
+msgid "Application Indicator"
 msgstr ""
 
-#: src/glade/sensor-edit.glade:541
-#, fuzzy
-msgid "Display sensor in the list of sensors"
-msgstr "在应用指示器菜单中显示监视器"
-
-#: src/lib/amd.c:168
+#: src/lib/amd.c:171
 msgid "AMD: cannot found ADL library."
 msgstr "AMD:未找到 ADL 库。"
 
-#: src/lib/amd.c:195
+#: src/lib/amd.c:198
 msgid "AMD: missing ADL's API."
 msgstr "AMD:ADL 的 API 丢失。"
 
-#: src/lib/amd.c:205
+#: src/lib/amd.c:208
 msgid "AMD: failed to initialize ADL."
 msgstr "AMD:ADL 初始化出错。"
 
-#: src/lib/amd.c:211
+#: src/lib/amd.c:214
 msgid "AMD: cannot get the number of adapters."
 msgstr "AMD:无法获取适配器数目。"
 
-#: src/lib/amd.c:250
+#: src/lib/amd.c:253
 #, c-format
 msgid "Number of AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/amd.c:251
+#: src/lib/amd.c:254
 #, c-format
 msgid "Number of active AMD/ATI adapters: %d"
 msgstr ""
 
-#: src/lib/cpu.c:46
-msgid "CPU"
-msgstr ""
-
-#: src/lib/hdd_atasmart.c:57 src/lib/hdd_hddtemp.c:122
+#: src/lib/hdd_atasmart.c:59 src/lib/hdd_hddtemp.c:125
 msgid "Disk"
 msgstr ""
 
-#: src/lib/hdd_atasmart.c:152
+#: src/lib/hdd_atasmart.c:141
 #, c-format
-msgid "atasmart: sk_disk_open() failure: %s."
-msgstr "atasmart:sk_disk_open() 失败:%s。"
+msgid "%s: sk_disk_open() failure: %s."
+msgstr "%s:sk_disk_open() 失败:%s。"
 
-#: src/lib/hdd_hddtemp.c:59
-msgid "hddtemp: failed to open socket."
+#: src/lib/hdd_hddtemp.c:62
+#, fuzzy, c-format
+msgid "%s: failed to open socket."
 msgstr "硬盘温度:无法打开套接字。"
 
-#: src/lib/hdd_hddtemp.c:72
-msgid "hddtemp: failed to open connection."
+#: src/lib/hdd_hddtemp.c:75
+#, fuzzy, c-format
+msgid "%s: failed to open connection."
 msgstr "硬盘温度:无法打开连接。"
 
-#: src/lib/hdd_hddtemp.c:186 src/lib/hdd_hddtemp.c:256
-#, c-format
-msgid "hddtemp: wrong string: %s."
+#: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270
+#, fuzzy, c-format
+msgid "%s: wrong string: %s."
 msgstr "硬盘温度:错误字符:%s。"
 
-#: src/lib/lmsensor.c:42
+#: src/lib/lmsensor.c:44
 #, c-format
-msgid "lmsensor: cannot get value of subfeature %s: %s."
-msgstr "lmsensor:无法获取子功能%s的值:%s。"
+msgid "%s: Cannot get value of subfeature %s: %s."
+msgstr "%s:无法获取子功能%s的值:%s。"
 
-#: src/lib/lmsensor.c:123
-msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
-msgstr "lmsensor:lmsensor_psensor_create 失败:错误的功能类型。"
+#: src/lib/lmsensor.c:137
+#, c-format
+msgid "%s: Wrong feature type."
+msgstr ""
 
-#: src/lib/lmsensor.c:148
+#: src/lib/lmsensor.c:166
 msgid "Intel CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:152
+#: src/lib/lmsensor.c:170
 msgid "AMD CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:154 src/lib/nvidia.c:73
+#: src/lib/lmsensor.c:172
 msgid "NVIDIA GPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:156
+#: src/lib/lmsensor.c:174
 msgid "VIA CPU"
 msgstr ""
 
-#: src/lib/lmsensor.c:218
+#: src/lib/lmsensor.c:176
+msgid "ACPI"
+msgstr ""
+
+#: src/lib/lmsensor.c:201
 #, c-format
-msgid "lmsensor: initialization failure: %s."
-msgstr "lmsensor:初始化失败:%s。"
+msgid "%s: initialization failure: %s."
+msgstr "%s:初始化失败:%s。"
+
+#: src/lib/pgtop2.c:42
+msgid "CPU usage"
+msgstr ""
+
+#: src/lib/pgtop2.c:47
+msgid "CPU"
+msgstr ""
+
+#: src/lib/pgtop2.c:63
+msgid "free memory"
+msgstr ""
+
+#: src/lib/pgtop2.c:64
+msgid "memory"
+msgstr ""
 
 #: src/lib/plog.c:43
 #, c-format
 msgid "Cannot open log file: %s"
 msgstr "无法打开日志文件:%s"
 
-#: src/lib/nvidia.c:52
-msgid ""
-"NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU temperature."
-msgstr ""
+#: src/lib/nvidia.c:58
+#, fuzzy, c-format
+msgid "%s: Unknown NVIDIA product name for GPU %d"
+msgstr "无法获取 NVIDIA 信息。"
+
+#: src/lib/nvidia.c:63
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve NVIDIA product name for GPU %d"
+msgstr "无法获取 NVIDIA 信息。"
+
+#: src/lib/nvidia.c:226
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d"
+msgstr "无法获取 NVIDIA 信息。"
+
+#: src/lib/nvidia.c:293
+#, c-format
+msgid "%s: Cannot open connection to X11 server."
+msgstr "%s: 无法打开到 X11 服务器的连接。"
 
-#: src/lib/nvidia.c:95
-msgid "Cannot open connection to X11 server."
-msgstr "无法打开到 X11 服务器的连接。"
+#: src/lib/nvidia.c:301
+#, c-format
+msgid "%s: Failed to retrieve NVIDIA information."
+msgstr "%s: 无法获取 NVIDIA 信息。"
 
-#: src/lib/nvidia.c:103
-msgid "Failed to retrieve NVIDIA information."
+#: src/lib/nvidia.c:370
+#, fuzzy, c-format
+msgid "%s: Failed to retrieve number of fans."
 msgstr "无法获取 NVIDIA 信息。"
 
-#: src/lib/psensor.c:477 tests/test_psensor_type_to_unit_str.c:62
+#: src/lib/psensor.c:453 tests/test_psensor_type_to_unit_str.c:62
 msgid "RPM"
 msgstr "转速"
 
-#: src/lib/psensor.c:479
+#: src/lib/psensor.c:455
 msgid "%"
 msgstr "%"
 
@@ -408,24 +524,24 @@ msgstr "%"
 msgid "HOME variable not set."
 msgstr "未设置 HOME 变量。"
 
-#: src/lib/slog.c:97
+#: src/lib/slog.c:96
 msgid "Sensor log file already open."
 msgstr "已经打开监测器日志文件。"
 
-#: src/lib/slog.c:106
+#: src/lib/slog.c:105
 #, c-format
 msgid "Cannot open sensor log file: %s."
 msgstr "无法打开监测器日志文件:%s。"
 
-#: src/lib/slog.c:137
+#: src/lib/slog.c:136
 msgid "Sensor log file not open."
 msgstr "监测器日志文件未打开。"
 
-#: src/lib/slog.c:193
+#: src/lib/slog.c:192
 msgid "Sensor log not open, cannot close."
 msgstr "监测器日志未打开,故无法关闭。"
 
-#: src/main.c:78 src/server/server.c:85
+#: src/main.c:80 src/server/server.c:87
 #, c-format
 msgid ""
 "Copyright (C) %s jeanfi@gmail.com\n"
@@ -440,22 +556,22 @@ msgstr ""
 "本软件为自由软件:您可以自由修改并分发。\n"
 "There is NO WARRANTY, to the extent permitted by law。\n"
 
-#: src/main.c:89 src/server/server.c:95
+#: src/main.c:91 src/server/server.c:97
 #, c-format
 msgid "Usage: %s [OPTION]...\n"
 msgstr "用法:%s [选项]...\n"
 
-#: src/main.c:91
+#: src/main.c:93
 msgid ""
 "Psensor is a GTK+ application for monitoring hardware sensors, including "
 "temperatures and fan speeds."
 msgstr "Psensor 是一款 GTK+ 应用程序,可监测硬件传感器,包括温度与风扇转速。"
 
-#: src/main.c:95
+#: src/main.c:97
 msgid "Options:"
 msgstr "选项:"
 
-#: src/main.c:96
+#: src/main.c:98
 msgid ""
 "  -h, --help          display this help and exit\n"
 "  -v, --version       display version information and exit"
@@ -463,7 +579,7 @@ msgstr ""
 "  -h, --help 显示这个帮助并退出\n"
 "  -v, --version 显示版本信息并退出"
 
-#: src/main.c:102
+#: src/main.c:104
 msgid ""
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"
@@ -471,54 +587,55 @@ msgstr ""
 "  -u, --url=URL       psensor 服务器 URL\n"
 "                      例如:http://hostname:3131"
 
-#: src/main.c:105
-msgid ""
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"
-msgstr ""
-"  --use-libatasmart   使用 atasmart 库来监测硬盘,而不是\n"
-"                      hddtemp 进程"
-
-#: src/main.c:108
+#: src/main.c:107
 msgid "  -n, --new-instance  force the creation of a new Psensor application"
 msgstr "  -n, --new-instance  强制创建一个新的 Psensor 例程"
 
-#: src/main.c:111
+#: src/main.c:110
 msgid "  -d, --debug=LEVEL   set the debug level, integer between 0 and 3"
 msgstr "  -d,--debug=LEVEL 设置调试等级,等级为 0 到 3 之间的整数"
 
-#: src/main.c:116 src/server/server.c:118
+#: src/main.c:115 src/server/server.c:120
 #, c-format
 msgid "Report bugs to: %s\n"
 msgstr "报告问题至:%s\n"
 
-#: src/main.c:118 src/server/server.c:120
+#: src/main.c:117 src/server/server.c:122
 #, c-format
 msgid "%s home page: <%s>\n"
 msgstr "%s 主页:<%s>\n"
 
-#: src/main.c:453
+#: src/main.c:473
 msgid "Psensor has not been compiled with remote sensor support."
 msgstr "Psensor 不支持远程传感器。"
 
-#: src/main.c:515
+#: src/main.c:551
 msgid "Enables debug mode."
 msgstr "启用调试模式。"
 
-#: src/main.c:527 src/server/server.c:381
+#: src/main.c:563 src/server/server.c:384
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "试用‘%s --help’来获得更多信息。\n"
 
-#: src/main.c:540
+#: src/main.c:576
 msgid "A Psensor instance already exists."
 msgstr "已存在一个 Psensor 例程。"
 
-#: src/main.c:597
+#: src/main.c:631
 #, fuzzy
 msgid "Failed to create thread for monitoring sensors"
 msgstr "无法创建网络服务器。"
 
+#: src/main.c:654 src/ui.c:97
+msgid "translator-credits"
+msgstr ""
+"Launchpad Contributions:\n"
+"  Jean-Philippe Orsini https://launchpad.net/~jfi\n"
+"  Wang Dianjin https://launchpad.net/~tuhaihe\n"
+"  tmpplus https://launchpad.net/~tmpplus.7328-deactivatedaccount\n"
+"  大宝 https://launchpad.net/~linux-dabao"
+
 #: src/rsensor.c:107
 #, c-format
 msgid "Fail to connect to: %s"
@@ -534,21 +651,21 @@ msgstr "无效内容:%s"
 msgid "Invalid JSON: %s"
 msgstr "无效 JSON:%s"
 
-#: src/server/server.c:55
+#: src/server/server.c:57
 msgid "<html><body><p>Server stop requested</p></body></html>"
 msgstr "<html><body><p>服务器停止请求</p></body></html>"
 
-#: src/server/server.c:61
+#: src/server/server.c:63
 msgid ""
 "<html><body><p>Page not found - Go to <a href='/'>Main page</a></p></body>"
 msgstr "<html><body><p>未找到页面 - 请访问<a href='/'>主页</a></p></body>"
 
-#: src/server/server.c:97
+#: src/server/server.c:99
 msgid ""
 "psensor-server is an HTTP server for monitoring hardware sensors remotely."
 msgstr "psensor 服务器是用来远程监视硬件的 HTTP 服务器。"
 
-#: src/server/server.c:102
+#: src/server/server.c:104
 msgid ""
 "  -h, --help\t\tdisplay this help and exit\n"
 "  -v, --version\t\tdisplay version information and exit"
@@ -556,7 +673,7 @@ msgstr ""
 "  -h, --help\t\t 显示本帮助并退出\n"
 "  -v, --version\t\t 显示版本信息并退出"
 
-#: src/server/server.c:106
+#: src/server/server.c:108
 msgid ""
 "  -p,--port=PORT\twebserver port\n"
 "  -w,--wdir=DIR\t\tdirectory containing webserver pages"
@@ -564,106 +681,90 @@ msgstr ""
 "  -p,--port=PORT\t 网络服务器端口\n"
 "  -w,--wdir=DIR\t\t 包括网络服务器页面的目录"
 
-#: src/server/server.c:110
+#: src/server/server.c:112
 msgid "  -d, --debug=LEVEL     set the debug level, integer between 0 and 3"
 msgstr "  -d, --debug=LEVEL     设置调试级别,0~3 之间的整数"
 
-#: src/server/server.c:112
+#: src/server/server.c:114
 msgid "  -l, --log-file=PATH   set the log file to PATH"
 msgstr "  -l, --log-file=PATH   将日志文件设为 PATH"
 
-#: src/server/server.c:113
+#: src/server/server.c:115
 msgid "  --sensor-log-file=PATH set the sensor log file to PATH"
 msgstr "  --sensor-log-file=路径 设置监测器日志文件的路径"
 
-#: src/server/server.c:114
+#: src/server/server.c:116
 msgid "  --sensor-log-interval=S set the sensor log interval to S (seconds)"
 msgstr ""
 
-#: src/server/server.c:298
+#: src/server/server.c:301
 #, c-format
 msgid "HTTP Request: %s"
 msgstr "HTTP 请求:%s"
 
-#: src/server/server.c:361
+#: src/server/server.c:364
 #, c-format
 msgid "Enables debug mode: %d"
 msgstr "启用调试模式:%d"
 
-#: src/server/server.c:405
+#: src/server/server.c:408
 msgid "No sensors detected."
 msgstr "未检测到传感器。"
 
-#: src/server/server.c:412
+#: src/server/server.c:415
 msgid "Failed to create Web server."
 msgstr "无法创建网络服务器。"
 
-#: src/server/server.c:416
+#: src/server/server.c:419
 #, c-format
 msgid "Web server started on port: %d"
 msgstr "网络服务器启动端口:%d"
 
-#: src/server/server.c:417
+#: src/server/server.c:420
 #, c-format
 msgid "WWW directory: %s"
 msgstr "WWW 目录:%s"
 
-#: src/server/server.c:418
+#: src/server/server.c:421
 #, c-format
 msgid "URL: http://localhost:%d"
 msgstr "URL: http://localhost:%d"
 
-#: src/server/server.c:428
+#: src/server/server.c:431
 msgid "Failed to activate logging of sensors."
 msgstr "无法激活监测器日志。"
 
-#: src/ui.c:84
+#: src/ui.c:87
 msgid "Psensor is a GTK+ application for monitoring hardware sensors"
 msgstr "Psensor 是一款 GTK+ 硬件监测传感应用程序"
 
-#: src/ui.c:87
-msgid ""
-"Copyright(c) 2010-2014\n"
-"jeanfi@gmail.com"
+#: src/ui.c:90
+#, fuzzy
+msgid "Copyright(c) 2010-2014 jeanfi@gmail.com"
 msgstr ""
 "版权所有(c) 2010-2014\n"
 "jeanfi@gmail.com"
 
-#: src/ui.c:90
+#: src/ui.c:96
 msgid "About Psensor"
 msgstr "关于 Psensor"
 
-#: src/ui.c:93
+#: src/ui.c:100
 msgid "Psensor Homepage"
 msgstr "Psensor 主页"
 
-#: src/ui.c:216
+#: src/ui.c:223
 msgid "Failed to load Psensor icon."
 msgstr "无法加载 Psensor 图标。"
 
-#: src/ui_sensorlist.c:253
-msgid "Select foreground color"
-msgstr "选择前景色"
-
-#: src/ui_sensorlist.c:327
-msgid "Sensor"
-msgstr "监视设备"
-
-#: src/ui_sensorlist.c:333
-msgid "Value"
-msgstr "值"
-
-#: src/ui_sensorlist.c:339
-msgid "Min"
-msgstr "最小值"
-
-#: src/ui_sensorlist.c:345
-msgid "Max"
-msgstr "最大值"
+#: src/ui_sensorlist.c:254
+msgid "Hide"
+msgstr ""
 
-#: src/ui_sensorlist.c:352
-msgid "Color"
-msgstr "颜色"
+#: src/ui_sensorlist.c:296
+#, fuzzy
+msgid "Select sensor color"
+msgstr "选择前景色"
 
 #: src/ui_notify.c:48
 msgid "gettimeofday failed."
@@ -674,9 +775,16 @@ msgid "Temperature alert"
 msgstr "温度报警"
 
 #: src/ui_notify.c:79
-msgid "Fan alert"
+#, fuzzy
+msgid "Fan speed alert"
 msgstr "风扇警报"
 
 #: src/ui_sensorpref.c:248
 msgid "Unknown"
 msgstr "未知"
+
+#~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type."
+#~ msgstr "lmsensor:lmsensor_psensor_create 失败:错误的功能类型。"
+
+#~ msgid "Sensor Information"
+#~ msgstr "传感器信息"
index c3a496a..3ddb1e7 100644 (file)
@@ -24,7 +24,7 @@ LIBS = \
        lib/libpsensor.a \
        $(GTK_LIBS)\
        $(PTHREAD_LIBS)\
-       $(SENSORS_LIBS)
+       $(SENSORS_LIBS) -lm
 
 if GTK
 if X11
@@ -84,6 +84,10 @@ AM_CPPFLAGS += $(ATASMART_CFLAGS)
 LIBS += $(ATASMART_LIBS)
 endif
 
+if LIBUDISKS2
+LIBS += $(LIBUDISKS2_LIBS)
+endif
+
 if UNITY
 psensor_SOURCES += ui_unity.h ui_unity.c
 AM_CPPFLAGS += $(UNITY_CFLAGS)
@@ -98,13 +102,11 @@ AM_CPPFLAGS += $(CURL_CFLAGS) $(JSON_CFLAGS)
 endif
 endif
 
-EXTRA_DIST = description.txt psensor.schemas
-
 psensor.1: main.c $(top_srcdir)/configure.ac
        $(MAKE) $(AM_MAKEFLAGS) psensor$(EXEEXT)
        help2man --include=description.txt -N --name="Temperature monitoring application" --output=psensor.1 ./psensor$(EXEEXT)
 
 gsettings_SCHEMAS=psensor.gschema.xml
-EXTRA_DIST=$(gsettings_SCHEMAS)
+EXTRA_DIST = description.txt $(gsettings_SCHEMAS)
 
 @GSETTINGS_RULES@
index 98383f9..40b3dcd 100644 (file)
@@ -94,12 +94,13 @@ host_triplet = @host@
 @LIBATIADL_TRUE@am__append_13 = $(LIBATIADL_LIBS)
 @ATASMART_TRUE@am__append_14 = $(ATASMART_CFLAGS)
 @ATASMART_TRUE@am__append_15 = $(ATASMART_LIBS)
-@UNITY_TRUE@am__append_16 = ui_unity.h ui_unity.c
-@UNITY_TRUE@am__append_17 = $(UNITY_CFLAGS)
-@UNITY_TRUE@am__append_18 = $(UNITY_LIBS) 
-@CURL_TRUE@@JSON_TRUE@am__append_19 = rsensor.h rsensor.c
-@CURL_TRUE@@JSON_TRUE@am__append_20 = $(CURL_LIBS) $(JSON_LIBS)
-@CURL_TRUE@@JSON_TRUE@am__append_21 = $(CURL_CFLAGS) $(JSON_CFLAGS)
+@LIBUDISKS2_TRUE@am__append_16 = $(LIBUDISKS2_LIBS)
+@UNITY_TRUE@am__append_17 = ui_unity.h ui_unity.c
+@UNITY_TRUE@am__append_18 = $(UNITY_CFLAGS)
+@UNITY_TRUE@am__append_19 = $(UNITY_LIBS) 
+@CURL_TRUE@@JSON_TRUE@am__append_20 = rsensor.h rsensor.c
+@CURL_TRUE@@JSON_TRUE@am__append_21 = $(CURL_LIBS) $(JSON_LIBS)
+@CURL_TRUE@@JSON_TRUE@am__append_22 = $(CURL_CFLAGS) $(JSON_CFLAGS)
 subdir = src
 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
        $(top_srcdir)/depcomp $(dist_man_MANS)
@@ -322,9 +323,11 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = lib/libpsensor.a $(GTK_LIBS) $(PTHREAD_LIBS) $(SENSORS_LIBS) \
-       $(am__append_3) $(am__append_5) $(am__append_8) \
+       -lm $(am__append_3) $(am__append_5) $(am__append_8) \
        $(am__append_11) $(am__append_13) $(am__append_15) \
-       $(am__append_18) $(am__append_20)
+       $(am__append_16) $(am__append_19) $(am__append_21)
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
@@ -427,18 +430,18 @@ AM_CPPFLAGS = -Wall -Werror -DDEFAULT_WWW_DIR=\""$(pkgdatadir)/www"\" \
        -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/unity \
        $(GTK_CFLAGS) $(SENSORS_CFLAGS) $(am__append_2) \
        $(am__append_6) $(am__append_9) $(am__append_10) \
-       $(am__append_12) $(am__append_14) $(am__append_17) \
-       $(am__append_21)
+       $(am__append_12) $(am__append_14) $(am__append_18) \
+       $(am__append_22)
 @GTK_TRUE@@X11_TRUE@@XEXT_TRUE@dist_man_MANS = psensor.1
 psensor_SOURCES = cfg.h cfg.c notify_cmd.c notify_cmd.h graph.h \
        graph.c main.c ui.h ui.c ui_appindicator.h ui_color.h \
        ui_color.c ui_graph.h ui_graph.c ui_pref.h ui_pref.c \
        ui_sensorlist.h ui_sensorlist.c ui_sensorpref.h \
        ui_sensorpref.c ui_status.h ui_status.c pxdg.h pxdg.c \
-       $(am__append_4) $(am__append_7) $(am__append_16) \
-       $(am__append_19)
-EXTRA_DIST = $(gsettings_SCHEMAS)
+       $(am__append_4) $(am__append_7) $(am__append_17) \
+       $(am__append_20)
 gsettings_SCHEMAS = psensor.gschema.xml
+EXTRA_DIST = description.txt $(gsettings_SCHEMAS)
 all: all-recursive
 
 .SUFFIXES:
index 8f22975..0f22ccb 100644 (file)
--- a/src/cfg.c
+++ b/src/cfg.c
@@ -29,9 +29,8 @@
 #include <libintl.h>
 #define _(str) gettext(str)
 
-#include <gio/gio.h>
-
 #include <cfg.h>
+#include <graph.h>
 #include <pio.h>
 #include <plog.h>
 
@@ -55,17 +54,14 @@ static const char *KEY_SENSOR_UPDATE_INTERVAL
 
 /* Graph settings */
 static const char *KEY_GRAPH_UPDATE_INTERVAL = "graph-update-interval";
-
 static const char *KEY_GRAPH_MONITORING_DURATION = "graph-monitoring-duration";
-
 static const char *KEY_GRAPH_BACKGROUND_COLOR = "graph-background-color";
-
 static const char *DEFAULT_GRAPH_BACKGROUND_COLOR = "#e8f4e8f4a8f5";
-
 static const char *KEY_GRAPH_BACKGROUND_ALPHA = "graph-background-alpha";
-
 static const char *KEY_GRAPH_FOREGROUND_COLOR
 = "graph-foreground-color";
+static const char *KEY_GRAPH_SMOOTH_CURVES_ENABLED
+= "graph-smooth-curves-enabled";
 
 static const char *DEFAULT_GRAPH_FOREGROUND_COLOR = "#000000000000";
 
@@ -111,6 +107,19 @@ static const char *KEY_SLOG_INTERVAL = "slog-interval";
 /* Path to the script called when a notification is raised */
 static const char *KEY_NOTIFICATION_SCRIPT = "notif-script";
 
+/* Provider settings */
+static const char *KEY_PROVIDER_LMSENSORS_ENABLED
+= "provider-lmsensors-enabled";
+static const char *KEY_PROVIDER_ATIADLSDK_ENABLED
+= "provider-atiadlsdk-enabled";
+static const char *KEY_PROVIDER_GTOP2_ENABLED = "provider-gtop2-enabled";
+static const char *KEY_PROVIDER_HDDTEMP_ENABLED = "provider-hddtemp-enabled";
+static const char *KEY_PROVIDER_LIBATASMART_ENABLED
+= "provider-libatasmart-enabled";
+static const char *KEY_PROVIDER_NVCTRL_ENABLED = "provider-nvctrl-enabled";
+static const char *KEY_PROVIDER_UDISKS2_ENABLED = "provider-udisks2-enabled";
+
+
 static GSettings *settings;
 
 static char *user_dir;
@@ -335,6 +344,17 @@ static void set_window_keep_below_enabled(bool enabled)
        set_bool(KEY_INTERFACE_WINDOW_KEEP_BELOW_ENABLED, enabled);
 }
 
+bool config_is_smooth_curves_enabled()
+{
+       return get_bool(KEY_GRAPH_SMOOTH_CURVES_ENABLED);
+}
+
+void config_set_smooth_curves_enabled(bool b)
+{
+       set_bool(KEY_GRAPH_SMOOTH_CURVES_ENABLED, b);
+}
+
+
 static void init()
 {
        log_fct_enter();
@@ -405,12 +425,6 @@ struct config *config_load()
        if (c->graph_monitoring_duration < 1)
                c->graph_monitoring_duration = 10;
 
-       c->sensor_values_max_length
-           = (c->graph_monitoring_duration * 60) / c->sensor_update_interval;
-
-       if (c->sensor_values_max_length < 3)
-               c->sensor_values_max_length = 3;
-
        c->menu_bar_disabled = get_bool(KEY_INTERFACE_MENU_BAR_DISABLED);
 
        c->unity_launcher_count_disabled
@@ -435,6 +449,8 @@ struct config *config_load()
 
        c->temperature_unit = get_int(KEY_INTERFACE_TEMPERATURE_UNIT);
 
+       c->sensor_values_max_length = compute_values_max_length(c);
+
        return c;
 }
 
@@ -537,15 +553,10 @@ static GKeyFile *get_sensor_key_file()
                                                | G_KEY_FILE_KEEP_TRANSLATIONS,
                                                &err);
 
-               if (!ret) {
-                       if (err->code == G_KEY_FILE_ERROR_NOT_FOUND)
-                               log_fct(_("The configuration file "
-                                         "does not exist."));
-                       else
-                               log_err(_("Failed to parse configuration "
-                                         "file: %s"),
-                                       path);
-               }
+               if (!ret)
+                       log_warn(_("Failed to load configuration file %s: %s"),
+                                path,
+                                err->message);
        }
 
        return key_file;
@@ -757,3 +768,78 @@ void config_set_appindicator_label_enabled(const char *sid, bool enabled)
 {
        sensor_set_bool(sid, ATT_SENSOR_APPINDICATOR_LABEL_ENABLED, enabled);
 }
+
+GSettings *config_get_GSettings()
+{
+       return settings;
+}
+
+bool config_is_lmsensor_enabled()
+{
+       return get_bool(KEY_PROVIDER_LMSENSORS_ENABLED);
+}
+
+bool config_is_gtop2_enabled()
+{
+       return get_bool(KEY_PROVIDER_GTOP2_ENABLED);
+}
+
+bool config_is_udisks2_enabled()
+{
+       return get_bool(KEY_PROVIDER_UDISKS2_ENABLED);
+}
+
+bool config_is_hddtemp_enabled()
+{
+       return get_bool(KEY_PROVIDER_HDDTEMP_ENABLED);
+}
+
+bool config_is_libatasmart_enabled()
+{
+       return get_bool(KEY_PROVIDER_LIBATASMART_ENABLED);
+}
+
+bool config_is_nvctrl_enabled()
+{
+       return get_bool(KEY_PROVIDER_NVCTRL_ENABLED);
+}
+
+bool config_is_atiadlsdk_enabled()
+{
+       return get_bool(KEY_PROVIDER_ATIADLSDK_ENABLED);
+}
+
+void config_set_lmsensor_enable(bool b)
+{
+       set_bool(KEY_PROVIDER_LMSENSORS_ENABLED, b);
+}
+
+void config_set_nvctrl_enable(bool b)
+{
+       set_bool(KEY_PROVIDER_NVCTRL_ENABLED, b);
+}
+
+void config_set_atiadlsdk_enable(bool b)
+{
+       set_bool(KEY_PROVIDER_ATIADLSDK_ENABLED, b);
+}
+
+void config_set_gtop2_enable(bool b)
+{
+       set_bool(KEY_PROVIDER_GTOP2_ENABLED, b);
+}
+
+void config_set_hddtemp_enable(bool b)
+{
+       set_bool(KEY_PROVIDER_HDDTEMP_ENABLED, b);
+}
+
+void config_set_libatasmart_enable(bool b)
+{
+       set_bool(KEY_PROVIDER_LIBATASMART_ENABLED, b);
+}
+
+void config_set_udisks2_enable(bool b)
+{
+       set_bool(KEY_PROVIDER_UDISKS2_ENABLED, b);
+}
index aac38de..ed2e20e 100644 (file)
--- a/src/cfg.h
+++ b/src/cfg.h
@@ -19,6 +19,8 @@
 #ifndef _PSENSOR_CONFIG_H_
 #define _PSENSOR_CONFIG_H_
 
+#include <gio/gio.h>
+
 #include <bool.h>
 #include <color.h>
 
@@ -111,6 +113,9 @@ void config_set_slog_enabled_changed_cbk(void (*)(void *), void *);
 
 int config_get_slog_interval();
 
+bool config_is_smooth_curves_enabled();
+void config_set_smooth_curves_enabled(bool);
+
 int config_get_sensor_position(const char *);
 void config_set_sensor_position(const char *, int);
 
@@ -120,6 +125,27 @@ void config_set_notif_script(const char *);
 bool config_is_sensor_enabled(const char *sid);
 void config_set_sensor_enabled(const char *sid, bool enabled);
 
+bool config_is_lmsensor_enabled();
+void config_set_lmsensor_enable(bool);
+
+bool config_is_gtop2_enabled();
+void config_set_gtop2_enable(bool);
+
+bool config_is_udisks2_enabled();
+void config_set_udisks2_enable(bool);
+
+bool config_is_hddtemp_enabled();
+void config_set_hddtemp_enable(bool);
+
+bool config_is_libatasmart_enabled();
+void config_set_libatasmart_enable(bool);
+
+bool config_is_nvctrl_enabled();
+void config_set_nvctrl_enable(bool);
+
+bool config_is_atiadlsdk_enabled();
+void config_set_atiadlsdk_enable(bool);
+
 /*
  * Returns the user directory containing psensor data (configuration
  * and log).
@@ -131,4 +157,6 @@ const char *get_psensor_user_dir();
 
 void config_sync();
 
+GSettings *config_get_GSettings();
+
 #endif
diff --git a/src/description.txt b/src/description.txt
new file mode 100644 (file)
index 0000000..3dfdd56
--- /dev/null
@@ -0,0 +1,45 @@
+[description]
+
+/psensor is a/
+
+It displays a curve for each sensor, and uses Desktop Notification to
+raise an alarm when a temperature is too high. On Ubuntu an
+Application Indicator is also available, its icon changes when a
+temperature alert is raised.
+
+It can monitor:
+  * the temperature of the motherboard and CPU sensors (using lm\-sensors).
+  * the temperature of the NVidia GPUs (using XNVCtrl).
+  * the temperature and fan rotation speed of the ATI GPUs.
+  * the temperature of the Hard Disk Drives (using hddtemp or atasmart
+    library).
+  * the rotation speed of the fans (using lm\-sensors).
+  * the sensors of a remote computer (using psensor\-server).
+
+Psensor requires lm\-sensors to be correctly installed and configured,
+it can be checked by running the command 'sensors'. If it has never be
+done, you may need to run the command 'sensors\-detect' and follow the
+instruction. See the manpages of sensors(1) and sensors\-detect(8) for
+more information.
+
+To retrieve the temperature of the Hard Disk Drives, the hddtemp
+daemon must be running or atasmart used ('\-\-use\-libatasmart').
+
+For remote monitoring:
+  * start psensor\-server(1) on the remote computer
+  * run psensor with '\-\-url' option: 'psensor \-\-url=http://localhost:3131'
+
+ATI/AMD GPUs monitoring is available if the library libatiadlxx is
+present in the directory /usr/lib and psensor has been compiled with
+the ATI ADL SDK.
+
+Log messages are written to '$HOME/.psensor/log'.
+
+By default, if a Psensor process is already running, the command
+psensor will show the graph window then exit.  
+It is possible to run multiple instances of Psensor by using the
+option '\-\-new\-instance'.
+
+[SEE ALSO]
+
+psensor\-server(1), sensors(1), sensors\-detect(8), hddtemp(8)
index 2fdbf6b..a6076fd 100644 (file)
@@ -201,6 +201,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
index d6da46b..54b1ee1 100644 (file)
@@ -65,6 +65,7 @@
       <object class="GtkBox" id="dialog-vbox1">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
           <object class="GtkButtonBox" id="dialog-action_area1">
               <object class="GtkGrid" id="table1">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="margin_left">4</property>
+                <property name="margin_right">4</property>
+                <property name="margin_top">4</property>
+                <property name="margin_bottom">4</property>
                 <property name="column_homogeneous">True</property>
                 <child>
                   <object class="GtkCheckButton" id="hide_window_decoration">
               <object class="GtkLabel" id="Interface">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="margin_left">4</property>
+                <property name="margin_right">4</property>
+                <property name="margin_top">4</property>
+                <property name="margin_bottom">4</property>
                 <property name="label" translatable="yes">Interface</property>
               </object>
               <packing>
               <object class="GtkGrid" id="grid4">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="margin_left">4</property>
+                <property name="margin_right">4</property>
+                <property name="margin_top">4</property>
+                <property name="margin_bottom">4</property>
                 <child>
                   <object class="GtkCheckButton" id="autostart">
                     <property name="label" translatable="yes">Launch on session startup</property>
               <object class="GtkLabel" id="label5">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="margin_left">4</property>
+                <property name="margin_right">4</property>
+                <property name="margin_top">4</property>
+                <property name="margin_bottom">4</property>
                 <property name="label" translatable="yes">Startup</property>
               </object>
               <packing>
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="valign">start</property>
+                <property name="margin_left">4</property>
+                <property name="margin_right">4</property>
+                <property name="margin_top">4</property>
+                <property name="margin_bottom">4</property>
                 <property name="row_homogeneous">True</property>
                 <child>
                   <object class="GtkColorButton" id="color_fg">
                     <property name="margin_right">4</property>
                     <property name="margin_top">4</property>
                     <property name="margin_bottom">4</property>
-                    <property name="color">#000000000000</property>
                   </object>
                   <packing>
                     <property name="left_attach">1</property>
-                    <property name="top_attach">1</property>
+                    <property name="top_attach">3</property>
                     <property name="width">1</property>
                     <property name="height">1</property>
                   </packing>
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="margin_left">14</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">Foreground:</property>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
-                    <property name="top_attach">1</property>
+                    <property name="top_attach">3</property>
                     <property name="width">1</property>
                     <property name="height">1</property>
                   </packing>
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="margin_left">14</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">Background:</property>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
-                    <property name="top_attach">2</property>
+                    <property name="top_attach">4</property>
                     <property name="width">1</property>
                     <property name="height">1</property>
                   </packing>
                     <property name="margin_right">4</property>
                     <property name="margin_top">4</property>
                     <property name="margin_bottom">4</property>
-                    <property name="color">#000000000000</property>
                   </object>
                   <packing>
                     <property name="left_attach">1</property>
-                    <property name="top_attach">2</property>
+                    <property name="top_attach">4</property>
                     <property name="width">1</property>
                     <property name="height">1</property>
                   </packing>
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="margin_left">14</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">Background opacity:</property>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
-                    <property name="top_attach">3</property>
+                    <property name="top_attach">5</property>
                     <property name="width">1</property>
                     <property name="height">1</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkHBox" id="hbox1">
+                  <object class="GtkLabel" id="label1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="margin_left">4</property>
                     <property name="margin_right">4</property>
-                    <property name="margin_top">4</property>
+                    <property name="margin_top">8</property>
                     <property name="margin_bottom">4</property>
-                    <property name="spacing">8</property>
-                    <child>
-                      <object class="GtkLabel" id="label15">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label" translatable="yes">&lt;i&gt;Min&lt;/i&gt;</property>
-                        <property name="use_markup">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkHScale" id="bg_opacity">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="adjustment">opacity</property>
-                        <property name="draw_value">False</property>
-                      </object>
-                      <packing>
-                        <property name="expand">True</property>
-                        <property name="fill">True</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label16">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
-                        <property name="label" translatable="yes">&lt;i&gt;Max&lt;/i&gt;</property>
-                        <property name="use_markup">True</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">2</property>
-                      </packing>
-                    </child>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Colors</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                    </attributes>
                   </object>
                   <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">3</property>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">2</property>
                     <property name="width">2</property>
                     <property name="height">1</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkLabel" id="label1">
+                  <object class="GtkLabel" id="label7">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="margin_left">4</property>
+                    <property name="margin_left">14</property>
                     <property name="margin_right">4</property>
                     <property name="margin_top">4</property>
                     <property name="margin_bottom">4</property>
                     <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Colors</property>
-                    <attributes>
-                      <attribute name="weight" value="bold"/>
-                    </attributes>
+                    <property name="label" translatable="yes">Monitoring duration:</property>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
-                    <property name="top_attach">0</property>
-                    <property name="width">2</property>
+                    <property name="top_attach">7</property>
+                    <property name="width">1</property>
                     <property name="height">1</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkLabel" id="label7">
+                  <object class="GtkLabel" id="label6">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="margin_left">14</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
                     <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Monitoring duration:</property>
+                    <property name="label" translatable="yes">Update interval:</property>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
-                    <property name="top_attach">5</property>
+                    <property name="top_attach">8</property>
                     <property name="width">1</property>
                     <property name="height">1</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkSpinButton" id="monitoring_duration">
+                  <object class="GtkLabel" id="Measures">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
+                    <property name="can_focus">False</property>
                     <property name="margin_left">4</property>
                     <property name="margin_right">4</property>
-                    <property name="margin_top">4</property>
+                    <property name="margin_top">8</property>
                     <property name="margin_bottom">4</property>
-                    <property name="invisible_char">•</property>
-                    <property name="primary_icon_activatable">False</property>
-                    <property name="secondary_icon_activatable">False</property>
-                    <property name="adjustment">mins</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Measures</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                    </attributes>
                   </object>
                   <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">5</property>
-                    <property name="width">1</property>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">6</property>
+                    <property name="width">2</property>
                     <property name="height">1</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkLabel" id="label9">
+                  <object class="GtkBox" id="box1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="margin_left">4</property>
                     <property name="margin_right">4</property>
                     <property name="margin_top">4</property>
                     <property name="margin_bottom">4</property>
-                    <property name="label" translatable="yes">minute(s)</property>
+                    <property name="hexpand">True</property>
+                    <property name="spacing">4</property>
+                    <child>
+                      <object class="GtkLabel" id="label15">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">&lt;i&gt;Min&lt;/i&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkScale" id="bg_opacity">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="adjustment">opacity</property>
+                        <property name="draw_value">False</property>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label16">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">&lt;i&gt;Max&lt;/i&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
                   </object>
                   <packing>
-                    <property name="left_attach">2</property>
+                    <property name="left_attach">1</property>
                     <property name="top_attach">5</property>
                     <property name="width">1</property>
                     <property name="height">1</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkLabel" id="label8">
+                  <object class="GtkBox" id="box2">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="margin_left">4</property>
-                    <property name="margin_right">4</property>
-                    <property name="margin_top">4</property>
-                    <property name="margin_bottom">4</property>
-                    <property name="label" translatable="yes">second(s)</property>
+                    <child>
+                      <object class="GtkSpinButton" id="update_interval">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="halign">start</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="invisible_char">•</property>
+                        <property name="width_chars">4</property>
+                        <property name="xalign">1</property>
+                        <property name="primary_icon_activatable">False</property>
+                        <property name="secondary_icon_activatable">False</property>
+                        <property name="input_purpose">alpha</property>
+                        <property name="adjustment">secs</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label8">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="halign">start</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="label" translatable="yes">second(s)</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
                   </object>
                   <packing>
-                    <property name="left_attach">2</property>
-                    <property name="top_attach">6</property>
+                    <property name="left_attach">1</property>
+                    <property name="top_attach">8</property>
                     <property name="width">1</property>
                     <property name="height">1</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkSpinButton" id="update_interval">
+                  <object class="GtkBox" id="box3">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="margin_left">4</property>
-                    <property name="margin_right">4</property>
-                    <property name="margin_top">4</property>
-                    <property name="margin_bottom">4</property>
-                    <property name="invisible_char">•</property>
-                    <property name="primary_icon_activatable">False</property>
-                    <property name="secondary_icon_activatable">False</property>
-                    <property name="adjustment">secs</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkSpinButton" id="monitoring_duration">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="halign">start</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="invisible_char">•</property>
+                        <property name="width_chars">4</property>
+                        <property name="xalign">1</property>
+                        <property name="primary_icon_activatable">False</property>
+                        <property name="secondary_icon_activatable">False</property>
+                        <property name="input_purpose">digits</property>
+                        <property name="adjustment">mins</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label9">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="halign">start</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="label" translatable="yes">minute(s)</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
                   </object>
                   <packing>
                     <property name="left_attach">1</property>
-                    <property name="top_attach">6</property>
+                    <property name="top_attach">7</property>
                     <property name="width">1</property>
                     <property name="height">1</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkLabel" id="label6">
+                  <object class="GtkCheckButton" id="graph_smooth_curves">
+                    <property name="label" translatable="yes">Smooth curves</property>
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
                     <property name="margin_left">14</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
                     <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Update interval:</property>
+                    <property name="draw_indicator">True</property>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
-                    <property name="top_attach">6</property>
-                    <property name="width">1</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">2</property>
                     <property name="height">1</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkLabel" id="Measures">
+                  <object class="GtkLabel" id="label10">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
                     <property name="margin_left">4</property>
                     <property name="margin_right">4</property>
-                    <property name="margin_top">8</property>
+                    <property name="margin_top">4</property>
                     <property name="margin_bottom">4</property>
                     <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Measures</property>
+                    <property name="label" translatable="yes">Curves</property>
+                    <property name="ellipsize">start</property>
                     <attributes>
                       <attribute name="weight" value="bold"/>
                     </attributes>
                   </object>
                   <packing>
                     <property name="left_attach">0</property>
-                    <property name="top_attach">4</property>
-                    <property name="width">1</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">2</property>
                     <property name="height">1</property>
                   </packing>
                 </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
               </object>
               <packing>
                 <property name="position">2</property>
               <object class="GtkLabel" id="Graph">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="margin_left">4</property>
+                <property name="margin_right">4</property>
+                <property name="margin_top">4</property>
+                <property name="margin_bottom">4</property>
                 <property name="label" translatable="yes">Graph</property>
               </object>
               <packing>
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="valign">start</property>
-                <property name="margin_top">8</property>
+                <property name="margin_left">4</property>
+                <property name="margin_right">4</property>
+                <property name="margin_top">4</property>
+                <property name="margin_bottom">4</property>
                 <child>
                   <object class="GtkLabel" id="label11">
                     <property name="visible">True</property>
                     <property name="valign">start</property>
                     <property name="margin_left">4</property>
                     <property name="margin_right">4</property>
-                    <property name="margin_top">8</property>
+                    <property name="margin_top">4</property>
                     <property name="margin_bottom">4</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">Measure update interval:</property>
                   <object class="GtkEntry" id="notif_script">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
+                    <property name="margin_left">4</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
                     <property name="invisible_char">•</property>
                     <property name="activates_default">True</property>
                   </object>
               <object class="GtkLabel" id="Sensors">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="margin_left">4</property>
+                <property name="margin_right">4</property>
+                <property name="margin_top">4</property>
+                <property name="margin_bottom">4</property>
                 <property name="label" translatable="yes">Sensors</property>
               </object>
               <packing>
               </packing>
             </child>
             <child>
+              <object class="GtkGrid" id="grid3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="valign">start</property>
+                <property name="margin_left">4</property>
+                <property name="margin_right">4</property>
+                <property name="margin_top">4</property>
+                <property name="margin_bottom">4</property>
+                <child>
+                  <object class="GtkCheckButton" id="lmsensors">
+                    <property name="label" translatable="yes">Enable support of lm-sensors</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="margin_left">14</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">1</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="nvctrl">
+                    <property name="label" translatable="yes">Enable support of NVCtrl (NVidia)</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="margin_left">14</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">3</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="atiadlsdk">
+                    <property name="label" translatable="yes">Enable support of ATI ADL</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="margin_left">14</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">4</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="gtop2">
+                    <property name="label" translatable="yes">Enable support of gtop2</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="margin_left">14</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">6</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="hddtemp">
+                    <property name="label" translatable="yes">Enable support of hddtemp daemon</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="margin_left">14</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">8</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="libatasmart">
+                    <property name="label" translatable="yes">Enable support of libatasmart</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="margin_left">14</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">9</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="udisks2">
+                    <property name="label" translatable="yes">Enable support of udisks2</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="margin_left">14</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">10</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label17">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="halign">center</property>
+                    <property name="margin_left">4</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="label" translatable="yes">The changes are applied after the restart of psensor.</property>
+                    <attributes>
+                      <attribute name="style" value="italic"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">11</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label22">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_left">4</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">8</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="xalign">0</property>
+                    <property name="xpad">4</property>
+                    <property name="label" translatable="yes">Hard disk drive</property>
+                    <property name="angle">0.01</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">7</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label18">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_left">4</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">8</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="xalign">0</property>
+                    <property name="xpad">4</property>
+                    <property name="label" translatable="yes">CPU and memory usage</property>
+                    <property name="angle">0.01</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">5</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label19">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_left">4</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">8</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="xalign">0</property>
+                    <property name="xpad">4</property>
+                    <property name="label" translatable="yes">GPU with proprietary driver</property>
+                    <property name="angle">0.01</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">2</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label20">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_left">4</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">8</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="xalign">0</property>
+                    <property name="xpad">4</property>
+                    <property name="label" translatable="yes">Motherboard, CPU and GPU</property>
+                    <property name="angle">0.01</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="left_attach">0</property>
+                    <property name="top_attach">0</property>
+                    <property name="width">1</property>
+                    <property name="height">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">4</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label13">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Providers</property>
+              </object>
+              <packing>
+                <property name="position">4</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+            <child>
               <placeholder/>
             </child>
             <child type="tab">
index d70f9e9..565d2dd 100644 (file)
                   <object class="GtkTreeView" id="sensors_tree">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
-                    <property name="hexpand">True</property>
+                    <property name="halign">start</property>
                     <property name="vexpand">True</property>
                     <property name="model">sensors_store</property>
                     <property name="search_column">0</property>
                         <property name="mode">none</property>
                       </object>
                     </child>
+                    <child>
+                      <object class="GtkTreeViewColumn" id="treeviewcolumn1">
+                        <property name="title" translatable="yes">Sensor</property>
+                        <child>
+                          <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                          <attributes>
+                            <attribute name="text">0</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkTreeViewColumn" id="treeviewcolumn2">
+                        <property name="title" translatable="yes">Value</property>
+                        <child>
+                          <object class="GtkCellRendererText" id="cellrenderertext2"/>
+                          <attributes>
+                            <attribute name="text">1</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkTreeViewColumn" id="treeviewcolumn3">
+                        <property name="title" translatable="yes">Min</property>
+                        <child>
+                          <object class="GtkCellRendererText" id="cellrenderertext3"/>
+                          <attributes>
+                            <attribute name="text">2</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkTreeViewColumn" id="treeviewcolumn4">
+                        <property name="title" translatable="yes">Max</property>
+                        <child>
+                          <object class="GtkCellRendererText" id="cellrenderertext4"/>
+                          <attributes>
+                            <attribute name="text">3</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkTreeViewColumn" id="treeviewcolumn5">
+                        <property name="title" translatable="yes">Color</property>
+                        <child>
+                          <object class="GtkCellRendererText" id="cellrenderertext5"/>
+                          <attributes>
+                            <attribute name="background">5</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkTreeViewColumn" id="treeviewcolumn6">
+                        <property name="title" translatable="yes">Graph</property>
+                        <child>
+                          <object class="GtkCellRendererToggle" id="cellrenderertoggle1">
+                            <signal name="toggled" handler="ui_sensorlist_cb_graph_toggled" swapped="no"/>
+                          </object>
+                          <attributes>
+                            <attribute name="active">6</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                    </child>
                   </object>
                 </child>
               </object>
index a949f0a..167c9eb 100644 (file)
@@ -23,6 +23,7 @@
     </columns>
   </object>
   <object class="GtkDialog" id="dialog1">
+    <property name="height_request">300</property>
     <property name="can_focus">False</property>
     <property name="border_width">5</property>
     <property name="title" translatable="yes">Edit Sensor Preferences</property>
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <child>
-              <object class="GtkTreeView" id="sensors_list">
+              <object class="GtkScrolledWindow" id="scrolledwindow1">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="model">sensors_liststore</property>
-                <property name="headers_clickable">False</property>
-                <property name="reorderable">True</property>
-                <property name="search_column">1</property>
-                <child internal-child="selection">
-                  <object class="GtkTreeSelection" id="treeview-selection1"/>
-                </child>
+                <property name="hscrollbar_policy">never</property>
+                <property name="shadow_type">in</property>
                 <child>
-                  <object class="GtkTreeViewColumn" id="sensor_name_col">
-                    <property name="title" translatable="yes">Name</property>
+                  <object class="GtkTreeView" id="sensors_list">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="margin_left">4</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="model">sensors_liststore</property>
+                    <property name="headers_clickable">False</property>
+                    <property name="reorderable">True</property>
+                    <property name="search_column">1</property>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection" id="treeview-selection"/>
+                    </child>
                     <child>
-                      <object class="GtkCellRendererText" id="cellrenderertext1"/>
-                      <attributes>
-                        <attribute name="text">0</attribute>
-                      </attributes>
+                      <object class="GtkTreeViewColumn" id="sensor_name_col">
+                        <property name="title" translatable="yes">Name</property>
+                        <property name="expand">True</property>
+                        <child>
+                          <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                          <attributes>
+                            <attribute name="text">0</attribute>
+                          </attributes>
+                        </child>
+                      </object>
                     </child>
                   </object>
                 </child>
               </packing>
             </child>
             <child>
-              <object class="GtkGrid" id="table1">
+              <object class="GtkNotebook" id="notebook2">
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="row_spacing">4</property>
-                <property name="column_spacing">4</property>
-                <child>
-                  <object class="GtkEntry" id="sensor_name">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="invisible_char">•</property>
-                    <property name="primary_icon_activatable">False</property>
-                    <property name="secondary_icon_activatable">False</property>
-                    <signal name="changed" handler="ui_sensorpref_name_changed_cb" swapped="no"/>
-                  </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">1</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label4">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
-                    <property name="yalign">0.49000000953674316</property>
-                    <property name="xpad">4</property>
-                    <property name="label" translatable="yes">Type:</property>
-                    <property name="justify">fill</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">2</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="sensor_type">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">N/A</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">2</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label1">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
-                    <property name="ypad">4</property>
-                    <property name="label" translatable="yes">Sensor Information</property>
-                    <attributes>
-                      <attribute name="weight" value="bold"/>
-                    </attributes>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">0</property>
-                    <property name="width">2</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="chip_name_label">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
-                    <property name="xpad">4</property>
-                    <property name="label" translatable="yes">Chip:</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">3</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="chip_name">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">N/A</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">3</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label3">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
-                    <property name="xpad">4</property>
-                    <property name="label" translatable="yes">Name:</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">1</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label2">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
-                    <property name="xpad">4</property>
-                    <property name="label" translatable="yes">Id:</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">4</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
+                <property name="can_focus">True</property>
+                <property name="margin_left">4</property>
+                <property name="margin_right">4</property>
+                <property name="margin_top">4</property>
+                <property name="margin_bottom">4</property>
                 <child>
-                  <object class="GtkLabel" id="sensor_id">
+                  <object class="GtkGrid" id="table1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
+                    <property name="margin_left">4</property>
+                    <property name="margin_right">4</property>
                     <property name="margin_top">4</property>
                     <property name="margin_bottom">4</property>
-                    <property name="hexpand">True</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">N/A</property>
+                    <property name="row_spacing">4</property>
+                    <property name="column_spacing">4</property>
+                    <child>
+                      <object class="GtkEntry" id="sensor_name">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="invisible_char">•</property>
+                        <property name="primary_icon_activatable">False</property>
+                        <property name="secondary_icon_activatable">False</property>
+                        <signal name="changed" handler="ui_sensorpref_name_changed_cb" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label4">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0</property>
+                        <property name="yalign">0.49000000953674316</property>
+                        <property name="xpad">4</property>
+                        <property name="label" translatable="yes">Type:</property>
+                        <property name="justify">fill</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="sensor_type">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">N/A</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="chip_name_label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0</property>
+                        <property name="xpad">4</property>
+                        <property name="label" translatable="yes">Chip:</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">2</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="chip_name">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">N/A</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">2</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label3">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="xpad">4</property>
+                        <property name="label" translatable="yes">Name:</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label2">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0</property>
+                        <property name="xpad">4</property>
+                        <property name="label" translatable="yes">Id:</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">3</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="sensor_id">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">N/A</property>
+                        <property name="ellipsize">end</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">3</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
                   </object>
-                  <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">4</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
                 </child>
-                <child>
-                  <object class="GtkLabel" id="label5">
+                <child type="tab">
+                  <object class="GtkLabel" id="label11">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
-                    <property name="ypad">4</property>
-                    <property name="label" translatable="yes">Graph</property>
-                    <attributes>
-                      <attribute name="weight" value="bold"/>
-                    </attributes>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">5</property>
-                    <property name="width">2</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkCheckButton" id="sensor_draw">
-                    <property name="label" translatable="yes">Draw sensor curve</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">False</property>
                     <property name="margin_left">4</property>
-                    <property name="xalign">0</property>
-                    <property name="draw_indicator">True</property>
-                    <signal name="toggled" handler="ui_sensorpref_draw_toggled_cb" swapped="no"/>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">6</property>
-                    <property name="width">2</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label7">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
-                    <property name="xpad">4</property>
-                    <property name="label" translatable="yes">Color:</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">7</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkColorButton" id="sensor_color">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">True</property>
-                    <property name="halign">start</property>
-                    <property name="xalign">0</property>
-                    <signal name="color-set" handler="ui_sensorpref_color_set_cb" swapped="no"/>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="label" translatable="yes">Details</property>
                   </object>
                   <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">7</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
+                    <property name="tab_fill">False</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkLabel" id="label6">
+                  <object class="GtkGrid" id="grid1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
-                    <property name="ypad">4</property>
-                    <property name="label" translatable="yes">Alarm</property>
-                    <attributes>
-                      <attribute name="weight" value="bold"/>
-                    </attributes>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">9</property>
-                    <property name="width">2</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkCheckButton" id="sensor_alarm">
-                    <property name="label" translatable="yes">Activate desktop notifications</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">False</property>
                     <property name="margin_left">4</property>
-                    <property name="xalign">0</property>
-                    <property name="draw_indicator">True</property>
-                    <signal name="toggled" handler="ui_sensorpref_alarm_toggled_cb" swapped="no"/>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">10</property>
-                    <property name="width">2</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="alarm_high_threshold_label">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="xalign">0.0099999997764825821</property>
-                    <property name="xpad">4</property>
-                    <property name="label" translatable="yes">High threshold:</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">11</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="alarm_low_threshold_label">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="xalign">0.0099999997764825821</property>
-                    <property name="xpad">4</property>
-                    <property name="label" translatable="yes">Low threshold:</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="row_spacing">4</property>
+                    <property name="column_spacing">4</property>
+                    <child>
+                      <object class="GtkCheckButton" id="sensor_draw">
+                        <property name="label" translatable="yes">Draw sensor curve</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0</property>
+                        <property name="draw_indicator">True</property>
+                        <signal name="toggled" handler="ui_sensorpref_draw_toggled_cb" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">2</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="label7">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0</property>
+                        <property name="xpad">4</property>
+                        <property name="label" translatable="yes">Color:</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkColorButton" id="sensor_color">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="halign">start</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0</property>
+                        <signal name="color-set" handler="ui_sensorpref_color_set_cb" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="sensor_enable_checkbox">
+                        <property name="label" translatable="yes">Display sensor in the list of sensors</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0</property>
+                        <property name="draw_indicator">True</property>
+                        <signal name="toggled" handler="ui_sensorpref_display_toggled_cb" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">2</property>
+                        <property name="width">2</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
                   </object>
                   <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">12</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
+                    <property name="position">1</property>
                   </packing>
                 </child>
-                <child>
-                  <object class="GtkLabel" id="indicator_label">
+                <child type="tab">
+                  <object class="GtkLabel" id="label12">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="xalign">0</property>
-                    <property name="ypad">4</property>
-                    <property name="label" translatable="yes">Application Indicator</property>
-                    <attributes>
-                      <attribute name="weight" value="bold"/>
-                    </attributes>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">13</property>
-                    <property name="width">2</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkCheckButton" id="indicator_checkbox">
-                    <property name="label" translatable="yes">Display sensor in the menu</property>
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">False</property>
                     <property name="margin_left">4</property>
-                    <property name="xalign">0</property>
-                    <property name="draw_indicator">True</property>
-                    <signal name="toggled" handler="ui_sensorpref_appindicator_menu_toggled_cb" swapped="no"/>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="label" translatable="yes">Graph</property>
                   </object>
                   <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">14</property>
-                    <property name="width">2</property>
-                    <property name="height">1</property>
+                    <property name="position">1</property>
+                    <property name="tab_fill">False</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkCheckButton" id="indicator_label_checkbox">
-                    <property name="label" translatable="yes">Display sensor in the label (experimental)</property>
+                  <object class="GtkGrid" id="grid2">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="receives_default">False</property>
                     <property name="margin_left">4</property>
-                    <property name="xalign">0</property>
-                    <property name="draw_indicator">True</property>
-                    <signal name="toggled" handler="ui_sensorpref_appindicator_label_toggled_cb" swapped="no"/>
-                  </object>
-                  <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">15</property>
-                    <property name="width">2</property>
-                    <property name="height">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkBox" id="box1">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="row_spacing">4</property>
+                    <property name="column_spacing">4</property>
                     <child>
-                      <object class="GtkSpinButton" id="sensor_alarm_high_threshold">
+                      <object class="GtkCheckButton" id="sensor_alarm">
+                        <property name="label" translatable="yes">Activate desktop notifications</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="invisible_char">•</property>
-                        <property name="primary_icon_activatable">False</property>
-                        <property name="secondary_icon_activatable">False</property>
-                        <property name="adjustment">alarm_high_threshold_value</property>
-                        <property name="climb_rate">1</property>
-                        <property name="snap_to_ticks">True</property>
-                        <property name="numeric">True</property>
-                        <property name="update_policy">if-valid</property>
-                        <signal name="value-changed" handler="ui_sensorpref_alarm_high_threshold_changed_cb" swapped="no"/>
+                        <property name="receives_default">False</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0</property>
+                        <property name="draw_indicator">True</property>
+                        <signal name="toggled" handler="ui_sensorpref_alarm_toggled_cb" swapped="no"/>
                       </object>
                       <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">0</property>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">2</property>
+                        <property name="height">1</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkLabel" id="sensor_alarm_high_threshold_unit">
+                      <object class="GtkLabel" id="alarm_high_threshold_label">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="valign">center</property>
-                        <property name="xalign">0</property>
-                        <property name="label" translatable="yes">N/A</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0.0099999997764825821</property>
+                        <property name="xpad">4</property>
+                        <property name="label" translatable="yes">High threshold:</property>
                       </object>
                       <packing>
-                        <property name="expand">True</property>
-                        <property name="fill">True</property>
-                        <property name="position">1</property>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="box1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkSpinButton" id="sensor_alarm_high_threshold">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="margin_left">4</property>
+                            <property name="margin_right">4</property>
+                            <property name="margin_top">4</property>
+                            <property name="margin_bottom">4</property>
+                            <property name="invisible_char">•</property>
+                            <property name="text" translatable="yes">0</property>
+                            <property name="primary_icon_activatable">False</property>
+                            <property name="secondary_icon_activatable">False</property>
+                            <property name="adjustment">alarm_high_threshold_value</property>
+                            <property name="climb_rate">1</property>
+                            <property name="snap_to_ticks">True</property>
+                            <property name="numeric">True</property>
+                            <property name="update_policy">if-valid</property>
+                            <signal name="value-changed" handler="ui_sensorpref_alarm_high_threshold_changed_cb" swapped="no"/>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="sensor_alarm_high_threshold_unit">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="valign">center</property>
+                            <property name="margin_right">4</property>
+                            <property name="margin_top">4</property>
+                            <property name="margin_bottom">4</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">N/A</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="box20">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkSpinButton" id="sensor_alarm_low_threshold">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="margin_left">4</property>
+                            <property name="margin_right">4</property>
+                            <property name="margin_top">4</property>
+                            <property name="margin_bottom">4</property>
+                            <property name="invisible_char">•</property>
+                            <property name="text" translatable="yes">-1</property>
+                            <property name="primary_icon_activatable">False</property>
+                            <property name="secondary_icon_activatable">False</property>
+                            <property name="adjustment">alarm_low_threshold_value</property>
+                            <property name="climb_rate">1</property>
+                            <property name="snap_to_ticks">True</property>
+                            <property name="numeric">True</property>
+                            <property name="update_policy">if-valid</property>
+                            <property name="value">-1</property>
+                            <signal name="value-changed" handler="ui_sensorpref_alarm_low_threshold_changed_cb" swapped="no"/>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="sensor_alarm_low_threshold_unit">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="valign">center</property>
+                            <property name="margin_right">4</property>
+                            <property name="margin_top">4</property>
+                            <property name="margin_bottom">4</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">N/A</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="left_attach">1</property>
+                        <property name="top_attach">2</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkLabel" id="alarm_low_threshold_label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0.0099999997764825821</property>
+                        <property name="xpad">4</property>
+                        <property name="label" translatable="yes">Low threshold:</property>
+                      </object>
+                      <packing>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">2</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
                       </packing>
                     </child>
                   </object>
                   <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">11</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label13">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="margin_left">4</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="label" translatable="yes">Alarm</property>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                    <property name="tab_fill">False</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkBox" id="box20">
+                  <object class="GtkGrid" id="grid3">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
+                    <property name="margin_left">4</property>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="row_spacing">4</property>
+                    <property name="column_spacing">4</property>
                     <child>
-                      <object class="GtkSpinButton" id="sensor_alarm_low_threshold">
+                      <object class="GtkCheckButton" id="indicator_checkbox">
+                        <property name="label" translatable="yes">Display sensor in the menu</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="invisible_char">•</property>
-                        <property name="text" translatable="yes">-1</property>
-                        <property name="primary_icon_activatable">False</property>
-                        <property name="secondary_icon_activatable">False</property>
-                        <property name="adjustment">alarm_low_threshold_value</property>
-                        <property name="climb_rate">1</property>
-                        <property name="snap_to_ticks">True</property>
-                        <property name="numeric">True</property>
-                        <property name="update_policy">if-valid</property>
-                        <property name="value">-1</property>
-                        <signal name="value-changed" handler="ui_sensorpref_alarm_low_threshold_changed_cb" swapped="no"/>
+                        <property name="receives_default">False</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
+                        <property name="xalign">0</property>
+                        <property name="draw_indicator">True</property>
+                        <signal name="toggled" handler="ui_sensorpref_appindicator_menu_toggled_cb" swapped="no"/>
                       </object>
                       <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">0</property>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">0</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkLabel" id="sensor_alarm_low_threshold_unit">
+                      <object class="GtkCheckButton" id="indicator_label_checkbox">
+                        <property name="label" translatable="yes">Display sensor in the label (experimental)</property>
                         <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="valign">center</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="margin_left">4</property>
+                        <property name="margin_right">4</property>
+                        <property name="margin_top">4</property>
+                        <property name="margin_bottom">4</property>
                         <property name="xalign">0</property>
-                        <property name="label" translatable="yes">N/A</property>
+                        <property name="draw_indicator">True</property>
+                        <signal name="toggled" handler="ui_sensorpref_appindicator_label_toggled_cb" swapped="no"/>
                       </object>
                       <packing>
-                        <property name="expand">True</property>
-                        <property name="fill">True</property>
-                        <property name="position">1</property>
+                        <property name="left_attach">0</property>
+                        <property name="top_attach">1</property>
+                        <property name="width">1</property>
+                        <property name="height">1</property>
                       </packing>
                     </child>
                   </object>
                   <packing>
-                    <property name="left_attach">1</property>
-                    <property name="top_attach">12</property>
-                    <property name="width">1</property>
-                    <property name="height">1</property>
+                    <property name="position">3</property>
                   </packing>
                 </child>
-                <child>
-                  <object class="GtkCheckButton" id="sensor_enable_checkbox">
-                    <property name="label" translatable="yes">Display sensor in the list of sensors</property>
+                <child type="tab">
+                  <object class="GtkLabel" id="label1">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">False</property>
+                    <property name="can_focus">False</property>
                     <property name="margin_left">4</property>
-                    <property name="xalign">0</property>
-                    <property name="draw_indicator">True</property>
-                    <signal name="toggled" handler="ui_sensorpref_display_toggled_cb" swapped="no"/>
+                    <property name="margin_right">4</property>
+                    <property name="margin_top">4</property>
+                    <property name="margin_bottom">4</property>
+                    <property name="label" translatable="yes">Application Indicator</property>
                   </object>
                   <packing>
-                    <property name="left_attach">0</property>
-                    <property name="top_attach">8</property>
-                    <property name="width">2</property>
-                    <property name="height">1</property>
+                    <property name="position">3</property>
+                    <property name="tab_fill">False</property>
                   </packing>
                 </child>
               </object>
               <packing>
                 <property name="resize">True</property>
-                <property name="shrink">False</property>
+                <property name="shrink">True</property>
               </packing>
             </child>
           </object>
index ab507c0..792bb25 100644 (file)
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 
-#include "cfg.h"
+#include <math.h>
+
+#include <cfg.h>
 #include <plog.h>
-#include "psensor.h"
+#include <psensor.h>
 
 /* horizontal padding */
-#define GRAPH_H_PADDING 4
+const int GRAPH_H_PADDING = 4;
 /* vertical padding */
-#define GRAPH_V_PADDING 4
+const int GRAPH_V_PADDING = 4;
+
+bool is_smooth_curves_enabled;
+
+struct graph_info {
+       /* Horizontal position of the central area (curves) */
+       int g_xoff;
+       /* Vertical position of the central area (curves) */
+       int g_yoff;
+
+       /* Width of the central area (curves) */
+       int g_width;
+       /* Height of the central area (curves) */
+       int g_height;
+
+       /* Height of the drawing canvas */
+       int height;
+       /* Width of the drawing canvas */
+       int width;
+
+       /* Background color of the current desktop theme */
+       GdkRGBA theme_bg_color;
+       /* Foreground color of the current desktop theme */
+       GdkRGBA theme_fg_color;
+};
 
-static time_t get_graph_end_time_s()
+/* Return the end time of the graph i.e. the more recent measure.  If
+ * no measure are available, return 0.
+ * If Bezier curves are used return the measure n-3 to avoid to
+ * display a part of the curve outside the graph area.
+ */
+static time_t get_graph_end_time_s(struct psensor **sensors)
 {
-       struct timeval tv;
+       time_t ret, t;
+       struct psensor *s;
+       struct measure *measures;
+       int i, n;
+
+       ret = 0;
+       while (*sensors) {
+               s = *sensors;
+               measures = s->measures;
+
+               if (is_smooth_curves_enabled)
+                       n = 2;
+               else
+                       n = 0;
+
+               for (i = s->values_max_length - 1; i >= 0; i--) {
+                       if (measures[i].value != UNKNOWN_DBL_VALUE) {
+                               if (!n) {
+                                       t = measures[i].time.tv_sec;
+
+                                       if (t > ret) {
+                                               ret = t;
+                                               break;
+                                       }
+                               } else {
+                                       n--;
+                               }
+                       }
+                       i--;
+               }
 
-       if (gettimeofday(&tv, NULL) == 0)
-               return tv.tv_sec;
-       else
-               return 0;
+               sensors++;
+       }
+
+       return ret;
 }
 
-static time_t get_graph_begin_time_s(struct config *cfg)
+static time_t get_graph_begin_time_s(struct config *cfg, time_t etime)
 {
-       int ct;
-
-       ct = get_graph_end_time_s();
-
-       if (!ct)
+       if (!etime)
                return 0;
 
-       return ct - cfg->graph_monitoring_duration * 60;
+       return etime - cfg->graph_monitoring_duration * 60;
 }
 
-static int compute_y(double value, double min, double max, int height, int off)
+static double
+compute_y(double value, double min, double max, int height, int off)
 {
        double t = value - min;
+
        return height - ((double)height * (t / (max - min))) + off;
 }
 
@@ -76,39 +134,57 @@ static char *time_to_str(time_t s)
        return str;
 }
 
+static void draw_left_region(cairo_t *cr, struct graph_info *info)
+{
+       cairo_set_source_rgb(cr,
+                            info->theme_bg_color.red,
+                            info->theme_bg_color.green,
+                            info->theme_bg_color.blue);
+
+       cairo_rectangle(cr, 0, 0, info->g_xoff, info->height);
+       cairo_fill(cr);
+}
+
+static void draw_right_region(cairo_t *cr, struct graph_info *info)
+{
+       cairo_set_source_rgb(cr,
+                            info->theme_bg_color.red,
+                            info->theme_bg_color.green,
+                            info->theme_bg_color.blue);
+
+
+       cairo_rectangle(cr,
+                       info->g_xoff + info->g_width,
+                       0,
+                       info->g_xoff + info->g_width + GRAPH_H_PADDING,
+                       info->height);
+       cairo_fill(cr);
+}
+
 static void
 draw_graph_background(cairo_t *cr,
-                     int g_xoff, int g_yoff,
-                     int g_width, int g_height,
-                     int width, int height, struct config *config,
-                     GtkWidget *widget,
-                     GtkWidget *window)
+                     struct config *config,
+                     struct graph_info *info)
 {
-       GtkStyleContext *style_ctx;
        struct color *bgcolor;
-       GdkRGBA rgba;
 
        bgcolor = config->graph_bgcolor;
 
-       style_ctx = gtk_widget_get_style_context(window);
-       gtk_style_context_get_background_color(style_ctx,
-                                              GTK_STATE_FLAG_NORMAL,
-                                              &rgba);
-
        if (config->alpha_channel_enabled)
                cairo_set_source_rgba(cr,
-                                     rgba.red,
-                                     rgba.green,
-                                     rgba.blue,
+                                     info->theme_bg_color.red,
+                                     info->theme_bg_color.green,
+                                     info->theme_bg_color.blue,
                                      config->graph_bg_alpha);
        else
                cairo_set_source_rgb(cr,
-                                    rgba.red,
-                                    rgba.green,
-                                    rgba.blue);
+                                    info->theme_bg_color.red,
+                                    info->theme_bg_color.green,
+                                    info->theme_bg_color.blue);
 
-       cairo_rectangle(cr, 0, 0, width, height);
+       cairo_rectangle(cr, info->g_xoff, 0, info->g_width, info->height);
        cairo_fill(cr);
+
        if (config->alpha_channel_enabled)
                cairo_set_source_rgba(cr,
                                      bgcolor->red,
@@ -121,7 +197,11 @@ draw_graph_background(cairo_t *cr,
                                     bgcolor->green,
                                     bgcolor->blue);
 
-       cairo_rectangle(cr, g_xoff, g_yoff, g_width, g_height);
+       cairo_rectangle(cr,
+                       info->g_xoff,
+                       info->g_yoff,
+                       info->g_width,
+                       info->g_height);
        cairo_fill(cr);
 }
 
@@ -133,55 +213,168 @@ static double dashes[] = {
 static int ndash = sizeof(dashes) / sizeof(dashes[0]);
 
 static void draw_background_lines(cairo_t *cr,
-                                 struct color *color,
-                                 int g_width, int g_height,
-                                 int g_xoff, int g_yoff,
-                                 int min, int max)
+                                 int min, int max,
+                                 struct config *config,
+                                 struct graph_info *info)
 {
        int i;
+       double x, y;
+       struct color *color;
+
+       color = config->graph_fgcolor;
 
        /* draw background lines */
        cairo_set_line_width(cr, 1);
        cairo_set_dash(cr, dashes, ndash, 0);
-       cairo_set_source_rgb(cr,
-                            color->red, color->green, color->blue);
+       cairo_set_source_rgb(cr, color->red, color->green, color->blue);
 
        /* vertical lines representing time steps */
        for (i = 0; i <= 5; i++) {
-               int x = i * (g_width / 5) + g_xoff;
-               cairo_move_to(cr, x, g_yoff);
-               cairo_line_to(cr, x, g_yoff + g_height);
-               cairo_stroke(cr);
+               x = i * ((double)info->g_width / 5) + info->g_xoff;
+               cairo_move_to(cr, x, info->g_yoff);
+               cairo_line_to(cr, x, info->g_yoff + info->g_height);
        }
 
        /* horizontal lines draws a line for each 10C step */
        for (i = min; i < max; i++) {
                if (i % 10 == 0) {
-                       int y = compute_y(i, min, max, g_height, g_yoff);
-
-                       cairo_move_to(cr, g_xoff, y);
-                       cairo_line_to(cr, g_xoff + g_width, y);
-                       cairo_stroke(cr);
+                       y = compute_y(i,
+                                     min,
+                                     max,
+                                     info->g_height,
+                                     info->g_yoff);
+
+                       cairo_move_to(cr, info->g_xoff, y);
+                       cairo_line_to(cr, info->g_xoff + info->g_width, y);
                }
        }
 
+       cairo_stroke(cr);
+
        /* back to normal line style */
        cairo_set_dash(cr, 0, 0, 0);
 }
 
+/* Keys: sensor identifier.
+ *
+ * Values: array of time_t. Each time_t is corresponding to a sensor
+ * measure which has been used as the start point of a Bezier curve.
+ */
+static GHashTable *times;
+
+static void draw_sensor_smooth_curve(struct psensor *s,
+                                    cairo_t *cr,
+                                    double min,
+                                    double max,
+                                    int bt,
+                                    int et,
+                                    struct graph_info *info)
+{
+       int i, dt, vdt, j, k, found;
+       double x[4], y[4], v;
+       time_t t, t0, *stimes;
+
+       if (!times)
+               times = g_hash_table_new_full(g_str_hash,
+                                             g_str_equal,
+                                             free,
+                                             free);
+
+       stimes = g_hash_table_lookup(times, s->id);
+
+       cairo_set_source_rgb(cr,
+                            s->color->red,
+                            s->color->green,
+                            s->color->blue);
+
+       /* search the index of the first measure used as a start point
+        * of a Bezier curve. The start and end points of the Bezier
+        * curves must be preserved to ensure the same overall shape
+        * of the graph. */
+       i = 0;
+       if (stimes) {
+               while (i < s->values_max_length) {
+                       t = s->measures[i].time.tv_sec;
+                       v = s->measures[i].value;
+
+                       found = 0;
+                       if (v != UNKNOWN_DBL_VALUE && t) {
+                               k = 0;
+                               while (stimes[k]) {
+                                       if (t == stimes[k]) {
+                                               found = 1;
+                                               break;
+                                       }
+                                       k++;
+                               }
+                       }
+
+                       if (found)
+                               break;
+
+                       i++;
+               }
+       }
+
+       stimes = malloc((s->values_max_length + 1) * sizeof(time_t));
+       memset(stimes, 0, (s->values_max_length + 1) * sizeof(time_t));
+       g_hash_table_insert(times, strdup(s->id), stimes);
+
+       if (i == s->values_max_length)
+               i = 0;
+
+       k = 0;
+       dt = et - bt;
+       while (i < s->values_max_length) {
+               j = 0;
+               t = 0;
+               while (i < s->values_max_length && j < 4) {
+                       t = s->measures[i].time.tv_sec;
+                       v = s->measures[i].value;
+
+                       if (v == UNKNOWN_DBL_VALUE || !t) {
+                               i++;
+                               continue;
+                       }
+
+                       vdt = t - bt;
+
+                       x[0 + j] = ((double)vdt * info->g_width)
+                               / dt + info->g_xoff;
+                       y[0 + j] = compute_y(v,
+                                            min,
+                                            max,
+                                            info->g_height,
+                                            info->g_yoff);
+
+                       if (j == 0)
+                               t0 = t;
+
+                       i++;
+                       j++;
+               }
+
+               if (j == 4) {
+                       cairo_move_to(cr, x[0], y[0]);
+                       cairo_curve_to(cr, x[1], y[1], x[2], y[3], x[3], y[3]);
+                       stimes[k++] = t0;
+                       i--;
+               }
+       }
+
+       cairo_stroke(cr);
+}
+
 static void draw_sensor_curve(struct psensor *s,
                              cairo_t *cr,
                              double min,
                              double max,
                              int bt,
                              int et,
-                             int g_width,
-                             int g_height,
-                             int g_xoff,
-                             int g_yoff)
+                             struct graph_info *info)
 {
-       int first, i, x, y, t, dt, vdt;
-       double v;
+       int first, i, t, dt, vdt;
+       double v, x, y;
 
        cairo_set_source_rgb(cr,
                             s->color->red,
@@ -198,12 +391,10 @@ static void draw_sensor_curve(struct psensor *s,
                        continue;
 
                vdt = t - bt;
-               if (vdt < 0)
-                       continue;
 
-               x = vdt * g_width / dt + g_xoff;
+               x = ((double)vdt * info->g_width) / dt + info->g_xoff;
 
-               y = compute_y(v, min, max, g_height, g_yoff);
+               y = compute_y(v, min, max, info->g_height, info->g_yoff);
 
                if (first) {
                        cairo_move_to(cr, x, y);
@@ -240,12 +431,11 @@ graph_update(struct psensor **sensors,
             struct config *config,
             GtkWidget *window)
 {
-       struct color *fgcolor = config->graph_fgcolor;
        int et, bt, width, height, g_width, g_height;
-       double min_rpm, max_rpm, mint, maxt;
+       double min_rpm, max_rpm, mint, maxt, min, max;
        char *strmin, *strmax;
        /* horizontal and vertical offset of the graph */
-       int g_xoff, g_yoff, no_graphs, min, max;
+       int g_xoff, g_yoff, no_graphs;
        cairo_surface_t *cst;
        cairo_t *cr, *cr_pixmap;
        char *str_btime, *str_etime;
@@ -253,10 +443,10 @@ graph_update(struct psensor **sensors,
        struct psensor **sensor_cur, **enabled_sensors;
        GtkAllocation galloc;
        GtkStyleContext *style_ctx;
-       GdkRGBA rgba;
+       struct graph_info info;
 
        if (!gtk_widget_is_drawable(w_graph))
-               return ;
+               return;
 
        enabled_sensors = psensor_list_filter_graph_enabled(sensors);
 
@@ -273,12 +463,18 @@ graph_update(struct psensor **sensors,
                                      maxt,
                                      config->temperature_unit == CELSIUS);
 
-       str_btime = time_to_str(get_graph_begin_time_s(config));
-       str_etime = time_to_str(get_graph_end_time_s());
+       et = get_graph_end_time_s(enabled_sensors);
+       bt = get_graph_begin_time_s(config, et);
+
+       str_btime = time_to_str(bt);
+       str_etime = time_to_str(et);
 
        gtk_widget_get_allocation(w_graph, &galloc);
        width = galloc.width;
+       info.width = galloc.width;
        height = galloc.height;
+       info.height = height;
+
 
        cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
        cr = cairo_create(cst);
@@ -295,6 +491,7 @@ graph_update(struct psensor **sensors,
        cairo_text_extents(cr, strmin, &te_min);
 
        g_yoff = GRAPH_V_PADDING;
+       info.g_yoff = g_yoff;
 
        g_height = height - GRAPH_V_PADDING;
        if (te_etime.height > te_btime.height)
@@ -302,23 +499,33 @@ graph_update(struct psensor **sensors,
        else
                g_height -= GRAPH_V_PADDING + te_btime.height + GRAPH_V_PADDING;
 
+       info.g_height = g_height;
+
        if (te_min.width > te_max.width)
                g_xoff = (2 * GRAPH_H_PADDING) + te_max.width;
        else
                g_xoff = (2 * GRAPH_H_PADDING) + te_min.width;
 
+       info.g_xoff = g_xoff;
+
+       style_ctx = gtk_widget_get_style_context(window);
+       gtk_style_context_get_background_color(style_ctx,
+                                              GTK_STATE_FLAG_NORMAL,
+                                              &info.theme_bg_color);
+       gtk_style_context_get_color(style_ctx,
+                                   GTK_STATE_FLAG_NORMAL,
+                                   &info.theme_fg_color);
+
        g_width = width - g_xoff - GRAPH_H_PADDING;
+       info.g_width = g_width;
 
-       draw_graph_background(cr,
-                             g_xoff, g_yoff, g_width, g_height,
-                             width, height, config,
-                             w_graph,
-                             window);
+       draw_graph_background(cr, config, &info);
 
-       /** Set the color for text drawing */
-       style_ctx = gtk_widget_get_style_context(window);
-       gtk_style_context_get_color(style_ctx, GTK_STATE_FLAG_NORMAL, &rgba);
-       cairo_set_source_rgb(cr, rgba.red, rgba.green, rgba.blue);
+       /* Set the color for text drawing */
+       cairo_set_source_rgb(cr,
+                            info.theme_fg_color.red,
+                            info.theme_fg_color.green,
+                            info.theme_fg_color.blue);
 
        /* draw graph begin time */
        cairo_move_to(cr, g_xoff, height - GRAPH_V_PADDING);
@@ -332,25 +539,9 @@ graph_update(struct psensor **sensors,
        cairo_show_text(cr, str_etime);
        free(str_etime);
 
-       /* draw min and max temp */
-       cairo_move_to(cr, GRAPH_H_PADDING, te_max.height + GRAPH_V_PADDING);
-       cairo_show_text(cr, strmax);
-       free(strmax);
-
-       cairo_move_to(cr,
-                     GRAPH_H_PADDING, height - (te_min.height / 2) - g_yoff);
-       cairo_show_text(cr, strmin);
-       free(strmin);
-
-       draw_background_lines(cr, fgcolor,
-                             g_width, g_height,
-                             g_xoff, g_yoff,
-                             mint, maxt);
+       draw_background_lines(cr, mint, maxt, config, &info);
 
        /* .. and finaly draws the temperature graphs */
-       bt = get_graph_begin_time_s(config);
-       et = get_graph_end_time_s();
-
        if (bt && et) {
                sensor_cur = enabled_sensors;
 
@@ -361,23 +552,28 @@ graph_update(struct psensor **sensors,
                        struct psensor *s = *sensor_cur;
 
                        no_graphs = 0;
-                       if (is_fan_type(s->type)) {
+                       if (s->type & SENSOR_TYPE_RPM) {
                                min = min_rpm;
                                max = max_rpm;
-                       } else if (s->type & SENSOR_TYPE_CPU_USAGE) {
+                       } else if (s->type & SENSOR_TYPE_PERCENT) {
                                min = 0;
                                max = get_max_value(enabled_sensors,
-                                                   SENSOR_TYPE_CPU_USAGE);
+                                                   SENSOR_TYPE_PERCENT);
                        } else {
                                min = mint;
                                max = maxt;
                        }
 
-                       draw_sensor_curve(s, cr,
-                                         min, max,
-                                         bt, et,
-                                         g_width, g_height,
-                                         g_xoff, g_yoff);
+                       if (is_smooth_curves_enabled)
+                               draw_sensor_smooth_curve(s, cr,
+                                                        min, max,
+                                                        bt, et,
+                                                        &info);
+                       else
+                               draw_sensor_curve(s, cr,
+                                                 min, max,
+                                                 bt, et,
+                                                 &info);
 
                        sensor_cur++;
                }
@@ -388,10 +584,27 @@ graph_update(struct psensor **sensors,
                                                  g_height / 2);
        }
 
+       draw_left_region(cr, &info);
+       draw_right_region(cr, &info);
+
+       /* draw min and max temp */
+       cairo_set_source_rgb(cr,
+                            info.theme_fg_color.red,
+                            info.theme_fg_color.green,
+                            info.theme_fg_color.blue);
+
+       cairo_move_to(cr, GRAPH_H_PADDING, te_max.height + GRAPH_V_PADDING);
+       cairo_show_text(cr, strmax);
+       free(strmax);
+
+       cairo_move_to(cr,
+                     GRAPH_H_PADDING, height - (te_min.height / 2) - g_yoff);
+       cairo_show_text(cr, strmin);
+       free(strmin);
+
        cr_pixmap = gdk_cairo_create(gtk_widget_get_window(w_graph));
 
        if (cr_pixmap) {
-
                if (config->alpha_channel_enabled)
                        cairo_set_operator(cr_pixmap, CAIRO_OPERATOR_SOURCE);
 
@@ -405,3 +618,15 @@ graph_update(struct psensor **sensors,
        cairo_surface_destroy(cst);
        cairo_destroy(cr);
 }
+
+int compute_values_max_length(struct config *c)
+{
+       int n, duration, interval;
+
+       duration = c->graph_monitoring_duration * 60;
+       interval = c->sensor_update_interval;
+
+       n = 3 + ceil((((double)duration) / interval) + 0.5) + 3;
+
+       return n;
+}
index 88d4e0e..7dae2c1 100644 (file)
 
 #include <gtk/gtk.h>
 
-#include "psensor.h"
-#include "cfg.h"
+#include <cfg.h>
+#include <psensor.h>
+
+extern bool is_smooth_curves_enabled;
 
 void graph_update(struct psensor **sensors,
-                 GtkWidget * w_graph,
+                 GtkWidget *w_graph,
                  struct config *config,
-                 GtkWidget * window);
+                 GtkWidget *window);
+
+/* Compute the number of measures which must be kept. */
+int compute_values_max_length(struct config *);
 
 #endif
index c7052b4..6bf03c3 100644 (file)
@@ -4,7 +4,6 @@ libpsensor_a_SOURCES = \
        amd.h\
        bool.h\
        color.h color.c\
-       cpu.h\
        hdd.h hdd_hddtemp.c\
        lmsensor.h lmsensor.c\
        measure.h measure.c \
@@ -37,7 +36,7 @@ libpsensor_a_SOURCES += amd.c
 endif
 
 if GTOP
-libpsensor_a_SOURCES += cpu.c
+libpsensor_a_SOURCES += pgtop2.c pgtop2.h
 LIBS += $(GTOP_LIBS)
 AM_CPPFLAGS += $(GTOP_CFLAGS)
 endif
@@ -48,7 +47,14 @@ LIBS += $(JSON_LIBS)
 AM_CPPFLAGS += $(JSON_CFLAGS)
 endif
 
+if LIBUDISKS2
+libpsensor_a_SOURCES += pudisks2.c pudisks2.h
+LIBS += $(LIBUDISKS2_LIBS)
+AM_CPPFLAGS += $(LIBUDISKS2_CFLAGS)
+endif
+
 EXTRA_DIST=$(libpsensor_a_SOURCES) \
        amd.c \
-       cpu.c \
-       nvidia.c
+       pgtop2.c pgtop2.h \
+       nvidia.c \
+       pudisks2.c pudisks2.h
index dc55547..3c9431c 100644 (file)
@@ -85,12 +85,15 @@ host_triplet = @host@
 @LIBATIADL_TRUE@am__append_5 = $(LIBATIADL_LIBS)
 @LIBATIADL_TRUE@am__append_6 = $(LIBATIADL_CFLAGS)
 @LIBATIADL_TRUE@am__append_7 = amd.c
-@GTOP_TRUE@am__append_8 = cpu.c
+@GTOP_TRUE@am__append_8 = pgtop2.c pgtop2.h
 @GTOP_TRUE@am__append_9 = $(GTOP_LIBS)
 @GTOP_TRUE@am__append_10 = $(GTOP_CFLAGS)
 @JSON_TRUE@am__append_11 = psensor_json.h psensor_json.c
 @JSON_TRUE@am__append_12 = $(JSON_LIBS)
 @JSON_TRUE@am__append_13 = $(JSON_CFLAGS)
+@LIBUDISKS2_TRUE@am__append_14 = pudisks2.c pudisks2.h
+@LIBUDISKS2_TRUE@am__append_15 = $(LIBUDISKS2_LIBS)
+@LIBUDISKS2_TRUE@am__append_16 = $(LIBUDISKS2_CFLAGS)
 subdir = src/lib
 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
        $(top_srcdir)/depcomp
@@ -114,23 +117,26 @@ am__v_AR_0 = @echo "  AR      " $@;
 am__v_AR_1 = 
 libpsensor_a_AR = $(AR) $(ARFLAGS)
 libpsensor_a_LIBADD =
-am__libpsensor_a_SOURCES_DIST = amd.h bool.h color.h color.c cpu.h \
-       hdd.h hdd_hddtemp.c lmsensor.h lmsensor.c measure.h measure.c \
+am__libpsensor_a_SOURCES_DIST = amd.h bool.h color.h color.c hdd.h \
+       hdd_hddtemp.c lmsensor.h lmsensor.c measure.h measure.c \
        nvidia.h plog.h plog.c pmutex.h pmutex.c psensor.h psensor.c \
        ptime.h ptime.c pio.h pio.c slog.c slog.h temperature.c \
-       temperature.h url.c url.h hdd_atasmart.c nvidia.c amd.c cpu.c \
-       psensor_json.h psensor_json.c
+       temperature.h url.c url.h hdd_atasmart.c nvidia.c amd.c \
+       pgtop2.c pgtop2.h psensor_json.h psensor_json.c pudisks2.c \
+       pudisks2.h
 @ATASMART_TRUE@am__objects_1 = hdd_atasmart.$(OBJEXT)
 @NVIDIA_TRUE@am__objects_2 = nvidia.$(OBJEXT)
 @LIBATIADL_TRUE@am__objects_3 = amd.$(OBJEXT)
-@GTOP_TRUE@am__objects_4 = cpu.$(OBJEXT)
+@GTOP_TRUE@am__objects_4 = pgtop2.$(OBJEXT)
 @JSON_TRUE@am__objects_5 = psensor_json.$(OBJEXT)
+@LIBUDISKS2_TRUE@am__objects_6 = pudisks2.$(OBJEXT)
 am_libpsensor_a_OBJECTS = color.$(OBJEXT) hdd_hddtemp.$(OBJEXT) \
        lmsensor.$(OBJEXT) measure.$(OBJEXT) plog.$(OBJEXT) \
        pmutex.$(OBJEXT) psensor.$(OBJEXT) ptime.$(OBJEXT) \
        pio.$(OBJEXT) slog.$(OBJEXT) temperature.$(OBJEXT) \
        url.$(OBJEXT) $(am__objects_1) $(am__objects_2) \
-       $(am__objects_3) $(am__objects_4) $(am__objects_5)
+       $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+       $(am__objects_6)
 libpsensor_a_OBJECTS = $(am_libpsensor_a_OBJECTS)
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -246,7 +252,9 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@ $(am__append_2) $(am__append_5) $(am__append_9) \
-       $(am__append_12)
+       $(am__append_12) $(am__append_15)
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
@@ -340,18 +348,20 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 noinst_LIBRARIES = libpsensor.a
-libpsensor_a_SOURCES = amd.h bool.h color.h color.c cpu.h hdd.h \
+libpsensor_a_SOURCES = amd.h bool.h color.h color.c hdd.h \
        hdd_hddtemp.c lmsensor.h lmsensor.c measure.h measure.c \
        nvidia.h plog.h plog.c pmutex.h pmutex.c psensor.h psensor.c \
        ptime.h ptime.c pio.h pio.c slog.c slog.h temperature.c \
        temperature.h url.c url.h $(am__append_1) $(am__append_4) \
-       $(am__append_7) $(am__append_8) $(am__append_11)
+       $(am__append_7) $(am__append_8) $(am__append_11) \
+       $(am__append_14)
 AM_CPPFLAGS = -Wall -Werror $(am__append_3) $(am__append_6) \
-       $(am__append_10) $(am__append_13)
+       $(am__append_10) $(am__append_13) $(am__append_16)
 EXTRA_DIST = $(libpsensor_a_SOURCES) \
        amd.c \
-       cpu.c \
-       nvidia.c
+       pgtop2.c pgtop2.h \
+       nvidia.c \
+       pudisks2.c pudisks2.h
 
 all: all-am
 
@@ -404,18 +414,19 @@ distclean-compile:
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/amd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdd_atasmart.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdd_hddtemp.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lmsensor.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/measure.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nvidia.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pgtop2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plog.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pmutex.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psensor.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psensor_json.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ptime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pudisks2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slog.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/temperature.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/url.Po@am__quote@
index e83f5f1..c2ec5eb 100644 (file)
@@ -34,7 +34,7 @@
 
 #include <adl_sdk.h>
 
-#include "psensor.h"
+#include <psensor.h>
 
 typedef int (*ADL_MAIN_CONTROL_CREATE)(ADL_MAIN_MALLOC_CALLBACK, int);
 typedef int (*ADL_MAIN_CONTROL_DESTROY)();
@@ -76,10 +76,11 @@ static double get_temp(struct psensor *sensor)
 
        v.iSize = sizeof(ADLTemperature);
        v.iTemperature = -273;
+
        if (ADL_OK == adl_od5_temperature_get(sensor->amd_id, 0, &v))
                return v.iTemperature/1000;
-       else
-               return UNKNOWN_DBL_VALUE;
+
+       return UNKNOWN_DBL_VALUE;
 }
 
 static double get_fanspeed(struct psensor *sensor)
@@ -89,10 +90,11 @@ static double get_fanspeed(struct psensor *sensor)
        v.iSize = sizeof(ADLFanSpeedValue);
        v.iSpeedType = ADL_DL_FANCTRL_SPEED_TYPE_RPM;
        v.iFanSpeed = -1;
+
        if (ADL_OK == adl_od5_fanspeed_get(sensor->amd_id, 0, &v))
                return v.iFanSpeed;
-       else
-               return UNKNOWN_DBL_VALUE;
+
+       return UNKNOWN_DBL_VALUE;
 }
 
 static double get_usage(struct psensor *sensor)
@@ -100,10 +102,11 @@ static double get_usage(struct psensor *sensor)
        ADLPMActivity v;
 
        v.iSize = sizeof(ADLPMActivity);
+
        if (ADL_OK == adl_od5_currentactivity_get(sensor->amd_id, &v))
                return v.iActivityPercent;
-       else
-               return UNKNOWN_DBL_VALUE;
+
+       return UNKNOWN_DBL_VALUE;
 }
 
 static struct psensor *create_sensor(int id, int type, int values_len)
@@ -130,7 +133,7 @@ static struct psensor *create_sensor(int id, int type, int values_len)
        /* GPU Usage (Activity/Load %) */
        case 2:
                sprintf(name, "AMD GPU%d Usage", id);
-               sensor_type |= SENSOR_TYPE_GPU | SENSOR_TYPE_USAGE;
+               sensor_type |= SENSOR_TYPE_GPU | SENSOR_TYPE_PERCENT;
                break;
        }
 
@@ -268,7 +271,7 @@ void amd_psensor_list_update(struct psensor **sensors)
                                psensor_set_current_value(s, get_temp(s));
                        else if (s->type & SENSOR_TYPE_RPM)
                                psensor_set_current_value(s, get_fanspeed(s));
-                       else if (s->type & SENSOR_TYPE_USAGE)
+                       else if (s->type & SENSOR_TYPE_PERCENT)
                                psensor_set_current_value(s, get_usage(s));
                }
 
@@ -277,28 +280,19 @@ void amd_psensor_list_update(struct psensor **sensors)
 }
 
 /* Entry point for AMD sensors */
-struct psensor * *
-amd_psensor_list_add(struct psensor **sensors, int values_len)
+void amd_psensor_list_append(struct psensor ***sensors, int values_len)
 {
        int i, j, n;
-       struct psensor **tmp, **ss, *s;
+       struct psensor *s;
 
        n = init();
 
-       ss = sensors;
        for (i = 0; i < n; i++)
                /* Each GPU Adapter has 3 sensors: temp, fan speed and usage */
                for (j = 0; j < 3; j++) {
                        s = create_sensor(i, j, values_len);
-                       tmp = psensor_list_add(ss, s);
-
-                       if (ss != tmp)
-                               free(ss);
-
-                       ss = tmp;
+                       psensor_list_append(sensors, s);
                }
-
-       return ss;
 }
 
 void amd_cleanup()
index acb234d..d7dde40 100644 (file)
 
 #include "psensor.h"
 
-/*
-  Updates temperatures of AMD sensors.
-*/
 void amd_psensor_list_update(struct psensor **sensors);
 
-/*
-  Adds AMD sensors to a given list of sensors.
-
-  Returns the new allocated list of sensors if sensors have been added
-  otherwise returns 'sensors'. The list is 'NULL' terminated.
- */
-struct psensor **amd_psensor_list_add(struct psensor **sensors,
-                                        int values_max_length);
+void amd_psensor_list_append(struct psensor ***sensors, int values_max_length);
 
 void amd_cleanup();
 
index 3aba0b6..c31360d 100644 (file)
@@ -25,6 +25,8 @@
 #include <stdbool.h>
 #else
 #define bool char
+#define true 1
+#define false 0
 #endif
 
 #endif
diff --git a/src/lib/cpu.c b/src/lib/cpu.c
deleted file mode 100644 (file)
index 9f26db9..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2010-2014 jeanfi@gmail.com
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-#include <locale.h>
-#include <libintl.h>
-#define _(str) gettext(str)
-
-#include <string.h>
-
-#include <glibtop/cpu.h>
-
-#include "cpu.h"
-
-static glibtop_cpu *cpu;
-static float last_used;
-static float last_total;
-
-struct psensor *create_cpu_usage_sensor(int measures_len)
-{
-       char *label;
-       int type;
-       char *id;
-       struct psensor *psensor;
-
-       id = strdup("cpu usage");
-       label = strdup("cpu usage");
-       type = SENSOR_TYPE_CPU_USAGE;
-
-       psensor = psensor_create(id,
-                                label,
-                                strdup(_("CPU")),
-                                type,
-                                measures_len);
-
-       return psensor;
-}
-
-struct psensor * *
-cpu_psensor_list_add(struct psensor **sensors, int measures_len)
-{
-       struct psensor *s;
-
-       s = create_cpu_usage_sensor(measures_len);
-
-       return psensor_list_add(sensors, s);
-}
-
-static double get_usage()
-{
-       unsigned long int used = 0;
-       unsigned long int dt;
-       double cpu_rate = UNKNOWN_DBL_VALUE;
-
-       if (!cpu)
-               cpu = malloc(sizeof(glibtop_cpu));
-
-       glibtop_get_cpu(cpu);
-
-       used = cpu->user + cpu->nice + cpu->sys;
-
-       dt = cpu->total - last_total;
-
-       if (dt)
-               cpu_rate = 100 * (used - last_used) / dt;
-
-       last_used = used;
-       last_total = cpu->total;
-
-       return cpu_rate;
-}
-
-void cpu_usage_sensor_update(struct psensor *s)
-{
-       psensor_set_current_value(s, get_usage());
-}
-
-void cpu_psensor_list_update(struct psensor **sensors)
-{
-       struct psensor **ss, *s;
-
-       ss = sensors;
-       while (*ss) {
-               s = *ss;
-
-               if (!(s->type & SENSOR_TYPE_REMOTE)
-                   && s->type == SENSOR_TYPE_CPU_USAGE)
-                       cpu_usage_sensor_update(s);
-
-               ss++;
-       }
-}
-
-void cpu_cleanup()
-{
-       if (cpu)
-               free(cpu);
-}
diff --git a/src/lib/cpu.h b/src/lib/cpu.h
deleted file mode 100644 (file)
index a1d7125..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2010-2014 jeanfi@gmail.com
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA
- */
-#ifndef _PSENSOR_CPU_H_
-#define _PSENSOR_CPU_H_
-
-#include "psensor.h"
-
-struct psensor *create_cpu_usage_sensor(int measures_len);
-
-void cpu_usage_sensor_update(struct psensor *);
-void cpu_psensor_list_update(struct psensor **);
-
-struct psensor **cpu_psensor_list_add(struct psensor **,
-                                     int values_max_len);
-
-void cpu_cleanup();
-
-#endif
index 6c79dbc..8d4c316 100644 (file)
 #include "psensor.h"
 
 #ifdef HAVE_ATASMART
-struct psensor **hdd_psensor_list_add(struct psensor **sensors,
-                                     int values_max_length);
-
-void hdd_psensor_list_update(struct psensor **sensors);
+void atasmart_psensor_list_append(struct psensor ***sensors, int values_length);
+void atasmart_psensor_list_update(struct psensor **sensors);
 #endif
 
-struct psensor **hddtemp_psensor_list_add(struct psensor **sensors,
-                                     int values_max_length);
-
+void hddtemp_psensor_list_append(struct psensor ***sensors, int values_length);
 void hddtemp_psensor_list_update(struct psensor **sensors);
 
 #endif
index f3e6619..0fd7d5d 100644 (file)
 #include <atasmart.h>
 #include <linux/fs.h>
 
-#include "pio.h"
-#include "hdd.h"
+#include <pio.h>
+#include <hdd.h>
 #include <plog.h>
 
+static const char *PROVIDER_NAME = "atasmart";
+
 static int filter_sd(const char *p)
 {
        return strlen(p) == 8 && !strncmp(p, "/dev/sd", 7);
@@ -72,43 +74,34 @@ static void analyze_disk(const char *dname)
        struct stat st;
        uint64_t size;
 
-       log_debug("analyze_disk(hdd_atasmart): %s", dname);
+       log_fct("Analyze %s", dname);
 
        f = open(dname, O_RDONLY|O_NOCTTY|O_NONBLOCK|O_CLOEXEC);
 
        if (f < 0) {
-               log_debug("analyze_disk(hdd_atasmart): Could not open file %s: %s",
-                         dname,
-                         strerror(errno));
+               log_fct("Could not open file %s: %s", dname, strerror(errno));
                goto fail;
        }
 
        if (fstat(f, &st) < 0) {
-               log_debug("analyze_disk(hdd_atasmart): fstat fails %s: %s",
-                         dname,
-                         strerror(errno));
+               log_fct("fstat fails %s: %s", dname, strerror(errno));
                goto fail;
        }
 
        if (!S_ISBLK(st.st_mode)) {
-               log_debug("analyze_disk(hdd_atasmart): !S_ISBLK fails %s",
-                         dname);
+               log_fct("!S_ISBLK fails %s", dname);
                goto fail;
        }
 
        size = (uint64_t)-1;
        /* So, it's a block device. Let's make sure the ioctls work */
        if (ioctl(f, BLKGETSIZE64, &size) < 0) {
-               log_debug("analyze_disk(hdd_atasmart): ioctl fails %s: %s",
-                         dname,
-                         strerror(errno));
+               log_fct("ioctl fails %s: %s", dname, strerror(errno));
                goto fail;
        }
 
        if (size <= 0 || size == (uint64_t) -1) {
-               log_debug("analyze_disk(hdd_atasmart): ioctl wrong size %s: %ld",
-                         dname,
-                         size);
+               log_fct("ioctl wrong size %s: %ld", dname, size);
                goto fail;
        }
 
@@ -116,40 +109,37 @@ static void analyze_disk(const char *dname)
        close(f);
 }
 
-struct psensor **hdd_psensor_list_add(struct psensor **sensors,
-                                     int values_max_length)
+void
+atasmart_psensor_list_append(struct psensor ***sensors, int values_max_length)
 {
        char **paths, **tmp, *id;
        SkDisk *disk;
-       struct psensor *sensor, **tmp_sensors, **result;
+       struct psensor *sensor;
 
-       log_debug("hdd_psensor_list_add(hdd_atasmart)");
+       log_fct_enter();
 
        paths = dir_list("/dev", filter_sd);
 
-       result = sensors;
        tmp = paths;
        while (*tmp) {
-               log_debug("hdd_psensor_list_add(hdd_atasmart) open %s", *tmp);
+               log_fct("Open %s", *tmp);
 
                if (!sk_disk_open(*tmp, &disk)) {
-                       id = malloc(strlen("hdd at") + strlen(*tmp) + 1);
-                       strcpy(id, "hdd at");
-                       strcat(id, *tmp);
+                       id = malloc(strlen(PROVIDER_NAME)
+                                   + 1
+                                   + strlen(*tmp)
+                                   + 1);
+                       sprintf(id, "%s %s", PROVIDER_NAME, *tmp);
 
                        sensor = create_sensor(id,
                                               *tmp,
                                               disk,
                                               values_max_length);
 
-                       tmp_sensors = psensor_list_add(result, sensor);
-
-                       if (result != sensors)
-                               free(result);
-
-                       result = tmp_sensors;
+                       psensor_list_append(sensors, sensor);
                } else {
-                       log_err(_("atasmart: sk_disk_open() failure: %s."),
+                       log_err(_("%s: sk_disk_open() failure: %s."),
+                               PROVIDER_NAME,
                                *tmp);
                        analyze_disk(*tmp);
                }
@@ -159,10 +149,10 @@ struct psensor **hdd_psensor_list_add(struct psensor **sensors,
 
        paths_free(paths);
 
-       return result;
+       log_fct_exit();
 }
 
-void hdd_psensor_list_update(struct psensor **sensors)
+void atasmart_psensor_list_update(struct psensor **sensors)
 {
        struct psensor **cur, *s;
        uint64_t kelvin;
@@ -183,9 +173,7 @@ void hdd_psensor_list_update(struct psensor **sensors)
                                if (!ret) {
                                        c = (kelvin - 273150) / 1000;
                                        psensor_set_current_value(s, c);
-                                       log_debug("hdd_psensor_list_update(hdd_atasmart): %s %.2f",
-                                                 s->id,
-                                                 c);
+                                       log_fct("%s %.2f", s->id, c);
                                }
                        }
                }
index 3e692f0..39c00c6 100644 (file)
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  * 02110-1301 USA
  */
+
+/* Part of the code in this file is based on GNOME sensors applet code
+ * hddtemp-plugin.c see http://sensors-applet.sourceforge.net/
+ */
+
 #include <locale.h>
 #include <libintl.h>
 #define _(str) gettext(str)
 
-/*
- * Following code is based on GNOME sensors applet code
- * hddtemp-plugin.c see http://sensors-applet.sourceforge.net/
- */
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
 #include <arpa/inet.h>
 #include <unistd.h>
 
-#include "hdd.h"
-#include "psensor.h"
+#include <hdd.h>
+#include <psensor.h>
 
-#define HDDTEMP_SERVER_IP_ADDRESS "127.0.0.1"
-#define HDDTEMP_PORT_NUMBER 7634
-#define HDDTEMP_OUTPUT_BUFFER_LENGTH 4048
+static const char *PROVIDER_NAME = "hddtemp";
+
+static const char *HDDTEMP_SERVER_IP_ADDRESS = "127.0.0.1";
+static const int HDDTEMP_PORT_NUMBER = 7634;
+static const int HDDTEMP_OUTPUT_BUFFER_LENGTH = 4048;
 
 struct hdd_info {
        char *name;
@@ -47,16 +50,16 @@ struct hdd_info {
 
 static char *fetch()
 {
-       int sockfd;
+       int sockfd, output_length;
        ssize_t n = 1;
-       int output_length = 0;
-       char *pc;
-       char *buffer;
+       char *pc, *buffer;
        struct sockaddr_in address;
 
+       output_length = 0;
+
        sockfd = socket(AF_INET, SOCK_STREAM, 0);
        if (sockfd == -1) {
-               log_err(_("hddtemp: failed to open socket."));
+               log_err(_("%s: failed to open socket."), PROVIDER_NAME);
                return NULL;
        }
 
@@ -69,7 +72,7 @@ static char *fetch()
        if (connect(sockfd,
                    (struct sockaddr *)&address,
                    (socklen_t) sizeof(address)) == -1) {
-               log_err(_("hddtemp: failed to open connection."));
+               log_err(_("%s: failed to open connection."), PROVIDER_NAME);
        } else {
                buffer = malloc(HDDTEMP_OUTPUT_BUFFER_LENGTH);
 
@@ -171,78 +174,89 @@ static char *next_hdd_info(char *string, struct hdd_info *info)
        return c;
 }
 
-struct psensor **hddtemp_psensor_list_add(struct psensor **sensors,
-                                         int values_max_length)
+void
+hddtemp_psensor_list_append(struct psensor ***sensors, int values_max_length)
 {
-       char *hddtemp_output = fetch();
-       char *c;
+       char *hddtemp_output, *c, *id;
        struct hdd_info info;
-       struct psensor **result;
+       struct psensor *sensor;
+
+       hddtemp_output = fetch();
 
        if (!hddtemp_output)
-               return sensors;
+               return;
 
        if (hddtemp_output[0] != '|') {
-               log_err(_("hddtemp: wrong string: %s."), hddtemp_output);
+               log_err(_("%s: wrong string: %s."),
+                       PROVIDER_NAME,
+                       hddtemp_output);
 
                free(hddtemp_output);
 
-               return sensors;
+               return;
        }
 
        c = hddtemp_output;
 
-       result = sensors;
-
        while (c && (c = next_hdd_info(c, &info))) {
-               struct psensor *sensor;
-               struct psensor **tmp_sensors;
-
-               char *id = malloc(strlen("hdd ") + strlen(info.name) + 1);
-               strcpy(id, "hdd ");
-               strcat(id, info.name);
+               id = malloc(strlen(PROVIDER_NAME) + 1 + strlen(info.name) + 1);
+               sprintf(id, "%s %s", PROVIDER_NAME, info.name);
 
                sensor = create_sensor(id, info.name, values_max_length);
 
-               tmp_sensors = psensor_list_add(result, sensor);
-
-               if (result != sensors)
-                       free(result);
-
-               result = tmp_sensors;
+               psensor_list_append(sensors, sensor);
        }
 
        free(hddtemp_output);
-
-       return result;
 }
 
 static void update(struct psensor **sensors, struct hdd_info *info)
 {
-       struct psensor **sensor_cur = sensors;
+       while (*sensors) {
+               if (!((*sensors)->type & SENSOR_TYPE_REMOTE)
+                   && (*sensors)->type & SENSOR_TYPE_HDDTEMP
+                   && !strcmp((*sensors)->id + 8, info->name))
+                       psensor_set_current_value(*sensors,
+                                                 (double)info->temp);
+
+               sensors++;
+       }
+}
+
+static bool contains_hddtemp_sensor(struct psensor **sensors)
+{
+       struct psensor *s;
 
-       while (*sensor_cur) {
-               if (!((*sensor_cur)->type & SENSOR_TYPE_REMOTE)
-                   && (*sensor_cur)->type & SENSOR_TYPE_HDDTEMP
-                   && !strcmp((*sensor_cur)->id + 4, info->name))
-                       psensor_set_current_value(*sensor_cur,
-                                                 (float)info->temp);
+       if (!sensors)
+               return false;
 
-               sensor_cur++;
+       while (*sensors) {
+               s = *sensors;
+               if (!(s->type & SENSOR_TYPE_REMOTE)
+                    && (s->type & SENSOR_TYPE_HDDTEMP))
+                       return true;
+               sensors++;
        }
+
+       return false;
 }
 
 void hddtemp_psensor_list_update(struct psensor **sensors)
 {
-       char *hddtemp_output = fetch();
+       char *hddtemp_output;
+
+       if (!contains_hddtemp_sensor(sensors))
+               return;
+
+       hddtemp_output = fetch();
 
        if (!hddtemp_output)
                return;
 
        if (hddtemp_output[0] == '|') {
-
                char *c = hddtemp_output;
                struct hdd_info info;
+
                info.name = NULL;
                info.temp = 0;
 
@@ -253,7 +267,9 @@ void hddtemp_psensor_list_update(struct psensor **sensors)
                        free(info.name);
                }
        } else {
-               log_err(_("hddtemp: wrong string: %s."), hddtemp_output);
+               log_err(_("%s: wrong string: %s."),
+                       PROVIDER_NAME,
+                       hddtemp_output);
        }
 
        free(hddtemp_output);
index 1708f18..baa97ef 100644 (file)
 #include <sensors/sensors.h>
 #include <sensors/error.h>
 
-#include "psensor.h"
+#include <psensor.h>
 
 static int init_done;
 
+static const char *PROVIDER_NAME = "lmsensor";
+
 static double get_value(const sensors_chip_name *name,
                        const sensors_subfeature *sub)
 {
@@ -39,8 +41,10 @@ static double get_value(const sensors_chip_name *name,
 
        err = sensors_get_value(name, sub->number, &val);
        if (err) {
-               log_err(_("lmsensor: cannot get value of subfeature %s: %s."),
-                       sub->name, sensors_strerror(err));
+               log_err(_("%s: Cannot get value of subfeature %s: %s."),
+                       PROVIDER_NAME,
+                       sub->name,
+                       sensors_strerror(err));
                val = UNKNOWN_DBL_VALUE;
        }
        return val;
@@ -48,17 +52,22 @@ static double get_value(const sensors_chip_name *name,
 
 static double get_temp_input(struct psensor *sensor)
 {
-       const sensors_chip_name *chip = sensor->iname;
-       const sensors_feature *feature = sensor->feature;
-
        const sensors_subfeature *sf;
 
-       sf = sensors_get_subfeature(chip,
-                                   feature, SENSORS_SUBFEATURE_TEMP_INPUT);
+       const sensors_chip_name *chip;
+
+       const sensors_feature *feature;
+
+       chip = sensor->iname;
+       feature = sensor->feature;
+
+       sf = sensors_get_subfeature(sensor->iname,
+                                   feature,
+                                   SENSORS_SUBFEATURE_TEMP_INPUT);
        if (sf)
                return get_value(chip, sf);
-       else
-               return UNKNOWN_DBL_VALUE;
+
+       return UNKNOWN_DBL_VALUE;
 }
 
 static double get_fan_input(struct psensor *sensor)
@@ -69,33 +78,39 @@ static double get_fan_input(struct psensor *sensor)
        const sensors_subfeature *sf;
 
        sf = sensors_get_subfeature(chip,
-                                   feature, SENSORS_SUBFEATURE_FAN_INPUT);
+                                   feature,
+                                   SENSORS_SUBFEATURE_FAN_INPUT);
+
        if (sf)
                return get_value(chip, sf);
-       else
-               return UNKNOWN_DBL_VALUE;
+
+       return UNKNOWN_DBL_VALUE;
 }
 
 void lmsensor_psensor_list_update(struct psensor **sensors)
 {
-       struct psensor **s_ptr = sensors;
+       struct psensor *s;
+       double v;
 
        if (!init_done)
-               return ;
+               return;
 
-       while (*s_ptr) {
-               struct psensor *s = *s_ptr;
+       while (*sensors) {
+               s = *sensors;
 
                if (!(s->type & SENSOR_TYPE_REMOTE)
                    && s->type & SENSOR_TYPE_LMSENSOR) {
+
                        if (s->type & SENSOR_TYPE_TEMP)
-                               psensor_set_current_value(s,
-                                                         get_temp_input(s));
-                       else if (s->type & SENSOR_TYPE_RPM)
-                               psensor_set_current_value(s, get_fan_input(s));
+                               v = get_temp_input(s);
+                       else /* s->type & SENSOR_TYPE_RPM */
+                               v = get_fan_input(s);
+
+                       if (v != UNKNOWN_DBL_VALUE)
+                               psensor_set_current_value(s, v);
                }
 
-               s_ptr++;
+               sensors++;
        }
 }
 
@@ -119,8 +134,7 @@ lmsensor_psensor_create(const sensors_chip_name *chip,
        } else if (feature->type == SENSORS_FEATURE_FAN) {
                fault_subfeature = SENSORS_SUBFEATURE_FAN_FAULT;
        } else {
-               log_err(_(
-"lmsensor: lmsensor_psensor_create failure: wrong feature type."));
+               log_err(_("%s: Wrong feature type."), PROVIDER_NAME);
                return NULL;
        }
 
@@ -140,9 +154,13 @@ lmsensor_psensor_create(const sensors_chip_name *chip,
        else
                return NULL;
 
-       id = malloc(strlen("lmsensor ") + 1 + strlen(name) + 1 + strlen(label) +
-                   1);
-       sprintf(id, "lmsensor %s %s", name, label);
+       id = malloc(strlen(PROVIDER_NAME)
+                   + 1
+                   + strlen(name)
+                   + 1
+                   + strlen(label)
+                   + 1);
+       sprintf(id, "%s %s %s", PROVIDER_NAME, name, label);
 
        if (!strcmp(chip->prefix, "coretemp"))
                cname = strdup(_("Intel CPU"));
@@ -154,6 +172,8 @@ lmsensor_psensor_create(const sensors_chip_name *chip,
                cname = strdup(_("NVIDIA GPU"));
        else if (!strcmp(chip->prefix, "via-cputemp"))
                cname = strdup(_("VIA CPU"));
+       else if (!strcmp(chip->prefix, "acpitz"))
+               cname = strdup(_("ACPI"));
        else
                cname = strdup(chip->prefix);
 
@@ -171,56 +191,50 @@ lmsensor_psensor_create(const sensors_chip_name *chip,
        return psensor;
 }
 
-struct psensor **lmsensor_psensor_list_add(struct psensor **sensors,
-                                          int vn)
+void lmsensor_init()
+{
+       int err;
+
+       err = sensors_init(NULL);
+
+       if (err) {
+               log_err(_("%s: initialization failure: %s."),
+                       PROVIDER_NAME,
+                       sensors_strerror(err));
+               init_done = 0;
+       } else {
+               init_done = 1;
+       }
+}
+
+void lmsensor_psensor_list_append(struct psensor ***sensors, int vn)
 {
        const sensors_chip_name *chip;
-       int chip_nr = 0;
-       struct psensor **tmp, **result;
+       int chip_nr, i;
        const sensors_feature *feature;
        struct psensor *s;
-       int i;
 
        if (!init_done)
-               return NULL;
+               lmsensor_init();
+
+       if (!init_done)
+               return;
 
-       result = sensors;
+       chip_nr = 0;
        while ((chip = sensors_get_detected_chips(NULL, &chip_nr))) {
 
                i = 0;
                while ((feature = sensors_get_features(chip, &i))) {
-
                        if (feature->type == SENSORS_FEATURE_TEMP
                            || feature->type == SENSORS_FEATURE_FAN) {
 
                                s = lmsensor_psensor_create(chip, feature, vn);
 
-                               if (s) {
-                                       tmp = psensor_list_add(result, s);
-
-                                       if (tmp != sensors)
-                                               free(result);
-
-                                       result = tmp;
-                               }
+                               if (s)
+                                       psensor_list_append(sensors, s);
                        }
                }
        }
-
-       return result;
-}
-
-void lmsensor_init()
-{
-       int err = sensors_init(NULL);
-
-       if (err) {
-               log_err(_("lmsensor: initialization failure: %s."),
-                       sensors_strerror(err));
-               init_done = 0;
-       } else {
-               init_done = 1;
-       }
 }
 
 void lmsensor_cleanup()
index 10e7398..341863d 100644 (file)
 #ifndef _PSENSOR_LMSENSOR_H_
 #define _PSENSOR_LMSENSOR_H_
 
-#include <sensors/sensors.h>
-
 void lmsensor_psensor_list_update(struct psensor **sensors);
 
-/*
-  Adds sensors to a given list of sensors.
-
-  Returns the new allocated list of sensors if sensors have been added
-  otherwise returns 'sensors'. The list is 'NULL' terminated.
- */
-struct psensor **lmsensor_psensor_list_add(struct psensor **sensors,
-                                          int values_max_length);
+void lmsensor_psensor_list_append(struct psensor ***sensors, int values_length);
 
-void lmsensor_init();
 void lmsensor_cleanup();
 
 #endif
index 4f411e9..b77517b 100644 (file)
@@ -20,6 +20,8 @@
 #include <libintl.h>
 #define _(str) gettext(str)
 
+#include <limits.h>
+#include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <NVCtrl/NVCtrl.h>
 #include <NVCtrl/NVCtrlLib.h>
 
-#include "psensor.h"
+#include <psensor.h>
 
 Display *display;
 
-/* Returns the temperature (Celsius) of a NVIDIA GPU. */
-static int get_temp(struct psensor *sensor)
+static const char *PROVIDER_NAME = "nvctrl";
+
+static char *get_product_name(int id, int type)
 {
-       int temp;
+       char *name;
        Bool res;
 
-       res = XNVCTRLQueryTargetAttribute(display,
-                                         NV_CTRL_TARGET_TYPE_GPU,
-                                         sensor->nvidia_id,
-                                         0,
-                                         NV_CTRL_GPU_CORE_TEMPERATURE,
-                                         &temp);
+       if (type & SENSOR_TYPE_FAN)
+               return strdup("NVIDIA");
+
+       res = XNVCTRLQueryTargetStringAttribute(display,
+                                               NV_CTRL_TARGET_TYPE_GPU,
+                                               id,
+                                               0,
+                                               NV_CTRL_STRING_PRODUCT_NAME,
+                                               &name);
+       if (res == True) {
+               if (strcmp(name, "Unknown"))
+                       return name;
+
+               log_err(_("%s: Unknown NVIDIA product name for GPU %d"),
+                       PROVIDER_NAME,
+                       id);
+               free(name);
+       } else {
+               log_err(_("%s: "
+                         "Failed to retrieve NVIDIA product name for GPU %d"),
+                       PROVIDER_NAME,
+                       id);
+       }
+
+       return strdup("NVIDIA");
+}
+
+static double get_att(int target, int id, int att)
+{
+       Bool res;
+       int temp;
+
+       res = XNVCTRLQueryTargetAttribute(display, target, id, 0, att, &temp);
 
        if (res == True)
                return temp;
 
-       log_debug(_("NVIDIA proprietary driver not used or cannot "
-                   "retrieve NVIDIA GPU temperature."));
-       return 0;
+       return UNKNOWN_DBL_VALUE;
+}
+
+static double get_usage_att(char *atts, const char *att)
+{
+       char *c, *key, *strv, *s;
+       size_t n;
+       double v;
+
+       c = atts;
+
+       v = UNKNOWN_DBL_VALUE;
+       while (*c) {
+               s = c;
+               n = 0;
+               while (*c) {
+                       if (*c == '=')
+                               break;
+                       c++;
+                       n++;
+               }
+
+               key = strndup(s, n);
+
+               if (*c)
+                       c++;
+
+               n = 0;
+               s = c;
+               while (*c) {
+                       if (*c == ',')
+                               break;
+                       c++;
+                       n++;
+               }
+
+               strv = strndup(s, n);
+               if (!strcmp(key, att))
+                       v = atoi(strv);
+
+               free(key);
+               free(strv);
+
+               if (v != UNKNOWN_DBL_VALUE)
+                       break;
+
+               while (*c && (*c == ' ' || *c == ','))
+                       c++;
+       }
+
+       return v;
+}
+
+static const char *get_nvidia_type_str(int type)
+{
+       if (type & SENSOR_TYPE_GRAPHICS)
+               return "graphics";
+
+       if (type & SENSOR_TYPE_VIDEO)
+               return "video";
+
+       if (type & SENSOR_TYPE_MEMORY)
+               return "memory";
+
+       if (type & SENSOR_TYPE_PCIE)
+               return "PCIe";
+
+       if (type & SENSOR_TYPE_AMBIENT)
+               return "ambient";
+
+       if (type & SENSOR_TYPE_TEMP)
+               return "temp";
+
+       if (type & SENSOR_TYPE_FAN) {
+               if (type & SENSOR_TYPE_RPM)
+                       return "fan rpm";
+
+               return "fan level";
+       }
+
+       return "unknown";
+}
+
+static double get_usage(int id, int type)
+{
+       const char *stype;
+       char *atts;
+       double v;
+       Bool res;
+
+       stype = get_nvidia_type_str(type);
+
+       if (!stype)
+               return UNKNOWN_DBL_VALUE;
+
+       res = XNVCTRLQueryTargetStringAttribute(display,
+                                               NV_CTRL_TARGET_TYPE_GPU,
+                                               id,
+                                               0,
+                                               NV_CTRL_STRING_GPU_UTILIZATION,
+                                               &atts);
+
+       if (res != True)
+               return UNKNOWN_DBL_VALUE;
+
+       v = get_usage_att(atts, stype);
+
+       free(atts);
+
+       return v;
+}
+
+static double get_value(int id, int type)
+{
+       int att;
+
+       if (type & SENSOR_TYPE_TEMP) {
+               if (type & SENSOR_TYPE_AMBIENT)
+                       att = NV_CTRL_AMBIENT_TEMPERATURE;
+               else
+                       att = NV_CTRL_GPU_CORE_TEMPERATURE;
+
+               return get_att(NV_CTRL_TARGET_TYPE_GPU, id, att);
+       } else if (type & SENSOR_TYPE_FAN) {
+               if (type & SENSOR_TYPE_RPM)
+                       return get_att(NV_CTRL_TARGET_TYPE_COOLER,
+                                      id,
+                                      NV_CTRL_THERMAL_COOLER_SPEED);
+               else /* SENSOR_TYPE_PERCENT */
+                       return get_att(NV_CTRL_TARGET_TYPE_COOLER,
+                                      id,
+                                      NV_CTRL_THERMAL_COOLER_LEVEL);
+       } else { /* SENSOR_TYPE_PERCENT */
+               return get_usage(id, type);
+       }
+}
+
+static void update(struct psensor *sensor)
+{
+       double v;
+
+       v = get_value(sensor->nvidia_id, sensor->type);
+
+       if (v == UNKNOWN_DBL_VALUE)
+               log_err(_("%s: Failed to retrieve measure of type %x "
+                         "for NVIDIA GPU %d"),
+                       PROVIDER_NAME,
+                       sensor->type,
+                       sensor->nvidia_id);
+       psensor_set_current_value(sensor, v);
+}
+
+static int check_sensor(int id, int type)
+{
+       return get_value(id, type) != UNKNOWN_DBL_VALUE;
 }
 
-static struct psensor *create_sensor(int id, int values_len)
+static char *i2str(int i)
 {
-       char name[200];
-       char *sid;
+       char *str;
+       size_t n;
+
+       /* second +1 to avoid issue about the conversion of a double
+        * to a lower int */
+       n = 1 + (ceil(log10(INT_MAX)) + 1) + 1;
+
+       str = malloc(n);
+       snprintf(str, n, "%d", i);
+
+       return str;
+}
+
+static struct psensor *create_nvidia_sensor(int id, int subtype, int value_len)
+{
+       char *pname, *name, *strnid, *sid;
+       const char *stype;
+       int type;
+       size_t n;
        struct psensor *s;
-       int t;
 
-       sprintf(name, "GPU%d", id);
+       type = SENSOR_TYPE_NVCTRL | subtype;
+
+       if (!check_sensor(id, type))
+               return NULL;
 
-       sid = malloc(strlen("NVIDIA") + 1 + strlen(name) + 1);
-       sprintf(sid, "NVIDIA %s", name);
+       pname = get_product_name(id, type);
+       strnid = i2str(id);
+       stype = get_nvidia_type_str(type);
 
-       t = SENSOR_TYPE_NVCTRL | SENSOR_TYPE_GPU | SENSOR_TYPE_TEMP;
+       n = strlen(pname) + 1 + strlen(strnid) + 1 + strlen(stype) + 1;
+       name = malloc(n);
+       sprintf(name, "%s %s %s", pname, strnid, stype);
 
-       s = psensor_create(sid,
-                          strdup(name),
-                          strdup(_("NVIDIA GPU")),
-                          t,
-                          values_len);
+       sid = malloc(strlen(PROVIDER_NAME) + 1 + strlen(name) + 1);
+       sprintf(sid, "%s %s", PROVIDER_NAME, name);
 
+       s = psensor_create(sid, name, pname, type, value_len);
        s->nvidia_id = id;
 
+       free(strnid);
+
        return s;
 }
 
-/*
-  Opens connection to X server and returns the number
-  of NVIDIA GPUs.
-
-  Return 0 if no NVIDIA gpus or cannot get information.
-*/
 static int init()
 {
-       int evt, err, n;
+       int evt, err;
 
        display = XOpenDisplay(NULL);
 
        if (!display) {
-               log_err(_("Cannot open connection to X11 server."));
+               log_err(_("%s: Cannot open connection to X11 server."),
+                       PROVIDER_NAME);
                return 0;
        }
 
-       if (XNVCTRLQueryExtension(display, &evt, &err) &&
-           XNVCTRLQueryTargetCount(display, NV_CTRL_TARGET_TYPE_GPU, &n))
-               return n;
+       if (XNVCTRLQueryExtension(display, &evt, &err))
+               return 1;
 
-       log_err(_("Failed to retrieve NVIDIA information."));
+       log_err(_("%s: Failed to retrieve NVIDIA information."),
+               PROVIDER_NAME);
 
        return 0;
 }
 
 void nvidia_psensor_list_update(struct psensor **sensors)
 {
-       struct psensor **ss, *s;
+       struct psensor *s;
 
-       ss = sensors;
-       while (*ss) {
-               s = *ss;
+       while (*sensors) {
+               s = *sensors;
 
-               if (s->type & SENSOR_TYPE_NVCTRL)
-                       psensor_set_current_value(s, get_temp(s));
+               if (!(s->type & SENSOR_TYPE_REMOTE)
+                   && s->type & SENSOR_TYPE_NVCTRL)
+                       update(s);
 
-               ss++;
+               sensors++;
        }
 }
 
-struct psensor **nvidia_psensor_list_add(struct psensor **sensors,
-                                        int values_len)
+static void add(struct psensor ***sensors, int id, int type, int values_len)
 {
-       int i, n;
-       struct psensor **tmp, **ss, *s;
-
-       n = init();
-
-       ss = sensors;
-       for (i = 0; i < n; i++) {
-               s = create_sensor(i, values_len);
+       struct psensor *s;
 
-               tmp = psensor_list_add(ss, s);
+       s = create_nvidia_sensor(id, type, values_len);
 
-               if (ss != tmp)
-                       free(ss);
+       if (s)
+               psensor_list_append(sensors, s);
+}
 
-               ss = tmp;
+void nvidia_psensor_list_append(struct psensor ***ss, int values_len)
+{
+       int i, n, utype;
+       Bool ret;
+
+       if (!init())
+               return;
+
+       ret = XNVCTRLQueryTargetCount(display, NV_CTRL_TARGET_TYPE_GPU, &n);
+       if (ret == True) {
+               for (i = 0; i < n; i++) {
+                       add(ss,
+                           i,
+                           SENSOR_TYPE_GPU | SENSOR_TYPE_TEMP,
+                           values_len);
+
+                       utype = SENSOR_TYPE_GPU | SENSOR_TYPE_PERCENT;
+                       add(ss, i, utype | SENSOR_TYPE_AMBIENT, values_len);
+                       add(ss, i, utype | SENSOR_TYPE_GRAPHICS, values_len);
+                       add(ss, i, utype | SENSOR_TYPE_VIDEO, values_len);
+                       add(ss, i, utype | SENSOR_TYPE_MEMORY, values_len);
+                       add(ss, i, utype | SENSOR_TYPE_PCIE, values_len);
+               }
        }
 
-       return ss;
+       ret = XNVCTRLQueryTargetCount(display, NV_CTRL_TARGET_TYPE_COOLER, &n);
+       if (ret == True) {
+               log_fct("%s: Number of fans: %d", PROVIDER_NAME, n);
+               for (i = 0; i < n; i++) {
+                       utype = SENSOR_TYPE_FAN | SENSOR_TYPE_RPM;
+                       if (check_sensor(i, utype))
+                               add(ss, i, utype, values_len);
+
+                       utype = SENSOR_TYPE_FAN | SENSOR_TYPE_PERCENT;
+                       if (check_sensor(i, utype))
+                               add(ss, i, utype, values_len);
+               }
+       } else {
+               log_err(_("%s: Failed to retrieve number of fans."),
+                       PROVIDER_NAME);
+       }
 }
 
 void nvidia_cleanup()
index 9c1089c..a94d72e 100644 (file)
 #ifndef _PSENSOR_NVIDIA_H_
 #define _PSENSOR_NVIDIA_H_
 
-#include "psensor.h"
+#include <psensor.h>
 
-/*
-  Updates temperatures of NVidia sensors.
-*/
 void nvidia_psensor_list_update(struct psensor **sensors);
 
-/*
-  Adds NVIDIA sensors to a given list of sensors.
-
-  Returns the new allocated list of sensors if sensors have been added
-  otherwise returns 'sensors'. The list is 'NULL' terminated.
- */
-struct psensor **nvidia_psensor_list_add(struct psensor **sensors,
-                                        int values_max_length);
+void nvidia_psensor_list_append(struct psensor ***sensors, int values_length);
 
 void nvidia_cleanup();
 
diff --git a/src/lib/pgtop2.c b/src/lib/pgtop2.c
new file mode 100644 (file)
index 0000000..a25c705
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2010-2014 jeanfi@gmail.com
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+#include <locale.h>
+#include <libintl.h>
+#define _(str) gettext(str)
+
+#include <string.h>
+
+#include <glibtop/cpu.h>
+#include <glibtop/mem.h>
+
+#include <pgtop2.h>
+
+static float last_used;
+static float last_total;
+
+static const char *PROVIDER_NAME = "gtop2";
+
+struct psensor *create_cpu_usage_sensor(int measures_len)
+{
+       char *label, *id;
+       int type;
+       struct psensor *psensor;
+
+       id = g_strdup_printf("%s cpu usage", PROVIDER_NAME);
+       label = strdup(_("CPU usage"));
+       type = SENSOR_TYPE_GTOP | SENSOR_TYPE_CPU_USAGE;
+
+       psensor = psensor_create(id,
+                                label,
+                                strdup(_("CPU")),
+                                type,
+                                measures_len);
+
+       return psensor;
+}
+
+static struct psensor *create_mem_free_sensor(int measures_len)
+{
+       char *id;
+       int type;
+
+       id = g_strdup_printf("%s mem free", PROVIDER_NAME);
+       type = SENSOR_TYPE_GTOP | SENSOR_TYPE_MEMORY | SENSOR_TYPE_PERCENT;
+
+       return psensor_create(id,
+                             strdup(_("free memory")),
+                             strdup(_("memory")),
+                             type,
+                             measures_len);
+}
+
+static double get_usage()
+{
+       glibtop_cpu cpu;
+       unsigned long int used, dt;
+       double cpu_rate;
+
+       glibtop_get_cpu(&cpu);
+
+       used = cpu.user + cpu.nice + cpu.sys;
+
+       dt = cpu.total - last_total;
+
+       if (dt)
+               cpu_rate = 100.0 * (used - last_used) / dt;
+       else
+               cpu_rate = UNKNOWN_DBL_VALUE;
+
+       last_used = used;
+       last_total = cpu.total;
+
+       return cpu_rate;
+}
+
+static double get_mem_free()
+{
+       glibtop_mem mem;
+       double v;
+
+       glibtop_get_mem(&mem);
+       v = ((double)mem.free) * 100.0 / mem.total;
+
+       return v;
+}
+
+void gtop2_psensor_list_append(struct psensor ***sensors, int measures_len)
+{
+       psensor_list_append(sensors, create_cpu_usage_sensor(measures_len));
+       psensor_list_append(sensors, create_mem_free_sensor(measures_len));
+}
+
+void cpu_usage_sensor_update(struct psensor *s)
+{
+       double v;
+
+       v = get_usage();
+
+       if (v != UNKNOWN_DBL_VALUE)
+               psensor_set_current_value(s, v);
+}
+
+void mem_free_sensor_update(struct psensor *s)
+{
+       double v;
+
+       v = get_mem_free();
+
+       if (v != UNKNOWN_DBL_VALUE)
+               psensor_set_current_value(s, v);
+}
+
+void gtop2_psensor_list_update(struct psensor **sensors)
+{
+       struct psensor *s;
+
+       while (*sensors) {
+               s = *sensors;
+
+               if (!(s->type & SENSOR_TYPE_REMOTE)
+                   && s->type & SENSOR_TYPE_GTOP) {
+                       if (s->type & SENSOR_TYPE_CPU)
+                               cpu_usage_sensor_update(s);
+                       else if (s->type & SENSOR_TYPE_MEMORY)
+                               mem_free_sensor_update(s);
+               }
+
+               sensors++;
+       }
+}
diff --git a/src/lib/pgtop2.h b/src/lib/pgtop2.h
new file mode 100644 (file)
index 0000000..c7c3968
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2010-2014 jeanfi@gmail.com
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+#ifndef _PSENSOR_PGTOP2_H_
+#define _PSENSOR_PGTOP2_H_
+
+#include <psensor.h>
+
+struct psensor *create_cpu_usage_sensor(int measures_len);
+void cpu_usage_sensor_update(struct psensor *);
+
+void gtop2_psensor_list_update(struct psensor **);
+
+void gtop2_psensor_list_append(struct psensor ***sensors, int values_max_len);
+
+#endif
index f6ebc73..217349b 100644 (file)
@@ -164,6 +164,7 @@ char *file_get_content(const char *fpath)
 
        } else {
                FILE *fp = fopen(fpath, "rb");
+
                if (fp) {
                        page = malloc(size + 1);
                        if (!page || size != fread(page, 1, size, fp)) {
index 21427a9..48c6009 100644 (file)
@@ -46,7 +46,7 @@ void log_open(const char *path)
 void log_close()
 {
        if (!file)
-               return ;
+               return;
 
        fclose(file);
 
@@ -62,7 +62,7 @@ static void vlogf(int lvl, const char *fct, const char *fmt, va_list ap)
        FILE *stdf;
 
        if (lvl > LOG_INFO && (!file || lvl > log_level))
-               return ;
+               return;
 
        vsnprintf(buffer, LOG_BUFFER, fmt, ap);
        buffer[LOG_BUFFER] = '\0';
@@ -86,7 +86,7 @@ static void vlogf(int lvl, const char *fct, const char *fmt, va_list ap)
 
        t = get_current_ISO8601_time();
        if (!t)
-               return ;
+               return;
 
        if (file && lvl <= log_level) {
                if (fct)
@@ -129,7 +129,7 @@ void log_debug(const char *fmt, ...)
        va_list ap;
 
        if (log_level < LOG_DEBUG)
-               return ;
+               return;
 
        va_start(ap, fmt);
        vlogf(LOG_DEBUG, NULL, fmt, ap);
index 9f063d0..b9da81d 100644 (file)
 
 #include <hdd.h>
 #include <psensor.h>
-#include <lmsensor.h>
 #include <temperature.h>
 
-#ifdef HAVE_GTOP
-#include "cpu.h"
-#endif
-
 struct psensor *psensor_create(char *id,
                               char *name,
                               char *chip,
@@ -68,6 +63,9 @@ struct psensor *psensor_create(char *id,
        psensor->graph_enabled = 1;
        psensor->appindicator_enabled = 0;
 
+       psensor->provider_data = NULL;
+       psensor->provider_data_free_fct = &free;
+
        return psensor;
 }
 
@@ -82,6 +80,7 @@ void psensor_values_resize(struct psensor *s, int new_size)
 
        if (cur_ms) {
                int i;
+
                for (i = 0; i < new_size - 1 && i < cur_size - 1; i++)
                        measure_copy(&cur_ms[cur_size - i - 1],
                                     &new_ms[new_size - i - 1]);
@@ -93,26 +92,30 @@ void psensor_values_resize(struct psensor *s, int new_size)
        s->measures = new_ms;
 }
 
-void psensor_free(struct psensor *sensor)
+void psensor_free(struct psensor *s)
 {
-       if (sensor) {
-               log_debug("Cleanup %s", sensor->id);
+       if (!s)
+               return;
 
-               free(sensor->name);
-               free(sensor->id);
+       log_debug("Cleanup %s", s->id);
 
-               if (sensor->chip)
-                       free(sensor->chip);
+       free(s->name);
+       free(s->id);
 
-               if (sensor->color)
-                       free(sensor->color);
+       if (s->chip)
+               free(s->chip);
 
-               measures_free(sensor->measures);
+       if (s->color)
+               free(s->color);
 
-               free(sensor->url);
+       measures_free(s->measures);
 
-               free(sensor);
-       }
+       free(s->url);
+
+       if (s->provider_data && s->provider_data_free_fct)
+               s->provider_data_free_fct(s->provider_data);
+
+       free(s);
 }
 
 void psensor_list_free(struct psensor **sensors)
@@ -152,27 +155,12 @@ int psensor_list_size(struct psensor **sensors)
        return size;
 }
 
-int psensor_list_contains_type(struct psensor **sensors, unsigned int type)
-{
-       struct psensor **s;
-
-       if (!sensors)
-               return 0;
-
-       s = sensors;
-       while (*s) {
-               if ((*s)->type & type)
-                       return 1;
-               s++;
-       }
-
-       return 0;
-}
-
 struct psensor **psensor_list_add(struct psensor **sensors,
                                  struct psensor *sensor)
 {
-       int size = psensor_list_size(sensors);
+       int size;
+
+       size = psensor_list_size(sensors);
 
        struct psensor **result
            = malloc((size + 1 + 1) * sizeof(struct psensor *));
@@ -186,6 +174,22 @@ struct psensor **psensor_list_add(struct psensor **sensors,
        return result;
 }
 
+void psensor_list_append(struct psensor ***sensors, struct psensor *sensor)
+{
+       struct psensor **tmp;
+
+       if (!sensor)
+               return;
+
+       tmp = psensor_list_add(*sensors, sensor);
+
+       if (tmp != *sensors) {
+               free(*sensors);
+               *sensors = tmp;
+       }
+}
+
+
 struct psensor *psensor_list_get_by_id(struct psensor **sensors, const char *id)
 {
        struct psensor **sensors_cur = sensors;
@@ -205,11 +209,6 @@ int is_temp_type(unsigned int type)
        return type & SENSOR_TYPE_TEMP;
 }
 
-int is_fan_type(unsigned int type)
-{
-       return type & SENSOR_TYPE_FAN;
-}
-
 char *
 psensor_value_to_str(unsigned int type, double value, int use_celsius)
 {
@@ -334,6 +333,7 @@ double get_max_value(struct psensor **sensors, int type)
                if (sensor->type & type) {
                        int i;
                        double t;
+
                        for (i = 0; i < sensor->values_max_length; i++) {
                                t = sensor->measures[i].value;
 
@@ -392,47 +392,21 @@ double get_max_temp(struct psensor **sensors)
        return get_max_value(sensors, SENSOR_TYPE_TEMP);
 }
 
-struct psensor **get_all_sensors(int use_libatasmart, int values_max_length)
-{
-       struct psensor **psensors;
-       struct psensor **tmp_psensors;
-
-       psensors = lmsensor_psensor_list_add(NULL, values_max_length);
-
-       if (!use_libatasmart) {
-               tmp_psensors = hddtemp_psensor_list_add(psensors,
-                                                       values_max_length);
-               if (tmp_psensors != psensors) {
-                       free(psensors);
-                       psensors = tmp_psensors;
-               }
-       }
-#ifdef HAVE_ATASMART
-               else {
-                       tmp_psensors = hdd_psensor_list_add(psensors,
-                                                           values_max_length);
-                       if (tmp_psensors != psensors) {
-                               free(psensors);
-                               psensors = tmp_psensors;
-                       }
-               }
-#endif
-
-       if (!psensors) {        /* there is no detected sensors */
-               psensors = malloc(sizeof(struct psensor *));
-               *psensors = NULL;
-       }
-
-       return psensors;
-}
-
 const char *psensor_type_to_str(unsigned int type)
 {
        if (type & SENSOR_TYPE_NVCTRL) {
                if (type & SENSOR_TYPE_TEMP)
-                       return "NVIDIA GPU Temperature";
-               else
-                       return "NVIDIA GPU";
+                       return "Temperature";
+               else if (type & SENSOR_TYPE_GRAPHICS)
+                       return "Graphics usage";
+               else if (type & SENSOR_TYPE_VIDEO)
+                       return "Video usage";
+               else if (type & SENSOR_TYPE_MEMORY)
+                       return "Memory usage";
+               else if (type & SENSOR_TYPE_PCIE)
+                       return "PCIe usage";
+
+               return "NVIDIA GPU";
        }
 
        if (type & SENSOR_TYPE_ATIADL) {
@@ -440,8 +414,8 @@ const char *psensor_type_to_str(unsigned int type)
                        return "AMD GPU Temperature";
                else if (type & SENSOR_TYPE_RPM)
                        return "AMD GPU Fan Speed";
-               else /* type & SENSOR_TYPE_USAGE */
-                       return "AMD GPU Usage";
+               /*else type & SENSOR_TYPE_USAGE */
+               return "AMD GPU Usage";
        }
 
        if ((type & SENSOR_TYPE_HDD_TEMP) == SENSOR_TYPE_HDD_TEMP)
@@ -453,7 +427,7 @@ const char *psensor_type_to_str(unsigned int type)
        if (type & SENSOR_TYPE_TEMP)
                return "Temperature";
 
-       if (type & SENSOR_TYPE_FAN)
+       if (type & SENSOR_TYPE_RPM)
                return "Fan";
 
        if (type & SENSOR_TYPE_CPU)
@@ -462,6 +436,9 @@ const char *psensor_type_to_str(unsigned int type)
        if (type & SENSOR_TYPE_REMOTE)
                return "Remote";
 
+       if (type & SENSOR_TYPE_MEMORY)
+               return "Memory";
+
        return "N/A";
 }
 
@@ -471,32 +448,13 @@ const char *psensor_type_to_unit_str(unsigned int type, int use_celsius)
        if (is_temp_type(type)) {
                if (use_celsius)
                        return "\302\260C";
-               else
-                       return "\302\260F";
-       } else if (is_fan_type(type)) {
+               return "\302\260F";
+       } else if (type & SENSOR_TYPE_RPM) {
                return _("RPM");
-       } else if (type & SENSOR_TYPE_CPU_USAGE) {
+       } else if (type & SENSOR_TYPE_PERCENT) {
                return _("%");
-       } else {
-               return _("N/A");
        }
-}
-
-void psensor_list_update_measures(struct psensor **sensors)
-{
-       lmsensor_psensor_list_update(sensors);
-
-#ifdef HAVE_GTOP
-       cpu_psensor_list_update(sensors);
-#endif
-
-       if (psensor_list_contains_type(sensors, SENSOR_TYPE_HDDTEMP))
-               hddtemp_psensor_list_update(sensors);
-
-#ifdef HAVE_ATASMART
-       if (psensor_list_contains_type(sensors, SENSOR_TYPE_ATASMART))
-               hdd_psensor_list_update(sensors);
-#endif
+       return _("N/A");
 }
 
 void psensor_log_measures(struct psensor **sensors)
@@ -511,16 +469,6 @@ void psensor_log_measures(struct psensor **sensors)
                }
 }
 
-void psensor_init()
-{
-       lmsensor_init();
-}
-
-void psensor_cleanup()
-{
-       lmsensor_cleanup();
-}
-
 struct psensor **psensor_list_copy(struct psensor **sensors)
 {
        struct psensor **result;
index b7d73b4..cec6d0f 100644 (file)
@@ -35,7 +35,7 @@ enum psensor_type {
        /* type of sensor values */
        SENSOR_TYPE_TEMP = 0x00001,
        SENSOR_TYPE_RPM = 0x00002,
-       SENSOR_TYPE_USAGE = 0x00004,
+       SENSOR_TYPE_PERCENT = 0x00004,
 
        /* Whether the sensor is remote */
        SENSOR_TYPE_REMOTE = 0x00008,
@@ -47,6 +47,7 @@ enum psensor_type {
        SENSOR_TYPE_ATIADL = 0x00800,
        SENSOR_TYPE_ATASMART = 0x01000,
        SENSOR_TYPE_HDDTEMP = 0x02000,
+       SENSOR_TYPE_UDISKS2 = 0x800000,
 
        /* Type of HW component */
        SENSOR_TYPE_HDD = 0x04000,
@@ -54,9 +55,15 @@ enum psensor_type {
        SENSOR_TYPE_GPU = 0x10000,
        SENSOR_TYPE_FAN = 0x20000,
 
+       SENSOR_TYPE_GRAPHICS = 0x40000,
+       SENSOR_TYPE_VIDEO = 0x80000,
+       SENSOR_TYPE_PCIE = 0x100000,
+       SENSOR_TYPE_MEMORY = 0x200000,
+       SENSOR_TYPE_AMBIENT = 0x400000,
+
        /* Combinations */
        SENSOR_TYPE_HDD_TEMP = (SENSOR_TYPE_HDD | SENSOR_TYPE_TEMP),
-       SENSOR_TYPE_CPU_USAGE = (SENSOR_TYPE_CPU | SENSOR_TYPE_USAGE)
+       SENSOR_TYPE_CPU_USAGE = (SENSOR_TYPE_CPU | SENSOR_TYPE_PERCENT)
 };
 
 struct psensor {
@@ -71,13 +78,14 @@ struct psensor {
 
        /* lm-sensor */
        const sensors_chip_name *iname;
+
        const sensors_feature *feature;
 
        /* Maximum length of 'values' */
        int values_max_length;
 
        /* Last registered measures of the sensor.  Index 0 for the
-          oldest measure.  */
+        * oldest measure.  */
        struct measure *measures;
 
        /* Color of the sensor used for the graph */
@@ -104,7 +112,7 @@ struct psensor {
        /* Whether an alarm is raised for this sensor */
        unsigned int alarm_raised;
 
-       void (*cb_alarm_raised) (struct psensor *, void *);
+       void (*cb_alarm_raised)(struct psensor *, void *);
        void *cb_alarm_raised_data;
 
 #ifdef HAVE_NVIDIA
@@ -118,6 +126,10 @@ struct psensor {
 #ifdef HAVE_ATASMART
        SkDisk *disk;
 #endif
+
+       void *provider_data;
+       void (*provider_data_free_fct)(void *);
+
        char *url;
 
        bool appindicator_enabled;
@@ -141,13 +153,7 @@ struct psensor **psensor_list_filter_graph_enabled(struct psensor **);
 struct psensor *psensor_list_get_by_id(struct psensor **sensors,
                                       const char *id);
 
-/*
-  Return 1 if there is at least one sensor of a given type, else
-  returns 0 */
-int psensor_list_contains_type(struct psensor **sensors, unsigned int type);
-
 int is_temp_type(unsigned int type);
-int is_fan_type(unsigned int type);
 
 double get_min_temp(struct psensor **sensors);
 double get_max_temp(struct psensor **sensors);
@@ -155,18 +161,16 @@ double get_max_temp(struct psensor **sensors);
 double get_min_rpm(struct psensor **sensors);
 double get_max_rpm(struct psensor **sensors);
 
-/*
-  Get the maximal current value of all sensors of a given type.
-*/
+/* Get the maximal current value of all sensors of a given type. */
 double
 psensor_get_max_current_value(struct psensor **sensors, unsigned int type);
 
 /*
-  Converts the value of a sensor to a string.
-
-  parameter 'type' is SENSOR_TYPE_LMSENSOR_TEMP, SENSOR_TYPE_NVIDIA,
-  or SENSOR_TYPE_LMSENSOR_FAN
-*/
* Converts the value of a sensor to a string.
+ *
* parameter 'type' is SENSOR_TYPE_LMSENSOR_TEMP, SENSOR_TYPE_NVIDIA,
* or SENSOR_TYPE_LMSENSOR_FAN
+ */
 char *psensor_value_to_str(unsigned int type,
                           double value,
                           int use_celsius);
@@ -180,6 +184,8 @@ struct psensor **get_all_sensors(int use_libatasmart, int values_max_length);
 struct psensor **psensor_list_add(struct psensor **sensors,
                                  struct psensor *sensor);
 
+void psensor_list_append(struct psensor ***sensors, struct psensor *sensor);
+
 struct psensor **psensor_list_copy(struct psensor **);
 
 void psensor_set_current_value(struct psensor *sensor, double value);
@@ -190,19 +196,11 @@ double psensor_get_current_value(const struct psensor *);
 
 struct measure *psensor_get_current_measure(struct psensor *sensor);
 
-/*
-  Returns a string representation of a psensor type.
-*/
+/* Returns a string representation of a psensor type. */
 const char *psensor_type_to_str(unsigned int type);
 
 const char *psensor_type_to_unit_str(unsigned int type, int use_celsius);
 
-void psensor_list_update_measures(struct psensor **sensors);
-
-void psensor_init();
-
-void psensor_cleanup();
-
 double get_max_value(struct psensor **sensors, int type);
 
 char *psensor_current_value_to_str(const struct psensor *, unsigned int);
index 50634e9..6d109a6 100644 (file)
@@ -36,7 +36,7 @@ char *sensors_to_json_string(struct psensor **sensors);
  * Creates a new allocated psensor corresponding to a given json
  * representation.
  */
-struct psensor *psensor_new_from_json(json_object * o,
+struct psensor *psensor_new_from_json(json_object *o,
                                      const char *sensors_url,
                                      int values_max_length);
 #endif
index 2c06c7c..faa0382 100644 (file)
@@ -54,12 +54,11 @@ char *tm_to_ISO8601_date(struct tm *tm)
 
        str = malloc(ISO8601_DATE_LENGTH + 1);
 
-       if (strftime(str, ISO8601_DATE_LENGTH + 1, "%F", tm)) {
+       if (strftime(str, ISO8601_DATE_LENGTH + 1, "%F", tm))
                return str;
-       } else {
-               free(str);
-               return NULL;
-       }
+
+       free(str);
+       return NULL;
 }
 
 char *tm_to_ISO8601_time(struct tm *tm)
@@ -68,12 +67,11 @@ char *tm_to_ISO8601_time(struct tm *tm)
 
        str = malloc(ISO8601_TIME_LENGTH + 1);
 
-       if (strftime(str, ISO8601_TIME_LENGTH + 1, "%FT%T", tm)) {
+       if (strftime(str, ISO8601_TIME_LENGTH + 1, "%FT%T", tm))
                return str;
-       } else {
-               free(str);
-               return NULL;
-       }
+
+       free(str);
+       return NULL;
 }
 
 char *get_current_ISO8601_time()
diff --git a/src/lib/pudisks2.c b/src/lib/pudisks2.c
new file mode 100644 (file)
index 0000000..5a7503e
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+ * Copyright (C) 2010-2014 jeanfi@gmail.com
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+#include <locale.h>
+#include <libintl.h>
+#define _(str) gettext(str)
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/time.h>
+
+#include <udisks/udisks.h>
+
+#include <pudisks2.h>
+#include <temperature.h>
+
+const char *PROVIDER_NAME = "udisks2";
+
+static GDBusObjectManager *manager;
+
+const time_t SMART_UPDATE_INTERVAL = 30;
+
+struct udisks_data {
+       char *path;
+       struct timeval last_smart_update;
+};
+
+void udisks_data_free(void *data)
+{
+       struct udisks_data *u;
+
+       u = (struct udisks_data *)data;
+       free(u->path);
+       free(u);
+}
+
+static void smart_update(struct psensor *s, UDisksDriveAta *ata)
+{
+       GVariant *variant;
+       gboolean ret;
+       struct timeval t;
+       struct udisks_data *data;
+
+       data = s->provider_data;
+
+       if (gettimeofday(&t, NULL) != 0) {
+               log_err("%s: %s", PROVIDER_NAME, _("gettimeofday failed."));
+               return;
+       }
+
+       if (data->last_smart_update.tv_sec
+           &&
+           (t.tv_sec - data->last_smart_update.tv_sec < SMART_UPDATE_INTERVAL))
+               return;
+
+       log_fct("%s: update SMART data for %s", PROVIDER_NAME, data->path);
+
+       variant = g_variant_new_parsed("{'nowakeup': %v}",
+                                      g_variant_new_boolean(TRUE));
+
+       ret = udisks_drive_ata_call_smart_update_sync(ata,
+                                                     variant,
+                                                     NULL,
+                                                     NULL);
+
+       if (!ret)
+               log_fct("%s: SMART update failed for %s",
+                       PROVIDER_NAME,
+                       data->path);
+
+               data->last_smart_update = t;
+}
+
+void udisks2_psensor_list_update(struct psensor **sensors)
+{
+       struct psensor *s;
+       GDBusObject *o;
+       UDisksDriveAta *drive_ata;
+       double v;
+       struct udisks_data *data;
+
+       for (; *sensors; sensors++) {
+               s = *sensors;
+
+               if (s->type & SENSOR_TYPE_REMOTE)
+                       continue;
+
+               if (s->type & SENSOR_TYPE_UDISKS2) {
+                       data = (struct udisks_data *)s->provider_data;
+
+                       o = g_dbus_object_manager_get_object(manager,
+                                                            data->path);
+
+                       if (!o)
+                               continue;
+
+                       g_object_get(o, "drive-ata", &drive_ata, NULL);
+
+                       smart_update(s, drive_ata);
+
+                       v = udisks_drive_ata_get_smart_temperature(drive_ata);
+
+                       psensor_set_current_value(s, kelvin_to_celsius(v));
+
+                       g_object_unref(G_OBJECT(o));
+               }
+       }
+}
+
+void udisks2_psensor_list_append(struct psensor ***sensors, int values_length)
+{
+       UDisksClient *client;
+       GList *objects, *cur;
+       UDisksDrive *drive;
+       UDisksDriveAta *drive_ata;
+       int i, type;
+       char *id, *name, *chip;
+       const char *path, *drive_id, *drive_model;
+       struct psensor *s;
+       struct udisks_data *data;
+
+       log_fct_enter();
+
+       client = udisks_client_new_sync(NULL, NULL);
+
+       if (!client) {
+               log_err(_("%s: cannot get the udisks2 client"), PROVIDER_NAME);
+               log_fct_exit();
+               return;
+       }
+
+       manager = udisks_client_get_object_manager(client);
+
+       objects = g_dbus_object_manager_get_objects(manager);
+
+       i = 0;
+       for (cur = objects; cur; cur = cur->next) {
+               path = g_dbus_object_get_object_path(cur->data);
+
+               g_object_get(cur->data,
+                            "drive", &drive,
+                            "drive-ata", &drive_ata,
+                            NULL);
+
+               if (!drive) {
+                       log_fct("Not a drive: %s", path);
+                       continue;
+               }
+
+               if (!drive_ata) {
+                       log_fct("Not an ATA drive: %s", path);
+                       continue;
+               }
+
+               if (!udisks_drive_ata_get_smart_enabled(drive_ata)) {
+                       log_fct("SMART not enabled: %s", path);
+                       continue;
+               }
+
+               if (!udisks_drive_ata_get_smart_temperature(drive_ata)) {
+                       log_fct("No temperature available: %s", path);
+                       continue;
+               }
+
+               drive_id = udisks_drive_get_id(drive);
+               if (drive_id) {
+                       id = g_strdup_printf("%s %s", PROVIDER_NAME, drive_id);
+               } else {
+                       id = g_strdup_printf("%s %d", PROVIDER_NAME, i);
+                       i++;
+               }
+
+               drive_model = udisks_drive_get_model(drive);
+               if (drive_model) {
+                       name = strdup(drive_model);
+                       chip = strdup(drive_model);
+               } else {
+                       name = strdup(_("Disk"));
+                       chip = strdup(_("Disk"));
+               }
+
+               type = SENSOR_TYPE_TEMP | SENSOR_TYPE_UDISKS2 | SENSOR_TYPE_HDD;
+
+               s = psensor_create(id, name, chip, type, values_length);
+
+               data = malloc(sizeof(struct udisks_data));
+               data->path = strdup(path);
+               memset(&data->last_smart_update, 0, sizeof(struct timeval));
+
+               s->provider_data = data;
+               s->provider_data_free_fct = &udisks_data_free;
+
+               psensor_list_append(sensors, s);
+
+               g_object_unref(G_OBJECT(cur->data));
+       }
+
+       g_list_free(objects);
+
+       log_fct_exit();
+}
diff --git a/src/lib/pudisks2.h b/src/lib/pudisks2.h
new file mode 100644 (file)
index 0000000..1a844bc
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2010-2014 jeanfi@gmail.com
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+#ifndef _PSENSOR_UDISKS2_H_
+#define _PSENSOR_UDISKS2_H_
+
+#include <psensor.h>
+
+void udisks2_psensor_list_append(struct psensor ***sensors, int values_length);
+void udisks2_psensor_list_update(struct psensor **sensors);
+
+#endif
index 15ccd0b..5b16526 100644 (file)
@@ -58,12 +58,11 @@ static char *time_to_str(time_t *t)
 
        str = malloc(64);
 
-       if (strftime(str, 64, "%s", &lt)) {
+       if (strftime(str, 64, "%s", &lt))
                return str;
-       } else {
-               free(str);
-               return NULL;
-       }
+
+       free(str);
+       return NULL;
 }
 
 static char *get_default_path()
@@ -83,10 +82,10 @@ static char *get_default_path()
                free(dir);
 
                return path;
-       } else {
-               log_warn(_("HOME variable not set."));
-               return strdup(DEFAULT_FILENAME);
        }
+
+       log_warn(_("HOME variable not set."));
+       return strdup(DEFAULT_FILENAME);
 }
 
 static bool slog_open(const char *path, struct psensor **sensors)
@@ -135,7 +134,7 @@ static void slog_write_sensors(struct psensor **sensors)
 
        if (!file) {
                log_debug(_("Sensor log file not open."));
-               return ;
+               return;
        }
 
        gettimeofday(&tv, NULL);
index 3e74898..0ad5a43 100644 (file)
@@ -28,3 +28,7 @@ double fahrenheit_to_celsius(double f)
        return (f - 32) * (5.0/9.0);
 }
 
+double kelvin_to_celsius(double k)
+{
+       return k - 273.5;
+}
index b36c90e..591b39b 100644 (file)
@@ -21,5 +21,6 @@
 
 double celsius_to_fahrenheit(double c);
 double fahrenheit_to_celsius(double c);
+double kelvin_to_celsius(double k);
 
 #endif
index e9b10b2..7840485 100644 (file)
@@ -31,6 +31,7 @@
 #include "config.h"
 
 #include "cfg.h"
+#include <hdd.h>
 #include "psensor.h"
 #include "graph.h"
 #include "ui.h"
@@ -39,6 +40,7 @@
 #include "lmsensor.h"
 #include "notify_cmd.h"
 #include <pmutex.h>
+#include <pudisks2.h>
 #include "slog.h"
 #include "ui_pref.h"
 #include "ui_graph.h"
@@ -67,7 +69,7 @@
 #endif
 
 #ifdef HAVE_GTOP
-#include "cpu.h"
+#include <pgtop2.h>
 #endif
 
 static const char *program_name;
@@ -102,9 +104,6 @@ static void print_help()
 "  -u, --url=URL       the URL of the psensor-server,\n"
 "                      example: http://hostname:3131"));
        puts(_(
-"  --use-libatasmart   use atasmart library for disk monitoring instead of\n"
-"                      hddtemp daemon"));
-       puts(_(
 "  -n, --new-instance  force the creation of a new Psensor application"));
        puts("");
 
@@ -155,7 +154,7 @@ static void *update_measures(void *data)
 
                update_psensor_values_size(sensors, cfg);
 
-               psensor_list_update_measures(sensors);
+               lmsensor_psensor_list_update(sensors);
 #ifdef HAVE_REMOTE_SUPPORT
                remote_psensor_list_update(sensors);
 #endif
@@ -165,6 +164,17 @@ static void *update_measures(void *data)
 #ifdef HAVE_LIBATIADL
                amd_psensor_list_update(sensors);
 #endif
+#ifdef HAVE_LIBUDISKS2
+               udisks2_psensor_list_update(sensors);
+#endif
+#ifdef HAVE_GTOP
+               gtop2_psensor_list_update(sensors);
+#endif
+#ifdef HAVE_ATASMART
+               atasmart_psensor_list_update(sensors);
+#endif
+
+               hddtemp_psensor_list_update(sensors);
 
                psensor_log_measures(sensors);
 
@@ -251,29 +261,47 @@ static void cb_alarm_raised(struct psensor *sensor, void *data)
 
 static void associate_colors(struct psensor **sensors)
 {
-       /* number of uniq colors */
-#define COLORS_COUNT 8
-
-       double colors[COLORS_COUNT][3] = {
-               {0, 0, 0},      /* black */
-               {1, 0, 0},      /* red */
-               {0, 0, 1},      /* blue */
-               {0, 1, 0},      /* green */
-
-               {0.5, 0.5, 0.5},/* grey */
-               {0.5, 0, 0},    /* dark red */
-               {0, 0, 0.5},    /* dark blue */
-               {0, 0.5, 0}     /* dark green */
+       GdkRGBA rgba;
+       /* copied from the default colors of the gtk color color
+        * chooser. */
+       const char *default_colors[27] = {
+               "#ef2929",  /* Scarlet Red */
+               "#fcaf3e",  /* Orange */
+               "#fce94f",  /* Butter */
+               "#8ae234",  /* Chameleon */
+               "#729fcf",  /* Sky Blue */
+               "#ad7fa8",  /* Plum */
+               "#e9b96e",  /* Chocolate */
+               "#888a85",  /* Aluminum 1 */
+               "#eeeeec",  /* Aluminum 2 */
+               "#cc0000",
+               "#f57900",
+               "#edd400",
+               "#73d216",
+               "#3465a4",
+               "#75507b",
+               "#c17d11",
+               "#555753",
+               "#d3d7cf",
+               "#a40000",
+               "#ce5c00",
+               "#c4a000",
+               "#4e9a06",
+               "#204a87",
+               "#5c3566",
+               "#8f5902",
+               "#2e3436",
+               "#babdb6"
        };
-       struct psensor **cur;
        int i;
+       struct psensor **cur;
        struct color c;
 
        for (cur = sensors, i = 0; *cur; cur++, i++) {
-               color_set(&c,
-                         colors[i % COLORS_COUNT][0],
-                         colors[i % COLORS_COUNT][1],
-                         colors[i % COLORS_COUNT][2]);
+               gdk_rgba_parse(&rgba, default_colors[i % 27]);
+               c.red = rgba.red;
+               c.green = rgba.green;
+               c.blue = rgba.blue;
 
                (*cur)->color = config_get_sensor_color((*cur)->id, &c);
        }
@@ -283,6 +311,7 @@ static void
 associate_cb_alarm_raised(struct psensor **sensors, struct ui_psensor *ui)
 {
        struct psensor **sensor_cur = sensors;
+
        while (*sensor_cur) {
                struct psensor *s = *sensor_cur;
 
@@ -294,13 +323,8 @@ associate_cb_alarm_raised(struct psensor **sensors, struct ui_psensor *ui)
                s->alarm_low_threshold
                        = config_get_sensor_alarm_low_threshold(s->id);
 
-               if (is_temp_type(s->type) || is_fan_type(s->type)) {
-                       s->alarm_enabled
+               s->alarm_enabled
                            = config_get_sensor_alarm_enabled(s->id);
-               } else {
-                       s->alarm_high_threshold = 0;
-                       s->alarm_enabled = 0;
-               }
 
                sensor_cur++;
        }
@@ -309,6 +333,7 @@ associate_cb_alarm_raised(struct psensor **sensors, struct ui_psensor *ui)
 static void associate_preferences(struct psensor **sensors)
 {
        struct psensor **sensor_cur = sensors;
+
        while (*sensor_cur) {
                char *n;
                struct psensor *s = *sensor_cur;
@@ -336,7 +361,7 @@ static void log_init()
        dir = get_psensor_user_dir();
 
        if (!dir)
-               return ;
+               return;
 
        path = malloc(strlen(dir)+1+strlen("log")+1);
        sprintf(path, "%s/%s", dir, "log");
@@ -347,7 +372,6 @@ static void log_init()
 }
 
 static struct option long_options[] = {
-       {"use-libatasmart", no_argument, 0, 0},
        {"version", no_argument, 0, 'v'},
        {"help", no_argument, 0, 'h'},
        {"url", required_argument, 0, 'u'},
@@ -406,8 +430,6 @@ static void cleanup(struct ui_psensor *ui)
 
        log_debug("Cleanup...");
 
-       psensor_cleanup();
-
 #ifdef HAVE_NVIDIA
        nvidia_cleanup();
 #endif
@@ -438,10 +460,8 @@ static void cleanup(struct ui_psensor *ui)
  * Creates the list of sensors.
  *
  * 'url': remote psensor server url, null for local monitoring.
- * 'use_libatasmart': whether the libatasmart must be used.
  */
-static struct psensor **create_sensors_list(const char *url,
-                                           unsigned int use_libatasmart)
+static struct psensor **create_sensors_list(const char *url)
 {
        struct psensor **sensors;
 
@@ -455,15 +475,35 @@ static struct psensor **create_sensors_list(const char *url,
                exit(EXIT_FAILURE);
 #endif
        } else {
-               sensors = get_all_sensors(use_libatasmart, 600);
+               sensors = malloc(sizeof(struct psensor *));
+               *sensors = NULL;
+
+               if (config_is_lmsensor_enabled())
+                       lmsensor_psensor_list_append(&sensors, 600);
+
+               if (config_is_hddtemp_enabled())
+                       hddtemp_psensor_list_append(&sensors, 600);
+
+#ifdef HAVE_ATASMART
+               if (config_is_libatasmart_enabled())
+                       atasmart_psensor_list_append(&sensors, 600);
+#endif
+
 #ifdef HAVE_NVIDIA
-               sensors = nvidia_psensor_list_add(sensors, 600);
+               if (config_is_nvctrl_enabled())
+                       nvidia_psensor_list_append(&sensors, 600);
 #endif
 #ifdef HAVE_LIBATIADL
-               sensors = amd_psensor_list_add(sensors, 600);
+               if (config_is_atiadlsdk_enabled())
+                       amd_psensor_list_append(&sensors, 600);
 #endif
 #ifdef HAVE_GTOP
-               sensors = cpu_psensor_list_add(sensors, 600);
+               if (config_is_gtop2_enabled())
+                       gtop2_psensor_list_append(&sensors, 600);
+#endif
+#ifdef HAVE_LIBUDISKS2
+               if (config_is_udisks2_enabled())
+                       udisks2_psensor_list_append(&sensors, 600);
 #endif
        }
 
@@ -477,7 +517,7 @@ int main(int argc, char **argv)
 {
        struct ui_psensor ui;
        pthread_t thread;
-       int optc, cmdok, opti, use_libatasmart, new_instance, ret;
+       int optc, cmdok, opti, new_instance, ret;
        char *url = NULL;
        GApplication *app;
 
@@ -490,16 +530,12 @@ int main(int argc, char **argv)
        textdomain(PACKAGE);
 #endif
 
-       use_libatasmart = new_instance = 0;
+       new_instance = 0;
 
        cmdok = 1;
        while ((optc = getopt_long(argc, argv, "vhd:u:n", long_options,
                                   &opti)) != -1) {
                switch (optc) {
-               case 0:
-                       if (!strcmp(long_options[opti].name, "use-libatasmart"))
-                               use_libatasmart = 1;
-                       break;
                case 'u':
                        if (optarg)
                                url = strdup(optarg);
@@ -570,9 +606,7 @@ int main(int argc, char **argv)
 
        ui.config = config_load();
 
-       psensor_init();
-
-       ui.sensors = create_sensors_list(url, use_libatasmart);
+       ui.sensors = create_sensors_list(url);
        associate_cb_alarm_raised(ui.sensors, &ui);
 
        if (ui.config->slog_enabled)
@@ -617,6 +651,8 @@ int main(int argc, char **argv)
        else
                initial_window_show(&ui);
 
+       log_debug("translators: %s\n", _("translator-credits"));
+
        /* main loop */
        gtk_main();
 
index 1e006fc..8a7687a 100644 (file)
@@ -1,5 +1,5 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.44.1.
-.TH PSENSOR "1" "September 2014" "psensor 1.1.1" "User Commands"
+.TH PSENSOR "1" "September 2014" "psensor 1.1.2" "User Commands"
 .SH NAME
 psensor \- Temperature monitoring application
 .SH SYNOPSIS
@@ -21,10 +21,6 @@ display version information and exit
 the URL of the psensor\-server,
 example: http://hostname:3131
 .TP
-\fB\-\-use\-libatasmart\fR
-use atasmart library for disk monitoring instead of
-hddtemp daemon
-.TP
 \fB\-n\fR, \fB\-\-new\-instance\fR
 force the creation of a new Psensor application
 .TP
index 435fd91..8439c1b 100644 (file)
@@ -30,7 +30,7 @@
       a #rgb representation.</description>
     </key>
     <key name="graph-monitoring-duration" type="i">
-      <default>10</default>
+      <default>20</default>
       <summary>The monitoring duration of the graph</summary>
       <description>The monitoring duration of the graph as minutes. It
       must be greater than 1.</description>
       <description>The interval between refreshs of the graph as
       seconds. It must be greater than 1.</description>
     </key>
+    <key name="graph-smooth-curves-enabled" type="b">
+      <default>true</default>
+      <summary>Whether smooth curves are enabled</summary>
+      <description>Whether curves are drawn using Bezier algorithm
+      for a smoother visual rendering .</description>
+    </key>
     <key name="interface-hide-on-startup" type="b">
       <default>false</default>
       <summary>Whether the graph window is hidden on startup</summary>
@@ -91,7 +97,7 @@
       windows.</description>
     </key>
     <key name="interface-window-restore-enabled" type="b">
-      <default>false</default>
+      <default>true</default>
       <summary>Whether the position and size of the graph window are
       restored</summary>
       <description>Whether the position and size of the graph window
       <description>Update interface of the sensor
       values.</description>
     </key>
+    <!-- sensors information providers -->
+    <key name="provider-lmsensors-enabled" type="b">
+      <default>true</default>
+      <summary>Whether the lm-sensors librairy is used to retrieve
+      sensors information.</summary>
+      <description>Whether the lm-sensors librairy is used to
+      retrieved sensors information.</description>
+    </key>
+    <key name="provider-nvctrl-enabled" type="b">
+      <default>true</default>
+      <summary>Whether the NVCtrl library is used to retrieve
+      sensors information.</summary>
+      <description>Whether the NVCtrl library is used to
+      retrieved sensors information.</description>
+    </key>
+    <key name="provider-atiadlsdk-enabled" type="b">
+      <default>true</default>
+      <summary>Whether the ATI ADL SDK library is used to retrieve
+      sensors information.</summary>
+      <description>Whether the ATI ADL SDK library is used to
+      retrieved sensors information.</description>
+    </key>
+    <key name="provider-gtop2-enabled" type="b">
+      <default>true</default>
+      <summary>Whether the gtop2 library is used to retrieve
+      system information.</summary>
+      <description>Whether the gtop2 library is used to
+      system information.</description>
+    </key>
+    <key name="provider-hddtemp-enabled" type="b">
+      <default>false</default>
+      <summary>Whether the hddtemp daemon is used to retrieve
+      hard disks information.</summary>
+      <description>Whether the hddtemp daemon is used to
+      retrieved hard disks information.</description>
+    </key>
+    <key name="provider-libatasmart-enabled" type="b">
+      <default>false</default>
+      <summary>Whether the atasmart library is used to retrieve
+      hard disks information.</summary>
+      <description>Whether the atasmart library is used to
+      retrieved hard disks information.</description>
+    </key>
+    <key name="provider-udisks2-enabled" type="b">
+      <default>true</default>
+      <summary>Whether the udisks2 library is used to retrieve
+      hard disks information.</summary>
+      <description>Whether the lm-sensors library is used to
+      retrieved hard disks information.</description>
+    </key>
   </schema>
 </schemalist>
index 6ef9d28..14c3021 100644 (file)
@@ -77,14 +77,13 @@ static GKeyFile *get_key_file(const char *path)
                                        | G_KEY_FILE_KEEP_TRANSLATIONS,
                                        NULL);
 
-       if (ret) {
+       if (ret)
                return kfile;
-       } else {
-               log_err("Failed to parse: %s", path);
 
-               g_key_file_free(kfile);
-               return NULL;
-       }
+       log_err("Failed to parse: %s", path);
+
+       g_key_file_free(kfile);
+       return NULL;
 }
 
 static int is_user_desktop_autostarted(GKeyFile *f)
index f0cc41e..fa57f23 100644 (file)
@@ -253,6 +253,8 @@ LIBOBJS = @LIBOBJS@
 LIBS = ../lib/libpsensor.a $(SENSORS_LIBS) $(JSON_LIBS) \
        $(LIBMICROHTTPD_LIBS) $(PTHREAD_LIBS) $(am__append_2) \
        $(am__append_5)
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
index 0558115..806c4f4 100644 (file)
@@ -1,5 +1,5 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.44.1.
-.TH PSENSOR-SERVER "1" "September 2014" "psensor-server 1.1.1" "User Commands"
+.TH PSENSOR-SERVER "1" "September 2014" "psensor-server 1.1.2" "User Commands"
 .SH NAME
 psensor-server \- Temperature and system monitoring Web server
 .SH SYNOPSIS
index 297d083..5862586 100644 (file)
 
 #ifdef HAVE_GTOP
 #include "sysinfo.h"
-#include "cpu.h"
+#include <pgtop2.h>
 #endif
 
+#include <hdd.h>
+#include <lmsensor.h>
 #include <plog.h>
 #include "psensor_json.h"
 #include <pmutex.h>
@@ -255,15 +257,16 @@ create_response(const char *nurl, const char *method, unsigned int *rp_code)
                free(fpath);
        }
 
-       if (resp) {
+       if (resp)
                return resp;
-       } else {
-               char *page = strdup(PAGE_NOT_FOUND);
-               *rp_code = MHD_HTTP_NOT_FOUND;
 
-               return MHD_create_response_from_data
-                       (strlen(page), page, MHD_YES, MHD_NO);
-       }
+       char *page = strdup(PAGE_NOT_FOUND);
+       *rp_code = MHD_HTTP_NOT_FOUND;
+
+       return MHD_create_response_from_data(strlen(page),
+                                            page,
+                                            MHD_YES,
+                                            MHD_NO);
 }
 
 static int cbk_http_request(void *cls,
@@ -393,9 +396,9 @@ int main(int argc, char *argv[])
 
        log_open(log_file);
 
-       psensor_init();
+       hddtemp_psensor_list_append(&server_data.sensors, 600);
 
-       server_data.sensors = get_all_sensors(0, 600);
+       lmsensor_psensor_list_append(&server_data.sensors, 600);
 
 #ifdef HAVE_GTOP
        server_data.cpu_usage = create_cpu_usage_sensor(600);
@@ -435,7 +438,14 @@ int main(int argc, char *argv[])
                sysinfo_update(&server_data.psysinfo);
                cpu_usage_sensor_update(server_data.cpu_usage);
 #endif
-               psensor_list_update_measures(server_data.sensors);
+
+#ifdef HAVE_ATASMART
+               atasmart_psensor_list_update(server_data.sensors);
+#endif
+
+               hddtemp_psensor_list_update(server_data.sensors);
+
+               lmsensor_psensor_list_update(server_data.sensors);
 
                psensor_log_measures(server_data.sensors);
 
@@ -457,7 +467,6 @@ int main(int argc, char *argv[])
 
 #ifdef HAVE_GTOP
        sysinfo_cleanup();
-       cpu_cleanup();
 #endif
 
        if (log_file != DEFAULT_LOG_FILE)
index 6876600..dcb3ea0 100644 (file)
--- a/src/ui.c
+++ b/src/ui.c
@@ -78,16 +78,23 @@ on_delete_event_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
 
 void ui_show_about_dialog()
 {
+       static const char *const authors[] = { "jeanfi@gmail.com", NULL };
+
        gtk_show_about_dialog
                (NULL,
+                "authors", authors,
                 "comments",
                 _("Psensor is a GTK+ application for monitoring hardware "
                   "sensors"),
                 "copyright",
-                _("Copyright(c) 2010-2014\njeanfi@gmail.com"),
+                _("Copyright(c) 2010-2014 jeanfi@gmail.com"),
+#if GTK_CHECK_VERSION(3, 12, 0)
+                "license-type", GTK_LICENSE_GPL_2_0,
+#endif
                 "logo-icon-name", "psensor",
                 "program-name", "Psensor",
                 "title", _("About Psensor"),
+                "translator-credits", _("translator-credits"),
                 "version", VERSION,
                 "website", PACKAGE_URL,
                 "website-label", _("Psensor Homepage"),
@@ -191,7 +198,7 @@ void ui_window_create(struct ui_psensor *ui)
        if (!ok) {
                log_printf(LOG_ERR, error->message);
                g_error_free(error);
-               return ;
+               return;
        }
 
        window = GTK_WIDGET(gtk_builder_get_object(builder, "window"));
index c8887c2..c25e270 100644 (file)
@@ -96,7 +96,7 @@ static void update_menu_items(int use_celsius)
        GtkMenuItem **m;
 
        if (!sensors)
-               return ;
+               return;
 
        for (s = sensors, m = menu_items; *s; s++, m++)
                update_menu_item(*m, *s, use_celsius);
@@ -199,9 +199,9 @@ static void update_label(struct ui_psensor *ui)
 
                        if (is_temp_type((*p)->type))
                                str = "999UUU";
-                       else if (is_fan_type((*p)->type))
+                       else if ((*p)->type & SENSOR_TYPE_RPM)
                                str = "999UUU";
-                       else /* cpu load */
+                       else /* percent */
                                str = "999%";
 
                        if (guide == NULL) {
index 0b9b41b..e5e0e76 100644 (file)
@@ -45,6 +45,11 @@ on_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data)
        return FALSE;
 }
 
+void smooth_curves_enabled_changed_cbk(void *data)
+{
+       is_smooth_curves_enabled = config_is_smooth_curves_enabled();
+}
+
 void ui_graph_create(struct ui_psensor *ui)
 {
        GtkWidget *w_graph;
@@ -53,6 +58,12 @@ void ui_graph_create(struct ui_psensor *ui)
 
        w_graph = ui->w_graph;
 
+       is_smooth_curves_enabled = config_is_smooth_curves_enabled();
+       g_signal_connect_after(config_get_GSettings(),
+                              "changed::graph-smooth-curves-enabled",
+                              G_CALLBACK(smooth_curves_enabled_changed_cbk),
+                              NULL);
+
        g_signal_connect(GTK_WIDGET(w_graph),
                         "draw",
                         G_CALLBACK(on_expose_event),
index 6361f06..a668014 100644 (file)
@@ -53,7 +53,7 @@ void ui_notify(struct psensor *sensor, struct ui_psensor *ui)
            || t.tv_sec - last_notification_tv.tv_sec >= 60)
                last_notification_tv = t;
        else
-               return ;
+               return;
 
        if (notify_is_initted() == FALSE)
                notify_init("psensor");
@@ -75,8 +75,8 @@ void ui_notify(struct psensor *sensor, struct ui_psensor *ui)
 
                if (is_temp_type(sensor->type))
                        summary = _("Temperature alert");
-               else if (is_fan_type(sensor->type))
-                       summary = _("Fan alert");
+               else if (sensor->type & SENSOR_TYPE_RPM)
+                       summary = _("Fan speed alert");
                else
                        summary = _("N/A");
 
index e614da3..5494777 100644 (file)
@@ -21,6 +21,7 @@
 
 #include <ui.h>
 #include <cfg.h>
+#include <graph.h>
 #include <ui_pref.h>
 #include <ui_color.h>
 #include <pxdg.h>
@@ -53,7 +54,9 @@ void ui_pref_dialog_run(struct ui_psensor *ui)
        GtkComboBox *w_sensorlist_pos;
        GtkToggleButton *w_hide_window_decoration, *w_keep_window_below,
                *w_enable_menu, *w_enable_launcher_counter, *w_hide_on_startup,
-               *w_win_restore, *w_slog_enabled, *w_autostart;
+               *w_win_restore, *w_slog_enabled, *w_autostart, *w_smooth_curves,
+               *w_atiadlsdk, *w_lmsensors, *w_nvctrl, *w_gtop2, *w_hddtemp,
+               *w_libatasmart, *w_udisks2;
        GtkComboBoxText *w_temp_unit;
        GtkEntry *w_notif_script;
        char *notif_script;
@@ -70,7 +73,7 @@ void ui_pref_dialog_run(struct ui_psensor *ui)
        if (!ok) {
                log_printf(LOG_ERR, error->message);
                g_error_free(error);
-               return ;
+               return;
        }
 
        diag = GTK_DIALOG(gtk_builder_get_object(builder, "dialog1"));
@@ -141,6 +144,11 @@ void ui_pref_dialog_run(struct ui_psensor *ui)
        gtk_toggle_button_set_active(w_enable_launcher_counter,
                                     !cfg->unity_launcher_count_disabled);
 
+       w_smooth_curves = GTK_TOGGLE_BUTTON
+               (gtk_builder_get_object(builder, "graph_smooth_curves"));
+       gtk_toggle_button_set_active(w_smooth_curves,
+                                    config_is_smooth_curves_enabled());
+
        w_slog_enabled = GTK_TOGGLE_BUTTON
                (gtk_builder_get_object(builder, "enable_slog"));
        gtk_toggle_button_set_active(w_slog_enabled, cfg->slog_enabled);
@@ -166,6 +174,60 @@ void ui_pref_dialog_run(struct ui_psensor *ui)
        gtk_combo_box_set_active(GTK_COMBO_BOX(w_temp_unit),
                                 cfg->temperature_unit);
 
+       /* providers */
+       w_lmsensors
+               = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder,
+                                                          "lmsensors"));
+       gtk_toggle_button_set_active(w_lmsensors, config_is_lmsensor_enabled());
+
+       w_nvctrl
+               = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder,
+                                                          "nvctrl"));
+#if !HAVE_NVIDIA
+       gtk_widget_set_sensitive(GTK_WIDGET(w_nvctrl), 0);
+#endif
+       gtk_toggle_button_set_active(w_nvctrl, config_is_nvctrl_enabled());
+
+       w_atiadlsdk
+               = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder,
+                                                          "atiadlsdk"));
+#if !HAVE_LIBATIADL
+       gtk_widget_set_sensitive(GTK_WIDGET(w_atiadlsdk), 0);
+#endif
+       gtk_toggle_button_set_active(w_atiadlsdk,
+                                    config_is_atiadlsdk_enabled());
+
+       w_gtop2
+               = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder,
+                                                          "gtop2"));
+#if !HAVE_GTOP
+       gtk_widget_set_sensitive(GTK_WIDGET(w_gtop2), 0);
+#endif
+       gtk_toggle_button_set_active(w_gtop2, config_is_gtop2_enabled());
+
+       w_hddtemp
+               = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder,
+                                                          "hddtemp"));
+       gtk_toggle_button_set_active(w_hddtemp, config_is_hddtemp_enabled());
+
+
+       w_libatasmart
+               = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder,
+                                                          "libatasmart"));
+#if !HAVE_ATASMART
+       gtk_widget_set_sensitive(GTK_WIDGET(w_libatasmart), 0);
+#endif
+       gtk_toggle_button_set_active(w_libatasmart,
+                                    config_is_libatasmart_enabled());
+
+       w_udisks2
+               = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder,
+                                                          "udisks2"));
+#if !HAVE_LIBUDISKS2
+       gtk_widget_set_sensitive(GTK_WIDGET(w_udisks2), 0);
+#endif
+       gtk_toggle_button_set_active(w_udisks2, config_is_udisks2_enabled());
+
        result = gtk_dialog_run(diag);
 
        if (result == GTK_RESPONSE_ACCEPT) {
@@ -229,10 +291,6 @@ void ui_pref_dialog_run(struct ui_psensor *ui)
                    = gtk_spin_button_get_value_as_int
                        (w_monitoring_duration);
 
-               cfg->sensor_values_max_length
-                   = (cfg->graph_monitoring_duration * 60) /
-                   cfg->sensor_update_interval;
-
                cfg->hide_on_startup
                        = gtk_toggle_button_get_active(w_hide_on_startup);
 
@@ -248,8 +306,34 @@ void ui_pref_dialog_run(struct ui_psensor *ui)
                cfg->temperature_unit
                        = gtk_combo_box_get_active(GTK_COMBO_BOX(w_temp_unit));
 
+               cfg->sensor_values_max_length = compute_values_max_length(cfg);
+
                config_save(cfg);
 
+               config_set_smooth_curves_enabled
+                       (gtk_toggle_button_get_active(w_smooth_curves));
+
+               config_set_lmsensor_enable
+                       (gtk_toggle_button_get_active(w_lmsensors));
+
+               config_set_nvctrl_enable
+                       (gtk_toggle_button_get_active(w_nvctrl));
+
+               config_set_atiadlsdk_enable
+                       (gtk_toggle_button_get_active(w_atiadlsdk));
+
+               config_set_gtop2_enable
+                       (gtk_toggle_button_get_active(w_gtop2));
+
+               config_set_hddtemp_enable
+                       (gtk_toggle_button_get_active(w_hddtemp));
+
+               config_set_libatasmart_enable
+                       (gtk_toggle_button_get_active(w_libatasmart));
+
+               config_set_udisks2_enable
+                       (gtk_toggle_button_get_active(w_udisks2));
+
                pxdg_set_autostart(gtk_toggle_button_get_active(w_autostart));
 
                pthread_mutex_unlock(&ui->sensors_mutex);
index d0138c7..5f1cb4f 100644 (file)
@@ -184,8 +184,8 @@ static int get_col_index_at_pos(GtkTreeView *view, int x)
                if (x >= colx
                    && x < (colx + gtk_tree_view_column_get_width(checkcol)))
                        return coli;
-               else
-                       colx += gtk_tree_view_column_get_width(checkcol);
+
+               colx += gtk_tree_view_column_get_width(checkcol);
 
                coli++;
        }
@@ -195,9 +195,46 @@ static int get_col_index_at_pos(GtkTreeView *view, int x)
 
 static void preferences_activated_cbk(GtkWidget *menu_item, gpointer data)
 {
-       struct cb_data *cb_data = data;
+       struct cb_data *cb_data;
 
+       cb_data = data;
        ui_sensorpref_dialog_run(cb_data->sensor, cb_data->ui);
+       free(cb_data);
+}
+
+static void hide_activated_cbk(GtkWidget *menu_item, gpointer data)
+{
+       struct psensor *s, *s2;
+       GtkTreeModel *model, *fmodel;
+       GtkTreeIter iter;
+       struct cb_data *cb_data;
+       gboolean valid;
+
+       log_fct_enter();
+
+       cb_data = data;
+       s = cb_data->sensor;
+       config_set_sensor_enabled(s->id, false);
+       config_sync();
+
+       fmodel = gtk_tree_view_get_model(cb_data->ui->sensors_tree);
+       model = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(fmodel));
+       valid = gtk_tree_model_get_iter_first(model, &iter);
+       while (valid) {
+               gtk_tree_model_get(model, &iter, COL_SENSOR, &s2, -1);
+
+               if (s == s2)
+                       gtk_list_store_set(cb_data->ui->sensors_store,
+                                          &iter,
+                                          COL_DISPLAY_ENABLED,
+                                          false,
+                                          -1);
+               valid = gtk_tree_model_iter_next(model, &iter);
+       }
+
+       free(cb_data);
+
+       log_fct_exit();
 }
 
 static GtkWidget *
@@ -214,13 +251,22 @@ create_sensor_popup(struct ui_psensor *ui, struct psensor *sensor)
        separator = gtk_separator_menu_item_new();
        gtk_menu_shell_append(GTK_MENU_SHELL(menu), separator);
 
-       item = gtk_menu_item_new_with_label(_("Preferences"));
+       item = gtk_menu_item_new_with_label(_("Hide"));
        gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
 
        data = malloc(sizeof(struct cb_data));
        data->ui = ui;
        data->sensor = sensor;
+       g_signal_connect(item,
+                        "activate",
+                        G_CALLBACK(hide_activated_cbk), data);
+
+       item = gtk_menu_item_new_with_label(_("Preferences"));
+       gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
 
+       data = malloc(sizeof(struct cb_data));
+       data->ui = ui;
+       data->sensor = sensor;
        g_signal_connect(item,
                         "activate",
                         G_CALLBACK(preferences_activated_cbk), data);
@@ -238,9 +284,6 @@ static int clicked_cbk(GtkWidget *widget, GdkEventButton *event, gpointer data)
        struct psensor *s;
        int coli;
 
-       if (event->button != 3)
-               return FALSE;
-
        ui = (struct ui_psensor *)data;
        view = ui->sensors_tree;
 
@@ -250,26 +293,29 @@ static int clicked_cbk(GtkWidget *widget, GdkEventButton *event, gpointer data)
                coli = col_index_to_col(get_col_index_at_pos(view, event->x));
 
                if (coli == COL_COLOR) {
-                       if (ui_change_color(_("Select foreground color"),
+                       if (ui_change_color(_("Select sensor color"),
                                            s->color,
                                            GTK_WINDOW(ui->main_window))) {
                                ui_sensorlist_update(ui, 1);
                                config_set_sensor_color(s->id, s->color);
                                config_sync();
                        }
+                       return TRUE;
                } else if (coli >= 0 && coli != COL_GRAPH_ENABLED) {
                        menu = create_sensor_popup(ui, s);
 
                        gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
                                       event->button, event->time);
+                       return TRUE;
                }
 
        }
-       return TRUE;
+       return FALSE;
 }
 
-static void
-toggled_cbk(GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
+void ui_sensorlist_cb_graph_toggled(GtkCellRendererToggle *cell,
+                                   gchar *path_str,
+                                   gpointer data)
 {
        struct ui_psensor *ui;
        GtkTreeModel *model, *fmodel;
@@ -289,6 +335,7 @@ toggled_cbk(GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
 
        s->graph_enabled ^= 1;
        config_set_sensor_graph_enabled(s->id, s->graph_enabled);
+       config_sync();
 
        gtk_tree_path_free(path);
 
@@ -309,10 +356,9 @@ toggled_cbk(GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
 
 void ui_sensorlist_create(struct ui_psensor *ui)
 {
-       GtkCellRenderer *renderer;
        GtkTreeModel *fmodel, *model;
 
-       log_debug("ui_sensorlist_create()");
+       log_fct_enter();
 
        model = gtk_tree_view_get_model(ui->sensors_tree);
        fmodel = gtk_tree_model_filter_new(model, NULL);
@@ -321,59 +367,10 @@ void ui_sensorlist_create(struct ui_psensor *ui)
 
        gtk_tree_view_set_model(ui->sensors_tree, fmodel);
 
-       renderer = gtk_cell_renderer_text_new();
-       gtk_tree_view_insert_column_with_attributes(ui->sensors_tree,
-                                                   -1,
-                                                   _("Sensor"),
-                                                   renderer,
-                                                   "text", COL_NAME, NULL);
-
-       gtk_tree_view_insert_column_with_attributes(ui->sensors_tree,
-                                                   -1,
-                                                   _("Value"),
-                                                   renderer,
-                                                   "text", COL_TEMP, NULL);
-
-       gtk_tree_view_insert_column_with_attributes(ui->sensors_tree,
-                                                   -1,
-                                                   _("Min"),
-                                                   renderer,
-                                                   "text", COL_TEMP_MIN, NULL);
-
-       gtk_tree_view_insert_column_with_attributes(ui->sensors_tree,
-                                                   -1,
-                                                   _("Max"),
-                                                   renderer,
-                                                   "text", COL_TEMP_MAX, NULL);
-
-       renderer = gtk_cell_renderer_text_new();
-       gtk_tree_view_insert_column_with_attributes(ui->sensors_tree,
-                                                   -1,
-                                                   _("Color"),
-                                                   renderer,
-                                                   "text", COL_COLOR,
-                                                   "background", COL_COLOR_STR,
-                                                   NULL);
-
        g_signal_connect(ui->sensors_tree,
                         "button-press-event", (GCallback)clicked_cbk, ui);
 
-       renderer = gtk_cell_renderer_toggle_new();
-       gtk_tree_view_insert_column_with_attributes(ui->sensors_tree,
-                                                   -1,
-                                                   _("Graph"),
-                                                   renderer,
-                                                   "active", COL_GRAPH_ENABLED,
-                                                   NULL);
-       g_signal_connect(G_OBJECT(renderer),
-                        "toggled", (GCallback) toggled_cbk, ui);
-
-       renderer = gtk_cell_renderer_text_new();
-       gtk_tree_view_insert_column_with_attributes(ui->sensors_tree,
-                                                   -1,
-                                                   "",
-                                                   renderer,
-                                                   "text", COL_EMPTY, NULL);
-
        ui_sensorlist_update(ui, 1);
+
+       log_fct_exit();
 }
index 126f33c..6ca0815 100644 (file)
@@ -89,7 +89,7 @@ sensor_pref_new(struct psensor *s, struct config *cfg)
 static void sensor_pref_free(struct sensor_pref *p)
 {
        if (!p)
-               return ;
+               return;
 
        free(p->name);
        free(p->color);
@@ -290,23 +290,12 @@ update_pref(struct sensor_pref *p, struct config *cfg, GtkBuilder *builder)
        w_appindicator_label_enabled = GTK_TOGGLE_BUTTON
                (gtk_builder_get_object(builder, "indicator_label_checkbox"));
 
-       if (is_temp_type(s->type) || is_fan_type(s->type)) {
-               gtk_toggle_button_set_active(w_alarm, p->alarm_enabled);
-               gtk_spin_button_set_value(w_high_threshold,
-                                         p->alarm_high_threshold);
-               gtk_spin_button_set_value(w_low_threshold,
-                                         p->alarm_low_threshold);
-               gtk_widget_set_sensitive(GTK_WIDGET(w_alarm), TRUE);
-               gtk_widget_set_sensitive(GTK_WIDGET(w_high_threshold), TRUE);
-               gtk_widget_set_sensitive(GTK_WIDGET(w_low_threshold), TRUE);
-       } else {
-               gtk_toggle_button_set_active(w_alarm, 0);
-               gtk_spin_button_set_value(w_high_threshold, 0);
-               gtk_spin_button_set_value(w_low_threshold, 0);
-               gtk_widget_set_sensitive(GTK_WIDGET(w_alarm), FALSE);
-               gtk_widget_set_sensitive(GTK_WIDGET(w_high_threshold), FALSE);
-               gtk_widget_set_sensitive(GTK_WIDGET(w_low_threshold), FALSE);
-       }
+       gtk_toggle_button_set_active(w_alarm, p->alarm_enabled);
+       gtk_spin_button_set_value(w_high_threshold, p->alarm_high_threshold);
+       gtk_spin_button_set_value(w_low_threshold, p->alarm_low_threshold);
+       gtk_widget_set_sensitive(GTK_WIDGET(w_alarm), TRUE);
+       gtk_widget_set_sensitive(GTK_WIDGET(w_high_threshold), TRUE);
+       gtk_widget_set_sensitive(GTK_WIDGET(w_low_threshold), TRUE);
 
        gtk_toggle_button_set_active(w_appindicator_enabled,
                                     p->appindicator_enabled);
@@ -453,7 +442,7 @@ void ui_sensorpref_dialog_run(struct psensor *sensor, struct ui_psensor *ui)
        if (!ok) {
                log_printf(LOG_ERR, error->message);
                g_error_free(error);
-               return ;
+               return;
        }
 
        w_sensors_list
index 60814d6..50dfc9c 100644 (file)
@@ -43,7 +43,7 @@ static void cb_popup_menu(GtkStatusIcon *icon,
 void ui_status_init(struct ui_psensor *ui)
 {
        if (status)
-               return ;
+               return;
 
        log_debug("ui_status_create()");
 
diff --git a/test-driver b/test-driver
new file mode 100755 (executable)
index 0000000..d306056
--- /dev/null
@@ -0,0 +1,139 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2013-07-13.22; # UTC
+
+# Copyright (C) 2011-2013 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 <http://www.gnu.org/licenses/>.
+
+# 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 <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+# Make unconditional expansion of undefined variables an error.  This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+  echo "$0: $*" >&2
+  print_usage >&2
+  exit 2
+}
+
+print_usage ()
+{
+  cat <<END
+Usage:
+  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+              [--expect-failure={yes|no}] [--color-tests={yes|no}]
+              [--enable-hard-errors={yes|no}] [--]
+              TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+test_name= # Used for reporting.
+log_file=  # Where to save the output of the test script.
+trs_file=  # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+  case $1 in
+  --help) print_usage; exit $?;;
+  --version) echo "test-driver $scriptversion"; exit $?;;
+  --test-name) test_name=$2; shift;;
+  --log-file) log_file=$2; shift;;
+  --trs-file) trs_file=$2; shift;;
+  --color-tests) color_tests=$2; shift;;
+  --expect-failure) expect_failure=$2; shift;;
+  --enable-hard-errors) enable_hard_errors=$2; shift;;
+  --) shift; break;;
+  -*) usage_error "invalid option: '$1'";;
+   *) break;;
+  esac
+  shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file"  = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file"  = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+  usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+  usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+  red='\e[0;31m' # Red.
+  grn='\e[0;32m' # Green.
+  lgn='\e[1;32m' # Light green.
+  blu='\e[1;34m' # Blue.
+  mgn='\e[0;35m' # Magenta.
+  std='\e[m'     # No color.
+else
+  red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+"$@" >$log_file 2>&1
+estatus=$?
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+  estatus=1
+fi
+
+case $estatus:$expect_failure in
+  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
+  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
+  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
+  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
+  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
+esac
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# 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:
index 332c0a2..9f59764 100644 (file)
@@ -1,6 +1,6 @@
 check-local: checkpatch.pl
-       find $(top_srcdir)/src -name \*.c -exec $(srcdir)/checkpatch.pl --ignore SPLIT_STRING --show-types -q --no-tree  -emacs -f {} \;
-       find $(top_srcdir)/src -name \*.h -exec $(srcdir)/checkpatch.pl --ignore SPLIT_STRING --show-types -q --no-tree  -emacs -f {} \;
+       find $(top_srcdir)/src -name \*.c -exec $(srcdir)/checkpatch.pl --ignore FUNCTION_WITHOUT_ARGS,SPLIT_STRING --show-types -q --no-tree  -emacs -f {} \;
+       find $(top_srcdir)/src -name \*.h -exec $(srcdir)/checkpatch.pl --ignore FUNCTION_WITHOUT_ARGS,SPLIT_STRING --show-types -q --no-tree  -emacs -f {} \;
 
 DEFS = -DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" -DLOCALEDIR=\"$(localedir)\" @DEFS@
 
index 5e90630..f4f77ff 100644 (file)
@@ -455,6 +455,8 @@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@ ../src/lib/libpsensor.a $(SENSORS_LIBS) $(am__append_1) \
        $(am__append_2)
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@
@@ -1076,8 +1078,8 @@ uninstall-am:
        uninstall uninstall-am
 
 check-local: checkpatch.pl
-       find $(top_srcdir)/src -name \*.c -exec $(srcdir)/checkpatch.pl --ignore SPLIT_STRING --show-types -q --no-tree  -emacs -f {} \;
-       find $(top_srcdir)/src -name \*.h -exec $(srcdir)/checkpatch.pl --ignore SPLIT_STRING --show-types -q --no-tree  -emacs -f {} \;
+       find $(top_srcdir)/src -name \*.c -exec $(srcdir)/checkpatch.pl --ignore FUNCTION_WITHOUT_ARGS,SPLIT_STRING --show-types -q --no-tree  -emacs -f {} \;
+       find $(top_srcdir)/src -name \*.h -exec $(srcdir)/checkpatch.pl --ignore FUNCTION_WITHOUT_ARGS,SPLIT_STRING --show-types -q --no-tree  -emacs -f {} \;
 
 # 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.
index faea0ec..cab1691 100755 (executable)
@@ -6,6 +6,7 @@
 # Licensed under the terms of the GNU GPL License version 2
 
 use strict;
+use POSIX;
 
 my $P = $0;
 $P =~ s@.*/@@g;
@@ -23,16 +24,25 @@ my $emacs = 0;
 my $terse = 0;
 my $file = 0;
 my $check = 0;
+my $check_orig = 0;
 my $summary = 1;
 my $mailback = 0;
 my $summary_file = 0;
 my $show_types = 0;
+my $fix = 0;
+my $fix_inplace = 0;
 my $root;
 my %debug;
+my %camelcase = ();
+my %use_type = ();
+my @use = ();
 my %ignore_type = ();
 my @ignore = ();
 my $help = 0;
 my $configuration_file = ".checkpatch.conf";
+my $max_line_length = 80;
+my $ignore_perl_version = 0;
+my $minimum_perl_version = 5.10.0;
 
 sub help {
        my ($exitcode) = @_;
@@ -50,7 +60,9 @@ Options:
   --terse                    one line per report
   -f, --file                 treat FILE as regular source file
   --subjective, --strict     enable more subjective tests
+  --types TYPE(,TYPE2...)    show only these comma separated message types
   --ignore TYPE(,TYPE2...)   ignore various comma separated message types
+  --max-line-length=n        set the maximum line length, if exceeded, warn
   --show-types               show the message "types" in the output
   --root=PATH                PATH to the kernel tree root
   --no-summary               suppress the per-file summary
@@ -61,6 +73,16 @@ Options:
                              is all off)
   --test-only=WORD           report only warnings/errors containing WORD
                              literally
+  --fix                      EXPERIMENTAL - may create horrible results
+                             If correctable single-line errors exist, create
+                             "<inputfile>.EXPERIMENTAL-checkpatch-fixes"
+                             with potential errors corrected to the preferred
+                             checkpatch style
+  --fix-inplace              EXPERIMENTAL - may create horrible results
+                             Is the same as --fix, but overwrites the input
+                             file.  It's your fault if there's no backup or git
+  --ignore-perl-version      override checking of perl version.  expect
+                             runtime errors.
   -h, --help, --version      display this help and exit
 
 When FILE is - read standard input.
@@ -106,12 +128,16 @@ GetOptions(
        'subjective!'   => \$check,
        'strict!'       => \$check,
        'ignore=s'      => \@ignore,
+       'types=s'       => \@use,
        'show-types!'   => \$show_types,
+       'max-line-length=i' => \$max_line_length,
        'root=s'        => \$root,
        'summary!'      => \$summary,
        'mailback!'     => \$mailback,
        'summary-file!' => \$summary_file,
-
+       'fix!'          => \$fix,
+       'fix-inplace!'  => \$fix_inplace,
+       'ignore-perl-version!' => \$ignore_perl_version,
        'debug=s'       => \%debug,
        'test-only=s'   => \$tst_only,
        'h|help'        => \$help,
@@ -120,26 +146,55 @@ GetOptions(
 
 help(0) if ($help);
 
+$fix = 1 if ($fix_inplace);
+$check_orig = $check;
+
 my $exit = 0;
 
+if ($^V && $^V lt $minimum_perl_version) {
+       printf "$P: requires at least perl version %vd\n", $minimum_perl_version;
+       if (!$ignore_perl_version) {
+               exit(1);
+       }
+}
+
 if ($#ARGV < 0) {
        print "$P: no input files\n";
        exit(1);
 }
 
-@ignore = split(/,/, join(',',@ignore));
-foreach my $word (@ignore) {
-       $word =~ s/\s*\n?$//g;
-       $word =~ s/^\s*//g;
-       $word =~ s/\s+/ /g;
-       $word =~ tr/[a-z]/[A-Z]/;
+sub hash_save_array_words {
+       my ($hashRef, $arrayRef) = @_;
+
+       my @array = split(/,/, join(',', @$arrayRef));
+       foreach my $word (@array) {
+               $word =~ s/\s*\n?$//g;
+               $word =~ s/^\s*//g;
+               $word =~ s/\s+/ /g;
+               $word =~ tr/[a-z]/[A-Z]/;
+
+               next if ($word =~ m/^\s*#/);
+               next if ($word =~ m/^\s*$/);
+
+               $hashRef->{$word}++;
+       }
+}
 
-       next if ($word =~ m/^\s*#/);
-       next if ($word =~ m/^\s*$/);
+sub hash_show_words {
+       my ($hashRef, $prefix) = @_;
 
-       $ignore_type{$word}++;
+       if ($quiet == 0 && keys %$hashRef) {
+               print "NOTE: $prefix message types:";
+               foreach my $word (sort keys %$hashRef) {
+                       print " $word";
+               }
+               print "\n\n";
+       }
 }
 
+hash_save_array_words(\%ignore_type, \@ignore);
+hash_save_array_words(\%use_type, \@use);
+
 my $dbg_values = 0;
 my $dbg_possible = 0;
 my $dbg_type = 0;
@@ -195,6 +250,11 @@ our $Sparse        = qr{
                        __ref|
                        __rcu
                }x;
+our $InitAttributePrefix = qr{__(?:mem|cpu|dev|net_|)};
+our $InitAttributeData = qr{$InitAttributePrefix(?:initdata\b)};
+our $InitAttributeConst = qr{$InitAttributePrefix(?:initconst\b)};
+our $InitAttributeInit = qr{$InitAttributePrefix(?:init\b)};
+our $InitAttribute = qr{$InitAttributeData|$InitAttributeConst|$InitAttributeInit};
 
 # Notes to $Attribute:
 # We need \b after 'init' otherwise 'initconst' will cause a false positive in a check
@@ -216,29 +276,45 @@ our $Attribute    = qr{
                        __deprecated|
                        __read_mostly|
                        __kprobes|
-                       __(?:mem|cpu|dev|)(?:initdata|initconst|init\b)|
+                       $InitAttribute|
                        ____cacheline_aligned|
                        ____cacheline_aligned_in_smp|
                        ____cacheline_internodealigned_in_smp|
                        __weak
                  }x;
 our $Modifier;
-our $Inline    = qr{inline|__always_inline|noinline};
+our $Inline    = qr{inline|__always_inline|noinline|__inline|__inline__};
 our $Member    = qr{->$Ident|\.$Ident|\[[^]]*\]};
 our $Lval      = qr{$Ident(?:$Member)*};
 
-our $Constant  = qr{(?i:(?:[0-9]+|0x[0-9a-f]+)[ul]*)};
-our $Assignment        = qr{(?:\*\=|/=|%=|\+=|-=|<<=|>>=|&=|\^=|\|=|=)};
-our $Compare    = qr{<=|>=|==|!=|<|>};
+our $Int_type  = qr{(?i)llu|ull|ll|lu|ul|l|u};
+our $Binary    = qr{(?i)0b[01]+$Int_type?};
+our $Hex       = qr{(?i)0x[0-9a-f]+$Int_type?};
+our $Int       = qr{[0-9]+$Int_type?};
+our $Octal     = qr{0[0-7]+$Int_type?};
+our $Float_hex = qr{(?i)0x[0-9a-f]+p-?[0-9]+[fl]?};
+our $Float_dec = qr{(?i)(?:[0-9]+\.[0-9]*|[0-9]*\.[0-9]+)(?:e-?[0-9]+)?[fl]?};
+our $Float_int = qr{(?i)[0-9]+e-?[0-9]+[fl]?};
+our $Float     = qr{$Float_hex|$Float_dec|$Float_int};
+our $Constant  = qr{$Float|$Binary|$Octal|$Hex|$Int};
+our $Assignment        = qr{\*\=|/=|%=|\+=|-=|<<=|>>=|&=|\^=|\|=|=};
+our $Compare    = qr{<=|>=|==|!=|<|(?<!-)>};
+our $Arithmetic = qr{\+|-|\*|\/|%};
 our $Operators = qr{
                        <=|>=|==|!=|
                        =>|->|<<|>>|<|>|!|~|
-                       &&|\|\||,|\^|\+\+|--|&|\||\+|-|\*|\/|%
+                       &&|\|\||,|\^|\+\+|--|&|\||$Arithmetic
                  }x;
 
+our $c90_Keywords = qr{do|for|while|if|else|return|goto|continue|switch|default|case|break}x;
+
 our $NonptrType;
+our $NonptrTypeMisordered;
+our $NonptrTypeWithAttr;
 our $Type;
+our $TypeMisordered;
 our $Declare;
+our $DeclareMisordered;
 
 our $NON_ASCII_UTF8    = qr{
        [\xC2-\xDF][\x80-\xBF]               # non-overlong 2-byte
@@ -262,10 +338,11 @@ our $typeTypedefs = qr{(?x:
 
 our $logFunctions = qr{(?x:
        printk(?:_ratelimited|_once|)|
-       [a-z0-9]+_(?:printk|emerg|alert|crit|err|warning|warn|notice|info|debug|dbg|vdbg|devel|cont|WARN)(?:_ratelimited|_once|)|
+       (?:[a-z0-9]+_){1,2}(?:printk|emerg|alert|crit|err|warning|warn|notice|info|debug|dbg|vdbg|devel|cont|WARN)(?:_ratelimited|_once|)|
        WARN(?:_RATELIMIT|_ONCE|)|
        panic|
-       MODULE_[A-Z_]+
+       MODULE_[A-Z_]+|
+       seq_vprintf|seq_printf|seq_puts
 )};
 
 our $signature_tags = qr{(?xi:
@@ -274,20 +351,41 @@ our $signature_tags = qr{(?xi:
        Tested-by:|
        Reviewed-by:|
        Reported-by:|
+       Suggested-by:|
        To:|
        Cc:
 )};
 
+our @typeListMisordered = (
+       qr{char\s+(?:un)?signed},
+       qr{int\s+(?:(?:un)?signed\s+)?short\s},
+       qr{int\s+short(?:\s+(?:un)?signed)},
+       qr{short\s+int(?:\s+(?:un)?signed)},
+       qr{(?:un)?signed\s+int\s+short},
+       qr{short\s+(?:un)?signed},
+       qr{long\s+int\s+(?:un)?signed},
+       qr{int\s+long\s+(?:un)?signed},
+       qr{long\s+(?:un)?signed\s+int},
+       qr{int\s+(?:un)?signed\s+long},
+       qr{int\s+(?:un)?signed},
+       qr{int\s+long\s+long\s+(?:un)?signed},
+       qr{long\s+long\s+int\s+(?:un)?signed},
+       qr{long\s+long\s+(?:un)?signed\s+int},
+       qr{long\s+long\s+(?:un)?signed},
+       qr{long\s+(?:un)?signed},
+);
+
 our @typeList = (
        qr{void},
-       qr{(?:unsigned\s+)?char},
-       qr{(?:unsigned\s+)?short},
-       qr{(?:unsigned\s+)?int},
-       qr{(?:unsigned\s+)?long},
-       qr{(?:unsigned\s+)?long\s+int},
-       qr{(?:unsigned\s+)?long\s+long},
-       qr{(?:unsigned\s+)?long\s+long\s+int},
-       qr{unsigned},
+       qr{(?:(?:un)?signed\s+)?char},
+       qr{(?:(?:un)?signed\s+)?short\s+int},
+       qr{(?:(?:un)?signed\s+)?short},
+       qr{(?:(?:un)?signed\s+)?int},
+       qr{(?:(?:un)?signed\s+)?long\s+int},
+       qr{(?:(?:un)?signed\s+)?long\s+long\s+int},
+       qr{(?:(?:un)?signed\s+)?long\s+long},
+       qr{(?:(?:un)?signed\s+)?long},
+       qr{(?:un)?signed},
        qr{float},
        qr{double},
        qr{bool},
@@ -297,11 +395,34 @@ our @typeList = (
        qr{${Ident}_t},
        qr{${Ident}_handler},
        qr{${Ident}_handler_fn},
+       @typeListMisordered,
 );
+our @typeListWithAttr = (
+       @typeList,
+       qr{struct\s+$InitAttribute\s+$Ident},
+       qr{union\s+$InitAttribute\s+$Ident},
+);
+
 our @modifierList = (
        qr{fastcall},
 );
 
+our @mode_permission_funcs = (
+       ["module_param", 3],
+       ["module_param_(?:array|named|string)", 4],
+       ["module_param_array_named", 5],
+       ["debugfs_create_(?:file|u8|u16|u32|u64|x8|x16|x32|x64|size_t|atomic_t|bool|blob|regset32|u32_array)", 2],
+       ["proc_create(?:_data|)", 2],
+       ["(?:CLASS|DEVICE|SENSOR)_ATTR", 2],
+);
+
+#Create a search pattern for all these functions to speed up a loop below
+our $mode_perms_search = "";
+foreach my $entry (@mode_permission_funcs) {
+       $mode_perms_search .= '|' if ($mode_perms_search ne "");
+       $mode_perms_search .= $entry->[0];
+}
+
 our $allowed_asm_includes = qr{(?x:
        irq|
        memory
@@ -311,6 +432,8 @@ our $allowed_asm_includes = qr{(?x:
 sub build_types {
        my $mods = "(?x:  \n" . join("|\n  ", @modifierList) . "\n)";
        my $all = "(?x:  \n" . join("|\n  ", @typeList) . "\n)";
+       my $Misordered = "(?x:  \n" . join("|\n  ", @typeListMisordered) . "\n)";
+       my $allWithAttr = "(?x:  \n" . join("|\n  ", @typeListWithAttr) . "\n)";
        $Modifier       = qr{(?:$Attribute|$Sparse|$mods)};
        $NonptrType     = qr{
                        (?:$Modifier\s+|const\s+)*
@@ -321,16 +444,37 @@ sub build_types {
                        )
                        (?:\s+$Modifier|\s+const)*
                  }x;
+       $NonptrTypeMisordered   = qr{
+                       (?:$Modifier\s+|const\s+)*
+                       (?:
+                               (?:${Misordered}\b)
+                       )
+                       (?:\s+$Modifier|\s+const)*
+                 }x;
+       $NonptrTypeWithAttr     = qr{
+                       (?:$Modifier\s+|const\s+)*
+                       (?:
+                               (?:typeof|__typeof__)\s*\([^\)]*\)|
+                               (?:$typeTypedefs\b)|
+                               (?:${allWithAttr}\b)
+                       )
+                       (?:\s+$Modifier|\s+const)*
+                 }x;
        $Type   = qr{
                        $NonptrType
-                       (?:(?:\s|\*|\[\])+\s*const|(?:\s|\*|\[\])+|(?:\s*\[\s*\])+)?
+                       (?:(?:\s|\*|\[\])+\s*const|(?:\s|\*\s*(?:const\s*)?|\[\])+|(?:\s*\[\s*\])+)?
+                       (?:\s+$Inline|\s+$Modifier)*
+                 }x;
+       $TypeMisordered = qr{
+                       $NonptrTypeMisordered
+                       (?:(?:\s|\*|\[\])+\s*const|(?:\s|\*\s*(?:const\s*)?|\[\])+|(?:\s*\[\s*\])+)?
                        (?:\s+$Inline|\s+$Modifier)*
                  }x;
-       $Declare        = qr{(?:$Storage\s+)?$Type};
+       $Declare        = qr{(?:$Storage\s+(?:$Inline\s+)?)?$Type};
+       $DeclareMisordered      = qr{(?:$Storage\s+(?:$Inline\s+)?)?$TypeMisordered};
 }
 build_types();
 
-
 our $Typecast  = qr{\s*(\(\s*$NonptrType\s*\)){0,1}\s*};
 
 # Using $balanced_parens, $LvalOrFunc, or $FuncArg
@@ -338,43 +482,150 @@ our $Typecast    = qr{\s*(\(\s*$NonptrType\s*\)){0,1}\s*};
 # Any use must be runtime checked with $^V
 
 our $balanced_parens = qr/(\((?:[^\(\)]++|(?-1))*\))/;
-our $LvalOrFunc        = qr{($Lval)\s*($balanced_parens{0,1})\s*};
+our $LvalOrFunc        = qr{((?:[\&\*]\s*)?$Lval)\s*($balanced_parens{0,1})\s*};
 our $FuncArg = qr{$Typecast{0,1}($LvalOrFunc|$Constant)};
 
+our $declaration_macros = qr{(?x:
+       (?:$Storage\s+)?(?:[A-Z_][A-Z0-9]*_){0,2}(?:DEFINE|DECLARE)(?:_[A-Z0-9]+){1,2}\s*\(|
+       (?:$Storage\s+)?LIST_HEAD\s*\(|
+       (?:$Storage\s+)?${Type}\s+uninitialized_var\s*\(
+)};
+
 sub deparenthesize {
        my ($string) = @_;
        return "" if (!defined($string));
-       $string =~ s@^\s*\(\s*@@g;
-       $string =~ s@\s*\)\s*$@@g;
+
+       while ($string =~ /^\s*\(.*\)\s*$/) {
+               $string =~ s@^\s*\(\s*@@;
+               $string =~ s@\s*\)\s*$@@;
+       }
+
        $string =~ s@\s+@ @g;
+
        return $string;
 }
 
-$chk_signoff = 0 if ($file);
+sub seed_camelcase_file {
+       my ($file) = @_;
 
-my @dep_includes = ();
-my @dep_functions = ();
-my $removal = "Documentation/feature-removal-schedule.txt";
-if ($tree && -f "$root/$removal") {
-       open(my $REMOVE, '<', "$root/$removal") ||
-                               die "$P: $removal: open failed - $!\n";
-       while (<$REMOVE>) {
-               if (/^Check:\s+(.*\S)/) {
-                       for my $entry (split(/[, ]+/, $1)) {
-                               if ($entry =~ m@include/(.*)@) {
-                                       push(@dep_includes, $1);
-
-                               } elsif ($entry !~ m@/@) {
-                                       push(@dep_functions, $entry);
-                               }
-                       }
+       return if (!(-f $file));
+
+       local $/;
+
+       open(my $include_file, '<', "$file")
+           or warn "$P: Can't read '$file' $!\n";
+       my $text = <$include_file>;
+       close($include_file);
+
+       my @lines = split('\n', $text);
+
+       foreach my $line (@lines) {
+               next if ($line !~ /(?:[A-Z][a-z]|[a-z][A-Z])/);
+               if ($line =~ /^[ \t]*(?:#[ \t]*define|typedef\s+$Type)\s+(\w*(?:[A-Z][a-z]|[a-z][A-Z])\w*)/) {
+                       $camelcase{$1} = 1;
+               } elsif ($line =~ /^\s*$Declare\s+(\w*(?:[A-Z][a-z]|[a-z][A-Z])\w*)\s*[\(\[,;]/) {
+                       $camelcase{$1} = 1;
+               } elsif ($line =~ /^\s*(?:union|struct|enum)\s+(\w*(?:[A-Z][a-z]|[a-z][A-Z])\w*)\s*[;\{]/) {
+                       $camelcase{$1} = 1;
+               }
+       }
+}
+
+my $camelcase_seeded = 0;
+sub seed_camelcase_includes {
+       return if ($camelcase_seeded);
+
+       my $files;
+       my $camelcase_cache = "";
+       my @include_files = ();
+
+       $camelcase_seeded = 1;
+
+       if (-e ".git") {
+               my $git_last_include_commit = `git log --no-merges --pretty=format:"%h%n" -1 -- include`;
+               chomp $git_last_include_commit;
+               $camelcase_cache = ".checkpatch-camelcase.git.$git_last_include_commit";
+       } else {
+               my $last_mod_date = 0;
+               $files = `find $root/include -name "*.h"`;
+               @include_files = split('\n', $files);
+               foreach my $file (@include_files) {
+                       my $date = POSIX::strftime("%Y%m%d%H%M",
+                                                  localtime((stat $file)[9]));
+                       $last_mod_date = $date if ($last_mod_date < $date);
+               }
+               $camelcase_cache = ".checkpatch-camelcase.date.$last_mod_date";
+       }
+
+       if ($camelcase_cache ne "" && -f $camelcase_cache) {
+               open(my $camelcase_file, '<', "$camelcase_cache")
+                   or warn "$P: Can't read '$camelcase_cache' $!\n";
+               while (<$camelcase_file>) {
+                       chomp;
+                       $camelcase{$_} = 1;
+               }
+               close($camelcase_file);
+
+               return;
+       }
+
+       if (-e ".git") {
+               $files = `git ls-files "include/*.h"`;
+               @include_files = split('\n', $files);
+       }
+
+       foreach my $file (@include_files) {
+               seed_camelcase_file($file);
+       }
+
+       if ($camelcase_cache ne "") {
+               unlink glob ".checkpatch-camelcase.*";
+               open(my $camelcase_file, '>', "$camelcase_cache")
+                   or warn "$P: Can't write '$camelcase_cache' $!\n";
+               foreach (sort { lc($a) cmp lc($b) } keys(%camelcase)) {
+                       print $camelcase_file ("$_\n");
                }
+               close($camelcase_file);
+       }
+}
+
+sub git_commit_info {
+       my ($commit, $id, $desc) = @_;
+
+       return ($id, $desc) if ((which("git") eq "") || !(-e ".git"));
+
+       my $output = `git log --no-color --format='%H %s' -1 $commit 2>&1`;
+       $output =~ s/^\s*//gm;
+       my @lines = split("\n", $output);
+
+       if ($lines[0] =~ /^error: short SHA1 $commit is ambiguous\./) {
+# Maybe one day convert this block of bash into something that returns
+# all matching commit ids, but it's very slow...
+#
+#              echo "checking commits $1..."
+#              git rev-list --remotes | grep -i "^$1" |
+#              while read line ; do
+#                  git log --format='%H %s' -1 $line |
+#                  echo "commit $(cut -c 1-12,41-)"
+#              done
+       } elsif ($lines[0] =~ /^fatal: ambiguous argument '$commit': unknown revision or path not in the working tree\./) {
+       } else {
+               $id = substr($lines[0], 0, 12);
+               $desc = substr($lines[0], 41);
        }
-       close($REMOVE);
+
+       return ($id, $desc);
 }
 
+$chk_signoff = 0 if ($file);
+
 my @rawlines = ();
 my @lines = ();
+my @fixed = ();
+my @fixed_inserted = ();
+my @fixed_deleted = ();
+my $fixlinenr = -1;
+
 my $vname;
 for my $filename (@ARGV) {
        my $FILE;
@@ -402,6 +653,10 @@ for my $filename (@ARGV) {
        }
        @rawlines = ();
        @lines = ();
+       @fixed = ();
+       @fixed_inserted = ();
+       @fixed_deleted = ();
+       $fixlinenr = -1;
 }
 
 exit($exit);
@@ -421,7 +676,7 @@ sub top_of_kernel_tree {
                }
        }
        return 1;
-    }
+}
 
 sub parse_email {
        my ($formatted_email) = @_;
@@ -442,7 +697,7 @@ sub parse_email {
                $comment = $2 if defined $2;
                $formatted_email =~ s/$address.*$//;
                $name = $formatted_email;
-               $name =~ s/^\s+|\s+$//g;
+               $name = trim($name);
                $name =~ s/^\"|\"$//g;
                # If there's a name left after stripping spaces and
                # leading quotes, and the address doesn't have both
@@ -457,9 +712,9 @@ sub parse_email {
                }
        }
 
-       $name =~ s/^\s+|\s+$//g;
+       $name = trim($name);
        $name =~ s/^\"|\"$//g;
-       $address =~ s/^\s+|\s+$//g;
+       $address = trim($address);
        $address =~ s/^\<|\>$//g;
 
        if ($name =~ /[^\w \-]/i) { ##has "must quote" chars
@@ -475,9 +730,9 @@ sub format_email {
 
        my $formatted_email;
 
-       $name =~ s/^\s+|\s+$//g;
+       $name = trim($name);
        $name =~ s/^\"|\"$//g;
-       $address =~ s/^\s+|\s+$//g;
+       $address = trim($address);
 
        if ($name =~ /[^\w \-]/i) { ##has "must quote" chars
                $name =~ s/(?<!\\)"/\\"/g; ##escape quotes
@@ -493,6 +748,18 @@ sub format_email {
        return $formatted_email;
 }
 
+sub which {
+       my ($bin) = @_;
+
+       foreach my $path (split(/:/, $ENV{PATH})) {
+               if (-e "$path/$bin") {
+                       return "$path/$bin";
+               }
+       }
+
+       return "";
+}
+
 sub which_conf {
        my ($conf) = @_;
 
@@ -642,6 +909,13 @@ sub sanitise_line {
        return $res;
 }
 
+sub get_quoted_string {
+       my ($line, $rawline) = @_;
+
+       return "" if ($line !~ m/(\"[X]+\")/g);
+       return substr($rawline, $-[0], $+[0] - $-[0]);
+}
+
 sub ctx_statement_block {
        my ($linenr, $remain, $off) = @_;
        my $line = $linenr - 1;
@@ -1264,19 +1538,25 @@ sub possible {
 my $prefix = '';
 
 sub show_type {
-       return !defined $ignore_type{$_[0]};
+       my ($type) = @_;
+
+       return defined $use_type{$type} if (scalar keys %use_type > 0);
+
+       return !defined $ignore_type{$type};
 }
 
 sub report {
-       if (!show_type($_[1]) ||
-           (defined $tst_only && $_[2] !~ /\Q$tst_only\E/)) {
+       my ($level, $type, $msg) = @_;
+
+       if (!show_type($type) ||
+           (defined $tst_only && $msg !~ /\Q$tst_only\E/)) {
                return 0;
        }
        my $line;
        if ($show_types) {
-               $line = "$prefix$_[0]:$_[1]: $_[2]\n";
+               $line = "$prefix$level:$type: $msg\n";
        } else {
-               $line = "$prefix$_[0]: $_[2]\n";
+               $line = "$prefix$level: $msg\n";
        }
        $line = (split('\n', $line))[0] . "\n" if ($terse);
 
@@ -1284,27 +1564,124 @@ sub report {
 
        return 1;
 }
+
 sub report_dump {
        our @report;
 }
 
+sub fixup_current_range {
+       my ($lineRef, $offset, $length) = @_;
+
+       if ($$lineRef =~ /^\@\@ -\d+,\d+ \+(\d+),(\d+) \@\@/) {
+               my $o = $1;
+               my $l = $2;
+               my $no = $o + $offset;
+               my $nl = $l + $length;
+               $$lineRef =~ s/\+$o,$l \@\@/\+$no,$nl \@\@/;
+       }
+}
+
+sub fix_inserted_deleted_lines {
+       my ($linesRef, $insertedRef, $deletedRef) = @_;
+
+       my $range_last_linenr = 0;
+       my $delta_offset = 0;
+
+       my $old_linenr = 0;
+       my $new_linenr = 0;
+
+       my $next_insert = 0;
+       my $next_delete = 0;
+
+       my @lines = ();
+
+       my $inserted = @{$insertedRef}[$next_insert++];
+       my $deleted = @{$deletedRef}[$next_delete++];
+
+       foreach my $old_line (@{$linesRef}) {
+               my $save_line = 1;
+               my $line = $old_line;   #don't modify the array
+               if ($line =~ /^(?:\+\+\+\|\-\-\-)\s+\S+/) {     #new filename
+                       $delta_offset = 0;
+               } elsif ($line =~ /^\@\@ -\d+,\d+ \+\d+,\d+ \@\@/) {    #new hunk
+                       $range_last_linenr = $new_linenr;
+                       fixup_current_range(\$line, $delta_offset, 0);
+               }
+
+               while (defined($deleted) && ${$deleted}{'LINENR'} == $old_linenr) {
+                       $deleted = @{$deletedRef}[$next_delete++];
+                       $save_line = 0;
+                       fixup_current_range(\$lines[$range_last_linenr], $delta_offset--, -1);
+               }
+
+               while (defined($inserted) && ${$inserted}{'LINENR'} == $old_linenr) {
+                       push(@lines, ${$inserted}{'LINE'});
+                       $inserted = @{$insertedRef}[$next_insert++];
+                       $new_linenr++;
+                       fixup_current_range(\$lines[$range_last_linenr], $delta_offset++, 1);
+               }
+
+               if ($save_line) {
+                       push(@lines, $line);
+                       $new_linenr++;
+               }
+
+               $old_linenr++;
+       }
+
+       return @lines;
+}
+
+sub fix_insert_line {
+       my ($linenr, $line) = @_;
+
+       my $inserted = {
+               LINENR => $linenr,
+               LINE => $line,
+       };
+       push(@fixed_inserted, $inserted);
+}
+
+sub fix_delete_line {
+       my ($linenr, $line) = @_;
+
+       my $deleted = {
+               LINENR => $linenr,
+               LINE => $line,
+       };
+
+       push(@fixed_deleted, $deleted);
+}
+
 sub ERROR {
-       if (report("ERROR", $_[0], $_[1])) {
+       my ($type, $msg) = @_;
+
+       if (report("ERROR", $type, $msg)) {
                our $clean = 0;
                our $cnt_error++;
+               return 1;
        }
+       return 0;
 }
 sub WARN {
-       if (report("WARNING", $_[0], $_[1])) {
+       my ($type, $msg) = @_;
+
+       if (report("WARNING", $type, $msg)) {
                our $clean = 0;
                our $cnt_warn++;
+               return 1;
        }
+       return 0;
 }
 sub CHK {
-       if ($check && report("CHECK", $_[0], $_[1])) {
+       my ($type, $msg) = @_;
+
+       if ($check && report("CHECK", $type, $msg)) {
                our $clean = 0;
                our $cnt_chk++;
+               return 1;
        }
+       return 0;
 }
 
 sub check_absolute_file {
@@ -1335,6 +1712,53 @@ sub check_absolute_file {
        }
 }
 
+sub trim {
+       my ($string) = @_;
+
+       $string =~ s/^\s+|\s+$//g;
+
+       return $string;
+}
+
+sub ltrim {
+       my ($string) = @_;
+
+       $string =~ s/^\s+//;
+
+       return $string;
+}
+
+sub rtrim {
+       my ($string) = @_;
+
+       $string =~ s/\s+$//;
+
+       return $string;
+}
+
+sub string_find_replace {
+       my ($string, $find, $replace) = @_;
+
+       $string =~ s/$find/$replace/g;
+
+       return $string;
+}
+
+sub tabify {
+       my ($leading) = @_;
+
+       my $source_indent = 8;
+       my $max_spaces_before_tab = $source_indent - 1;
+       my $spaces_to_tab = " " x $source_indent;
+
+       #convert leading spaces to tabs
+       1 while $leading =~ s@^([\t]*)$spaces_to_tab@$1\t@g;
+       #Remove spaces before a tab
+       1 while $leading =~ s@^([\t]*)( {1,$max_spaces_before_tab})\t@$1\t@g;
+
+       return "$leading";
+}
+
 sub pos_last_openparen {
        my ($line) = @_;
 
@@ -1362,7 +1786,7 @@ sub pos_last_openparen {
                }
        }
 
-       return $last_openparen + 1;
+       return length(expand_tabs(substr($line, 0, $last_openparen))) + 1;
 }
 
 sub process {
@@ -1383,8 +1807,12 @@ sub process {
        my $signoff = 0;
        my $is_patch = 0;
 
-       my $in_header_lines = 1;
+       my $in_header_lines = $file ? 0 : 1;
        my $in_commit_log = 0;          #Scanning lines before patch
+       my $reported_maintainer_file = 0;
+       my $non_utf8_charset = 0;
+
+       my $last_blank_line = 0;
 
        our @report = ();
        our $cnt_lines = 0;
@@ -1410,18 +1838,24 @@ sub process {
        my %suppress_export;
        my $suppress_statement = 0;
 
+       my %signatures = ();
+
        # Pre-scan the patch sanitizing the lines.
        # Pre-scan the patch looking for any __setup documentation.
        #
        my @setup_docs = ();
        my $setup_docs = 0;
 
+       my $camelcase_file_seeded = 0;
+
        sanitise_line_reset();
        my $line;
        foreach my $rawline (@rawlines) {
                $linenr++;
                $line = $rawline;
 
+               push(@fixed, $rawline) if ($fix);
+
                if ($rawline=~/^\+\+\+\s+(\S+)/) {
                        $setup_docs = 0;
                        if ($1 =~ m@Documentation/kernel-parameters.txt$@) {
@@ -1497,8 +1931,12 @@ sub process {
 
        $realcnt = 0;
        $linenr = 0;
+       $fixlinenr = -1;
        foreach my $line (@lines) {
                $linenr++;
+               $fixlinenr++;
+               my $sline = $line;      #copy of $line
+               $sline =~ s/$;/ /g;     #with comments as spaces
 
                my $rawline = $rawlines[$linenr - 1];
 
@@ -1551,14 +1989,16 @@ sub process {
                $here = "#$linenr: " if (!$file);
                $here = "#$realline: " if ($file);
 
+               my $found_file = 0;
                # extract the filename as it passes
                if ($line =~ /^diff --git.*?(\S+)$/) {
                        $realfile = $1;
-                       $realfile =~ s@^([^/]*)/@@;
+                       $realfile =~ s@^([^/]*)/@@ if (!$file);
                        $in_commit_log = 0;
+                       $found_file = 1;
                } elsif ($line =~ /^\+\+\+\s+(\S+)/) {
                        $realfile = $1;
-                       $realfile =~ s@^([^/]*)/@@;
+                       $realfile =~ s@^([^/]*)/@@ if (!$file);
                        $in_commit_log = 0;
 
                        $p1_prefix = $1;
@@ -1572,6 +2012,15 @@ sub process {
                                ERROR("MODIFIED_INCLUDE_ASM",
                                      "do not modify files in include/asm, change architecture specific files in include/asm-<architecture>\n" . "$here$rawline\n");
                        }
+                       $found_file = 1;
+               }
+
+               if ($found_file) {
+                       if ($realfile =~ m@^(drivers/net/|net/)@) {
+                               $check = 1;
+                       } else {
+                               $check = $check_orig;
+                       }
                        next;
                }
 
@@ -1586,7 +2035,8 @@ sub process {
 # Check for incorrect file permissions
                if ($line =~ /^new (file )?mode.*[7531]\d{0,2}$/) {
                        my $permhere = $here . "FILE: $realfile\n";
-                       if ($realfile =~ /(Makefile|Kconfig|\.c|\.h|\.S|\.tmpl)$/) {
+                       if ($realfile !~ m@scripts/@ &&
+                           $realfile !~ /\.(py|pl|awk|sh)$/) {
                                ERROR("EXECUTE_PERMISSIONS",
                                      "do not set execute permissions for source files\n" . $permhere);
                        }
@@ -1600,24 +2050,41 @@ sub process {
 
 # Check signature styles
                if (!$in_header_lines &&
-                   $line =~ /^(\s*)($signature_tags)(\s*)(.*)/) {
+                   $line =~ /^(\s*)([a-z0-9_-]+by:|$signature_tags)(\s*)(.*)/i) {
                        my $space_before = $1;
                        my $sign_off = $2;
                        my $space_after = $3;
                        my $email = $4;
                        my $ucfirst_sign_off = ucfirst(lc($sign_off));
 
-                       if (defined $space_before && $space_before ne "") {
+                       if ($sign_off !~ /$signature_tags/) {
                                WARN("BAD_SIGN_OFF",
-                                    "Do not use whitespace before $ucfirst_sign_off\n" . $herecurr);
+                                    "Non-standard signature: $sign_off\n" . $herecurr);
+                       }
+                       if (defined $space_before && $space_before ne "") {
+                               if (WARN("BAD_SIGN_OFF",
+                                        "Do not use whitespace before $ucfirst_sign_off\n" . $herecurr) &&
+                                   $fix) {
+                                       $fixed[$fixlinenr] =
+                                           "$ucfirst_sign_off $email";
+                               }
                        }
                        if ($sign_off =~ /-by:$/i && $sign_off ne $ucfirst_sign_off) {
-                               WARN("BAD_SIGN_OFF",
-                                    "'$ucfirst_sign_off' is the preferred signature form\n" . $herecurr);
+                               if (WARN("BAD_SIGN_OFF",
+                                        "'$ucfirst_sign_off' is the preferred signature form\n" . $herecurr) &&
+                                   $fix) {
+                                       $fixed[$fixlinenr] =
+                                           "$ucfirst_sign_off $email";
+                               }
+
                        }
                        if (!defined $space_after || $space_after ne " ") {
-                               WARN("BAD_SIGN_OFF",
-                                    "Use a single space after $ucfirst_sign_off\n" . $herecurr);
+                               if (WARN("BAD_SIGN_OFF",
+                                        "Use a single space after $ucfirst_sign_off\n" . $herecurr) &&
+                                   $fix) {
+                                       $fixed[$fixlinenr] =
+                                           "$ucfirst_sign_off $email";
+                               }
                        }
 
                        my ($email_name, $email_address, $comment) = parse_email($email);
@@ -1638,6 +2105,57 @@ sub process {
                                             "email address '$email' might be better as '$suggested_email$comment'\n" . $herecurr);
                                }
                        }
+
+# Check for duplicate signatures
+                       my $sig_nospace = $line;
+                       $sig_nospace =~ s/\s//g;
+                       $sig_nospace = lc($sig_nospace);
+                       if (defined $signatures{$sig_nospace}) {
+                               WARN("BAD_SIGN_OFF",
+                                    "Duplicate signature\n" . $herecurr);
+                       } else {
+                               $signatures{$sig_nospace} = 1;
+                       }
+               }
+
+# Check for old stable address
+               if ($line =~ /^\s*cc:\s*.*<?\bstable\@kernel\.org\b>?.*$/i) {
+                       ERROR("STABLE_ADDRESS",
+                             "The 'stable' address should be 'stable\@vger.kernel.org'\n" . $herecurr);
+               }
+
+# Check for unwanted Gerrit info
+               if ($in_commit_log && $line =~ /^\s*change-id:/i) {
+                       ERROR("GERRIT_CHANGE_ID",
+                             "Remove Gerrit Change-Id's before submitting upstream.\n" . $herecurr);
+               }
+
+# Check for improperly formed commit descriptions
+               if ($in_commit_log &&
+                   $line =~ /\bcommit\s+[0-9a-f]{5,}/i &&
+                   !($line =~ /\b[Cc]ommit [0-9a-f]{12,40} \("/ ||
+                     ($line =~ /\b[Cc]ommit [0-9a-f]{12,40}\s*$/ &&
+                      defined $rawlines[$linenr] &&
+                      $rawlines[$linenr] =~ /^\s*\("/))) {
+                       $line =~ /\b(c)ommit\s+([0-9a-f]{5,})/i;
+                       my $init_char = $1;
+                       my $orig_commit = lc($2);
+                       my $id = '01234567890ab';
+                       my $desc = 'commit description';
+                       ($id, $desc) = git_commit_info($orig_commit, $id, $desc);
+                       ERROR("GIT_COMMIT_ID",
+                             "Please use 12 or more chars for the git commit ID like: '${init_char}ommit $id (\"$desc\")'\n" . $herecurr);
+               }
+
+# Check for added, moved or deleted files
+               if (!$reported_maintainer_file && !$in_commit_log &&
+                   ($line =~ /^(?:new|deleted) file mode\s*\d+\s*$/ ||
+                    $line =~ /^rename (?:from|to) [\w\/\.\-]+\s*$/ ||
+                    ($line =~ /\{\s*([\w\/\.\-]*)\s*\=\>\s*([\w\/\.\-]*)\s*\}/ &&
+                     (defined($1) || defined($2))))) {
+                       $reported_maintainer_file = 1;
+                       WARN("FILE_PATH_CHANGES",
+                            "added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);
                }
 
 # Check for wrappage within a valid hunk of the file
@@ -1677,15 +2195,23 @@ sub process {
 # Check if it's the start of a commit log
 # (not a header line and we haven't seen the patch filename)
                if ($in_header_lines && $realfile =~ /^$/ &&
-                   $rawline !~ /^(commit\b|from\b|[\w-]+:).+$/i) {
+                   !($rawline =~ /^\s+\S/ ||
+                     $rawline =~ /^(commit\b|from\b|[\w-]+:).*$/i)) {
                        $in_header_lines = 0;
                        $in_commit_log = 1;
                }
 
-# Still not yet in a patch, check for any UTF-8
-               if ($in_commit_log && $realfile =~ /^$/ &&
+# Check if there is UTF-8 in a commit log when a mail header has explicitly
+# declined it, i.e defined some charset where it is missing.
+               if ($in_header_lines &&
+                   $rawline =~ /^Content-Type:.+charset="(.+)".*$/ &&
+                   $1 !~ /utf-8/i) {
+                       $non_utf8_charset = 1;
+               }
+
+               if ($in_commit_log && $non_utf8_charset && $realfile =~ /^$/ &&
                    $rawline =~ /$NON_ASCII_UTF8/) {
-                       CHK("UTF8_BEFORE_PATCH",
+                       WARN("UTF8_BEFORE_PATCH",
                            "8-bit UTF-8 used in possible commit log\n" . $herecurr);
                }
 
@@ -1695,21 +2221,38 @@ sub process {
 #trailing whitespace
                if ($line =~ /^\+.*\015/) {
                        my $herevet = "$here\n" . cat_vet($rawline) . "\n";
-                       ERROR("DOS_LINE_ENDINGS",
-                             "DOS line endings\n" . $herevet);
-
+                       if (ERROR("DOS_LINE_ENDINGS",
+                                 "DOS line endings\n" . $herevet) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/[\s\015]+$//;
+                       }
                } elsif ($rawline =~ /^\+.*\S\s+$/ || $rawline =~ /^\+\s+$/) {
                        my $herevet = "$here\n" . cat_vet($rawline) . "\n";
-                       ERROR("TRAILING_WHITESPACE",
-                             "trailing whitespace\n" . $herevet);
+                       if (ERROR("TRAILING_WHITESPACE",
+                                 "trailing whitespace\n" . $herevet) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/\s+$//;
+                       }
+
                        $rpt_cleaners = 1;
                }
 
+# Check for FSF mailing addresses.
+               if ($rawline =~ /\bwrite to the Free/i ||
+                   $rawline =~ /\b59\s+Temple\s+Pl/i ||
+                   $rawline =~ /\b51\s+Franklin\s+St/i) {
+                       my $herevet = "$here\n" . cat_vet($rawline) . "\n";
+                       my $msg_type = \&ERROR;
+                       $msg_type = \&CHK if ($file);
+                       &{$msg_type}("FSF_MAILING_ADDRESS",
+                                    "Do not include the paragraph about writing to the Free Software Foundation's mailing address from the sample GPL notice. The FSF has changed addresses in the past, and may do so again. Linux already includes a copy of the GPL.\n" . $herevet)
+               }
+
 # check for Kconfig help text having a real description
 # Only applies when adding the entry originally, after that we do not have
 # sufficient context to determine whether it is indeed long enough.
                if ($realfile =~ /Kconfig/ &&
-                   $line =~ /.\s*config\s+/) {
+                   $line =~ /^\+\s*config\s+/) {
                        my $length = 0;
                        my $cnt = $realcnt;
                        my $ln = $linenr + 1;
@@ -1722,10 +2265,11 @@ sub process {
                                $is_end = $lines[$ln - 1] =~ /^\+/;
 
                                next if ($f =~ /^-/);
+                               last if (!$file && $f =~ /^\@\@/);
 
-                               if ($lines[$ln - 1] =~ /.\s*(?:bool|tristate)\s*\"/) {
+                               if ($lines[$ln - 1] =~ /^\+\s*(?:bool|tristate)\s*\"/) {
                                        $is_start = 1;
-                               } elsif ($lines[$ln - 1] =~ /.\s*(?:---)?help(?:---)?$/) {
+                               } elsif ($lines[$ln - 1] =~ /^\+\s*(?:---)?help(?:---)?$/) {
                                        $length = -1;
                                }
 
@@ -1744,6 +2288,13 @@ sub process {
                        #print "is_start<$is_start> is_end<$is_end> length<$length>\n";
                }
 
+# discourage the addition of CONFIG_EXPERIMENTAL in Kconfig.
+               if ($realfile =~ /Kconfig/ &&
+                   $line =~ /.\s*depends on\s+.*\bEXPERIMENTAL\b/) {
+                       WARN("CONFIG_EXPERIMENTAL",
+                            "Use of CONFIG_EXPERIMENTAL is deprecated. For alternatives, see https://lkml.org/lkml/2012/10/23/580\n");
+               }
+
                if (($realfile =~ /Makefile.*/ || $realfile =~ /Kbuild.*/) &&
                    ($line =~ /\+(EXTRA_[A-Z]+FLAGS).*/)) {
                        my $flag = $1;
@@ -1758,39 +2309,76 @@ sub process {
                             "Use of $flag is deprecated, please use \`$replacement->{$flag} instead.\n" . $herecurr) if ($replacement->{$flag});
                }
 
+# check for DT compatible documentation
+               if (defined $root &&
+                       (($realfile =~ /\.dtsi?$/ && $line =~ /^\+\s*compatible\s*=\s*\"/) ||
+                        ($realfile =~ /\.[ch]$/ && $line =~ /^\+.*\.compatible\s*=\s*\"/))) {
+
+                       my @compats = $rawline =~ /\"([a-zA-Z0-9\-\,\.\+_]+)\"/g;
+
+                       my $dt_path = $root . "/Documentation/devicetree/bindings/";
+                       my $vp_file = $dt_path . "vendor-prefixes.txt";
+
+                       foreach my $compat (@compats) {
+                               my $compat2 = $compat;
+                               $compat2 =~ s/\,[a-zA-Z0-9]*\-/\,<\.\*>\-/;
+                               my $compat3 = $compat;
+                               $compat3 =~ s/\,([a-z]*)[0-9]*\-/\,$1<\.\*>\-/;
+                               `grep -Erq "$compat|$compat2|$compat3" $dt_path`;
+                               if ( $? >> 8 ) {
+                                       WARN("UNDOCUMENTED_DT_STRING",
+                                            "DT compatible string \"$compat\" appears un-documented -- check $dt_path\n" . $herecurr);
+                               }
+
+                               next if $compat !~ /^([a-zA-Z0-9\-]+)\,/;
+                               my $vendor = $1;
+                               `grep -Eq "^$vendor\\b" $vp_file`;
+                               if ( $? >> 8 ) {
+                                       WARN("UNDOCUMENTED_DT_STRING",
+                                            "DT compatible string vendor \"$vendor\" appears un-documented -- check $vp_file\n" . $herecurr);
+                               }
+                       }
+               }
+
 # check we are in a valid source file if not then ignore this hunk
                next if ($realfile !~ /\.(h|c|s|S|pl|sh)$/);
 
-#80 column limit
+#line length limit
                if ($line =~ /^\+/ && $prevrawline !~ /\/\*\*/ &&
                    $rawline !~ /^.\s*\*\s*\@$Ident\s/ &&
                    !($line =~ /^\+\s*$logFunctions\s*\(\s*(?:(KERN_\S+\s*|[^"]*))?"[X\t]*"\s*(?:|,|\)\s*;)\s*$/ ||
                    $line =~ /^\+\s*"[^"]*"\s*(?:\s*|,|\)\s*;)\s*$/) &&
-                   $length > 80)
+                   $length > $max_line_length)
                {
                        WARN("LONG_LINE",
-                            "line over 80 characters\n" . $herecurr);
+                            "line over $max_line_length characters\n" . $herecurr);
                }
 
 # Check for user-visible strings broken across lines, which breaks the ability
-# to grep for the string.  Limited to strings used as parameters (those
-# following an open parenthesis), which almost completely eliminates false
-# positives, as well as warning only once per parameter rather than once per
-# line of the string.  Make an exception when the previous string ends in a
-# newline (multiple lines in one string constant) or \n\t (common in inline
-# assembly to indent the instruction on the following line).
+# to grep for the string.  Make exceptions when the previous string ends in a
+# newline (multiple lines in one string constant) or '\t', '\r', ';', or '{'
+# (common in inline assembly) or is a octal \123 or hexadecimal \xaf value
                if ($line =~ /^\+\s*"/ &&
                    $prevline =~ /"\s*$/ &&
-                   $prevline =~ /\(/ &&
-                   $prevrawline !~ /\\n(?:\\t)*"\s*$/) {
+                   $prevrawline !~ /(?:\\(?:[ntr]|[0-7]{1,3}|x[0-9a-fA-F]{1,2})|;\s*|\{\s*)"\s*$/) {
                        WARN("SPLIT_STRING",
                             "quoted string split across lines\n" . $hereprev);
                }
 
+# check for missing a space in a string concatination
+               if ($prevrawline =~ /[^\\]\w"$/ && $rawline =~ /^\+[\t ]+"\w/) {
+                       WARN('MISSING_SPACE',
+                            "break quoted strings at a space character\n" . $hereprev);
+               }
+
 # check for spaces before a quoted newline
                if ($rawline =~ /^.*\".*\s\\n/) {
-                       WARN("QUOTED_WHITESPACE_BEFORE_NEWLINE",
-                            "unnecessary whitespace before a quoted newline\n" . $herecurr);
+                       if (WARN("QUOTED_WHITESPACE_BEFORE_NEWLINE",
+                                "unnecessary whitespace before a quoted newline\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/^(\+.*\".*)\s+\\n/$1\\n/;
+                       }
+
                }
 
 # check for adding lines without a newline.
@@ -1821,16 +2409,25 @@ sub process {
                if ($rawline =~ /^\+\s* \t\s*\S/ ||
                    $rawline =~ /^\+\s*        \s*/) {
                        my $herevet = "$here\n" . cat_vet($rawline) . "\n";
-                       ERROR("CODE_INDENT",
-                             "code indent should use tabs where possible\n" . $herevet);
                        $rpt_cleaners = 1;
+                       if (ERROR("CODE_INDENT",
+                                 "code indent should use tabs where possible\n" . $herevet) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/^\+([ \t]+)/"\+" . tabify($1)/e;
+                       }
                }
 
 # check for space before tabs.
                if ($rawline =~ /^\+/ && $rawline =~ / \t/) {
                        my $herevet = "$here\n" . cat_vet($rawline) . "\n";
-                       WARN("SPACE_BEFORE_TAB",
-                            "please, no space before tabs\n" . $herevet);
+                       if (WARN("SPACE_BEFORE_TAB",
+                               "please, no space before tabs\n" . $herevet) &&
+                           $fix) {
+                               while ($fixed[$fixlinenr] =~
+                                          s/(^\+.*) {8,8}\t/$1\t\t/) {}
+                               while ($fixed[$fixlinenr] =~
+                                          s/(^\+.*) +\t/$1\t/) {}
+                       }
                }
 
 # check for && or || at the start of a line
@@ -1841,15 +2438,15 @@ sub process {
 
 # check multi-line statement indentation matches previous line
                if ($^V && $^V ge 5.10.0 &&
-                   $prevline =~ /^\+(\t*)(if \(|$Ident\().*(\&\&|\|\||,)\s*$/) {
+                   $prevline =~ /^\+([ \t]*)((?:$c90_Keywords(?:\s+if)\s*)|(?:$Declare\s*)?(?:$Ident|\(\s*\*\s*$Ident\s*\))\s*|$Ident\s*=\s*$Ident\s*)\(.*(\&\&|\|\||,)\s*$/) {
                        $prevline =~ /^\+(\t*)(.*)$/;
                        my $oldindent = $1;
                        my $rest = $2;
 
                        my $pos = pos_last_openparen($rest);
                        if ($pos >= 0) {
-                               $line =~ /^\+([ \t]*)/;
-                               my $newindent = $1;
+                               $line =~ /^(\+| )([ \t]*)/;
+                               my $newindent = $2;
 
                                my $goodtabindent = $oldindent .
                                        "\t" x ($pos / 8) .
@@ -1858,15 +2455,123 @@ sub process {
 
                                if ($newindent ne $goodtabindent &&
                                    $newindent ne $goodspaceindent) {
-                                       CHK("PARENTHESIS_ALIGNMENT",
-                                           "Alignment should match open parenthesis\n" . $hereprev);
+
+                                       if (CHK("PARENTHESIS_ALIGNMENT",
+                                               "Alignment should match open parenthesis\n" . $hereprev) &&
+                                           $fix && $line =~ /^\+/) {
+                                               $fixed[$fixlinenr] =~
+                                                   s/^\+[ \t]*/\+$goodtabindent/;
+                                       }
                                }
                        }
                }
 
-               if ($line =~ /^\+.*\*[ \t]*\)[ \t]+/) {
-                       CHK("SPACING",
-                           "No space is necessary after a cast\n" . $hereprev);
+               if ($line =~ /^\+.*\(\s*$Type\s*\)[ \t]+(?!$Assignment|$Arithmetic|{)/) {
+                       if (CHK("SPACING",
+                               "No space is necessary after a cast\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~
+                                   s/(\(\s*$Type\s*\))[ \t]+/$1/;
+                       }
+               }
+
+               if ($realfile =~ m@^(drivers/net/|net/)@ &&
+                   $prevrawline =~ /^\+[ \t]*\/\*[ \t]*$/ &&
+                   $rawline =~ /^\+[ \t]*\*/ &&
+                   $realline > 2) {
+                       WARN("NETWORKING_BLOCK_COMMENT_STYLE",
+                            "networking block comments don't use an empty /* line, use /* Comment...\n" . $hereprev);
+               }
+
+               if ($realfile =~ m@^(drivers/net/|net/)@ &&
+                   $prevrawline =~ /^\+[ \t]*\/\*/ &&          #starting /*
+                   $prevrawline !~ /\*\/[ \t]*$/ &&            #no trailing */
+                   $rawline =~ /^\+/ &&                        #line is new
+                   $rawline !~ /^\+[ \t]*\*/) {                #no leading *
+                       WARN("NETWORKING_BLOCK_COMMENT_STYLE",
+                            "networking block comments start with * on subsequent lines\n" . $hereprev);
+               }
+
+               if ($realfile =~ m@^(drivers/net/|net/)@ &&
+                   $rawline !~ m@^\+[ \t]*\*/[ \t]*$@ &&       #trailing */
+                   $rawline !~ m@^\+.*/\*.*\*/[ \t]*$@ &&      #inline /*...*/
+                   $rawline !~ m@^\+.*\*{2,}/[ \t]*$@ &&       #trailing **/
+                   $rawline =~ m@^\+[ \t]*.+\*\/[ \t]*$@) {    #non blank */
+                       WARN("NETWORKING_BLOCK_COMMENT_STYLE",
+                            "networking block comments put the trailing */ on a separate line\n" . $herecurr);
+               }
+
+# check for missing blank lines after struct/union declarations
+# with exceptions for various attributes and macros
+               if ($prevline =~ /^[\+ ]};?\s*$/ &&
+                   $line =~ /^\+/ &&
+                   !($line =~ /^\+\s*$/ ||
+                     $line =~ /^\+\s*EXPORT_SYMBOL/ ||
+                     $line =~ /^\+\s*MODULE_/i ||
+                     $line =~ /^\+\s*\#\s*(?:end|elif|else)/ ||
+                     $line =~ /^\+[a-z_]*init/ ||
+                     $line =~ /^\+\s*(?:static\s+)?[A-Z_]*ATTR/ ||
+                     $line =~ /^\+\s*DECLARE/ ||
+                     $line =~ /^\+\s*__setup/)) {
+                       if (CHK("LINE_SPACING",
+                               "Please use a blank line after function/struct/union/enum declarations\n" . $hereprev) &&
+                           $fix) {
+                               fix_insert_line($fixlinenr, "\+");
+                       }
+               }
+
+# check for multiple consecutive blank lines
+               if ($prevline =~ /^[\+ ]\s*$/ &&
+                   $line =~ /^\+\s*$/ &&
+                   $last_blank_line != ($linenr - 1)) {
+                       if (CHK("LINE_SPACING",
+                               "Please don't use multiple blank lines\n" . $hereprev) &&
+                           $fix) {
+                               fix_delete_line($fixlinenr, $rawline);
+                       }
+
+                       $last_blank_line = $linenr;
+               }
+
+# check for missing blank lines after declarations
+               if ($sline =~ /^\+\s+\S/ &&                     #Not at char 1
+                       # actual declarations
+                   ($prevline =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ ||
+                       # function pointer declarations
+                    $prevline =~ /^\+\s+$Declare\s*\(\s*\*\s*$Ident\s*\)\s*[=,;:\[\(]/ ||
+                       # foo bar; where foo is some local typedef or #define
+                    $prevline =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ ||
+                       # known declaration macros
+                    $prevline =~ /^\+\s+$declaration_macros/) &&
+                       # for "else if" which can look like "$Ident $Ident"
+                   !($prevline =~ /^\+\s+$c90_Keywords\b/ ||
+                       # other possible extensions of declaration lines
+                     $prevline =~ /(?:$Compare|$Assignment|$Operators)\s*$/ ||
+                       # not starting a section or a macro "\" extended line
+                     $prevline =~ /(?:\{\s*|\\)$/) &&
+                       # looks like a declaration
+                   !($sline =~ /^\+\s+$Declare\s*$Ident\s*[=,;:\[]/ ||
+                       # function pointer declarations
+                     $sline =~ /^\+\s+$Declare\s*\(\s*\*\s*$Ident\s*\)\s*[=,;:\[\(]/ ||
+                       # foo bar; where foo is some local typedef or #define
+                     $sline =~ /^\+\s+$Ident(?:\s+|\s*\*\s*)$Ident\s*[=,;\[]/ ||
+                       # known declaration macros
+                     $sline =~ /^\+\s+$declaration_macros/ ||
+                       # start of struct or union or enum
+                     $sline =~ /^\+\s+(?:union|struct|enum|typedef)\b/ ||
+                       # start or end of block or continuation of declaration
+                     $sline =~ /^\+\s+(?:$|[\{\}\.\#\"\?\:\(\[])/ ||
+                       # bitfield continuation
+                     $sline =~ /^\+\s+$Ident\s*:\s*\d+\s*[,;]/ ||
+                       # other possible extensions of declaration lines
+                     $sline =~ /^\+\s+\(?\s*(?:$Compare|$Assignment|$Operators)/) &&
+                       # indentation of previous and current line are the same
+                   (($prevline =~ /\+(\s+)\S/) && $sline =~ /^\+$1\S/)) {
+                       if (WARN("LINE_SPACING",
+                                "Missing a blank line after declarations\n" . $hereprev) &&
+                           $fix) {
+                               fix_insert_line($fixlinenr, "\+");
+                       }
                }
 
 # check for spaces at the beginning of a line.
@@ -1874,15 +2579,44 @@ sub process {
 #  1) within comments
 #  2) indented preprocessor commands
 #  3) hanging labels
-               if ($rawline =~ /^\+ / && $line !~ /\+ *(?:$;|#|$Ident:)/)  {
+               if ($rawline =~ /^\+ / && $line !~ /^\+ *(?:$;|#|$Ident:)/)  {
                        my $herevet = "$here\n" . cat_vet($rawline) . "\n";
-                       WARN("LEADING_SPACE",
-                            "please, no spaces at the start of a line\n" . $herevet);
+                       if (WARN("LEADING_SPACE",
+                                "please, no spaces at the start of a line\n" . $herevet) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/^\+([ \t]+)/"\+" . tabify($1)/e;
+                       }
                }
 
 # check we are in a valid C source file if not then ignore this hunk
                next if ($realfile !~ /\.(h|c)$/);
 
+# check indentation of any line with a bare else
+# if the previous line is a break or return and is indented 1 tab more...
+               if ($sline =~ /^\+([\t]+)(?:}[ \t]*)?else(?:[ \t]*{)?\s*$/) {
+                       my $tabs = length($1) + 1;
+                       if ($prevline =~ /^\+\t{$tabs,$tabs}(?:break|return)\b/) {
+                               WARN("UNNECESSARY_ELSE",
+                                    "else is not generally useful after a break or return\n" . $hereprev);
+                       }
+               }
+
+# check indentation of a line with a break;
+# if the previous line is a goto or return and is indented the same # of tabs
+               if ($sline =~ /^\+([\t]+)break\s*;\s*$/) {
+                       my $tabs = $1;
+                       if ($prevline =~ /^\+$tabs(?:goto|return)\b/) {
+                               WARN("UNNECESSARY_BREAK",
+                                    "break is not useful after a goto or return\n" . $hereprev);
+                       }
+               }
+
+# discourage the addition of CONFIG_EXPERIMENTAL in #if(def).
+               if ($line =~ /^\+\s*\#\s*if.*\bCONFIG_EXPERIMENTAL\b/) {
+                       WARN("CONFIG_EXPERIMENTAL",
+                            "Use of CONFIG_EXPERIMENTAL is deprecated. For alternatives, see https://lkml.org/lkml/2012/10/23/580\n");
+               }
+
 # check for RCS/CVS revision markers
                if ($rawline =~ /^\+.*\$(Revision|Log|Id)(?:\$|)/) {
                        WARN("CVS_KEYWORD",
@@ -1901,12 +2635,18 @@ sub process {
                              "use the SSYNC() macro in asm/blackfin.h\n" . $herevet);
                }
 
+# check for old HOTPLUG __dev<foo> section markings
+               if ($line =~ /\b(__dev(init|exit)(data|const|))\b/) {
+                       WARN("HOTPLUG_SECTION",
+                            "Using $1 is unnecessary\n" . $herecurr);
+               }
+
 # Check for potential 'bare' types
                my ($stat, $cond, $line_nr_next, $remain_next, $off_next,
                    $realline_next);
 #print "LINE<$line>\n";
                if ($linenr >= $suppress_statement &&
-                   $realcnt && $line =~ /.\s*\S/) {
+                   $realcnt && $sline =~ /.\s*\S/) {
                        ($stat, $cond, $line_nr_next, $remain_next, $off_next) =
                                ctx_statement_block($linenr, $realcnt, 0);
                        $stat =~ s/\n./\n /g;
@@ -2006,7 +2746,7 @@ sub process {
 
 # if/while/etc brace do not go on next line, unless defining a do while loop,
 # or if that brace on the next line is for something else
-               if ($line =~ /(.*)\b((?:if|while|for|switch)\s*\(|do\b|else\b)/ && $line !~ /^.\s*\#/) {
+               if ($line =~ /(.*)\b((?:if|while|for|switch|(?:[a-z_]+|)for_each[a-z_]+)\s*\(|do\b|else\b)/ && $line !~ /^.\s*\#/) {
                        my $pre_ctx = "$1$2";
 
                        my ($level, @ctx) = ctx_statement_level($linenr, $realcnt, 0);
@@ -2033,7 +2773,7 @@ sub process {
                        #print "realcnt<$realcnt> ctx_cnt<$ctx_cnt>\n";
                        #print "pre<$pre_ctx>\nline<$line>\nctx<$ctx>\nnext<$lines[$ctx_ln - 1]>\n";
 
-                       if ($ctx !~ /{\s*/ && defined($lines[$ctx_ln -1]) && $lines[$ctx_ln - 1] =~ /^\+\s*{/) {
+                       if ($ctx !~ /{\s*/ && defined($lines[$ctx_ln - 1]) && $lines[$ctx_ln - 1] =~ /^\+\s*{/) {
                                ERROR("OPEN_BRACE",
                                      "that open brace { should be on the previous line\n" .
                                        "$here\n$ctx\n$rawlines[$ctx_ln - 1]\n");
@@ -2052,7 +2792,7 @@ sub process {
                }
 
 # Check relative indent for conditionals and blocks.
-               if ($line =~ /\b(?:(?:if|while|for)\s*\(|do\b)/ && $line !~ /^.\s*#/ && $line !~ /\}\s*while\s*/) {
+               if ($line =~ /\b(?:(?:if|while|for|(?:[a-z_]+|)for_each[a-z_]+)\s*\(|do\b)/ && $line !~ /^.\s*#/ && $line !~ /\}\s*while\s*/) {
                        ($stat, $cond, $line_nr_next, $remain_next, $off_next) =
                                ctx_statement_block($linenr, $realcnt, 0)
                                        if (!defined $stat);
@@ -2155,7 +2895,7 @@ sub process {
                $prev_values = substr($curr_values, -1);
 
 #ignore lines not being added
-               if ($line=~/^[^\+]/) {next;}
+               next if ($line =~ /^[^\+]/);
 
 # TEST: allow direct testing of the type matcher.
                if ($dbg_type) {
@@ -2183,8 +2923,18 @@ sub process {
 # check for initialisation to aggregates open brace on the next line
                if ($line =~ /^.\s*{/ &&
                    $prevline =~ /(?:^|[^=])=\s*$/) {
-                       ERROR("OPEN_BRACE",
-                             "that open brace { should be on the previous line\n" . $hereprev);
+                       if (ERROR("OPEN_BRACE",
+                                 "that open brace { should be on the previous line\n" . $hereprev) &&
+                           $fix && $prevline =~ /^\+/ && $line =~ /^\+/) {
+                               fix_delete_line($fixlinenr - 1, $prevrawline);
+                               fix_delete_line($fixlinenr, $rawline);
+                               my $fixedline = $prevrawline;
+                               $fixedline =~ s/\s*=\s*$/ = {/;
+                               fix_insert_line($fixlinenr, $fixedline);
+                               $fixedline = $line;
+                               $fixedline =~ s/^(.\s*){\s*/$1/;
+                               fix_insert_line($fixlinenr, $fixedline);
+                       }
                }
 
 #
@@ -2196,15 +2946,25 @@ sub process {
                        my $path = $1;
                        if ($path =~ m{//}) {
                                ERROR("MALFORMED_INCLUDE",
-                                     "malformed #include filename\n" .
-                                       $herecurr);
+                                     "malformed #include filename\n" . $herecurr);
+                       }
+                       if ($path =~ "^uapi/" && $realfile =~ m@\binclude/uapi/@) {
+                               ERROR("UAPI_INCLUDE",
+                                     "No #include in ...include/uapi/... should use a uapi/ path prefix\n" . $herecurr);
                        }
                }
 
 # no C99 // comments
                if ($line =~ m{//}) {
-                       ERROR("C99_COMMENTS",
-                             "do not use C99 // comments\n" . $herecurr);
+                       if (ERROR("C99_COMMENTS",
+                                 "do not use C99 // comments\n" . $herecurr) &&
+                           $fix) {
+                               my $line = $fixed[$fixlinenr];
+                               if ($line =~ /\/\/(.*)$/) {
+                                       my $comment = trim($1);
+                                       $fixed[$fixlinenr] =~ s@\/\/(.*)$@/\* $comment \*/@;
+                               }
+                       }
                }
                # Remove C99 comments.
                $line =~ s@//.*@@;
@@ -2256,16 +3016,29 @@ sub process {
                }
 
 # check for global initialisers.
-               if ($line =~ /^.$Type\s*$Ident\s*(?:\s+$Modifier)*\s*=\s*(0|NULL|false)\s*;/) {
-                       ERROR("GLOBAL_INITIALISERS",
-                             "do not initialise globals to 0 or NULL\n" .
-                               $herecurr);
+               if ($line =~ /^\+(\s*$Type\s*$Ident\s*(?:\s+$Modifier))*\s*=\s*(0|NULL|false)\s*;/) {
+                       if (ERROR("GLOBAL_INITIALISERS",
+                                 "do not initialise globals to 0 or NULL\n" .
+                                     $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/($Type\s*$Ident\s*(?:\s+$Modifier))*\s*=\s*(0|NULL|false)\s*;/$1;/;
+                       }
                }
 # check for static initialisers.
-               if ($line =~ /\bstatic\s.*=\s*(0|NULL|false)\s*;/) {
-                       ERROR("INITIALISED_STATIC",
-                             "do not initialise statics to 0 or NULL\n" .
-                               $herecurr);
+               if ($line =~ /^\+.*\bstatic\s.*=\s*(0|NULL|false)\s*;/) {
+                       if (ERROR("INITIALISED_STATIC",
+                                 "do not initialise statics to 0 or NULL\n" .
+                                     $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/(\bstatic\s.*?)\s*=\s*(0|NULL|false)\s*;/$1;/;
+                       }
+               }
+
+# check for misordered declarations of char/short/int/long with signed/unsigned
+               while ($sline =~ m{(\b$TypeMisordered\b)}g) {
+                       my $tmp = trim($1);
+                       WARN("MISORDERED_TYPE",
+                            "type '$tmp' should be specified in [[un]signed] [short|int|long|long long] order\n" . $herecurr);
                }
 
 # check for static const char * arrays.
@@ -2282,10 +3055,29 @@ sub process {
                                $herecurr);
                }
 
-# check for declarations of struct pci_device_id
-               if ($line =~ /\bstruct\s+pci_device_id\s+\w+\s*\[\s*\]\s*\=\s*\{/) {
-                       WARN("DEFINE_PCI_DEVICE_TABLE",
-                            "Use DEFINE_PCI_DEVICE_TABLE for struct pci_device_id\n" . $herecurr);
+# check for non-global char *foo[] = {"bar", ...} declarations.
+               if ($line =~ /^.\s+(?:static\s+|const\s+)?char\s+\*\s*\w+\s*\[\s*\]\s*=\s*\{/) {
+                       WARN("STATIC_CONST_CHAR_ARRAY",
+                            "char * array declaration might be better as static const\n" .
+                               $herecurr);
+               }
+
+# check for function declarations without arguments like "int foo()"
+               if ($line =~ /(\b$Type\s+$Ident)\s*\(\s*\)/) {
+                       if (ERROR("FUNCTION_WITHOUT_ARGS",
+                                 "Bad function definition - $1() should probably be $1(void)\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/(\b($Type)\s+($Ident))\s*\(\s*\)/$2 $3(void)/;
+                       }
+               }
+
+# check for uses of DEFINE_PCI_DEVICE_TABLE
+               if ($line =~ /\bDEFINE_PCI_DEVICE_TABLE\s*\(\s*(\w+)\s*\)\s*=/) {
+                       if (WARN("DEFINE_PCI_DEVICE_TABLE",
+                                "Prefer struct pci_device_id over deprecated DEFINE_PCI_DEVICE_TABLE\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/\b(?:static\s+|)DEFINE_PCI_DEVICE_TABLE\s*\(\s*(\w+)\s*\)\s*=\s*/static const struct pci_device_id $1\[\] = /;
+                       }
                }
 
 # check for new typedefs, only function parameters and sparse annotations
@@ -2303,7 +3095,7 @@ sub process {
                # (char*[ const])
                while ($line =~ m{(\($NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)\))}g) {
                        #print "AA<$1>\n";
-                       my ($from, $to) = ($2, $2);
+                       my ($ident, $from, $to) = ($1, $2, $2);
 
                        # Should start with a space.
                        $to =~ s/^(\S)/ $1/;
@@ -2313,15 +3105,22 @@ sub process {
                        while ($to =~ s/\*\s+\*/\*\*/) {
                        }
 
-                       #print "from<$from> to<$to>\n";
+##                     print "1: from<$from> to<$to> ident<$ident>\n";
                        if ($from ne $to) {
-                               ERROR("POINTER_LOCATION",
-                                     "\"(foo$from)\" should be \"(foo$to)\"\n" .  $herecurr);
+                               if (ERROR("POINTER_LOCATION",
+                                         "\"(foo$from)\" should be \"(foo$to)\"\n" .  $herecurr) &&
+                                   $fix) {
+                                       my $sub_from = $ident;
+                                       my $sub_to = $ident;
+                                       $sub_to =~ s/\Q$from\E/$to/;
+                                       $fixed[$fixlinenr] =~
+                                           s@\Q$sub_from\E@$sub_to@;
+                               }
                        }
                }
                while ($line =~ m{(\b$NonptrType(\s*(?:$Modifier\b\s*|\*\s*)+)($Ident))}g) {
                        #print "BB<$1>\n";
-                       my ($from, $to, $ident) = ($2, $2, $3);
+                       my ($match, $from, $to, $ident) = ($1, $2, $2, $3);
 
                        # Should start with a space.
                        $to =~ s/^(\S)/ $1/;
@@ -2333,10 +3132,18 @@ sub process {
                        # Modifiers should have spaces.
                        $to =~ s/(\b$Modifier$)/$1 /;
 
-                       #print "from<$from> to<$to> ident<$ident>\n";
+##                     print "2: from<$from> to<$to> ident<$ident>\n";
                        if ($from ne $to && $ident !~ /^$Modifier$/) {
-                               ERROR("POINTER_LOCATION",
-                                     "\"foo${from}bar\" should be \"foo${to}bar\"\n" .  $herecurr);
+                               if (ERROR("POINTER_LOCATION",
+                                         "\"foo${from}bar\" should be \"foo${to}bar\"\n" .  $herecurr) &&
+                                   $fix) {
+
+                                       my $sub_from = $match;
+                                       my $sub_to = $match;
+                                       $sub_to =~ s/\Q$from\E/$to/;
+                                       $fixed[$fixlinenr] =~
+                                           s@\Q$sub_from\E@$sub_to@;
+                               }
                        }
                }
 
@@ -2382,25 +3189,150 @@ sub process {
                        }
                }
 
+               if ($line =~ /\bprintk\s*\(\s*KERN_([A-Z]+)/) {
+                       my $orig = $1;
+                       my $level = lc($orig);
+                       $level = "warn" if ($level eq "warning");
+                       my $level2 = $level;
+                       $level2 = "dbg" if ($level eq "debug");
+                       WARN("PREFER_PR_LEVEL",
+                            "Prefer [subsystem eg: netdev]_$level2([subsystem]dev, ... then dev_$level2(dev, ... then pr_$level(...  to printk(KERN_$orig ...\n" . $herecurr);
+               }
+
+               if ($line =~ /\bpr_warning\s*\(/) {
+                       if (WARN("PREFER_PR_LEVEL",
+                                "Prefer pr_warn(... to pr_warning(...\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~
+                                   s/\bpr_warning\b/pr_warn/;
+                       }
+               }
+
+               if ($line =~ /\bdev_printk\s*\(\s*KERN_([A-Z]+)/) {
+                       my $orig = $1;
+                       my $level = lc($orig);
+                       $level = "warn" if ($level eq "warning");
+                       $level = "dbg" if ($level eq "debug");
+                       WARN("PREFER_DEV_LEVEL",
+                            "Prefer dev_$level(... to dev_printk(KERN_$orig, ...\n" . $herecurr);
+               }
+
 # function brace can't be on same line, except for #defines of do while,
 # or if closed on same line
-               if (($line=~/$Type\s*$Ident\(.*\).*\s{/) and
+               if (($line=~/$Type\s*$Ident\(.*\).*\s*{/) and
                    !($line=~/\#\s*define.*do\s{/) and !($line=~/}/)) {
-                       ERROR("OPEN_BRACE",
-                             "open brace '{' following function declarations go on the next line\n" . $herecurr);
+                       if (ERROR("OPEN_BRACE",
+                                 "open brace '{' following function declarations go on the next line\n" . $herecurr) &&
+                           $fix) {
+                               fix_delete_line($fixlinenr, $rawline);
+                               my $fixed_line = $rawline;
+                               $fixed_line =~ /(^..*$Type\s*$Ident\(.*\)\s*){(.*)$/;
+                               my $line1 = $1;
+                               my $line2 = $2;
+                               fix_insert_line($fixlinenr, ltrim($line1));
+                               fix_insert_line($fixlinenr, "\+{");
+                               if ($line2 !~ /^\s*$/) {
+                                       fix_insert_line($fixlinenr, "\+\t" . trim($line2));
+                               }
+                       }
                }
 
 # open braces for enum, union and struct go on the same line.
                if ($line =~ /^.\s*{/ &&
                    $prevline =~ /^.\s*(?:typedef\s+)?(enum|union|struct)(?:\s+$Ident)?\s*$/) {
-                       ERROR("OPEN_BRACE",
-                             "open brace '{' following $1 go on the same line\n" . $hereprev);
+                       if (ERROR("OPEN_BRACE",
+                                 "open brace '{' following $1 go on the same line\n" . $hereprev) &&
+                           $fix && $prevline =~ /^\+/ && $line =~ /^\+/) {
+                               fix_delete_line($fixlinenr - 1, $prevrawline);
+                               fix_delete_line($fixlinenr, $rawline);
+                               my $fixedline = rtrim($prevrawline) . " {";
+                               fix_insert_line($fixlinenr, $fixedline);
+                               $fixedline = $rawline;
+                               $fixedline =~ s/^(.\s*){\s*/$1\t/;
+                               if ($fixedline !~ /^\+\s*$/) {
+                                       fix_insert_line($fixlinenr, $fixedline);
+                               }
+                       }
                }
 
 # missing space after union, struct or enum definition
-               if ($line =~ /^.\s*(?:typedef\s+)?(enum|union|struct)(?:\s+$Ident)?(?:\s+$Ident)?[=\{]/) {
-                   WARN("SPACING",
-                        "missing space after $1 definition\n" . $herecurr);
+               if ($line =~ /^.\s*(?:typedef\s+)?(enum|union|struct)(?:\s+$Ident){1,2}[=\{]/) {
+                       if (WARN("SPACING",
+                                "missing space after $1 definition\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~
+                                   s/^(.\s*(?:typedef\s+)?(?:enum|union|struct)(?:\s+$Ident){1,2})([=\{])/$1 $2/;
+                       }
+               }
+
+# Function pointer declarations
+# check spacing between type, funcptr, and args
+# canonical declaration is "type (*funcptr)(args...)"
+               if ($line =~ /^.\s*($Declare)\((\s*)\*(\s*)($Ident)(\s*)\)(\s*)\(/) {
+                       my $declare = $1;
+                       my $pre_pointer_space = $2;
+                       my $post_pointer_space = $3;
+                       my $funcname = $4;
+                       my $post_funcname_space = $5;
+                       my $pre_args_space = $6;
+
+# the $Declare variable will capture all spaces after the type
+# so check it for a missing trailing missing space but pointer return types
+# don't need a space so don't warn for those.
+                       my $post_declare_space = "";
+                       if ($declare =~ /(\s+)$/) {
+                               $post_declare_space = $1;
+                               $declare = rtrim($declare);
+                       }
+                       if ($declare !~ /\*$/ && $post_declare_space =~ /^$/) {
+                               WARN("SPACING",
+                                    "missing space after return type\n" . $herecurr);
+                               $post_declare_space = " ";
+                       }
+
+# unnecessary space "type  (*funcptr)(args...)"
+# This test is not currently implemented because these declarations are
+# equivalent to
+#      int  foo(int bar, ...)
+# and this is form shouldn't/doesn't generate a checkpatch warning.
+#
+#                      elsif ($declare =~ /\s{2,}$/) {
+#                              WARN("SPACING",
+#                                   "Multiple spaces after return type\n" . $herecurr);
+#                      }
+
+# unnecessary space "type ( *funcptr)(args...)"
+                       if (defined $pre_pointer_space &&
+                           $pre_pointer_space =~ /^\s/) {
+                               WARN("SPACING",
+                                    "Unnecessary space after function pointer open parenthesis\n" . $herecurr);
+                       }
+
+# unnecessary space "type (* funcptr)(args...)"
+                       if (defined $post_pointer_space &&
+                           $post_pointer_space =~ /^\s/) {
+                               WARN("SPACING",
+                                    "Unnecessary space before function pointer name\n" . $herecurr);
+                       }
+
+# unnecessary space "type (*funcptr )(args...)"
+                       if (defined $post_funcname_space &&
+                           $post_funcname_space =~ /^\s/) {
+                               WARN("SPACING",
+                                    "Unnecessary space after function pointer name\n" . $herecurr);
+                       }
+
+# unnecessary space "type (*funcptr) (args...)"
+                       if (defined $pre_args_space &&
+                           $pre_args_space =~ /^\s/) {
+                               WARN("SPACING",
+                                    "Unnecessary space before function pointer arguments\n" . $herecurr);
+                       }
+
+                       if (show_type("SPACING") && $fix) {
+                               $fixed[$fixlinenr] =~
+                                   s/^(.\s*)$Declare\s*\(\s*\*\s*$Ident\s*\)\s*\(/$1 . $declare . $post_declare_space . '(*' . $funcname . ')('/ex;
+                       }
                }
 
 # check for spacing round square brackets; allowed:
@@ -2412,8 +3344,12 @@ sub process {
                        if ($prefix !~ /$Type\s+$/ &&
                            ($where != 0 || $prefix !~ /^.\s+$/) &&
                            $prefix !~ /[{,]\s+$/) {
-                               ERROR("BRACKET_SPACE",
-                                     "space prohibited before open square bracket '['\n" . $herecurr);
+                               if (ERROR("BRACKET_SPACE",
+                                         "space prohibited before open square bracket '['\n" . $herecurr) &&
+                                   $fix) {
+                                   $fixed[$fixlinenr] =~
+                                       s/^(\+.*?)\s+\[/$1\[/;
+                               }
                        }
                }
 
@@ -2430,7 +3366,6 @@ sub process {
                                __attribute__|format|__extension__|
                                asm|__asm__)$/x)
                        {
-
                        # cpp #define statements have non-optional spaces, ie
                        # if there is a space between the name and the open
                        # parenthesis it is simply not a parameter group.
@@ -2444,25 +3379,53 @@ sub process {
                        } elsif ($ctx =~ /$Type$/) {
 
                        } else {
-                               WARN("SPACING",
-                                    "space prohibited between function name and open parenthesis '('\n" . $herecurr);
+                               if (WARN("SPACING",
+                                        "space prohibited between function name and open parenthesis '('\n" . $herecurr) &&
+                                            $fix) {
+                                       $fixed[$fixlinenr] =~
+                                           s/\b$name\s+\(/$name\(/;
+                               }
                        }
                }
+
 # Check operator spacing.
                if (!($line=~/\#\s*include/)) {
+                       my $fixed_line = "";
+                       my $line_fixed = 0;
+
                        my $ops = qr{
                                <<=|>>=|<=|>=|==|!=|
                                \+=|-=|\*=|\/=|%=|\^=|\|=|&=|
                                =>|->|<<|>>|<|>|=|!|~|
                                &&|\|\||,|\^|\+\+|--|&|\||\+|-|\*|\/|%|
-                               \?|:
+                               \?:|\?|:
                        }x;
                        my @elements = split(/($ops|;)/, $opline);
+
+##                     print("element count: <" . $#elements . ">\n");
+##                     foreach my $el (@elements) {
+##                             print("el: <$el>\n");
+##                     }
+
+                       my @fix_elements = ();
                        my $off = 0;
 
+                       foreach my $el (@elements) {
+                               push(@fix_elements, substr($rawline, $off, length($el)));
+                               $off += length($el);
+                       }
+
+                       $off = 0;
+
                        my $blank = copy_spacing($opline);
+                       my $last_after = -1;
 
                        for (my $n = 0; $n < $#elements; $n += 2) {
+
+                               my $good = $fix_elements[$n] . $fix_elements[$n + 1];
+
+##                             print("n: <$n> good: <$good>\n");
+
                                $off += length($elements[$n]);
 
                                # Pick up the preceding and succeeding characters.
@@ -2519,27 +3482,43 @@ sub process {
                                } elsif ($op eq ';') {
                                        if ($ctx !~ /.x[WEBC]/ &&
                                            $cc !~ /^\\/ && $cc !~ /^;/) {
-                                               ERROR("SPACING",
-                                                     "space required after that '$op' $at\n" . $hereptr);
+                                               if (ERROR("SPACING",
+                                                         "space required after that '$op' $at\n" . $hereptr)) {
+                                                       $good = $fix_elements[$n] . trim($fix_elements[$n + 1]) . " ";
+                                                       $line_fixed = 1;
+                                               }
                                        }
 
                                # // is a comment
                                } elsif ($op eq '//') {
 
+                               #   :   when part of a bitfield
+                               } elsif ($opv eq ':B') {
+                                       # skip the bitfield test for now
+
                                # No spaces for:
                                #   ->
-                               #   :   when part of a bitfield
-                               } elsif ($op eq '->' || $opv eq ':B') {
+                               } elsif ($op eq '->') {
                                        if ($ctx =~ /Wx.|.xW/) {
-                                               ERROR("SPACING",
-                                                     "spaces prohibited around that '$op' $at\n" . $hereptr);
+                                               if (ERROR("SPACING",
+                                                         "spaces prohibited around that '$op' $at\n" . $hereptr)) {
+                                                       $good = rtrim($fix_elements[$n]) . trim($fix_elements[$n + 1]);
+                                                       if (defined $fix_elements[$n + 2]) {
+                                                               $fix_elements[$n + 2] =~ s/^\s+//;
+                                                       }
+                                                       $line_fixed = 1;
+                                               }
                                        }
 
                                # , must have a space on the right.
                                } elsif ($op eq ',') {
                                        if ($ctx !~ /.x[WEC]/ && $cc !~ /^}/) {
-                                               ERROR("SPACING",
-                                                     "space required after that '$op' $at\n" . $hereptr);
+                                               if (ERROR("SPACING",
+                                                         "space required after that '$op' $at\n" . $hereptr)) {
+                                                       $good = $fix_elements[$n] . trim($fix_elements[$n + 1]) . " ";
+                                                       $line_fixed = 1;
+                                                       $last_after = $n;
+                                               }
                                        }
 
                                # '*' as part of a type definition -- reported already.
@@ -2553,34 +3532,56 @@ sub process {
                                         $opv eq '*U' || $opv eq '-U' ||
                                         $opv eq '&U' || $opv eq '&&U') {
                                        if ($ctx !~ /[WEBC]x./ && $ca !~ /(?:\)|!|~|\*|-|\&|\||\+\+|\-\-|\{)$/) {
-                                               ERROR("SPACING",
-                                                     "space required before that '$op' $at\n" . $hereptr);
+                                               if (ERROR("SPACING",
+                                                         "space required before that '$op' $at\n" . $hereptr)) {
+                                                       if ($n != $last_after + 2) {
+                                                               $good = $fix_elements[$n] . " " . ltrim($fix_elements[$n + 1]);
+                                                               $line_fixed = 1;
+                                                       }
+                                               }
                                        }
                                        if ($op eq '*' && $cc =~/\s*$Modifier\b/) {
                                                # A unary '*' may be const
 
                                        } elsif ($ctx =~ /.xW/) {
-                                               ERROR("SPACING",
-                                                     "space prohibited after that '$op' $at\n" . $hereptr);
+                                               if (ERROR("SPACING",
+                                                         "space prohibited after that '$op' $at\n" . $hereptr)) {
+                                                       $good = $fix_elements[$n] . rtrim($fix_elements[$n + 1]);
+                                                       if (defined $fix_elements[$n + 2]) {
+                                                               $fix_elements[$n + 2] =~ s/^\s+//;
+                                                       }
+                                                       $line_fixed = 1;
+                                               }
                                        }
 
                                # unary ++ and unary -- are allowed no space on one side.
                                } elsif ($op eq '++' or $op eq '--') {
                                        if ($ctx !~ /[WEOBC]x[^W]/ && $ctx !~ /[^W]x[WOBEC]/) {
-                                               ERROR("SPACING",
-                                                     "space required one side of that '$op' $at\n" . $hereptr);
+                                               if (ERROR("SPACING",
+                                                         "space required one side of that '$op' $at\n" . $hereptr)) {
+                                                       $good = $fix_elements[$n] . trim($fix_elements[$n + 1]) . " ";
+                                                       $line_fixed = 1;
+                                               }
                                        }
                                        if ($ctx =~ /Wx[BE]/ ||
                                            ($ctx =~ /Wx./ && $cc =~ /^;/)) {
-                                               ERROR("SPACING",
-                                                     "space prohibited before that '$op' $at\n" . $hereptr);
+                                               if (ERROR("SPACING",
+                                                         "space prohibited before that '$op' $at\n" . $hereptr)) {
+                                                       $good = rtrim($fix_elements[$n]) . trim($fix_elements[$n + 1]);
+                                                       $line_fixed = 1;
+                                               }
                                        }
                                        if ($ctx =~ /ExW/) {
-                                               ERROR("SPACING",
-                                                     "space prohibited after that '$op' $at\n" . $hereptr);
+                                               if (ERROR("SPACING",
+                                                         "space prohibited after that '$op' $at\n" . $hereptr)) {
+                                                       $good = $fix_elements[$n] . trim($fix_elements[$n + 1]);
+                                                       if (defined $fix_elements[$n + 2]) {
+                                                               $fix_elements[$n + 2] =~ s/^\s+//;
+                                                       }
+                                                       $line_fixed = 1;
+                                               }
                                        }
 
-
                                # << and >> may either have or not have spaces both sides
                                } elsif ($op eq '<<' or $op eq '>>' or
                                         $op eq '&' or $op eq '^' or $op eq '|' or
@@ -2589,17 +3590,25 @@ sub process {
                                         $op eq '%')
                                {
                                        if ($ctx =~ /Wx[^WCE]|[^WCE]xW/) {
-                                               ERROR("SPACING",
-                                                     "need consistent spacing around '$op' $at\n" .
-                                                       $hereptr);
+                                               if (ERROR("SPACING",
+                                                         "need consistent spacing around '$op' $at\n" . $hereptr)) {
+                                                       $good = rtrim($fix_elements[$n]) . " " . trim($fix_elements[$n + 1]) . " ";
+                                                       if (defined $fix_elements[$n + 2]) {
+                                                               $fix_elements[$n + 2] =~ s/^\s+//;
+                                                       }
+                                                       $line_fixed = 1;
+                                               }
                                        }
 
                                # A colon needs no spaces before when it is
                                # terminating a case value or a label.
                                } elsif ($opv eq ':C' || $opv eq ':L') {
                                        if ($ctx =~ /Wx./) {
-                                               ERROR("SPACING",
-                                                     "space prohibited before that '$op' $at\n" . $hereptr);
+                                               if (ERROR("SPACING",
+                                                         "space prohibited before that '$op' $at\n" . $hereptr)) {
+                                                       $good = rtrim($fix_elements[$n]) . trim($fix_elements[$n + 1]);
+                                                       $line_fixed = 1;
+                                               }
                                        }
 
                                # All the others need spaces both sides.
@@ -2615,18 +3624,46 @@ sub process {
                                                $ok = 1;
                                        }
 
-                                       # Ignore ?:
-                                       if (($opv eq ':O' && $ca =~ /\?$/) ||
-                                           ($op eq '?' && $cc =~ /^:/)) {
-                                               $ok = 1;
-                                       }
-
+                                       # messages are ERROR, but ?: are CHK
                                        if ($ok == 0) {
-                                               ERROR("SPACING",
-                                                     "spaces required around that '$op' $at\n" . $hereptr);
+                                               my $msg_type = \&ERROR;
+                                               $msg_type = \&CHK if (($op eq '?:' || $op eq '?' || $op eq ':') && $ctx =~ /VxV/);
+
+                                               if (&{$msg_type}("SPACING",
+                                                                "spaces required around that '$op' $at\n" . $hereptr)) {
+                                                       $good = rtrim($fix_elements[$n]) . " " . trim($fix_elements[$n + 1]) . " ";
+                                                       if (defined $fix_elements[$n + 2]) {
+                                                               $fix_elements[$n + 2] =~ s/^\s+//;
+                                                       }
+                                                       $line_fixed = 1;
+                                               }
                                        }
                                }
                                $off += length($elements[$n + 1]);
+
+##                             print("n: <$n> GOOD: <$good>\n");
+
+                               $fixed_line = $fixed_line . $good;
+                       }
+
+                       if (($#elements % 2) == 0) {
+                               $fixed_line = $fixed_line . $fix_elements[$#elements];
+                       }
+
+                       if ($fix && $line_fixed && $fixed_line ne $fixed[$fixlinenr]) {
+                               $fixed[$fixlinenr] = $fixed_line;
+                       }
+
+
+               }
+
+# check for whitespace before a non-naked semicolon
+               if ($line =~ /^\+.*\S\s+;\s*$/) {
+                       if (WARN("SPACING",
+                                "space prohibited before semicolon\n" . $herecurr) &&
+                           $fix) {
+                               1 while $fixed[$fixlinenr] =~
+                                   s/^(\+.*\S)\s+;/$1;/;
                        }
                }
 
@@ -2655,71 +3692,134 @@ sub process {
 #need space before brace following if, while, etc
                if (($line =~ /\(.*\){/ && $line !~ /\($Type\){/) ||
                    $line =~ /do{/) {
-                       ERROR("SPACING",
-                             "space required before the open brace '{'\n" . $herecurr);
+                       if (ERROR("SPACING",
+                                 "space required before the open brace '{'\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/^(\+.*(?:do|\))){/$1 {/;
+                       }
                }
 
+## # check for blank lines before declarations
+##             if ($line =~ /^.\t+$Type\s+$Ident(?:\s*=.*)?;/ &&
+##                 $prevrawline =~ /^.\s*$/) {
+##                     WARN("SPACING",
+##                          "No blank lines before declarations\n" . $hereprev);
+##             }
+##
+
 # closing brace should have a space following it when it has anything
 # on the line
                if ($line =~ /}(?!(?:,|;|\)))\S/) {
-                       ERROR("SPACING",
-                             "space required after that close brace '}'\n" . $herecurr);
+                       if (ERROR("SPACING",
+                                 "space required after that close brace '}'\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~
+                                   s/}((?!(?:,|;|\)))\S)/} $1/;
+                       }
                }
 
 # check spacing on square brackets
                if ($line =~ /\[\s/ && $line !~ /\[\s*$/) {
-                       ERROR("SPACING",
-                             "space prohibited after that open square bracket '['\n" . $herecurr);
+                       if (ERROR("SPACING",
+                                 "space prohibited after that open square bracket '['\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~
+                                   s/\[\s+/\[/;
+                       }
                }
                if ($line =~ /\s\]/) {
-                       ERROR("SPACING",
-                             "space prohibited before that close square bracket ']'\n" . $herecurr);
+                       if (ERROR("SPACING",
+                                 "space prohibited before that close square bracket ']'\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~
+                                   s/\s+\]/\]/;
+                       }
                }
 
 # check spacing on parentheses
                if ($line =~ /\(\s/ && $line !~ /\(\s*(?:\\)?$/ &&
                    $line !~ /for\s*\(\s+;/) {
-                       ERROR("SPACING",
-                             "space prohibited after that open parenthesis '('\n" . $herecurr);
+                       if (ERROR("SPACING",
+                                 "space prohibited after that open parenthesis '('\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~
+                                   s/\(\s+/\(/;
+                       }
                }
                if ($line =~ /(\s+)\)/ && $line !~ /^.\s*\)/ &&
                    $line !~ /for\s*\(.*;\s+\)/ &&
                    $line !~ /:\s+\)/) {
-                       ERROR("SPACING",
-                             "space prohibited before that close parenthesis ')'\n" . $herecurr);
+                       if (ERROR("SPACING",
+                                 "space prohibited before that close parenthesis ')'\n" . $herecurr) &&
+                           $fix) {
+                               print("fixlinenr: <$fixlinenr> fixed[fixlinenr]: <$fixed[$fixlinenr]>\n");
+                               $fixed[$fixlinenr] =~
+                                   s/\s+\)/\)/;
+                       }
                }
 
+# check unnecessary parentheses around addressof/dereference single $Lvals
+# ie: &(foo->bar) should be &foo->bar and *(foo->bar) should be *foo->bar
+
+               while ($line =~ /(?:[^&]&\s*|\*)\(\s*($Ident\s*(?:$Member\s*)+)\s*\)/g) {
+                       CHK("UNNECESSARY_PARENTHESES",
+                           "Unnecessary parentheses around $1\n" . $herecurr);
+                   }
+
 #goto labels aren't indented, allow a single space however
                if ($line=~/^.\s+[A-Za-z\d_]+:(?![0-9]+)/ and
                   !($line=~/^. [A-Za-z\d_]+:/) and !($line=~/^.\s+default:/)) {
-                       WARN("INDENTED_LABEL",
-                            "labels should not be indented\n" . $herecurr);
+                       if (WARN("INDENTED_LABEL",
+                                "labels should not be indented\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~
+                                   s/^(.)\s+/$1/;
+                       }
                }
 
-# Return is not a function.
-               if (defined($stat) && $stat =~ /^.\s*return(\s*)(\(.*);/s) {
+# return is not a function
+               if (defined($stat) && $stat =~ /^.\s*return(\s*)\(/s) {
                        my $spacing = $1;
-                       my $value = $2;
-
-                       # Flatten any parentheses
-                       $value =~ s/\(/ \(/g;
-                       $value =~ s/\)/\) /g;
-                       while ($value =~ s/\[[^\[\]]*\]/1/ ||
-                              $value !~ /(?:$Ident|-?$Constant)\s*
-                                            $Compare\s*
-                                            (?:$Ident|-?$Constant)/x &&
-                              $value =~ s/\([^\(\)]*\)/1/) {
-                       }
-#print "value<$value>\n";
-                       if ($value =~ /^\s*(?:$Ident|-?$Constant)\s*$/) {
-                               ERROR("RETURN_PARENTHESES",
-                                     "return is not a function, parentheses are not required\n" . $herecurr);
-
+                       if ($^V && $^V ge 5.10.0 &&
+                           $stat =~ /^.\s*return\s*($balanced_parens)\s*;\s*$/) {
+                               my $value = $1;
+                               $value = deparenthesize($value);
+                               if ($value =~ m/^\s*$FuncArg\s*(?:\?|$)/) {
+                                       ERROR("RETURN_PARENTHESES",
+                                             "return is not a function, parentheses are not required\n" . $herecurr);
+                               }
                        } elsif ($spacing !~ /\s+/) {
                                ERROR("SPACING",
                                      "space required before the open parenthesis '('\n" . $herecurr);
                        }
                }
+
+# unnecessary return in a void function
+# at end-of-function, with the previous line a single leading tab, then return;
+# and the line before that not a goto label target like "out:"
+               if ($sline =~ /^[ \+]}\s*$/ &&
+                   $prevline =~ /^\+\treturn\s*;\s*$/ &&
+                   $linenr >= 3 &&
+                   $lines[$linenr - 3] =~ /^[ +]/ &&
+                   $lines[$linenr - 3] !~ /^[ +]\s*$Ident\s*:/) {
+                       WARN("RETURN_VOID",
+                            "void function return statements are not generally useful\n" . $hereprev);
+               }
+
+# if statements using unnecessary parentheses - ie: if ((foo == bar))
+               if ($^V && $^V ge 5.10.0 &&
+                   $line =~ /\bif\s*((?:\(\s*){2,})/) {
+                       my $openparens = $1;
+                       my $count = $openparens =~ tr@\(@\(@;
+                       my $msg = "";
+                       if ($line =~ /\bif\s*(?:\(\s*){$count,$count}$LvalOrFunc\s*($Compare)\s*$LvalOrFunc(?:\s*\)){$count,$count}/) {
+                               my $comp = $4;  #Not $1 because of $LvalOrFunc
+                               $msg = " - maybe == should be = ?" if ($comp eq "==");
+                               WARN("UNNECESSARY_PARENTHESES",
+                                    "Unnecessary parentheses$msg\n" . $herecurr);
+                       }
+               }
+
 # Return of what appears to be an errno should normally be -'ve
                if ($line =~ /^.\s*return\s*(E[A-Z]*)\s*;/) {
                        my $name = $1;
@@ -2730,8 +3830,13 @@ sub process {
                }
 
 # Need a space before open parenthesis after if, while etc
-               if ($line=~/\b(if|while|for|switch)\(/) {
-                       ERROR("SPACING", "space required before the open parenthesis '('\n" . $herecurr);
+               if ($line =~ /\b(if|while|for|switch)\(/) {
+                       if (ERROR("SPACING",
+                                 "space required before the open parenthesis '('\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~
+                                   s/\b(if|while|for|switch)\(/$1 \(/;
+                       }
                }
 
 # Check for illegal assignment in if conditional -- and check for trailing
@@ -2758,6 +3863,7 @@ sub process {
                        }
                }
                if (!defined $suppress_whiletrailers{$linenr} &&
+                   defined($stat) && defined($cond) &&
                    $line =~ /\b(?:if|while|for)\s*\(/ && $line !~ /^.\s*#/) {
                        my ($s, $c) = ($stat, $cond);
 
@@ -2818,7 +3924,7 @@ sub process {
 # if should not continue a brace
                if ($line =~ /}\s*if\b/) {
                        ERROR("TRAILING_STATEMENTS",
-                             "trailing statements should be on next line\n" .
+                             "trailing statements should be on next line (or did you mean 'else if'?)\n" .
                                $herecurr);
                }
 # case and default should not have general statements after them
@@ -2834,14 +3940,26 @@ sub process {
 
                # Check for }<nl>else {, these must be at the same
                # indent level to be relevant to each other.
-               if ($prevline=~/}\s*$/ and $line=~/^.\s*else\s*/ and
-                                               $previndent == $indent) {
-                       ERROR("ELSE_AFTER_BRACE",
-                             "else should follow close brace '}'\n" . $hereprev);
+               if ($prevline=~/}\s*$/ and $line=~/^.\s*else\s*/ &&
+                   $previndent == $indent) {
+                       if (ERROR("ELSE_AFTER_BRACE",
+                                 "else should follow close brace '}'\n" . $hereprev) &&
+                           $fix && $prevline =~ /^\+/ && $line =~ /^\+/) {
+                               fix_delete_line($fixlinenr - 1, $prevrawline);
+                               fix_delete_line($fixlinenr, $rawline);
+                               my $fixedline = $prevrawline;
+                               $fixedline =~ s/}\s*$//;
+                               if ($fixedline !~ /^\+\s*$/) {
+                                       fix_insert_line($fixlinenr, $fixedline);
+                               }
+                               $fixedline = $rawline;
+                               $fixedline =~ s/^(.\s*)else/$1} else/;
+                               fix_insert_line($fixlinenr, $fixedline);
+                       }
                }
 
-               if ($prevline=~/}\s*$/ and $line=~/^.\s*while\s*/ and
-                                               $previndent == $indent) {
+               if ($prevline=~/}\s*$/ and $line=~/^.\s*while\s*/ &&
+                   $previndent == $indent) {
                        my ($s, $c) = ctx_statement_block($linenr, $realcnt, 0);
 
                        # Find out what is on the end of the line after the
@@ -2850,22 +3968,69 @@ sub process {
                        $s =~ s/\n.*//g;
 
                        if ($s =~ /^\s*;/) {
-                               ERROR("WHILE_AFTER_BRACE",
-                                     "while should follow close brace '}'\n" . $hereprev);
+                               if (ERROR("WHILE_AFTER_BRACE",
+                                         "while should follow close brace '}'\n" . $hereprev) &&
+                                   $fix && $prevline =~ /^\+/ && $line =~ /^\+/) {
+                                       fix_delete_line($fixlinenr - 1, $prevrawline);
+                                       fix_delete_line($fixlinenr, $rawline);
+                                       my $fixedline = $prevrawline;
+                                       my $trailing = $rawline;
+                                       $trailing =~ s/^\+//;
+                                       $trailing = trim($trailing);
+                                       $fixedline =~ s/}\s*$/} $trailing/;
+                                       fix_insert_line($fixlinenr, $fixedline);
+                               }
                        }
                }
 
-#studly caps, commented out until figure out how to distinguish between use of existing and adding new
-#              if (($line=~/[\w_][a-z\d]+[A-Z]/) and !($line=~/print/)) {
-#                  print "No studly caps, use _\n";
-#                  print "$herecurr";
-#                  $clean = 0;
-#              }
+#Specific variable tests
+               while ($line =~ m{($Constant|$Lval)}g) {
+                       my $var = $1;
+
+#gcc binary extension
+                       if ($var =~ /^$Binary$/) {
+                               if (WARN("GCC_BINARY_CONSTANT",
+                                        "Avoid gcc v4.3+ binary constant extension: <$var>\n" . $herecurr) &&
+                                   $fix) {
+                                       my $hexval = sprintf("0x%x", oct($var));
+                                       $fixed[$fixlinenr] =~
+                                           s/\b$var\b/$hexval/;
+                               }
+                       }
+
+#CamelCase
+                       if ($var !~ /^$Constant$/ &&
+                           $var =~ /[A-Z][a-z]|[a-z][A-Z]/ &&
+#Ignore Page<foo> variants
+                           $var !~ /^(?:Clear|Set|TestClear|TestSet|)Page[A-Z]/ &&
+#Ignore SI style variants like nS, mV and dB (ie: max_uV, regulator_min_uA_show)
+                           $var !~ /^(?:[a-z_]*?)_?[a-z][A-Z](?:_[a-z_]+)?$/) {
+                               while ($var =~ m{($Ident)}g) {
+                                       my $word = $1;
+                                       next if ($word !~ /[A-Z][a-z]|[a-z][A-Z]/);
+                                       if ($check) {
+                                               seed_camelcase_includes();
+                                               if (!$file && !$camelcase_file_seeded) {
+                                                       seed_camelcase_file($realfile);
+                                                       $camelcase_file_seeded = 1;
+                                               }
+                                       }
+                                       if (!defined $camelcase{$word}) {
+                                               $camelcase{$word} = 1;
+                                               CHK("CAMELCASE",
+                                                   "Avoid CamelCase: <$word>\n" . $herecurr);
+                                       }
+                               }
+                       }
+               }
 
 #no spaces allowed after \ in define
-               if ($line=~/\#\s*define.*\\\s$/) {
-                       WARN("WHITESPACE_AFTER_LINE_CONTINUATION",
-                            "Whitepspace after \\ makes next lines useless\n" . $herecurr);
+               if ($line =~ /\#\s*define.*\\\s+$/) {
+                       if (WARN("WHITESPACE_AFTER_LINE_CONTINUATION",
+                                "Whitespace after \\ makes next lines useless\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/\s+$//;
+                       }
                }
 
 #warn if <asm/foo.h> is #included and <linux/foo.h> is available (uses RAW line)
@@ -2923,7 +4088,7 @@ sub process {
                        my $exceptions = qr{
                                $Declare|
                                module_param_named|
-                               MODULE_PARAM_DESC|
+                               MODULE_PARM_DESC|
                                DECLARE_PER_CPU|
                                DEFINE_PER_CPU|
                                __typeof__\(|
@@ -2936,15 +4101,17 @@ sub process {
                        if ($dstat ne '' &&
                            $dstat !~ /^(?:$Ident|-?$Constant),$/ &&                    # 10, // foo(),
                            $dstat !~ /^(?:$Ident|-?$Constant);$/ &&                    # foo();
-                           $dstat !~ /^[!~-]?(?:$Ident|$Constant)$/ &&         # 10 // foo() // !foo // ~foo // -foo
-                           $dstat !~ /^'X'$/ &&                                        # character constants
+                           $dstat !~ /^[!~-]?(?:$Lval|$Constant)$/ &&          # 10 // foo() // !foo // ~foo // -foo // foo->bar // foo.bar->baz
+                           $dstat !~ /^'X'$/ && $dstat !~ /^'XX'$/ &&                  # character constants
                            $dstat !~ /$exceptions/ &&
                            $dstat !~ /^\.$Ident\s*=/ &&                                # .foo =
+                           $dstat !~ /^(?:\#\s*$Ident|\#\s*$Constant)\s*$/ &&          # stringification #foo
                            $dstat !~ /^do\s*$Constant\s*while\s*$Constant;?$/ &&       # do {...} while (...); // do {...} while (...)
                            $dstat !~ /^for\s*$Constant$/ &&                            # for (...)
                            $dstat !~ /^for\s*$Constant\s+(?:$Ident|-?$Constant)$/ &&   # for (...) bar()
                            $dstat !~ /^do\s*{/ &&                                      # do {...
-                           $dstat !~ /^\({/)                                           # ({...
+                           $dstat !~ /^\({/ &&                                         # ({...
+                           $ctx !~ /^.\s*#\s*define\s+TRACE_(?:SYSTEM|INCLUDE_FILE|INCLUDE_PATH)\b/)
                        {
                                $ctx =~ s/\n*$//;
                                my $herectx = $here . "\n";
@@ -2962,6 +4129,68 @@ sub process {
                                              "Macros with complex values should be enclosed in parenthesis\n" . "$herectx");
                                }
                        }
+
+# check for line continuations outside of #defines, preprocessor #, and asm
+
+               } else {
+                       if ($prevline !~ /^..*\\$/ &&
+                           $line !~ /^\+\s*\#.*\\$/ &&         # preprocessor
+                           $line !~ /^\+.*\b(__asm__|asm)\b.*\\$/ &&   # asm
+                           $line =~ /^\+.*\\$/) {
+                               WARN("LINE_CONTINUATIONS",
+                                    "Avoid unnecessary line continuations\n" . $herecurr);
+                       }
+               }
+
+# do {} while (0) macro tests:
+# single-statement macros do not need to be enclosed in do while (0) loop,
+# macro should not end with a semicolon
+               if ($^V && $^V ge 5.10.0 &&
+                   $realfile !~ m@/vmlinux.lds.h$@ &&
+                   $line =~ /^.\s*\#\s*define\s+$Ident(\()?/) {
+                       my $ln = $linenr;
+                       my $cnt = $realcnt;
+                       my ($off, $dstat, $dcond, $rest);
+                       my $ctx = '';
+                       ($dstat, $dcond, $ln, $cnt, $off) =
+                               ctx_statement_block($linenr, $realcnt, 0);
+                       $ctx = $dstat;
+
+                       $dstat =~ s/\\\n.//g;
+
+                       if ($dstat =~ /^\+\s*#\s*define\s+$Ident\s*${balanced_parens}\s*do\s*{(.*)\s*}\s*while\s*\(\s*0\s*\)\s*([;\s]*)\s*$/) {
+                               my $stmts = $2;
+                               my $semis = $3;
+
+                               $ctx =~ s/\n*$//;
+                               my $cnt = statement_rawlines($ctx);
+                               my $herectx = $here . "\n";
+
+                               for (my $n = 0; $n < $cnt; $n++) {
+                                       $herectx .= raw_line($linenr, $n) . "\n";
+                               }
+
+                               if (($stmts =~ tr/;/;/) == 1 &&
+                                   $stmts !~ /^\s*(if|while|for|switch)\b/) {
+                                       WARN("SINGLE_STATEMENT_DO_WHILE_MACRO",
+                                            "Single statement macros should not use a do {} while (0) loop\n" . "$herectx");
+                               }
+                               if (defined $semis && $semis ne "") {
+                                       WARN("DO_WHILE_MACRO_WITH_TRAILING_SEMICOLON",
+                                            "do {} while (0) macros should not be semicolon terminated\n" . "$herectx");
+                               }
+                       } elsif ($dstat =~ /^\+\s*#\s*define\s+$Ident.*;\s*$/) {
+                               $ctx =~ s/\n*$//;
+                               my $cnt = statement_rawlines($ctx);
+                               my $herectx = $here . "\n";
+
+                               for (my $n = 0; $n < $cnt; $n++) {
+                                       $herectx .= raw_line($linenr, $n) . "\n";
+                               }
+
+                               WARN("TRAILING_SEMICOLON",
+                                    "macros should not use a trailing semicolon\n" . "$herectx");
+                       }
                }
 
 # make sure symbols are always wrapped with VMLINUX_SYMBOL() ...
@@ -3092,20 +4321,14 @@ sub process {
                        }
                }
 
-# don't include deprecated include files (uses RAW line)
-               for my $inc (@dep_includes) {
-                       if ($rawline =~ m@^.\s*\#\s*include\s*\<$inc>@) {
-                               ERROR("DEPRECATED_INCLUDE",
-                                     "Don't use <$inc>: see Documentation/feature-removal-schedule.txt\n" . $herecurr);
-                       }
+# check for unnecessary blank lines around braces
+               if (($line =~ /^.\s*}\s*$/ && $prevrawline =~ /^.\s*$/)) {
+                       CHK("BRACES",
+                           "Blank lines aren't necessary before a close brace '}'\n" . $hereprev);
                }
-
-# don't use deprecated functions
-               for my $func (@dep_functions) {
-                       if ($line =~ /\b$func\b/) {
-                               ERROR("DEPRECATED_FUNCTION",
-                                     "Don't use $func(): see Documentation/feature-removal-schedule.txt\n" . $herecurr);
-                       }
+               if (($rawline =~ /^.\s*$/ && $prevline =~ /^..*{\s*$/)) {
+                       CHK("BRACES",
+                           "Blank lines aren't necessary after an open brace '{'\n" . $hereprev);
                }
 
 # no volatiles please
@@ -3122,29 +4345,103 @@ sub process {
                                $herecurr);
                }
 
-# check for needless kfree() checks
-               if ($prevline =~ /\bif\s*\(([^\)]*)\)/) {
-                       my $expr = $1;
-                       if ($line =~ /\bkfree\(\Q$expr\E\);/) {
-                               WARN("NEEDLESS_KFREE",
-                                    "kfree(NULL) is safe this check is probably not required\n" . $hereprev);
+# check for needless "if (<foo>) fn(<foo>)" uses
+               if ($prevline =~ /\bif\s*\(\s*($Lval)\s*\)/) {
+                       my $expr = '\s*\(\s*' . quotemeta($1) . '\s*\)\s*;';
+                       if ($line =~ /\b(kfree|usb_free_urb|debugfs_remove(?:_recursive)?)$expr/) {
+                               WARN('NEEDLESS_IF',
+                                    "$1(NULL) is safe this check is probably not required\n" . $hereprev);
+                       }
+               }
+
+# check for unnecessary "Out of Memory" messages
+               if ($line =~ /^\+.*\b$logFunctions\s*\(/ &&
+                   $prevline =~ /^[ \+]\s*if\s*\(\s*(\!\s*|NULL\s*==\s*)?($Lval)(\s*==\s*NULL\s*)?\s*\)/ &&
+                   (defined $1 || defined $3) &&
+                   $linenr > 3) {
+                       my $testval = $2;
+                       my $testline = $lines[$linenr - 3];
+
+                       my ($s, $c) = ctx_statement_block($linenr - 3, $realcnt, 0);
+#                      print("line: <$line>\nprevline: <$prevline>\ns: <$s>\nc: <$c>\n\n\n");
+
+                       if ($c =~ /(?:^|\n)[ \+]\s*(?:$Type\s*)?\Q$testval\E\s*=\s*(?:\([^\)]*\)\s*)?\s*(?:devm_)?(?:[kv][czm]alloc(?:_node|_array)?\b|kstrdup|(?:dev_)?alloc_skb)/) {
+                               WARN("OOM_MESSAGE",
+                                    "Possible unnecessary 'out of memory' message\n" . $hereprev);
+                       }
+               }
+
+# check for bad placement of section $InitAttribute (e.g.: __initdata)
+               if ($line =~ /(\b$InitAttribute\b)/) {
+                       my $attr = $1;
+                       if ($line =~ /^\+\s*static\s+(?:const\s+)?(?:$attr\s+)?($NonptrTypeWithAttr)\s+(?:$attr\s+)?($Ident(?:\[[^]]*\])?)\s*[=;]/) {
+                               my $ptr = $1;
+                               my $var = $2;
+                               if ((($ptr =~ /\b(union|struct)\s+$attr\b/ &&
+                                     ERROR("MISPLACED_INIT",
+                                           "$attr should be placed after $var\n" . $herecurr)) ||
+                                    ($ptr !~ /\b(union|struct)\s+$attr\b/ &&
+                                     WARN("MISPLACED_INIT",
+                                          "$attr should be placed after $var\n" . $herecurr))) &&
+                                   $fix) {
+                                       $fixed[$fixlinenr] =~ s/(\bstatic\s+(?:const\s+)?)(?:$attr\s+)?($NonptrTypeWithAttr)\s+(?:$attr\s+)?($Ident(?:\[[^]]*\])?)\s*([=;])\s*/"$1" . trim(string_find_replace($2, "\\s*$attr\\s*", " ")) . " " . trim(string_find_replace($3, "\\s*$attr\\s*", "")) . " $attr" . ("$4" eq ";" ? ";" : " = ")/e;
+                               }
+                       }
+               }
+
+# check for $InitAttributeData (ie: __initdata) with const
+               if ($line =~ /\bconst\b/ && $line =~ /($InitAttributeData)/) {
+                       my $attr = $1;
+                       $attr =~ /($InitAttributePrefix)(.*)/;
+                       my $attr_prefix = $1;
+                       my $attr_type = $2;
+                       if (ERROR("INIT_ATTRIBUTE",
+                                 "Use of const init definition must use ${attr_prefix}initconst\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~
+                                   s/$InitAttributeData/${attr_prefix}initconst/;
+                       }
+               }
+
+# check for $InitAttributeConst (ie: __initconst) without const
+               if ($line !~ /\bconst\b/ && $line =~ /($InitAttributeConst)/) {
+                       my $attr = $1;
+                       if (ERROR("INIT_ATTRIBUTE",
+                                 "Use of $attr requires a separate use of const\n" . $herecurr) &&
+                           $fix) {
+                               my $lead = $fixed[$fixlinenr] =~
+                                   /(^\+\s*(?:static\s+))/;
+                               $lead = rtrim($1);
+                               $lead = "$lead " if ($lead !~ /^\+$/);
+                               $lead = "${lead}const ";
+                               $fixed[$fixlinenr] =~ s/(^\+\s*(?:static\s+))/$lead/;
                        }
                }
-# check for needless usb_free_urb() checks
-               if ($prevline =~ /\bif\s*\(([^\)]*)\)/) {
-                       my $expr = $1;
-                       if ($line =~ /\busb_free_urb\(\Q$expr\E\);/) {
-                               WARN("NEEDLESS_USB_FREE_URB",
-                                    "usb_free_urb(NULL) is safe this check is probably not required\n" . $hereprev);
+
+# don't use __constant_<foo> functions outside of include/uapi/
+               if ($realfile !~ m@^include/uapi/@ &&
+                   $line =~ /(__constant_(?:htons|ntohs|[bl]e(?:16|32|64)_to_cpu|cpu_to_[bl]e(?:16|32|64)))\s*\(/) {
+                       my $constant_func = $1;
+                       my $func = $constant_func;
+                       $func =~ s/^__constant_//;
+                       if (WARN("CONSTANT_CONVERSION",
+                                "$constant_func should be $func\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/\b$constant_func\b/$func/g;
                        }
                }
 
 # prefer usleep_range over udelay
-               if ($line =~ /\budelay\s*\(\s*(\w+)\s*\)/) {
+               if ($line =~ /\budelay\s*\(\s*(\d+)\s*\)/) {
+                       my $delay = $1;
                        # ignore udelay's < 10, however
-                       if (! (($1 =~ /(\d+)/) && ($1 < 10)) ) {
+                       if (! ($delay < 10) ) {
                                CHK("USLEEP_RANGE",
-                                   "usleep_range is preferred over udelay; see Documentation/timers/timers-howto.txt\n" . $line);
+                                   "usleep_range is preferred over udelay; see Documentation/timers/timers-howto.txt\n" . $herecurr);
+                       }
+                       if ($delay > 2000) {
+                               WARN("LONG_UDELAY",
+                                    "long udelay - prefer mdelay; see arch/arm/include/asm/delay.h\n" . $herecurr);
                        }
                }
 
@@ -3152,10 +4449,22 @@ sub process {
                if ($line =~ /\bmsleep\s*\((\d+)\);/) {
                        if ($1 < 20) {
                                WARN("MSLEEP",
-                                    "msleep < 20ms can sleep for up to 20ms; see Documentation/timers/timers-howto.txt\n" . $line);
+                                    "msleep < 20ms can sleep for up to 20ms; see Documentation/timers/timers-howto.txt\n" . $herecurr);
                        }
                }
 
+# check for comparisons of jiffies
+               if ($line =~ /\bjiffies\s*$Compare|$Compare\s*jiffies\b/) {
+                       WARN("JIFFIES_COMPARISON",
+                            "Comparing jiffies is almost always wrong; prefer time_after, time_before and friends\n" . $herecurr);
+               }
+
+# check for comparisons of get_jiffies_64()
+               if ($line =~ /\bget_jiffies_64\s*\(\s*\)\s*$Compare|$Compare\s*get_jiffies_64\s*\(\s*\)/) {
+                       WARN("JIFFIES_COMPARISON",
+                            "Comparing get_jiffies_64() is almost always wrong; prefer time_after64, time_before64 and friends\n" . $herecurr);
+               }
+
 # warn about #ifdefs in C files
 #              if ($line =~ /^.\s*\#\s*if(|n)def/ && ($realfile =~ /\.c$/)) {
 #                      print "#ifdef in C files should be avoided\n";
@@ -3165,8 +4474,13 @@ sub process {
 
 # warn about spacing in #ifdefs
                if ($line =~ /^.\s*\#\s*(ifdef|ifndef|elif)\s\s+/) {
-                       ERROR("SPACING",
-                             "exactly one space required after that #$1\n" . $herecurr);
+                       if (ERROR("SPACING",
+                                 "exactly one space required after that #$1\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~
+                                   s/^(.\s*\#\s*(ifdef|ifndef|elif))\s{2,}/$1 /;
+                       }
+
                }
 
 # check for spinlock_t definitions without a comment.
@@ -3181,8 +4495,8 @@ sub process {
 # check for memory barriers without a comment.
                if ($line =~ /\b(mb|rmb|wmb|read_barrier_depends|smp_mb|smp_rmb|smp_wmb|smp_read_barrier_depends)\(/) {
                        if (!ctx_has_comment($first_line, $linenr)) {
-                               CHK("MEMORY_BARRIER",
-                                   "memory barrier without comment\n" . $herecurr);
+                               WARN("MEMORY_BARRIER",
+                                    "memory barrier without comment\n" . $herecurr);
                        }
                }
 # check of hardware specific defines
@@ -3206,33 +4520,49 @@ sub process {
                }
 
 # Check for __inline__ and __inline, prefer inline
-               if ($line =~ /\b(__inline__|__inline)\b/) {
-                       WARN("INLINE",
-                            "plain inline is preferred over $1\n" . $herecurr);
+               if ($realfile !~ m@\binclude/uapi/@ &&
+                   $line =~ /\b(__inline__|__inline)\b/) {
+                       if (WARN("INLINE",
+                                "plain inline is preferred over $1\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/\b(__inline__|__inline)\b/inline/;
+
+                       }
                }
 
 # Check for __attribute__ packed, prefer __packed
-               if ($line =~ /\b__attribute__\s*\(\s*\(.*\bpacked\b/) {
+               if ($realfile !~ m@\binclude/uapi/@ &&
+                   $line =~ /\b__attribute__\s*\(\s*\(.*\bpacked\b/) {
                        WARN("PREFER_PACKED",
                             "__packed is preferred over __attribute__((packed))\n" . $herecurr);
                }
 
 # Check for __attribute__ aligned, prefer __aligned
-               if ($line =~ /\b__attribute__\s*\(\s*\(.*aligned/) {
+               if ($realfile !~ m@\binclude/uapi/@ &&
+                   $line =~ /\b__attribute__\s*\(\s*\(.*aligned/) {
                        WARN("PREFER_ALIGNED",
                             "__aligned(size) is preferred over __attribute__((aligned(size)))\n" . $herecurr);
                }
 
 # Check for __attribute__ format(printf, prefer __printf
-               if ($line =~ /\b__attribute__\s*\(\s*\(\s*format\s*\(\s*printf/) {
-                       WARN("PREFER_PRINTF",
-                            "__printf(string-index, first-to-check) is preferred over __attribute__((format(printf, string-index, first-to-check)))\n" . $herecurr);
+               if ($realfile !~ m@\binclude/uapi/@ &&
+                   $line =~ /\b__attribute__\s*\(\s*\(\s*format\s*\(\s*printf/) {
+                       if (WARN("PREFER_PRINTF",
+                                "__printf(string-index, first-to-check) is preferred over __attribute__((format(printf, string-index, first-to-check)))\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/\b__attribute__\s*\(\s*\(\s*format\s*\(\s*printf\s*,\s*(.*)\)\s*\)\s*\)/"__printf(" . trim($1) . ")"/ex;
+
+                       }
                }
 
 # Check for __attribute__ format(scanf, prefer __scanf
-               if ($line =~ /\b__attribute__\s*\(\s*\(\s*format\s*\(\s*scanf\b/) {
-                       WARN("PREFER_SCANF",
-                            "__scanf(string-index, first-to-check) is preferred over __attribute__((format(scanf, string-index, first-to-check)))\n" . $herecurr);
+               if ($realfile !~ m@\binclude/uapi/@ &&
+                   $line =~ /\b__attribute__\s*\(\s*\(\s*format\s*\(\s*scanf\b/) {
+                       if (WARN("PREFER_SCANF",
+                                "__scanf(string-index, first-to-check) is preferred over __attribute__((format(scanf, string-index, first-to-check)))\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/\b__attribute__\s*\(\s*\(\s*format\s*\(\s*scanf\s*,\s*(.*)\)\s*\)\s*\)/"__scanf(" . trim($1) . ")"/ex;
+                       }
                }
 
 # check for sizeof(&)
@@ -3241,12 +4571,39 @@ sub process {
                             "sizeof(& should be avoided\n" . $herecurr);
                }
 
+# check for sizeof without parenthesis
+               if ($line =~ /\bsizeof\s+((?:\*\s*|)$Lval|$Type(?:\s+$Lval|))/) {
+                       if (WARN("SIZEOF_PARENTHESIS",
+                                "sizeof $1 should be sizeof($1)\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/\bsizeof\s+((?:\*\s*|)$Lval|$Type(?:\s+$Lval|))/"sizeof(" . trim($1) . ")"/ex;
+                       }
+               }
+
 # check for line continuations in quoted strings with odd counts of "
                if ($rawline =~ /\\$/ && $rawline =~ tr/"/"/ % 2) {
                        WARN("LINE_CONTINUATIONS",
                             "Avoid line continuations in quoted strings\n" . $herecurr);
                }
 
+# check for struct spinlock declarations
+               if ($line =~ /^.\s*\bstruct\s+spinlock\s+\w+\s*;/) {
+                       WARN("USE_SPINLOCK_T",
+                            "struct spinlock should be spinlock_t\n" . $herecurr);
+               }
+
+# check for seq_printf uses that could be seq_puts
+               if ($sline =~ /\bseq_printf\s*\(.*"\s*\)\s*;\s*$/) {
+                       my $fmt = get_quoted_string($line, $rawline);
+                       if ($fmt ne "" && $fmt !~ /[^\\]\%/) {
+                               if (WARN("PREFER_SEQ_PUTS",
+                                        "Prefer seq_puts to seq_printf\n" . $herecurr) &&
+                                   $fix) {
+                                       $fixed[$fixlinenr] =~ s/\bseq_printf\b/seq_puts/;
+                               }
+                       }
+               }
+
 # Check for misused memsets
                if ($^V && $^V ge 5.10.0 &&
                    defined $stat &&
@@ -3265,6 +4622,16 @@ sub process {
                        }
                }
 
+# Check for memcpy(foo, bar, ETH_ALEN) that could be ether_addr_copy(foo, bar)
+               if ($^V && $^V ge 5.10.0 &&
+                   $line =~ /^\+(?:.*?)\bmemcpy\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/s) {
+                       if (WARN("PREFER_ETHER_ADDR_COPY",
+                                "Prefer ether_addr_copy() over memcpy() if the Ethernet addresses are __aligned(2)\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/\bmemcpy\s*\(\s*$FuncArg\s*,\s*$FuncArg\s*\,\s*ETH_ALEN\s*\)/ether_addr_copy($2, $7)/;
+                       }
+               }
+
 # typecasts on min/max could be min_t/max_t
                if ($^V && $^V ge 5.10.0 &&
                    defined $stat &&
@@ -3289,6 +4656,70 @@ sub process {
                        }
                }
 
+# check usleep_range arguments
+               if ($^V && $^V ge 5.10.0 &&
+                   defined $stat &&
+                   $stat =~ /^\+(?:.*?)\busleep_range\s*\(\s*($FuncArg)\s*,\s*($FuncArg)\s*\)/) {
+                       my $min = $1;
+                       my $max = $7;
+                       if ($min eq $max) {
+                               WARN("USLEEP_RANGE",
+                                    "usleep_range should not use min == max args; see Documentation/timers/timers-howto.txt\n" . "$here\n$stat\n");
+                       } elsif ($min =~ /^\d+$/ && $max =~ /^\d+$/ &&
+                                $min > $max) {
+                               WARN("USLEEP_RANGE",
+                                    "usleep_range args reversed, use min then max; see Documentation/timers/timers-howto.txt\n" . "$here\n$stat\n");
+                       }
+               }
+
+# check for naked sscanf
+               if ($^V && $^V ge 5.10.0 &&
+                   defined $stat &&
+                   $line =~ /\bsscanf\b/ &&
+                   ($stat !~ /$Ident\s*=\s*sscanf\s*$balanced_parens/ &&
+                    $stat !~ /\bsscanf\s*$balanced_parens\s*(?:$Compare)/ &&
+                    $stat !~ /(?:$Compare)\s*\bsscanf\s*$balanced_parens/)) {
+                       my $lc = $stat =~ tr@\n@@;
+                       $lc = $lc + $linenr;
+                       my $stat_real = raw_line($linenr, 0);
+                       for (my $count = $linenr + 1; $count <= $lc; $count++) {
+                               $stat_real = $stat_real . "\n" . raw_line($count, 0);
+                       }
+                       WARN("NAKED_SSCANF",
+                            "unchecked sscanf return value\n" . "$here\n$stat_real\n");
+               }
+
+# check for simple sscanf that should be kstrto<foo>
+               if ($^V && $^V ge 5.10.0 &&
+                   defined $stat &&
+                   $line =~ /\bsscanf\b/) {
+                       my $lc = $stat =~ tr@\n@@;
+                       $lc = $lc + $linenr;
+                       my $stat_real = raw_line($linenr, 0);
+                       for (my $count = $linenr + 1; $count <= $lc; $count++) {
+                               $stat_real = $stat_real . "\n" . raw_line($count, 0);
+                       }
+                       if ($stat_real =~ /\bsscanf\b\s*\(\s*$FuncArg\s*,\s*("[^"]+")/) {
+                               my $format = $6;
+                               my $count = $format =~ tr@%@%@;
+                               if ($count == 1 &&
+                                   $format =~ /^"\%(?i:ll[udxi]|[udxi]ll|ll|[hl]h?[udxi]|[udxi][hl]h?|[hl]h?|[udxi])"$/) {
+                                       WARN("SSCANF_TO_KSTRTO",
+                                            "Prefer kstrto<type> to single variable sscanf\n" . "$here\n$stat_real\n");
+                               }
+                       }
+               }
+
+# check for new externs in .h files.
+               if ($realfile =~ /\.h$/ &&
+                   $line =~ /^\+\s*(extern\s+)$Type\s*$Ident\s*\(/s) {
+                       if (CHK("AVOID_EXTERNS",
+                               "extern prototypes should be avoided in .h files\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/(.*)\bextern\b\s*(.*)/$1$2/;
+                       }
+               }
+
 # check for new externs in .c files.
                if ($realfile =~ /\.c$/ && defined $stat &&
                    $stat =~ /^.\s*(?:extern\s+)?$Type\s+($Ident)(\s*)\(/s)
@@ -3335,16 +4766,107 @@ sub process {
                             "unnecessary cast may hide bugs, see http://c-faq.com/malloc/mallocnocast.html\n" . $herecurr);
                }
 
+# alloc style
+# p = alloc(sizeof(struct foo), ...) should be p = alloc(sizeof(*p), ...)
+               if ($^V && $^V ge 5.10.0 &&
+                   $line =~ /\b($Lval)\s*\=\s*(?:$balanced_parens)?\s*([kv][mz]alloc(?:_node)?)\s*\(\s*(sizeof\s*\(\s*struct\s+$Lval\s*\))/) {
+                       CHK("ALLOC_SIZEOF_STRUCT",
+                           "Prefer $3(sizeof(*$1)...) over $3($4...)\n" . $herecurr);
+               }
+
+# check for k[mz]alloc with multiplies that could be kmalloc_array/kcalloc
+               if ($^V && $^V ge 5.10.0 &&
+                   $line =~ /\b($Lval)\s*\=\s*(?:$balanced_parens)?\s*(k[mz]alloc)\s*\(\s*($FuncArg)\s*\*\s*($FuncArg)\s*,/) {
+                       my $oldfunc = $3;
+                       my $a1 = $4;
+                       my $a2 = $10;
+                       my $newfunc = "kmalloc_array";
+                       $newfunc = "kcalloc" if ($oldfunc eq "kzalloc");
+                       my $r1 = $a1;
+                       my $r2 = $a2;
+                       if ($a1 =~ /^sizeof\s*\S/) {
+                               $r1 = $a2;
+                               $r2 = $a1;
+                       }
+                       if ($r1 !~ /^sizeof\b/ && $r2 =~ /^sizeof\s*\S/ &&
+                           !($r1 =~ /^$Constant$/ || $r1 =~ /^[A-Z_][A-Z0-9_]*$/)) {
+                               if (WARN("ALLOC_WITH_MULTIPLY",
+                                        "Prefer $newfunc over $oldfunc with multiply\n" . $herecurr) &&
+                                   $fix) {
+                                       $fixed[$fixlinenr] =~ s/\b($Lval)\s*\=\s*(?:$balanced_parens)?\s*(k[mz]alloc)\s*\(\s*($FuncArg)\s*\*\s*($FuncArg)/$1 . ' = ' . "$newfunc(" . trim($r1) . ', ' . trim($r2)/e;
+
+                               }
+                       }
+               }
+
+# check for krealloc arg reuse
+               if ($^V && $^V ge 5.10.0 &&
+                   $line =~ /\b($Lval)\s*\=\s*(?:$balanced_parens)?\s*krealloc\s*\(\s*\1\s*,/) {
+                       WARN("KREALLOC_ARG_REUSE",
+                            "Reusing the krealloc arg is almost always a bug\n" . $herecurr);
+               }
+
+# check for alloc argument mismatch
+               if ($line =~ /\b(kcalloc|kmalloc_array)\s*\(\s*sizeof\b/) {
+                       WARN("ALLOC_ARRAY_ARGS",
+                            "$1 uses number as first arg, sizeof is generally wrong\n" . $herecurr);
+               }
+
 # check for multiple semicolons
                if ($line =~ /;\s*;\s*$/) {
-                   WARN("ONE_SEMICOLON",
-                        "Statements terminations use 1 semicolon\n" . $herecurr);
+                       if (WARN("ONE_SEMICOLON",
+                                "Statements terminations use 1 semicolon\n" . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/(\s*;\s*){2,}$/;/g;
+                       }
+               }
+
+# check for case / default statements not preceded by break/fallthrough/switch
+               if ($line =~ /^.\s*(?:case\s+(?:$Ident|$Constant)\s*|default):/) {
+                       my $has_break = 0;
+                       my $has_statement = 0;
+                       my $count = 0;
+                       my $prevline = $linenr;
+                       while ($prevline > 1 && ($file || $count < 3) && !$has_break) {
+                               $prevline--;
+                               my $rline = $rawlines[$prevline - 1];
+                               my $fline = $lines[$prevline - 1];
+                               last if ($fline =~ /^\@\@/);
+                               next if ($fline =~ /^\-/);
+                               next if ($fline =~ /^.(?:\s*(?:case\s+(?:$Ident|$Constant)[\s$;]*|default):[\s$;]*)*$/);
+                               $has_break = 1 if ($rline =~ /fall[\s_-]*(through|thru)/i);
+                               next if ($fline =~ /^.[\s$;]*$/);
+                               $has_statement = 1;
+                               $count++;
+                               $has_break = 1 if ($fline =~ /\bswitch\b|\b(?:break\s*;[\s$;]*$|return\b|goto\b|continue\b)/);
+                       }
+                       if (!$has_break && $has_statement) {
+                               WARN("MISSING_BREAK",
+                                    "Possible switch case/default not preceeded by break or fallthrough comment\n" . $herecurr);
+                       }
+               }
+
+# check for switch/default statements without a break;
+               if ($^V && $^V ge 5.10.0 &&
+                   defined $stat &&
+                   $stat =~ /^\+[$;\s]*(?:case[$;\s]+\w+[$;\s]*:[$;\s]*|)*[$;\s]*\bdefault[$;\s]*:[$;\s]*;/g) {
+                       my $ctx = '';
+                       my $herectx = $here . "\n";
+                       my $cnt = statement_rawlines($stat);
+                       for (my $n = 0; $n < $cnt; $n++) {
+                               $herectx .= raw_line($linenr, $n) . "\n";
+                       }
+                       WARN("DEFAULT_NO_BREAK",
+                            "switch default: should use break\n" . $herectx);
                }
 
 # check for gcc specific __FUNCTION__
-               if ($line =~ /__FUNCTION__/) {
-                       WARN("USE_FUNC",
-                            "__func__ should be used instead of gcc specific __FUNCTION__\n"  . $herecurr);
+               if ($line =~ /\b__FUNCTION__\b/) {
+                       if (WARN("USE_FUNC",
+                                "__func__ should be used instead of gcc specific __FUNCTION__\n"  . $herecurr) &&
+                           $fix) {
+                               $fixed[$fixlinenr] =~ s/\b__FUNCTION__\b/__func__/g;
+                       }
                }
 
 # check for use of yield()
@@ -3353,6 +4875,33 @@ sub process {
                             "Using yield() is generally wrong. See yield() kernel-doc (sched/core.c)\n"  . $herecurr);
                }
 
+# check for comparisons against true and false
+               if ($line =~ /\+\s*(.*?)\b(true|false|$Lval)\s*(==|\!=)\s*(true|false|$Lval)\b(.*)$/i) {
+                       my $lead = $1;
+                       my $arg = $2;
+                       my $test = $3;
+                       my $otype = $4;
+                       my $trail = $5;
+                       my $op = "!";
+
+                       ($arg, $otype) = ($otype, $arg) if ($arg =~ /^(?:true|false)$/i);
+
+                       my $type = lc($otype);
+                       if ($type =~ /^(?:true|false)$/) {
+                               if (("$test" eq "==" && "$type" eq "true") ||
+                                   ("$test" eq "!=" && "$type" eq "false")) {
+                                       $op = "";
+                               }
+
+                               CHK("BOOL_COMPARISON",
+                                   "Using comparison to $otype is error prone\n" . $herecurr);
+
+## maybe suggesting a correct construct would better
+##                                 "Using comparison to $otype is error prone.  Perhaps use '${lead}${op}${arg}${trail}'\n" . $herecurr);
+
+                       }
+               }
+
 # check for semaphores initialized locked
                if ($line =~ /^.\s*sema_init.+,\W?0\W?\)/) {
                        WARN("CONSIDER_COMPLETION",
@@ -3365,10 +4914,10 @@ sub process {
                             "$1 is obsolete, use k$3 instead\n" . $herecurr);
                }
 
-# check for __initcall(), use device_initcall() explicitly please
+# check for __initcall(), use device_initcall() explicitly or more appropriate function please
                if ($line =~ /^.\s*__initcall\s*\(/) {
                        WARN("USE_DEVICE_INITCALL",
-                            "please use device_initcall() instead of __initcall()\n" . $herecurr);
+                            "please use device_initcall() or more appropriate function instead of __initcall() (see include/linux/init.h)\n" . $herecurr);
                }
 
 # check for various ops structs, ensure they are const.
@@ -3429,6 +4978,12 @@ sub process {
                             "usage of NR_CPUS is often wrong - consider using cpu_possible(), num_possible_cpus(), for_each_possible_cpu(), etc\n" . $herecurr);
                }
 
+# Use of __ARCH_HAS_<FOO> or ARCH_HAVE_<BAR> is wrong.
+               if ($line =~ /\+\s*#\s*define\s+((?:__)?ARCH_(?:HAS|HAVE)\w*)\b/) {
+                       ERROR("DEFINE_ARCH_HAS",
+                             "#define of '$1' is wrong - use Kconfig variables or standard guards instead\n" . $herecurr);
+               }
+
 # check for %L{u,d,i} in strings
                my $string;
                while ($line =~ /(?:^|")([X\t]*)(?:"|$)/g) {
@@ -3468,6 +5023,34 @@ sub process {
                        WARN("EXPORTED_WORLD_WRITABLE",
                             "Exporting world writable files is usually an error. Consider more restrictive permissions.\n" . $herecurr);
                }
+
+# Mode permission misuses where it seems decimal should be octal
+# This uses a shortcut match to avoid unnecessary uses of a slow foreach loop
+               if ($^V && $^V ge 5.10.0 &&
+                   $line =~ /$mode_perms_search/) {
+                       foreach my $entry (@mode_permission_funcs) {
+                               my $func = $entry->[0];
+                               my $arg_pos = $entry->[1];
+
+                               my $skip_args = "";
+                               if ($arg_pos > 1) {
+                                       $arg_pos--;
+                                       $skip_args = "(?:\\s*$FuncArg\\s*,\\s*){$arg_pos,$arg_pos}";
+                               }
+                               my $test = "\\b$func\\s*\\(${skip_args}([\\d]+)\\s*[,\\)]";
+                               if ($line =~ /$test/) {
+                                       my $val = $1;
+                                       $val = $6 if ($skip_args ne "");
+
+                                       if ($val !~ /^0$/ &&
+                                           (($val =~ /^$Int$/ && $val !~ /^$Octal$/) ||
+                                            length($val) ne 4)) {
+                                               ERROR("NON_OCTAL_PERMISSIONS",
+                                                     "Use 4 digit octal (0777) not decimal permissions\n" . $herecurr);
+                                       }
+                               }
+                       }
+               }
        }
 
        # If we have no input at all, then there is nothing to report on
@@ -3522,12 +5105,46 @@ sub process {
                }
        }
 
-       if ($quiet == 0 && keys %ignore_type) {
-           print "NOTE: Ignored message types:";
-           foreach my $ignore (sort keys %ignore_type) {
-               print " $ignore";
-           }
-           print "\n\n";
+       hash_show_words(\%use_type, "Used");
+       hash_show_words(\%ignore_type, "Ignored");
+
+       if ($clean == 0 && $fix &&
+           ("@rawlines" ne "@fixed" ||
+            $#fixed_inserted >= 0 || $#fixed_deleted >= 0)) {
+               my $newfile = $filename;
+               $newfile .= ".EXPERIMENTAL-checkpatch-fixes" if (!$fix_inplace);
+               my $linecount = 0;
+               my $f;
+
+               @fixed = fix_inserted_deleted_lines(\@fixed, \@fixed_inserted, \@fixed_deleted);
+
+               open($f, '>', $newfile)
+                   or die "$P: Can't open $newfile for write\n";
+               foreach my $fixed_line (@fixed) {
+                       $linecount++;
+                       if ($file) {
+                               if ($linecount > 3) {
+                                       $fixed_line =~ s/^\+//;
+                                       print $f $fixed_line . "\n";
+                               }
+                       } else {
+                               print $f $fixed_line . "\n";
+                       }
+               }
+               close($f);
+
+               if (!$quiet) {
+                       print << "EOM";
+Wrote EXPERIMENTAL --fix correction(s) to '$newfile'
+
+Do _NOT_ trust the results written to this file.
+Do _NOT_ submit these changes without inspecting them for correctness.
+
+This EXPERIMENTAL file is simply a convenience to help rewrite patches.
+No warranties, expressed or implied...
+
+EOM
+               }
        }
 
        if ($clean == 1 && $quiet == 0) {
index 981e90d..3ce27f8 100644 (file)
@@ -59,7 +59,7 @@ static int test() {
        if (!test_fct(SENSOR_TYPE_LMSENSOR | SENSOR_TYPE_TEMP, 0, "\302\260F"))
                failures++;
 
-       if (!test_fct(SENSOR_TYPE_FAN, 0, _("RPM")))
+       if (!test_fct(SENSOR_TYPE_RPM, 0, _("RPM")))
                failures++;
 
        return failures;
index 1bab6e6..5d9a836 100644 (file)
@@ -201,6 +201,8 @@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@
 LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
+LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@
+LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@
 LTLIBICONV = @LTLIBICONV@
 LTLIBINTL = @LTLIBINTL@
 LTLIBOBJS = @LTLIBOBJS@